machineconfig 7.39__py3-none-any.whl → 7.44__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 (30) hide show
  1. machineconfig/jobs/installer/installer_data.json +34 -0
  2. machineconfig/profile/create_links_export.py +8 -5
  3. machineconfig/profile/mapper.toml +4 -0
  4. machineconfig/scripts/python/croshell.py +4 -4
  5. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  6. machineconfig/scripts/python/explore.py +49 -0
  7. machineconfig/scripts/python/helpers_devops/cli_config.py +2 -1
  8. machineconfig/scripts/python/helpers_devops/cli_nw.py +7 -6
  9. machineconfig/scripts/python/helpers_devops/cli_self.py +3 -3
  10. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  11. machineconfig/scripts/python/helpers_devops/cli_share_server.py +62 -166
  12. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
  13. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +1 -1
  14. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  15. machineconfig/settings/helix/config.toml +14 -0
  16. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  17. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  18. machineconfig/settings/shells/bash/init.sh +2 -1
  19. machineconfig/settings/yazi/init.lua +36 -0
  20. machineconfig/settings/yazi/keymap.toml +52 -0
  21. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  22. machineconfig/settings/yazi/yazi.toml +8 -0
  23. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  24. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +10 -10
  25. machineconfig/utils/ssh.py +1 -1
  26. {machineconfig-7.39.dist-info → machineconfig-7.44.dist-info}/METADATA +1 -1
  27. {machineconfig-7.39.dist-info → machineconfig-7.44.dist-info}/RECORD +30 -26
  28. {machineconfig-7.39.dist-info → machineconfig-7.44.dist-info}/entry_points.txt +1 -0
  29. {machineconfig-7.39.dist-info → machineconfig-7.44.dist-info}/WHEEL +0 -0
  30. {machineconfig-7.39.dist-info → machineconfig-7.44.dist-info}/top_level.txt +0 -0
@@ -69,6 +69,23 @@
69
69
  }
70
70
  }
71
71
  },
72
+ {
73
+ "appName": "timg",
74
+ "repoURL": "CMD",
75
+ "doc": "👁️ terminal image previewer.",
76
+ "fileNamePattern": {
77
+ "amd64": {
78
+ "linux": "sudo apt install timg",
79
+ "windows": null,
80
+ "macos": "brew install timg"
81
+ },
82
+ "arm64": {
83
+ "linux": "sudo apt install timg",
84
+ "windows": null,
85
+ "macos": "brew install timg"
86
+ }
87
+ }
88
+ },
72
89
  {
73
90
  "appName": "diskonaut",
74
91
  "repoURL": "https://github.com/imsnif/diskonaut",
@@ -1735,6 +1752,23 @@
1735
1752
  }
1736
1753
  }
1737
1754
  },
1755
+ {
1756
+ "appName": "miniserve",
1757
+ "repoURL": "https://github.com/svenstaro/miniserve",
1758
+ "doc": "📂 A small, self-contained file server with directory listings",
1759
+ "fileNamePattern": {
1760
+ "amd64": {
1761
+ "linux": "miniserve-{version}-x86_64-unknown-linux-musl",
1762
+ "darwin": "miniserve-{version}-x86_64-apple-darwin",
1763
+ "windows": "miniserve-{version}-x86_64-pc-windows-msvc.exe"
1764
+ },
1765
+ "arm64": {
1766
+ "linux": "miniserve-{version}-aarch64-unknown-linux-musl",
1767
+ "darwin": "miniserve-{version}-aarch64-apple-darwin",
1768
+ "windows": "miniserve-{version}-aarch64-pc-windows-msvc.exe"
1769
+ }
1770
+ }
1771
+ },
1738
1772
  {
1739
1773
  "appName": "cloudreve",
1740
1774
  "repoURL": "https://github.com/cloudreve/Cloudreve",
@@ -19,10 +19,10 @@ ON_CONFLICT_MAPPER: dict[str, ON_CONFLICT_STRICT] = {
19
19
  }
20
20
 
21
21
 
22
- def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., help="Method to use for setting up the config file.")],
23
- on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., help="Action to take on conflict")],
24
- which: Annotated[Optional[str], typer.Option(..., help="Specific items to process")] = None,
25
- interactive: Annotated[bool, typer.Option(..., help="Run in interactive mode")] = False):
22
+ def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c"], typer.Option(..., "--method", "-m", help="Method to use for setting up the config file.")],
23
+ on_conflict: Annotated[ON_CONFLICT_LOOSE, typer.Option(..., "--on-conflict", "-o", help="Action to take on conflict")] = "throw-error",
24
+ which: Annotated[Optional[str], typer.Option(..., "--which", "-w", help="Specific items to process (default: all)")] = None,
25
+ interactive: Annotated[bool, typer.Option(..., "--interactive", "-i", help="Run in interactive mode")] = False):
26
26
  """Terminology:
27
27
  SOURCE = Self-Managed-Config-File-Path
28
28
  TARGET = Config-File-Default-Path
@@ -40,7 +40,10 @@ def main_public_from_parser(method: Annotated[Literal["symlink", "s", "copy", "c
40
40
  else:
41
41
  items_chosen = which.split(",")
42
42
  items_objections: dict[str, list[ConfigMapper]] = {item: mapper_full[item] for item in items_chosen if item in mapper_full}
43
-
43
+ if len(items_objections) == 0:
44
+ typer.echo("[red]Error:[/] No valid items selected.")
45
+ typer.Exit(code=1)
46
+ return
44
47
  from machineconfig.profile.create_links import apply_mapper
45
48
  from machineconfig.profile.create_helper import copy_assets_to_machine
46
49
  copy_assets_to_machine(which="settings") # config files live here and will be linked to.
@@ -100,11 +100,15 @@ config = {this = '~/.config/rofi/config.rasi', to_this = 'CONFIG_ROOT/settings/r
100
100
  yazi = {this = '~/AppData/Roaming/yazi/config/yazi.toml', to_this = 'CONFIG_ROOT/settings/yazi/yazi.toml'}
101
101
  keymap = {this = '~/AppData/Roaming/yazi/config/keymap.toml', to_this = 'CONFIG_ROOT/settings/yazi/keymap.toml'}
102
102
  theme = {this = '~/AppData/Roaming/yazi/config/theme.toml', to_this = 'CONFIG_ROOT/settings/yazi/theme.toml'}
103
+ init = {this = '~/AppData/Roaming/yazi/config/init.lua', to_this = 'CONFIG_ROOT/settings/yazi/init.lua'}
104
+
105
+
103
106
 
104
107
  [yazi_linux]
105
108
  yazi = {this = '~/.config/yazi/yazi.toml', to_this = 'CONFIG_ROOT/settings/yazi/yazi.toml'}
106
109
  keymap = {this = '~/.config/yazi/keymap.toml', to_this = 'CONFIG_ROOT/settings/yazi/keymap.toml'}
107
110
  theme = {this = '~/.config/yazi/theme.toml', to_this = 'CONFIG_ROOT/settings/yazi/theme.toml'}
111
+ init = {this = '~/.config/yazi/init.lua', to_this = 'CONFIG_ROOT/settings/yazi/init.lua'}
108
112
 
109
113
  [lf_windows]
110
114
  config = {this = '~/AppData/Local/lf/lfrc', to_this = 'CONFIG_ROOT/settings/lf/windows/lfrc'}
@@ -130,7 +130,7 @@ def croshell(
130
130
  fire_line = f"uv run --python 3.14 --with visidata,pyarrow vd {str(file_obj)}"
131
131
  elif marimo:
132
132
  if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--with marimo --project "{str(Path.home().joinpath("code/machineconfig"))}" """
133
- else: requirements = """--python 3.14 --with "marimo,machineconfig[plot]>=7.39" """
133
+ else: requirements = """--python 3.14 --with "marimo,machineconfig[plot]>=7.40" """
134
134
  fire_line = f"""
135
135
  cd {str(pyfile.parent)}
136
136
  uv run --python 3.14 --with "marimo" marimo convert {pyfile.name} -o marimo_nb.py
@@ -138,14 +138,14 @@ uv run {requirements} marimo edit --host 0.0.0.0 marimo_nb.py
138
138
  """
139
139
  elif jupyter:
140
140
  if Path.home().joinpath("code/machineconfig").exists(): requirements = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with jupyterlab """
141
- else: requirements = """--with "machineconfig[plot]>=7.39" """
141
+ else: requirements = """--with "machineconfig[plot]>=7.40" """
142
142
  fire_line = f"uv run {requirements} jupyter-lab {str(nb_target)}"
143
143
  elif vscode:
144
144
  fire_line = f"""
145
145
  cd {str(pyfile.parent)}
146
146
  uv init --python 3.14
147
147
  uv venv
148
- uv add "machineconfig[plot]>=7.39"
148
+ uv add "machineconfig[plot]>=7.40"
149
149
  # code serve-web
150
150
  code --new-window {str(pyfile)}
151
151
  """
@@ -153,7 +153,7 @@ code --new-window {str(pyfile)}
153
153
  if interpreter == "ipython": profile = f" --profile {ipython_profile} --no-banner"
154
154
  else: profile = ""
155
155
  if Path.home().joinpath("code/machineconfig").exists(): ve_line = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" """
156
- else: ve_line = """--python 3.14 --with "machineconfig[plot]>=7.39" """
156
+ else: ve_line = """--python 3.14 --with "machineconfig[plot]>=7.40" """
157
157
  # ve_path_maybe, ipython_profile_maybe = get_ve_path_and_ipython_profile(Path.cwd())
158
158
  # --python 3.14
159
159
  fire_line = f"uv run {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=7.39",
5
+ # "machineconfig>=7.40",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -0,0 +1,49 @@
1
+
2
+ import typer
3
+
4
+
5
+ def machineconfig_lf():
6
+ # from machineconfig.scripts.python.helpers_msearch import FZFG_LINUX_PATH, FZFG_WINDOWS_PATH
7
+ import platform
8
+ if platform.system() == "Linux":
9
+ script = """
10
+ tmp="$(mktemp)"
11
+ lf -last-dir-path="$tmp" "$@"
12
+ if [ -f "$tmp" ]; then
13
+ dir="$(cat "$tmp")"
14
+ rm -f "$tmp"
15
+ if [ -d "$dir" ]; then
16
+ if [ "$dir" != "$(pwd)" ]; then
17
+ cd "$dir"
18
+ fi
19
+ fi
20
+ fi
21
+ """
22
+ elif platform.system() == "Windows":
23
+ script = r"""
24
+ $tmp = [System.IO.Path]::GetTempFileName()
25
+ ~\AppData\Local\Microsoft\WindowsApps\lf.exe -last-dir-path="$tmp" $args
26
+ if (Test-Path -PathType Leaf "$tmp")
27
+ {
28
+ $dir = Get-Content "$tmp"
29
+ Remove-Item -Force "$tmp"
30
+ if (Test-Path -PathType Container "$dir")
31
+ {
32
+ if ("$dir" -ne "$pwd")
33
+ {
34
+ Set-Location "$dir"
35
+ }
36
+ }
37
+ }
38
+ """
39
+ else:
40
+ raise RuntimeError("Unsupported platform")
41
+
42
+ from machineconfig.utils.code import exit_then_run_shell_script
43
+ exit_then_run_shell_script(script=script, strict=False)
44
+
45
+
46
+ def main():
47
+ app = typer.Typer(add_completion=False, no_args_is_help=True)
48
+ app.command(name="lf", help="machineconfig lf wrapper.", no_args_is_help=False)(machineconfig_lf)
49
+ app()
@@ -6,6 +6,7 @@ import typer
6
6
  import machineconfig.scripts.python.helpers_devops.cli_config_dotfile as dotfile_module
7
7
  import machineconfig.profile.create_links_export as create_links_export
8
8
 
9
+
9
10
  def shell(which: Annotated[Literal["default", "d", "nushell", "n"], typer.Option(..., "--which", "-w", help="Which shell profile to create/configure")]="default"):
10
11
  """🔗 Configure your shell profile."""
11
12
  from machineconfig.profile.create_shell_profile import create_default_shell_profile, create_nu_shell_profile
@@ -28,7 +29,7 @@ def path():
28
29
  uv_with = ["textual"]
29
30
  uv_project_dir = None
30
31
  if not Path.home().joinpath("code/machineconfig").exists():
31
- uv_with.append("machineconfig>=7.39")
32
+ uv_with.append("machineconfig>=7.40")
32
33
  else:
33
34
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
34
35
  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])
@@ -1,4 +1,5 @@
1
1
 
2
+ import machineconfig.scripts.python.helpers_devops.cli_share_file
2
3
  import machineconfig.scripts.python.helpers_devops.cli_terminal as cli_terminal
3
4
  import machineconfig.scripts.python.helpers_devops.cli_share_server as cli_share_server
4
5
  import typer
@@ -105,16 +106,16 @@ def get_app():
105
106
  nw_apps.command(name="share-terminal", help="📡 [t] Share terminal via web browser")(cli_terminal.main)
106
107
  nw_apps.command(name="t", help="Share terminal via web browser", hidden=True)(cli_terminal.main)
107
108
 
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)
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)
109
+ 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.web_file_explorer)
110
+ 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.web_file_explorer)
110
111
 
111
112
  # app = cli_share_server.get_share_file_app()
112
113
  # nw_apps.add_typer(app, name="share-file", help="📁 [f] Share a file via relay server", no_args_is_help=True)
113
114
  # 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)
115
+ nw_apps.command(name="send", no_args_is_help=True, hidden=False, help="📁 [sx] send files from here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_send)
116
+ nw_apps.command(name="sx", no_args_is_help=True, hidden=True, help="📁 [sx] send files from here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_send)
117
+ nw_apps.command(name="receive", no_args_is_help=True, hidden=False, help="📁 [rx] receive files to here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_receive)
118
+ nw_apps.command(name="rx", no_args_is_help=True, hidden=True, help="📁 [rx] receive files to here.")(machineconfig.scripts.python.helpers_devops.cli_share_file.share_file_receive)
118
119
 
119
120
  nw_apps.command(name="install-ssh-server", help="📡 [i] Install SSH server")(install_ssh_server)
120
121
  nw_apps.command(name="i", help="Install SSH server", hidden=True)(install_ssh_server)
@@ -46,9 +46,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
46
46
  else:
47
47
  import platform
48
48
  if platform.system() == "Windows":
49
- run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=7.39" """)
49
+ run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=7.40" """)
50
50
  else:
51
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=7.39" """)
51
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=7.40" """)
52
52
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
53
53
  if not no_copy_assets:
54
54
  create_default_shell_profile() # involves copying assets too
@@ -73,7 +73,7 @@ def navigate():
73
73
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
74
74
  from machineconfig.utils.code import run_shell_script
75
75
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
76
- else: executable = """--with "machineconfig>=7.39,textual" """
76
+ else: executable = """--with "machineconfig>=7.40,textual" """
77
77
  run_shell_script(f"""uv run {executable} {path}""")
78
78
 
79
79
 
@@ -0,0 +1,137 @@
1
+ import typer
2
+ # import platform
3
+ # import sys
4
+ from typing import Annotated
5
+
6
+
7
+ def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],
8
+ ) -> None:
9
+ """Receive a file using croc with relay server.
10
+ Usage examples:
11
+ devops network receive 7121-donor-olympic-bicycle
12
+ devops network receive -- --relay 10.17.62.206:443 7121-donor-olympic-bicycle
13
+ devops network receive -- croc --relay 10.17.62.206:443 7121-donor-olympic-bicycle
14
+ """
15
+ from machineconfig.utils.installer_utils.installer import install_if_missing
16
+ install_if_missing(which="croc")
17
+ import platform
18
+ import sys
19
+
20
+ is_windows = platform.system() == "Windows"
21
+
22
+ # If no args passed via typer, try to get them from sys.argv directly
23
+ # This handles the case where -- was used and arguments weren't parsed by typer
24
+ if not code_args or (len(code_args) == 1 and code_args[0] in ['--relay', 'croc']):
25
+ # Find the index of 'rx' or 'receive' in sys.argv and get everything after it
26
+ try:
27
+ for i, arg in enumerate(sys.argv):
28
+ if arg in ['rx', 'receive', 'r'] and i + 1 < len(sys.argv):
29
+ code_args = sys.argv[i + 1:]
30
+ break
31
+ except Exception:
32
+ pass
33
+
34
+ # Join all arguments
35
+ input_str = " ".join(code_args)
36
+ tokens = input_str.split()
37
+
38
+ # Parse input to extract relay server and secret code
39
+ relay_server: str | None = None
40
+ secret_code: str | None = None
41
+
42
+ # Remove 'croc' and 'export' from tokens if present
43
+ tokens = [t for t in tokens if t not in ['croc', 'export']]
44
+
45
+ # Look for --relay flag and capture next token
46
+ relay_idx = -1
47
+ for i, token in enumerate(tokens):
48
+ if token == '--relay' and i + 1 < len(tokens):
49
+ relay_server = tokens[i + 1]
50
+ relay_idx = i
51
+ break
52
+
53
+ # Look for CROC_SECRET= prefix in any token
54
+ for token in tokens:
55
+ if token.startswith('CROC_SECRET='):
56
+ secret_code = token.split('=', 1)[1].strip('"').strip("'")
57
+ break
58
+
59
+ # If no secret code found yet, look for tokens with dashes (typical pattern: number-word-word-word)
60
+ # Skip relay server and relay flag
61
+ if not secret_code:
62
+ for i, token in enumerate(tokens):
63
+ if '-' in token and not token.startswith('-') and token != relay_server:
64
+ if relay_idx >= 0 and (i == relay_idx or i == relay_idx + 1):
65
+ continue # Skip relay server parts
66
+ secret_code = token
67
+ break
68
+
69
+ if not secret_code and not relay_server:
70
+ typer.echo(f"❌ Error: Could not parse croc receive code from input: {input_str}", err=True)
71
+ typer.echo("Usage:", err=True)
72
+ typer.echo(" devops network receive 7121-donor-olympic-bicycle", err=True)
73
+ typer.echo(" devops network receive -- --relay 10.17.62.206:443 7121-donor-olympic-bicycle", err=True)
74
+ raise typer.Exit(code=1)
75
+
76
+ # Build the appropriate script for current OS
77
+ if is_windows:
78
+ # Windows PowerShell format: croc --relay server:port secret-code --yes
79
+ relay_arg = f"--relay {relay_server}" if relay_server else ""
80
+ code_arg = f"{secret_code}" if secret_code else ""
81
+ script = f"""croc {relay_arg} {code_arg} --yes""".strip()
82
+ else:
83
+ # Linux/macOS Bash format: CROC_SECRET="secret-code" croc --relay server:port --yes
84
+ relay_arg = f"--relay {relay_server}" if relay_server else ""
85
+ if secret_code:
86
+ script = f"""export CROC_SECRET="{secret_code}"
87
+ croc {relay_arg} --yes""".strip()
88
+ else:
89
+ script = f"""croc {relay_arg} --yes""".strip()
90
+
91
+ from machineconfig.utils.code import exit_then_run_shell_script, print_code
92
+ print_code(code=script, desc="🚀 Receiving file with croc", lexer="bash" if platform.system() != "Windows" else "powershell")
93
+ exit_then_run_shell_script(script=script, strict=False)
94
+
95
+
96
+ def share_file_send(path: Annotated[str, typer.Argument(help="Path to the file or directory to send")],
97
+ zip_folder: Annotated[bool, typer.Option("--zip", help="Zip folder before sending")] = False,
98
+ code: Annotated[str | None, typer.Option("--code", "-c", help="Codephrase used to connect to relay")] = None,
99
+ text: Annotated[str | None, typer.Option("--text", "-t", help="Send some text")] = None,
100
+ qrcode: Annotated[bool, typer.Option("--qrcode", "--qr", help="Show receive code as a qrcode")] = False,
101
+ ) -> None:
102
+ """Send a file using croc with relay server."""
103
+ from machineconfig.utils.installer_utils.installer import install_if_missing
104
+ install_if_missing(which="croc")
105
+ # Get relay server IP from environment or use default
106
+ import socket
107
+ import platform
108
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
109
+ s.connect(('8.8.8.8',80))
110
+ local_ip_v4 = s.getsockname()[0]
111
+ s.close()
112
+ relay_port = "443"
113
+ is_windows = platform.system() == "Windows"
114
+
115
+ # Build command parts
116
+ relay_arg = f"--relay {local_ip_v4}:{relay_port} --ip {local_ip_v4}:{relay_port}"
117
+ zip_arg = "--zip" if zip_folder else ""
118
+ text_arg = f"--text '{text}'" if text else ""
119
+ qrcode_arg = "--qrcode" if qrcode else ""
120
+ path_arg = f"{path}" if not text else ""
121
+
122
+ if is_windows:
123
+ # Windows PowerShell format
124
+ code_arg = f"--code {code}" if code else ""
125
+ script = f"""croc {relay_arg} send {zip_arg} {code_arg} {qrcode_arg} {text_arg} {path_arg}"""
126
+ else:
127
+ # Linux/macOS Bash format
128
+ if code:
129
+ script = f"""export CROC_SECRET="{code}"
130
+ croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
131
+ else:
132
+ script = f"""croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
133
+
134
+ typer.echo(f"🚀 Sending file: {path}. Use: devops network receive")
135
+ from machineconfig.utils.code import exit_then_run_shell_script, print_code
136
+ print_code(code=script, desc="🚀 sending file with croc", lexer="bash" if platform.system() != "Windows" else "powershell")
137
+ exit_then_run_shell_script(script=script, strict=False)
@@ -1,5 +1,6 @@
1
1
  from pathlib import Path
2
2
  from typing import Optional, Annotated
3
+ from machineconfig.scripts.python.helpers_devops.cli_share_file import share_file_receive, share_file_send
3
4
  import typer
4
5
 
5
6
 
@@ -31,202 +32,97 @@ def display_share_url(local_ip_v4: str, port: int, protocol: str = "http") -> No
31
32
  console.print(panel)
32
33
 
33
34
 
34
- def main(
35
+ def web_file_explorer(
35
36
  path: Annotated[str, typer.Argument(help="Path to the file or directory to share")],
36
37
  port: Annotated[Optional[int], typer.Option("--port", "-p", help="Port to run the share server on (default: 8080)")] = None,
37
38
  username: Annotated[Optional[str], typer.Option("--username", "-u", help="Username for share access (default: current user)")] = None,
38
39
  password: Annotated[Optional[str], typer.Option("--password", "-w", help="Password for share access (default: from ~/dotfiles/creds/passwords/quick_password)")] = None,
39
- over_internet: Annotated[bool, typer.Option("--over-internet", "-i", help="Expose the share server over the internet using ngrok")] = False
40
+ over_internet: Annotated[bool, typer.Option("--over-internet", "-i", help="Expose the share server over the internet using ngrok")] = False,
41
+ backend: Annotated[str, typer.Option("--backend", "-b", help="Backend to use: filebrowser (default), miniserve, or easy-sharing")] = "filebrowser"
40
42
  ) -> None:
41
43
  from machineconfig.utils.installer_utils.installer import install_if_missing
42
- install_if_missing(which="easy-sharing")
43
- if over_internet: install_if_missing(which="ngrok", )
44
+
45
+ if backend not in ["filebrowser", "miniserve", "easy-sharing"]:
46
+ typer.echo(f"❌ ERROR: Invalid backend '{backend}'. Must be one of: filebrowser, miniserve, easy-sharing", err=True)
47
+ raise typer.Exit(code=1)
48
+
49
+ install_if_missing(which=backend)
50
+ if over_internet:
51
+ install_if_missing(which="ngrok")
52
+
44
53
  if username is None:
45
54
  import getpass
46
55
  username = getpass.getuser()
56
+
47
57
  if password is None:
48
58
  pwd_path = Path.home().joinpath("dotfiles/creds/passwords/quick_password")
49
59
  if pwd_path.exists():
50
60
  password = pwd_path.read_text(encoding="utf-8").strip()
51
61
  else:
52
- # raise ValueError("Password not provided and default password file does not exist.")
53
62
  typer.echo(f"⚠️ WARNING: Password not provided and default password file does not exist.\nPath: {pwd_path}\nUsing default password: 'quick_password' (insecure!)", err=True)
54
- typer.Exit(code=1)
63
+ raise typer.Exit(code=1)
55
64
 
56
65
  if port is None:
57
- port = 8080 # Default port for ezshare
66
+ port = 8080
58
67
 
59
68
  import socket
60
69
  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
61
- s.connect(('8.8.8.8',80))
70
+ s.connect(('8.8.8.8', 80))
62
71
  local_ip_v4 = s.getsockname()[0]
63
72
  s.close()
64
73
 
65
- # Display the flashy share announcement
66
74
  protocol = "http"
67
75
  display_share_url(local_ip_v4, port, protocol)
68
- import subprocess
69
- import time
70
- # Build ezshare command
71
- ezshare_cmd = f"""easy-sharing --port {port} --username {username} --password "{password}" {path}"""
72
- ezshare_process = subprocess.Popen(ezshare_cmd, shell=True)
73
- processes = [ezshare_process]
74
-
75
- if over_internet:
76
- ngrok_process = subprocess.Popen(f"ngrok http {port}", shell=True)
77
- processes.append(ngrok_process)
78
- time.sleep(3)
79
- try:
80
- import requests
81
- response = requests.get("http://localhost:4040/api/tunnels")
82
- data = response.json()
83
- public_url = data['tunnels'][0]['public_url']
84
- print(f"🌐 Ngrok tunnel ready: {public_url}")
85
- except Exception as e:
86
- print(f"Could not retrieve ngrok URL: {e}")
87
76
 
88
- try:
89
- while True:
90
- print("Share server is running. Press Ctrl+C to stop.")
91
- time.sleep(2)
92
- except KeyboardInterrupt:
93
- print("\nTerminating processes...")
94
- for p in processes:
95
- p.terminate()
96
- p.wait()
97
-
98
-
99
- def share_file_send(path: Annotated[str, typer.Argument(help="Path to the file or directory to send")],
100
- zip_folder: Annotated[bool, typer.Option("--zip", help="Zip folder before sending")] = False,
101
- code: Annotated[str | None, typer.Option("--code", "-c", help="Codephrase used to connect to relay")] = None,
102
- text: Annotated[str | None, typer.Option("--text", "-t", help="Send some text")] = None,
103
- qrcode: Annotated[bool, typer.Option("--qrcode", "--qr", help="Show receive code as a qrcode")] = False,
104
- ) -> None:
105
- """Send a file using croc with relay server."""
106
- from machineconfig.utils.installer_utils.installer import install_if_missing
107
- install_if_missing(which="croc")
108
- # Get relay server IP from environment or use default
109
- import socket
110
- import platform
111
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
112
- s.connect(('8.8.8.8',80))
113
- local_ip_v4 = s.getsockname()[0]
114
- s.close()
115
- relay_port = "443"
116
- is_windows = platform.system() == "Windows"
117
-
118
- # Build command parts
119
- relay_arg = f"--relay {local_ip_v4}:{relay_port} --ip {local_ip_v4}:{relay_port}"
120
- zip_arg = "--zip" if zip_folder else ""
121
- text_arg = f"--text '{text}'" if text else ""
122
- qrcode_arg = "--qrcode" if qrcode else ""
123
- path_arg = f"{path}" if not text else ""
124
-
125
- if is_windows:
126
- # Windows PowerShell format
127
- code_arg = f"--code {code}" if code else ""
128
- script = f"""croc {relay_arg} send {zip_arg} {code_arg} {qrcode_arg} {text_arg} {path_arg}"""
129
- else:
130
- # Linux/macOS Bash format
131
- if code:
132
- script = f"""export CROC_SECRET="{code}"
133
- croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
134
- else:
135
- script = f"""croc {relay_arg} send {zip_arg} {qrcode_arg} {text_arg} {path_arg}"""
77
+ path_obj = Path(path).resolve()
78
+ if not path_obj.exists():
79
+ typer.echo(f" ERROR: Path does not exist: {path}", err=True)
80
+ raise typer.Exit(code=1)
136
81
 
137
- typer.echo(f"🚀 Sending file: {path}. Use: devops network receive")
138
- from machineconfig.utils.code import exit_then_run_shell_script, print_code
139
- print_code(code=script, desc="🚀 sending file with croc", lexer="bash" if platform.system() != "Windows" else "powershell")
140
- exit_then_run_shell_script(script=script, strict=False)
141
-
142
-
143
- def share_file_receive(code_args: Annotated[list[str], typer.Argument(help="Receive code or relay command. Examples: '7121-donor-olympic-bicycle' or '--relay 10.17.62.206:443 7121-donor-olympic-bicycle'")],
144
- ) -> None:
145
- """Receive a file using croc with relay server.
146
- Usage examples:
147
- devops network receive 7121-donor-olympic-bicycle
148
- devops network receive -- --relay 10.17.62.206:443 7121-donor-olympic-bicycle
149
- devops network receive -- croc --relay 10.17.62.206:443 7121-donor-olympic-bicycle
82
+ if backend == "filebrowser":
83
+ db_path = Path.home().joinpath(".config/filebrowser/filebrowser.db")
84
+ db_path.parent.mkdir(parents=True, exist_ok=True)
85
+ command = f"""
86
+ filebrowser users add {username} "{password}" --database {db_path}
87
+ filebrowser --address 0.0.0.0 --port {port} --root "{path_obj}" --database {db_path}
150
88
  """
151
- from machineconfig.utils.installer_utils.installer import install_if_missing
152
- install_if_missing(which="croc")
153
- import platform
154
- import sys
155
-
156
- is_windows = platform.system() == "Windows"
157
-
158
- # If no args passed via typer, try to get them from sys.argv directly
159
- # This handles the case where -- was used and arguments weren't parsed by typer
160
- if not code_args or (len(code_args) == 1 and code_args[0] in ['--relay', 'croc']):
161
- # Find the index of 'rx' or 'receive' in sys.argv and get everything after it
162
- try:
163
- for i, arg in enumerate(sys.argv):
164
- if arg in ['rx', 'receive', 'r'] and i + 1 < len(sys.argv):
165
- code_args = sys.argv[i + 1:]
166
- break
167
- except Exception:
168
- pass
169
-
170
- # Join all arguments
171
- input_str = " ".join(code_args)
172
- tokens = input_str.split()
173
-
174
- # Parse input to extract relay server and secret code
175
- relay_server: str | None = None
176
- secret_code: str | None = None
177
-
178
- # Remove 'croc' and 'export' from tokens if present
179
- tokens = [t for t in tokens if t not in ['croc', 'export']]
180
-
181
- # Look for --relay flag and capture next token
182
- relay_idx = -1
183
- for i, token in enumerate(tokens):
184
- if token == '--relay' and i + 1 < len(tokens):
185
- relay_server = tokens[i + 1]
186
- relay_idx = i
187
- break
188
-
189
- # Look for CROC_SECRET= prefix in any token
190
- for token in tokens:
191
- if token.startswith('CROC_SECRET='):
192
- secret_code = token.split('=', 1)[1].strip('"').strip("'")
193
- break
194
-
195
- # If no secret code found yet, look for tokens with dashes (typical pattern: number-word-word-word)
196
- # Skip relay server and relay flag
197
- if not secret_code:
198
- for i, token in enumerate(tokens):
199
- if '-' in token and not token.startswith('-') and token != relay_server:
200
- if relay_idx >= 0 and (i == relay_idx or i == relay_idx + 1):
201
- continue # Skip relay server parts
202
- secret_code = token
203
- break
204
-
205
- if not secret_code and not relay_server:
206
- typer.echo(f"❌ Error: Could not parse croc receive code from input: {input_str}", err=True)
207
- typer.echo("Usage:", err=True)
208
- typer.echo(" devops network receive 7121-donor-olympic-bicycle", err=True)
209
- typer.echo(" devops network receive -- --relay 10.17.62.206:443 7121-donor-olympic-bicycle", err=True)
89
+ elif backend == "miniserve":
90
+ command = f"""miniserve --port {port} --interfaces 0.0.0.0 --auth {username}:{password} --upload-files --mkdir --enable-tar --enable-tar-gz --enable-zip --qrcode "{path_obj}" """
91
+ elif backend == "easy-sharing":
92
+ command = f"""easy-sharing --port {port} --username {username} --password "{password}" "{path_obj}" """
93
+ else:
94
+ typer.echo(f"❌ ERROR: Unknown backend '{backend}'", err=True)
210
95
  raise typer.Exit(code=1)
211
96
 
212
- # Build the appropriate script for current OS
213
- if is_windows:
214
- # Windows PowerShell format: croc --relay server:port secret-code --yes
215
- relay_arg = f"--relay {relay_server}" if relay_server else ""
216
- code_arg = f"{secret_code}" if secret_code else ""
217
- script = f"""croc {relay_arg} {code_arg} --yes""".strip()
218
- else:
219
- # Linux/macOS Bash format: CROC_SECRET="secret-code" croc --relay server:port --yes
220
- relay_arg = f"--relay {relay_server}" if relay_server else ""
221
- if secret_code:
222
- script = f"""export CROC_SECRET="{secret_code}"
223
- croc {relay_arg} --yes""".strip()
224
- else:
225
- script = f"""croc {relay_arg} --yes""".strip()
97
+ from machineconfig.utils.code import exit_then_run_shell_script
98
+ exit_then_run_shell_script(script=command, strict=False)
99
+ # import subprocess
100
+ # import time
101
+ # server_process: subprocess.Popen[bytes]
102
+ # server_process = subprocess.Popen(command, shell=True)
103
+ # processes = [server_process]
104
+ # if over_internet:
105
+ # ngrok_process = subprocess.Popen(f"ngrok http {port}", shell=True)
106
+ # processes.append(ngrok_process)
107
+ # time.sleep(3)
108
+ # try:
109
+ # import requests
110
+ # response = requests.get("http://localhost:4040/api/tunnels")
111
+ # data = response.json()
112
+ # public_url = data['tunnels'][0]['public_url']
113
+ # print(f"🌐 Ngrok tunnel ready: {public_url}")
114
+ # except Exception as e:
115
+ # print(f"Could not retrieve ngrok URL: {e}")
226
116
 
227
- from machineconfig.utils.code import exit_then_run_shell_script, print_code
228
- print_code(code=script, desc="🚀 Receiving file with croc", lexer="bash" if platform.system() != "Windows" else "powershell")
229
- exit_then_run_shell_script(script=script, strict=False)
117
+ # try:
118
+ # while True:
119
+ # print(f"Share server ({backend}) is running. Press Ctrl+C to stop.")
120
+ # time.sleep(2)
121
+ # except KeyboardInterrupt:
122
+ # print("\nTerminating processes...")
123
+ # for p in processes:
124
+ # p.terminate()
125
+ # p.wait()
230
126
 
231
127
 
232
128
  def get_share_file_app():
@@ -238,7 +134,7 @@ def get_share_file_app():
238
134
  return app
239
135
 
240
136
  def main_with_parser():
241
- typer.run(main)
137
+ typer.run(web_file_explorer)
242
138
 
243
139
 
244
140
  if __name__ == "__main__":
@@ -99,7 +99,7 @@ git pull originEnc master
99
99
  uv_project_dir = f"""{str(Path.home().joinpath("code/machineconfig"))}"""
100
100
  uv_with = None
101
101
  else:
102
- uv_with = ["machineconfig>=7.39"]
102
+ uv_with = ["machineconfig>=7.40"]
103
103
  uv_project_dir = None
104
104
 
105
105
  import tempfile
@@ -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]>=7.39" {count_lines_path} analyze-over-time {repo_path}"""
11
+ cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=7.40" {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>=7.39" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=7.40" 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
@@ -25,3 +25,17 @@ enable = true
25
25
  max-wrap = 25 # increase value to reduce forced mid-word wrapping
26
26
  max-indent-retain = 0
27
27
  wrap-indicator = "" # set wrap-indicator to "" to hide it
28
+
29
+
30
+ # https://yazi-rs.github.io/docs/tips#helix-with-zellij
31
+ # ~/.config/helix/config.toml
32
+ [keys.normal]
33
+ C-y = ":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- bash ~/.config/helix/yazi-picker.sh open %{buffer_name}"
34
+ # ~/.config/helix/config.toml
35
+ [keys.normal.C-y]
36
+ # Open the file(s) in the current window
37
+ y = ":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- bash ~/.config/helix/yazi-picker.sh open %{buffer_name}"
38
+ # Open the file(s) in a vertical split
39
+ v = ":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- bash ~/.config/helix/yazi-picker.sh vsplit %{buffer_name}"
40
+ # Open the file(s) in a horizontal split
41
+ h = ":sh zellij run -n Yazi -c -f -x 10%% -y 10%% --width 80%% --height 80%% -- bash ~/.config/helix/yazi-picker.sh hsplit %{buffer_name}"
@@ -13,6 +13,7 @@
13
13
  # bind '"\C-o":"lfcd\C-m"' # bash
14
14
  # bindkey -s '^o' 'lfcd\n' # zsh
15
15
  #
16
+
16
17
  lfcd () {
17
18
  # 🔄 Create temporary file for directory tracking
18
19
  tmp="$(mktemp)"
@@ -20,8 +20,9 @@ case "$file" in
20
20
  echo "x: $x, y: $y, width: $width, height: $height"
21
21
 
22
22
  if [ -n "$x" ]; then
23
- echo "📐 Dimensions provided by caller, passing to viu"
24
- viu "$file" -x "$x" -y "$y" -w "$width" -h "$height"
23
+ # echo "📐 Dimensions provided by caller, passing to viu"
24
+ # viu "$file" -x "$x" -y "$y" -w "$width" -h "$height"
25
+ # chafa --fit-width -f sixel "$file"
25
26
  echo "✅ Finished viu"
26
27
  chafa "$file"
27
28
  echo "✅ Finished chafa"
@@ -37,6 +37,7 @@ add_to_path_if_not_already \
37
37
  . $CONFIG_ROOT/settings/broot/br.sh
38
38
  . $CONFIG_ROOT/settings/lf/linux/exe/lfcd.sh
39
39
  . $CONFIG_ROOT/settings/tere/terecd.sh
40
+ . $CONFIG_ROOT/settings/yazi/shell/yazi_cd.sh
40
41
  . $CONFIG_ROOT/scripts/linux/wrap_mcfg
41
42
 
42
43
  # check if file in ~/dotfiles/machineconfig/init_linux.sh exists and source it
@@ -56,7 +57,7 @@ alias r='wrap_in_shell_script croshell'
56
57
  alias u='wrap_in_shell_script utils'
57
58
  alias t='wrap_in_shell_script terminal'
58
59
  alias ms='wrap_in_shell_script msearch'
59
-
60
+ alias x='. $CONFIG_ROOT/scripts/linux/wrap_mcfg explore'
60
61
 
61
62
  # alias gcs='gh copilot suggest -t shell'
62
63
  # alias gcg='gh copilot suggest -t git'
@@ -0,0 +1,36 @@
1
+
2
+
3
+ -- https://yazi-rs.github.io/docs/tips#symlink-in-status
4
+ -- Status:children_add(function(self)
5
+ -- local h = self._current.hovered
6
+ -- if h and h.link_to then
7
+ -- return " -> " .. tostring(h.link_to)
8
+ -- else
9
+ -- return ""
10
+ -- end
11
+ -- end, 3300, Status.LEFT)
12
+
13
+
14
+ -- https://yazi-rs.github.io/docs/tips#user-group-in-status
15
+ -- Status:children_add(function()
16
+ -- local h = cx.active.current.hovered
17
+ -- if not h or ya.target_family() ~= "unix" then
18
+ -- return ""
19
+ -- end
20
+
21
+ -- return ui.Line {
22
+ -- ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
23
+ -- ":",
24
+ -- ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
25
+ -- " ",
26
+ -- }
27
+ -- end, 500, Status.RIGHT)
28
+
29
+
30
+ -- https://yazi-rs.github.io/docs/tips#username-hostname-in-header
31
+ -- Header:children_add(function()
32
+ -- if ya.target_family() ~= "unix" then
33
+ -- return ""
34
+ -- end
35
+ -- return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ":"):fg("blue")
36
+ -- end, 500, Header.LEFT)
@@ -0,0 +1,52 @@
1
+
2
+ [[mgr.prepend_keymap]]
3
+ on = "!"
4
+ for = "unix"
5
+ run = 'shell "$SHELL" --block'
6
+ desc = "Open $SHELL here"
7
+
8
+ # If you also using Yazi on Windows:
9
+ [[mgr.prepend_keymap]]
10
+ on = "!"
11
+ for = "windows"
12
+ run = 'shell "powershell.exe" --block'
13
+ desc = "Open PowerShell here"
14
+
15
+
16
+ # FROM https://github.com/yazi-rs/plugins/tree/main/toggle-pane.yazi
17
+ # keymap.toml
18
+ [[mgr.prepend_keymap]]
19
+ on = "T"
20
+ run = "plugin toggle-pane min-preview"
21
+ desc = "Show or hide the preview pane"
22
+ # keymap.toml
23
+ [[mgr.prepend_keymap]]
24
+ on = "T"
25
+ run = "plugin toggle-pane max-preview"
26
+ desc = "Maximize or restore the preview pane"
27
+
28
+ [[mgr.prepend_keymap]]
29
+ on = "M" # whatever key you choose
30
+ run = "plugin toggle-pane"
31
+ desc = "Toggle preview pane / maximize pane"
32
+
33
+
34
+ # https://yazi-rs.github.io/docs/tips#macos-quick-look
35
+ [[mgr.prepend_keymap]]
36
+ on = "<C-p>"
37
+ run = 'shell -- qlmanage -p "$@"'
38
+
39
+ [[mgr.prepend_keymap]]
40
+ on = "F"
41
+ run = 'shell -- ~/.config/machineconfig/scripts/linux/wrap_mcfg fire "$0"'
42
+ desc = "Run fire on hovered file"
43
+
44
+ [[mgr.prepend_keymap]]
45
+ on = "R"
46
+ run = 'shell -- ~/.config/machineconfig/scripts/linux/wrap_mcfg croshell "$0"'
47
+ desc = "Run croshell on hovered file"
48
+
49
+
50
+ [[mgr.prepend_keymap]]
51
+ on = [ "g", "r" ]
52
+ run = 'shell -- ya emit cd "$(git rev-parse --show-toplevel)"'
@@ -0,0 +1,8 @@
1
+
2
+ function y() {
3
+ local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
4
+ yazi "$@" --cwd-file="$tmp"
5
+ IFS= read -r -d '' cwd < "$tmp"
6
+ [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && builtin cd -- "$cwd"
7
+ rm -f -- "$tmp"
8
+ }
@@ -2,3 +2,11 @@
2
2
  [mgr]
3
3
  show_hidden = true
4
4
  ratio = [1, 3, 5]
5
+
6
+ [plugin]
7
+ dir = "~/.config/yazi/plugins"
8
+
9
+ [[plugin.load]]
10
+ name = "toggle-pane"
11
+ path = "toggle-pane.yazi"
12
+
@@ -2,16 +2,16 @@
2
2
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
3
3
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/linux/wrap_mcfg")
4
4
 
5
- alias devops='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" devops'
6
- alias cloud='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" cloud'
7
- alias agents='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" agents'
8
- alias sessions='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" sessions'
9
- alias ftpx='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" ftpx'
10
- alias fire='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" fire'
11
- alias croshell='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" croshell'
12
- alias utils='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" utils'
13
- alias terminal='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" terminal'
14
- alias msearch='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.39" msearch'
5
+ alias devops='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" devops'
6
+ alias cloud='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" cloud'
7
+ alias agents='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" agents'
8
+ alias sessions='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" sessions'
9
+ alias ftpx='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" ftpx'
10
+ alias fire='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" fire'
11
+ alias croshell='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" croshell'
12
+ alias utils='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" utils'
13
+ alias terminal='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" terminal'
14
+ alias msearch='$HOME/.local/bin/uvx --python 3.14 --from "machineconfig>=7.40" msearch'
15
15
 
16
16
  alias d='wrap_in_shell_script devops'
17
17
  alias c='wrap_in_shell_script cloud'
@@ -3,16 +3,16 @@
3
3
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
4
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/scripts/windows/wrap_mcfg.ps1").Content
5
5
 
6
- function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" devops $args }
7
- function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" cloud $args }
8
- function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" agents $args }
9
- function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" sessions $args }
10
- function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" ftpx $args }
11
- function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" fire $args }
12
- function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" croshell $args }
13
- function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" utils $args }
14
- function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" terminal $args }
15
- function msearch { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.39" msearch $args }
6
+ function devops { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" devops $args }
7
+ function cloud { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" cloud $args }
8
+ function agents { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" agents $args }
9
+ function sessions { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" sessions $args }
10
+ function ftpx { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" ftpx $args }
11
+ function fire { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" fire $args }
12
+ function croshell { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" croshell $args }
13
+ function utils { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" utils $args }
14
+ function terminal { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" terminal $args }
15
+ function msearch { & "$HOME\.local\bin\uvx.exe" --python 3.14 --from "machineconfig>=7.40" msearch $args }
16
16
 
17
17
  function d { wrap_in_shell_script devops @args }
18
18
  function c { wrap_in_shell_script cloud @args }
@@ -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>=7.39"
11
+ MACHINECONFIG_VERSION = "machineconfig>=7.40"
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: 7.39
3
+ Version: 7.44
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -51,7 +51,7 @@ machineconfig/cluster/templates/cli_trogon.py,sha256=PFWGy8SFYIhT9r3ZV4oIEYfImsQ
51
51
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  machineconfig/jobs/installer/check_installations.py,sha256=hkHmmT7Bx3_QWRn2v8dCKOzAapFzqHRzbe-Q08GLnKE,10743
54
- machineconfig/jobs/installer/installer_data.json,sha256=UuitvyDA_DwCelmRxoYvhm9BPBLFHiAcP1AZBQ6X2tI,81646
54
+ machineconfig/jobs/installer/installer_data.json,sha256=IVOjJv4TXTf_laFr9OwwDtjmkssFvTbsTB8M-CpxAus,82754
55
55
  machineconfig/jobs/installer/package_groups.py,sha256=VvnRCAi_Xf3x6HuhtiSIcBqcgwcQ7A58V4Ed5M4P-ww,5271
56
56
  machineconfig/jobs/installer/custom/boxes.py,sha256=ws8QRbDn48oKhbQntr54I0nSfkwINbprjTy0HOpuX40,1974
57
57
  machineconfig/jobs/installer/custom/gh.py,sha256=gn7TUSrsLx7uqFqj1Z-iYglS0EYBSgtJ9jWHxaJIfXM,4119
@@ -95,9 +95,9 @@ machineconfig/profile/backup.toml,sha256=Hb25sIdKVvLqOF62NgiOpGZxd45I6IhsNHu623R
95
95
  machineconfig/profile/bash_shell_profiles.md,sha256=mio0xkMTwO-F3fikWIfgcdQaPCmQrmkxJMNtZsTe9TI,514
96
96
  machineconfig/profile/create_helper.py,sha256=JLBryJ192Gk0ztbNhv9PFlsMVB6ZQH_2GVWHFeRylH8,1663
97
97
  machineconfig/profile/create_links.py,sha256=42U5dEu7fMnGBAqyhQ1VspFaZg3VssMMQSdpGEmpHnE,14199
98
- machineconfig/profile/create_links_export.py,sha256=9kMEHZyopg1fRfUz98bgBHjerb2xYWQMDFYITYngBE0,4194
98
+ machineconfig/profile/create_links_export.py,sha256=DNBdylSzDdBq_wAduIYbscpOWoTx_QVynOP27y0mklA,4444
99
99
  machineconfig/profile/create_shell_profile.py,sha256=jjCwH3rNxVOcb9sgbZQsjYlKGfqhDvPxBDrkFLThT3c,7221
100
- machineconfig/profile/mapper.toml,sha256=CGGKi4VbRo1-AuHU7w1g94NbAys0pxn6fI-2l-lUmY0,12469
100
+ machineconfig/profile/mapper.toml,sha256=pSL6gDHJwkJps0-qqw3ApZBnamADVSH2OuJmrK2jBzU,12666
101
101
  machineconfig/profile/records/generic/shares.toml,sha256=FduDztfyQtZcr5bfx-RSKhEEweweQSWfVXkKWnx8hCY,143
102
102
  machineconfig/profile/records/linux/apps_summary_report.csv,sha256=pw9djvaRUPalKDLn2sl3odcbD2_Zx3aEupsQ8UPfaaY,2738
103
103
  machineconfig/profile/records/linux/apps_summary_report.md,sha256=l77oofA6Rliql0ZgKGIZi8bstFoGyyGTxeS8p2PtOj0,5634
@@ -114,10 +114,11 @@ machineconfig/scripts/nu/wrap_mcfg.nu,sha256=9heiUHVkHjI_AMXT5QJJixk7ZK_hJNV_A8l
114
114
  machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
115
  machineconfig/scripts/python/agents.py,sha256=aVbLQDgpngXZm4taHcED4sAxyHvV2_Dz5VW3apPcQcY,10651
116
116
  machineconfig/scripts/python/cloud.py,sha256=yAD6ciKiEtv2CH3g2NScDK5cpCZQi7Vu8yyeehw_cU8,1263
117
- machineconfig/scripts/python/croshell.py,sha256=H8JgZZIND-jEIZtv3nTrM09uBYDeQpKLKYGE6n1p1Yk,8379
117
+ machineconfig/scripts/python/croshell.py,sha256=lpi77ZnKWOirT8Vkb_6bUg7G82XBZhqRgOVcvC_wMG8,8379
118
118
  machineconfig/scripts/python/define.py,sha256=AtuVac6tJeDMcxtbWmQh1TH3dYAPSGFdO51b75zJVeI,717
119
119
  machineconfig/scripts/python/devops.py,sha256=Lv4d-UlyOREj4VTcu_pxswYo54Mawe3XGeKjreGQDYg,2222
120
120
  machineconfig/scripts/python/devops_navigator.py,sha256=5Cm384D4S8_GsvMzTwr0C16D0ktf8_5Mk5bEJncwDO8,237
121
+ machineconfig/scripts/python/explore.py,sha256=3kNglM1KYp57U8yrbWeHEslN458-xieRuFYsJAhrpIs,1247
121
122
  machineconfig/scripts/python/fire_jobs.py,sha256=r_V5ZpZhE2-Hn_f5pvzbulUTl7_2S4AI_M71WlD4Vlw,13701
122
123
  machineconfig/scripts/python/ftpx.py,sha256=A13hL_tDYfcsaK9PkshK-0lrUS6KPhPCtwqWtLSo6IM,9764
123
124
  machineconfig/scripts/python/interactive.py,sha256=jFHpiQq_lisa51BS4-qUlWPJ1-pmHmPAfA6dixdsOzY,11745
@@ -158,7 +159,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
158
159
  machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
159
160
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
160
161
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
161
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=dHxi4qZpGqkDFWOiso8ylIyCZ4QFDAi7ZLshDy3tKgs,6932
162
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=iyjWG20F4pNlecrWR-3NaH_IFE6YnMVqo73kc3W-5qg,6932
162
163
  machineconfig/scripts/python/helpers_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
164
  machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py,sha256=YD6-rtudHNip8tx85amSmOZZIHBP9khq4az3dF41j6U,5934
164
165
  machineconfig/scripts/python/helpers_agents/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
@@ -188,13 +189,14 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
188
189
  machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
189
190
  machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
190
191
  machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
- machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=R5HEjV5-GBhMA4FBNzcdUT8spRfmwIcAxq3sD8MH03k,5921
192
+ machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=8RU2EC6cDgqSZXVARlkzhkLd1MtLkkDmyTBl68-nZE8,5922
192
193
  machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=SL6P3Ioib3P9OWG1GmULb5-l4ySYZ1RuuIDCHY4lCyU,3502
193
194
  machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
194
- machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=9NcVJvPYaUDtmI_DSKthZxR4emMBeNWVM_M5f0YR8EQ,7302
195
+ machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=u_2l5Cc3dFnh0seKrbH9j-Z0bUCrgy45MOM6HCjgkQg,7562
195
196
  machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=g6qDJ_da6BquSmNUUHY-xK6BY4MlAE4wZQaZXYthfho,12495
196
- machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=AXdPjm6nFcz7VOjBDZ1Od-zOvp7Gj2jwvQAT8brrDjI,6515
197
- machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=BJnm9mEI0PGA2xK_ciNX1docIiRQ_fNhygGrDCcTekw,11076
197
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=b_3sHYEXb8OOdXEN2iprOvI73tEkHH9pfFbOFlUvxnE,6515
198
+ machineconfig/scripts/python/helpers_devops/cli_share_file.py,sha256=AL04784ncdP9ue5bKyqJfXrMksxjFKtuv_w353kQQsI,6298
199
+ machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=S2xQ7sDVvfvGKcJNlquXj9Gc0ofk2EXnfvpRx2AWVD8,6278
198
200
  machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
199
201
  machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=bLUhBkv7KwG7BQ-j83OLHkfYkRyTLhq3SdwtbEflLY4,11882
200
202
  machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py,sha256=Dn8luB6QJzxKiiFSC-NMqiYddWZoca3A8eOjMYZDzTc,5598
@@ -229,9 +231,9 @@ machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wd
229
231
  machineconfig/scripts/python/helpers_repos/action.py,sha256=8je051kpGZ7A_GRsQyWKhPZ8xVW7tSm4bnPu6VjxaXk,9755
230
232
  machineconfig/scripts/python/helpers_repos/action_helper.py,sha256=XRCtkGkNrxauqUd9qkxtfJt02Mx2gejSYDLL0jyWn24,6176
231
233
  machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
232
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=zJBAKQqzJv5y28jYTru94OGNPw4ZxOlemOUoNm-wap4,11271
234
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=zOztyXfM9kFBZVxlAQLGd86dLltQ9AF46a-WH4OwFxE,11271
233
235
  machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
234
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=NZFevOzi84Hh_WJFAAnPjKMH3AEA65viNJ1JkidSxi4,607
236
+ machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=hqRyPC3lON22FC-nUUt8U2Hrnpdujfw8zOWUpNxmhK4,607
235
237
  machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
236
238
  machineconfig/scripts/python/helpers_repos/grource.py,sha256=oJj1-gqlkV3Z_BrIOXRmtzoXcuBl0xTYfulJ5D0srOc,14656
237
239
  machineconfig/scripts/python/helpers_repos/record.py,sha256=FQo0swuJZOp0I2XGK-t1OQU4zJHmQ2z9zTpDD30Tmg4,11001
@@ -259,7 +261,7 @@ machineconfig/scripts/windows/wrap_mcfg.ps1,sha256=tFCj4wK7B35Uf6kdGCRV7EIr1xZFT
259
261
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
260
262
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
261
263
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
262
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=z3Ftrr8RLZTTcAIY_qhbV-fr_jBUu9ZHPBtFBWViqt0,322
264
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=ZUy6_oLtUvVAGlqsKnuZTndcLCL9fUPMzSBfYcWzZVM,322
263
265
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
264
266
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
265
267
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -269,7 +271,7 @@ machineconfig/settings/broot/brootcd.ps1,sha256=BB8uGnoVywxFWSgwsHxlbS8V4W_Qom3L
269
271
  machineconfig/settings/broot/conf.toml,sha256=2C2ggpFR0Z-Sceu0iwHW0LFz45AjwyeCBD0PSP0VIoo,55
270
272
  machineconfig/settings/glow/glow.yml,sha256=59eFsIPBXRgJSVb6kcA7XHkWuLe0_wNandhc9KGykmE,245
271
273
  machineconfig/settings/gromit-mpx/gromit-mpx.cfg,sha256=NW7a4OmGPpMCiFkQNNFNdUf5VqL1DN8Tkiz2oVRt7Gw,1067
272
- machineconfig/settings/helix/config.toml,sha256=DTUKB1E03bnTrT-rm-lrhV1bdGhVldkPL3VVptaVSbE,513
274
+ machineconfig/settings/helix/config.toml,sha256=RxQG1rtcqI9ZduT5dxqyHeAJy0UXc_3POuuW4XVPsqU,1338
273
275
  machineconfig/settings/helix/languages.toml,sha256=d6zOu9PjmGhOyvYKHD6LMeUXtVF5vR6IqxQ-jpRpRz4,725
274
276
  machineconfig/settings/keras/keras.json,sha256=uSJa-eCun6xl6xvlVP-totLgWDw7etCMzxZT5jS2mgw,115
275
277
  machineconfig/settings/keyboard/espanso/config/default.yml,sha256=RBIuA4AsAWB8BoRojQhbkVV0LtjL0sYFPaLtgbWookM,1685
@@ -288,8 +290,8 @@ machineconfig/settings/lf/linux/autocall/rename.sh,sha256=47DEQpj8HBSa-_TImW-5JC
288
290
  machineconfig/settings/lf/linux/exe/cleaner.sh,sha256=NKK30rUcrHXnwy8srylyaWL-XJdDWJIjF4a3mfbdEsA,209
289
291
  machineconfig/settings/lf/linux/exe/fzf_nano.sh,sha256=aqYZ2mb-gLu4C6Ct-Tntfb9Xz6LcIYu3hVjQ_EmTXoI,599
290
292
  machineconfig/settings/lf/linux/exe/leftpane_previewer.sh,sha256=KXMq81hIvU9uzOuanluVcxVgJmEOYy-5sUbzcuc9b6U,200
291
- machineconfig/settings/lf/linux/exe/lfcd.sh,sha256=dh_9JZHGHeNjGd8BE1NYNK4fO3Exwa9bAehywGYhSNs,770
292
- machineconfig/settings/lf/linux/exe/previewer.sh,sha256=g2gzBL_fa72FvJHUknzmZT5D8JHyFuwB0sdMWhWZjZE,1210
293
+ machineconfig/settings/lf/linux/exe/lfcd.sh,sha256=qU2AtGR22UWR3Isw5UkJ4OZdxW2VFR3FOaIEJDVjYTg,771
294
+ machineconfig/settings/lf/linux/exe/previewer.sh,sha256=sjiU6S_P8ExSmCPGz-Uwmrrn075rBmj_-3H4Cvr-ROI,1259
293
295
  machineconfig/settings/lf/linux/exe/previewer_archive.sh,sha256=MGAlXrso-RSrvBbkFnmBHSGoPB54ZHtY_s5Qd1-fNZM,3536
294
296
  machineconfig/settings/lf/windows/cd_tere.ps1,sha256=kiW7LiE0Pe2Pjq_4CO2N36wHx_0N-9fXXUDUvHWCOuc,203
295
297
  machineconfig/settings/lf/windows/cd_zoxide.ps1,sha256=gQKJPa_YDmp5BiCKeYYHkZB_p7py8EXIhXtZi6vnN8o,159
@@ -331,7 +333,7 @@ machineconfig/settings/rofi/config.rasi,sha256=nDX5B8wdXQYF1fwiOTBRJUI4l_gQbYaLa
331
333
  machineconfig/settings/rofi/config_default.rasi,sha256=rTfKnC-bZuWX1l-lWQACCUOE1ShhkfykAxtXX9PlQHE,4694
332
334
  machineconfig/settings/shells/alacritty/alacritty.toml,sha256=EbL-2Y4QunW1pvRWB2yuLCw8MMPONheJr5LFoWRieUQ,871
333
335
  machineconfig/settings/shells/alacritty/alacritty.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
334
- machineconfig/settings/shells/bash/init.sh,sha256=1fJr3LLlknejEv3JWTuuWIu1thuVl9QQ3X1dVSdqMrw,2975
336
+ machineconfig/settings/shells/bash/init.sh,sha256=PrBMBWwQM_gqY5Q9kCQ0oOTaeiuCWn0TSOvjbzPaRhk,3077
335
337
  machineconfig/settings/shells/hyper/.hyper.js,sha256=h-HqeYlvPvPD4Ee7828Cxo87uVkzbMGJFqXTZIWoegw,8884
336
338
  machineconfig/settings/shells/ipy/profiles/default/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
339
  machineconfig/settings/shells/ipy/profiles/default/startup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -355,9 +357,11 @@ machineconfig/settings/tere/terecd.sh,sha256=vDKRbldub0aGQwnWtDwkPnSQHKpVQiDg1RT
355
357
  machineconfig/settings/tmux/.tmate.conf,sha256=dhj8IbNUe_oaBSmnAE-k2rcHJ6_zcd7pHqrmKP19zA0,57
356
358
  machineconfig/settings/tmux/.tmux.conf,sha256=55qyCgKHOyg70kJ42GXrHwqAAtRtnsWtdHCuPt-8Hy8,94
357
359
  machineconfig/settings/wsl/.wslconfig,sha256=wL4oWxRw_0vLQXheSLNuGUQqypqEKlVqYALosPI9jhY,1279
358
- machineconfig/settings/yazi/keymap.toml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
+ machineconfig/settings/yazi/init.lua,sha256=6ed3Ao_Q32DyMB8YvN9huH3SQe70eOIQ0pJ23hXymCE,970
361
+ machineconfig/settings/yazi/keymap.toml,sha256=mlYE3PPdIYaT3xQYkR3imDurbr1y93xy1Fkj6OYmW7s,1274
359
362
  machineconfig/settings/yazi/theme.toml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
- machineconfig/settings/yazi/yazi.toml,sha256=8zn-7VnGernC7fN27va8fvh8Q6UkVwtXYfBHjdTBcF0,44
363
+ machineconfig/settings/yazi/yazi.toml,sha256=Qs2AbcrdFpbp_c8vFR3eSE_Ue3uPRjckj4hYvfwaEnw,150
364
+ machineconfig/settings/yazi/shell/yazi_cd.sh,sha256=oC_MSBbnSwCg6qgGe598Qhm0V2B9RD5IcIbKEabn7aE,208
361
365
  machineconfig/settings/zed/settings.json,sha256=WYuoJycLVhM1-_Haq2VlERds3W7LZFzJ1qJp7lwhnos,789
362
366
  machineconfig/settings/zellij/config.kdl,sha256=J1FOE2hSinVG26LPlvMhTBWKjZAw_2wcoSEZrwKgn5M,10329
363
367
  machineconfig/settings/zellij/config.orig.kdl,sha256=0KyYigBGUD5GdTmH9pE8f66LIFnll44Xz7s9EYD1z8c,10349
@@ -378,7 +382,7 @@ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE3
378
382
  machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
379
383
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
380
384
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
381
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=ly6LmQyZfHrFbY3w1uSzLxh75mG9_StiCrSgc9eZsB4,1581
385
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=ZJ1hofuXlW7cTzh3D-tEnbQyivBid2nIDZx_pvsvwgo,1581
382
386
  machineconfig/setup_mac/__init__.py,sha256=Q1waupi5vCBroLqc8Rtnw69_7jLnm2Cs7_zH_GSZgMs,616
383
387
  machineconfig/setup_mac/apps.sh,sha256=R0N6fBwLCzwy4qAormyMerXXXrHazibSkY6NrNOpTQU,2772
384
388
  machineconfig/setup_mac/apps_gui.sh,sha256=3alvddg918oMlJB2aUWJWpGGoaq5atlxcaOwhnyXlRI,9517
@@ -393,7 +397,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
393
397
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
394
398
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
395
399
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
396
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=92Tpd6BMF_2pGJTBQEcLjg2cw8xAFTnYtO4LaIgVhBo,1916
400
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=ptqDuvaIG7Zm2-2iinHY7BMI75nIbXgGNOQ75r1KTCg,1916
397
401
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
398
402
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
399
403
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -411,7 +415,7 @@ machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,
411
415
  machineconfig/utils/scheduler.py,sha256=fguwvINyaupOxdU5Uadyxalh_jXTXDzt0ioEgjEOKcM,14705
412
416
  machineconfig/utils/scheduling.py,sha256=vcJgajeJPSWkJNlarYJSmLvasdOuCtBM4druOAB1Nwc,11089
413
417
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
414
- machineconfig/utils/ssh.py,sha256=4eJ6FpQk0hCMrBbgTYVS_F62FNM6Yfjit_YcpQoVLZw,39274
418
+ machineconfig/utils/ssh.py,sha256=MLHbiZzVvn0QbNfhL4CbXBDNSjyTIAwqqhQMX4-0GsM,39274
415
419
  machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
416
420
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
417
421
  machineconfig/utils/upgrade_packages.py,sha256=e4iJn_9vL2zCJxAR2dhKJjM0__ALKgI5yB1uBRxSjhQ,6994
@@ -440,8 +444,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
440
444
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
441
445
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
442
446
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
443
- machineconfig-7.39.dist-info/METADATA,sha256=KxEku5iFLGNeOgoQz3MtKL3kamchi5PK6LOfqZjFKdY,3396
444
- machineconfig-7.39.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
445
- machineconfig-7.39.dist-info/entry_points.txt,sha256=okYzomE0f6au8xnxn_D4j6iKUVP4IqSlByUgMwojPKs,694
446
- machineconfig-7.39.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
447
- machineconfig-7.39.dist-info/RECORD,,
447
+ machineconfig-7.44.dist-info/METADATA,sha256=0ykBKVEj443dNz7Ty8d27kDuZ-6sT5jTdfaS1jvr3Tg,3396
448
+ machineconfig-7.44.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
449
+ machineconfig-7.44.dist-info/entry_points.txt,sha256=_JNgkzaa_gVAWyZ6UwPwXXQqURRSvAGhrVQ1RiU2sHc,746
450
+ machineconfig-7.44.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
451
+ machineconfig-7.44.dist-info/RECORD,,
@@ -4,6 +4,7 @@ cloud = machineconfig.scripts.python.cloud:main
4
4
  croshell = machineconfig.scripts.python.croshell:main
5
5
  define = machineconfig.scripts.python.define:main
6
6
  devops = machineconfig.scripts.python.devops:main
7
+ explore = machineconfig.scripts.python.explore:main
7
8
  fire = machineconfig.scripts.python.fire_jobs:main
8
9
  ftpx = machineconfig.scripts.python.ftpx:main
9
10
  machineconfig = machineconfig.scripts.python.machineconfig:main