omdev 0.0.0.dev526__tar.gz → 0.0.0.dev528__tar.gz

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.
Files changed (435) hide show
  1. {omdev-0.0.0.dev526/omdev.egg-info → omdev-0.0.0.dev528}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/cli/main.py +1 -0
  3. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/typing.py +1 -0
  4. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cc/cli.py +3 -0
  5. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/_dumping.py +35 -35
  6. omdev-0.0.0.dev528/omdev/dockerdev/config.toml +36 -0
  7. omdev-0.0.0.dev528/omdev/dockerdev/gen.py +186 -0
  8. omdev-0.0.0.dev526/omdev/dockerdev/resources/fragments/rustup.sh → omdev-0.0.0.dev528/omdev/dockerdev/resources/fragments/rust.sh +7 -0
  9. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/manifests/_dumping.py +35 -35
  10. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/pkg.py +4 -4
  11. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/ci.py +35 -35
  12. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/interp.py +35 -35
  13. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/lib/inject.py +35 -35
  14. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/lib/io/streams.py +77 -28
  15. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/lib/marshal.py +35 -35
  16. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/pyproject.py +40 -40
  17. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528/omdev.egg-info}/PKG-INFO +2 -2
  18. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev.egg-info/SOURCES.txt +2 -1
  19. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev.egg-info/requires.txt +1 -1
  20. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/pyproject.toml +3 -2
  21. omdev-0.0.0.dev526/omdev/dockerdev/gen.py +0 -173
  22. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/LICENSE +0 -0
  23. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/MANIFEST.in +0 -0
  24. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/README.md +0 -0
  25. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/.omlish-manifests.json +0 -0
  26. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/README.md +0 -0
  27. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/__about__.py +0 -0
  28. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/__init__.py +0 -0
  29. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/__init__.py +0 -0
  30. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/__main__.py +0 -0
  31. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/cli/__init__.py +0 -0
  32. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/__init__.py +0 -0
  33. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/gen.py +0 -0
  34. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/imports.py +0 -0
  35. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/manifests.py +0 -0
  36. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/resources.py +0 -0
  37. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/srcfiles.py +0 -0
  38. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/strip.py +0 -0
  39. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/gen/types.py +0 -0
  40. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/info.py +0 -0
  41. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/amalg/sources.py +0 -0
  42. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/__init__.py +0 -0
  43. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/__init__.py +0 -0
  44. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/cache.py +0 -0
  45. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/contexts.py +0 -0
  46. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/currents.py +0 -0
  47. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/fns.py +0 -0
  48. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/resolvers.py +0 -0
  49. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/storage.py +0 -0
  50. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/compute/types.py +0 -0
  51. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/__init__.py +0 -0
  52. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/actions.py +0 -0
  53. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/cache.py +0 -0
  54. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/consts.py +0 -0
  55. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/defaults.py +0 -0
  56. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/manifests.py +0 -0
  57. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cache/data/specs.py +0 -0
  58. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/__init__.py +0 -0
  59. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/darwin/__init__.py +0 -0
  60. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/darwin/aps.py +0 -0
  61. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/darwin/ax.py +0 -0
  62. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/darwin/cf.py +0 -0
  63. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/darwin/cg.py +0 -0
  64. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/linux/__init__.py +0 -0
  65. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/capi/linux/x11.py +0 -0
  66. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cc/__init__.py +0 -0
  67. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cc/__main__.py +0 -0
  68. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cc/cdeps.py +0 -0
  69. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cc/cdeps.toml +0 -0
  70. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cc/srclangs.py +0 -0
  71. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/__init__.py +0 -0
  72. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_boilerplate.cc +0 -0
  73. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/LICENSE +0 -0
  74. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/__init__.py +0 -0
  75. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/build_ext.py +0 -0
  76. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  77. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  78. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/compilers/options.py +0 -0
  79. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  80. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/dir_util.py +0 -0
  81. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/errors.py +0 -0
  82. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/extension.py +0 -0
  83. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/file_util.py +0 -0
  84. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/modified.py +0 -0
  85. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/spawn.py +0 -0
  86. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/sysconfig.py +0 -0
  87. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/util.py +0 -0
  88. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/_distutils/version.py +0 -0
  89. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/build.py +0 -0
  90. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/cmake.py +0 -0
  91. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/importhook.py +0 -0
  92. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/magic.py +0 -0
  93. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cexts/scan.py +0 -0
  94. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/__init__.py +0 -0
  95. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/__main__.py +0 -0
  96. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/cache.py +0 -0
  97. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/ci.py +0 -0
  98. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/cli.py +0 -0
  99. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/compose.py +0 -0
  100. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/consts.py +0 -0
  101. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/__init__.py +0 -0
  102. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/buildcaching.py +0 -0
  103. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/cache.py +0 -0
  104. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  105. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/cacheserved/cache.py +0 -0
  106. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  107. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/cmds.py +0 -0
  108. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/dataserver.py +0 -0
  109. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/imagepulling.py +0 -0
  110. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/inject.py +0 -0
  111. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/packing.py +0 -0
  112. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/repositories.py +0 -0
  113. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/docker/utils.py +0 -0
  114. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/__init__.py +0 -0
  115. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/__init__.py +0 -0
  116. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/clients.py +0 -0
  117. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v1/__init__.py +0 -0
  118. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v1/api.py +0 -0
  119. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v1/client.py +0 -0
  120. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v2/__init__.py +0 -0
  121. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v2/api.py +0 -0
  122. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v2/azure.py +0 -0
  123. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/api/v2/client.py +0 -0
  124. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/bootstrap.py +0 -0
  125. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/cache.py +0 -0
  126. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/cli.py +0 -0
  127. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/env.py +0 -0
  128. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/github/inject.py +0 -0
  129. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/inject.py +0 -0
  130. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/requirements.py +0 -0
  131. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/shell.py +0 -0
  132. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/ci/utils.py +0 -0
  133. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/__init__.py +0 -0
  134. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/__main__.py +0 -0
  135. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/_pathhack.py +0 -0
  136. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/clicli.py +0 -0
  137. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/install.py +0 -0
  138. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/main.py +0 -0
  139. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/managers.py +0 -0
  140. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cli/types.py +0 -0
  141. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/__init__.py +0 -0
  142. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/capi/__init__.py +0 -0
  143. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/capi/darwin_cf.py +0 -0
  144. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/capi/linux_x11.py +0 -0
  145. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/commands.py +0 -0
  146. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/platform.py +0 -0
  147. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/clipboard/types.py +0 -0
  148. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cmake.py +0 -0
  149. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cmdlog/__init__.py +0 -0
  150. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cmdlog/__main__.py +0 -0
  151. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cmdlog/_cmdlog.py +0 -0
  152. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cmdlog/cli.py +0 -0
  153. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/cmdlog/cmdlog.py +0 -0
  154. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/__init__.py +0 -0
  155. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/__main__.py +0 -0
  156. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/_template.py +0 -0
  157. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/cli.py +0 -0
  158. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/codegen.py +0 -0
  159. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataclasses/dumping.py +0 -0
  160. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataserver/__init__.py +0 -0
  161. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataserver/handlers.py +0 -0
  162. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataserver/http.py +0 -0
  163. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataserver/routes.py +0 -0
  164. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataserver/server.py +0 -0
  165. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dataserver/targets.py +0 -0
  166. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/__init__.py +0 -0
  167. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/content.py +0 -0
  168. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/helpers.py +0 -0
  169. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/ops.py +0 -0
  170. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/rendering.py +0 -0
  171. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/__init__.py +0 -0
  172. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/configs/__init__.py +0 -0
  173. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/depsets/__init__.py +0 -0
  174. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  175. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  176. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  177. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/__init__.py +0 -0
  178. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  179. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  180. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  181. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  182. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  183. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  184. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  185. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  186. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  187. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  188. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/dockerdev/resources/xu +0 -0
  189. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/git/__init__.py +0 -0
  190. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/git/magic.py +0 -0
  191. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/git/revisions.py +0 -0
  192. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/git/shallow.py +0 -0
  193. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/git/status.py +0 -0
  194. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/home/__init__.py +0 -0
  195. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/home/paths.py +0 -0
  196. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/home/secrets.py +0 -0
  197. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/home/shadow.py +0 -0
  198. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/imgur.py +0 -0
  199. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/intellij/__init__.py +0 -0
  200. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/intellij/cli.py +0 -0
  201. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/intellij/ides.py +0 -0
  202. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/intellij/open.py +0 -0
  203. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/__init__.py +0 -0
  204. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/__main__.py +0 -0
  205. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/cli.py +0 -0
  206. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/default.py +0 -0
  207. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/inject.py +0 -0
  208. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/inspect.py +0 -0
  209. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/providers/__init__.py +0 -0
  210. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/providers/base.py +0 -0
  211. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/providers/inject.py +0 -0
  212. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/providers/running.py +0 -0
  213. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/providers/standalone.py +0 -0
  214. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/providers/system.py +0 -0
  215. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/pyenv/__init__.py +0 -0
  216. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/pyenv/inject.py +0 -0
  217. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/pyenv/install.py +0 -0
  218. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/pyenv/provider.py +0 -0
  219. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/pyenv/pyenv.py +0 -0
  220. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/resolvers.py +0 -0
  221. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/types.py +0 -0
  222. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/uv/__init__.py +0 -0
  223. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/uv/inject.py +0 -0
  224. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/uv/provider.py +0 -0
  225. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/uv/uv.py +0 -0
  226. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/interp/venvs.py +0 -0
  227. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/__init__.py +0 -0
  228. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/messages/__init__.py +0 -0
  229. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/messages/base.py +0 -0
  230. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/messages/formats.py +0 -0
  231. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/messages/messages.py +0 -0
  232. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/messages/parsing.py +0 -0
  233. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/numerics/__init__.py +0 -0
  234. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/numerics/formats.py +0 -0
  235. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/numerics/numerics.py +0 -0
  236. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/numerics/types.py +0 -0
  237. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/LICENSE +0 -0
  238. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/__init__.py +0 -0
  239. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/consts.py +0 -0
  240. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/errors.py +0 -0
  241. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/message.py +0 -0
  242. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/nuh.py +0 -0
  243. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/parsing.py +0 -0
  244. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/rendering.py +0 -0
  245. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/tags.py +0 -0
  246. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/irc/protocol/utils.py +0 -0
  247. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/java/__init__.py +0 -0
  248. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/java/__main__.py +0 -0
  249. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/java/cli.py +0 -0
  250. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/java/pomgen.py +0 -0
  251. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/java/xml.py +0 -0
  252. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/__init__.py +0 -0
  253. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/__main__.py +0 -0
  254. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/cli.py +0 -0
  255. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/find.py +0 -0
  256. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/magic.py +0 -0
  257. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/prepare.py +0 -0
  258. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/magic/styles.py +0 -0
  259. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/manifests/__init__.py +0 -0
  260. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/manifests/__main__.py +0 -0
  261. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/manifests/building.py +0 -0
  262. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/manifests/dumping.py +0 -0
  263. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/manifests/main.py +0 -0
  264. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/markdown/__init__.py +0 -0
  265. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/markdown/incparse.py +0 -0
  266. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/markdown/tokens.py +0 -0
  267. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/mypy/__init__.py +0 -0
  268. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/mypy/debug.py +0 -0
  269. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/mypy/report.py +0 -0
  270. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/__init__.py +0 -0
  271. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/building.py +0 -0
  272. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/compression.py +0 -0
  273. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/data.py +0 -0
  274. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/datarefs.py +0 -0
  275. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/dataserver.py +0 -0
  276. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/loading.py +0 -0
  277. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/media.py +0 -0
  278. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/pack/__init__.py +0 -0
  279. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/pack/packing.py +0 -0
  280. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/pack/repositories.py +0 -0
  281. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/pack/unpacking.py +0 -0
  282. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/repositories.py +0 -0
  283. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/oci/tars.py +0 -0
  284. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/__init__.py +0 -0
  285. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/marshal.py +0 -0
  286. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/names.py +0 -0
  287. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/requires.py +0 -0
  288. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/revisions.py +0 -0
  289. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/specifiers.py +0 -0
  290. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/versions.py +0 -0
  291. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/packaging/wheelfile.py +0 -0
  292. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pip.py +0 -0
  293. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/__init__.py +0 -0
  294. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/__main__.py +0 -0
  295. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/base.py +0 -0
  296. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/blanklines.py +0 -0
  297. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/caches.py +0 -0
  298. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/git.py +0 -0
  299. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/imports.py +0 -0
  300. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/lite.py +0 -0
  301. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/main.py +0 -0
  302. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/manifests.py +0 -0
  303. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/scripts.py +0 -0
  304. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/precheck/unicode.py +0 -0
  305. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/__init__.py +0 -0
  306. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/asts/__init__.py +0 -0
  307. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/asts/parents.py +0 -0
  308. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/asts/toplevel.py +0 -0
  309. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/asts/visitors.py +0 -0
  310. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/attrdocs.py +0 -0
  311. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/bracepy.py +0 -0
  312. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/classdot.py +0 -0
  313. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/LICENSE +0 -0
  314. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/__init__.py +0 -0
  315. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/attrdoc.py +0 -0
  316. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/common.py +0 -0
  317. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/epydoc.py +0 -0
  318. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/google.py +0 -0
  319. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/numpydoc.py +0 -0
  320. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/parser.py +0 -0
  321. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/docstrings/rest.py +0 -0
  322. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/findimports.py +0 -0
  323. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/reprs.py +0 -0
  324. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/scripts/__init__.py +0 -0
  325. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/scripts/bumpversion.py +0 -0
  326. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/scripts/execstat.py +0 -0
  327. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/scripts/importtrace.py +0 -0
  328. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/srcheaders.py +0 -0
  329. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tokens/__init__.py +0 -0
  330. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tokens/all.py +0 -0
  331. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tokens/tokenizert.py +0 -0
  332. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tokens/utils.py +0 -0
  333. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tools/__init__.py +0 -0
  334. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tools/importscan.py +0 -0
  335. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tools/mkrelimp.py +0 -0
  336. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/py/tools/pipdepup.py +0 -0
  337. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/__init__.py +0 -0
  338. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/__main__.py +0 -0
  339. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/cli.py +0 -0
  340. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/configs.py +0 -0
  341. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/inject.py +0 -0
  342. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/reqs.py +0 -0
  343. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/resources/__init__.py +0 -0
  344. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/resources/docker-dev.sh +0 -0
  345. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/resources/python.sh +0 -0
  346. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/tools/__init__.py +0 -0
  347. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/tools/aboutdeps.py +0 -0
  348. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/tools/buildrs.py +0 -0
  349. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/tools/pyversions.py +0 -0
  350. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/venvs.py +0 -0
  351. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/pyproject/versions.py +0 -0
  352. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/rs/__init__.py +0 -0
  353. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/__init__.py +0 -0
  354. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/lib/__init__.py +0 -0
  355. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/lib/io/__init__.py +0 -0
  356. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/lib/logs.py +0 -0
  357. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/slowcat.py +0 -0
  358. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/scripts/tmpexec.py +0 -0
  359. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tagstrings.py +0 -0
  360. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/__init__.py +0 -0
  361. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/cloc.py +0 -0
  362. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/diff.py +0 -0
  363. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/doc.py +0 -0
  364. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/docker.py +0 -0
  365. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/git/__init__.py +0 -0
  366. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/git/__main__.py +0 -0
  367. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/git/cli.py +0 -0
  368. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/git/cloning.py +0 -0
  369. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/git/consts.py +0 -0
  370. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/git/messages.py +0 -0
  371. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/__init__.py +0 -0
  372. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/__main__.py +0 -0
  373. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/cli.py +0 -0
  374. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/formats.py +0 -0
  375. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/io.py +0 -0
  376. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/parsing.py +0 -0
  377. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/processing.py +0 -0
  378. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/json/rendering.py +0 -0
  379. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/__init__.py +0 -0
  380. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/__main__.py +0 -0
  381. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/cli.py +0 -0
  382. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/resources/__init__.py +0 -0
  383. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  384. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  385. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  386. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/linehisto.py +0 -0
  387. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/mkenv.py +0 -0
  388. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/notebook.py +0 -0
  389. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/pawk/README.md +0 -0
  390. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/pawk/__init__.py +0 -0
  391. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/pawk/__main__.py +0 -0
  392. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/pawk/pawk.py +0 -0
  393. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/pip.py +0 -0
  394. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/prof.py +0 -0
  395. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/qr.py +0 -0
  396. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/shadow.py +0 -0
  397. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/shell.py +0 -0
  398. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tools/sqlrepl.py +0 -0
  399. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/__init__.py +0 -0
  400. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/__init__.py +0 -0
  401. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/edit/__init__.py +0 -0
  402. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/edit/main.py +0 -0
  403. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/irc/__init__.py +0 -0
  404. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/irc/__main__.py +0 -0
  405. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/irc/app.py +0 -0
  406. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/irc/client.py +0 -0
  407. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/irc/commands.py +0 -0
  408. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/irc/main.py +0 -0
  409. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/markdown/__init__.py +0 -0
  410. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/markdown/__main__.py +0 -0
  411. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/apps/markdown/cli.py +0 -0
  412. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/rich/__init__.py +0 -0
  413. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/rich/console2.py +0 -0
  414. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/rich/markdown2.py +0 -0
  415. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/__init__.py +0 -0
  416. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/app2.py +0 -0
  417. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  418. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  419. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/autocomplete/matching.py +0 -0
  420. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/autocomplete/paths.py +0 -0
  421. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/autocomplete/widget.py +0 -0
  422. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/binding2.py +0 -0
  423. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/clipboard.py +0 -0
  424. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/debug/__init__.py +0 -0
  425. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/debug/dominfo.py +0 -0
  426. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/debug/screen.py +0 -0
  427. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/devtools.py +0 -0
  428. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/drivers2.py +0 -0
  429. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/logging2.py +0 -0
  430. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/screen2.py +0 -0
  431. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev/tui/textual/types.py +0 -0
  432. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev.egg-info/dependency_links.txt +0 -0
  433. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev.egg-info/entry_points.txt +0 -0
  434. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/omdev.egg-info/top_level.txt +0 -0
  435. {omdev-0.0.0.dev526 → omdev-0.0.0.dev528}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev526
3
+ Version: 0.0.0.dev528
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev526
17
+ Requires-Dist: omlish==0.0.0.dev528
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.1; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -11,6 +11,7 @@ TODO:
11
11
  - more sanity checks lol
12
12
  - typealias - support # noqa, other comments, and lamely support multiline by just stealing lines till it parses
13
13
  - remove `if __name__ == '__main__':` blocks - thus, convention: no def _main() for these
14
+ - pyz! zipimport -> single `__main__.py` file + shebang
14
15
 
15
16
  See:
16
17
  - https://github.com/xonsh/amalgamate - mine is for portability not speed, and doesn't try to work on unmodified code
@@ -30,6 +30,7 @@ def _is_typing(
30
30
  exclude_newtypes: bool = False,
31
31
  ) -> bool:
32
32
  es = tks.join_toks(lts).strip()
33
+ # FIXME: doesn't handle lines ending with `noqa` comments lol
33
34
  if es.endswith(NO_MOVE_COMMENT):
34
35
  return False
35
36
  if any(es.endswith(sfx) for sfx in (TYPE_ALIAS_COMMENT, NOQA_TYPE_ALIAS_COMMENT)):
@@ -24,6 +24,9 @@ TODO:
24
24
  - cc ij, based off of cmake
25
25
  - fix CFLAGS/CCFLAGS/CPPFLAGS/CXXFLAGS
26
26
  - jit-gen cmake mode? multi-src builds
27
+ - alt exec modes (* share / dedupe with java cli *):
28
+ - fork/exec, just leave temp dir
29
+ - fork, set pr_deathsig, exec, forward signals
27
30
  """
28
31
  import os
29
32
  import shlex
@@ -38,7 +38,7 @@ def __omlish_amalg__(): # noqa
38
38
  return dict(
39
39
  src_files=[
40
40
  dict(path='../../omlish/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
41
- dict(path='../../omlish/lite/check.py', sha1='0ce40cc68bd1b18604293a0b4924efabb6033766'),
41
+ dict(path='../../omlish/lite/check.py', sha1='4dee5d317d9e0fab5cd65f31a3cc1a496f7adfff'),
42
42
  dict(path='../../omlish/lite/json.py', sha1='57eeddc4d23a17931e00284ffa5cb6e3ce089486'),
43
43
  dict(path='../../omlish/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
44
44
  dict(path='../../omlish/lite/reflect.py', sha1='c4fec44bf144e9d93293c996af06f6c65fc5e63d'),
@@ -345,11 +345,11 @@ class Checks:
345
345
  return spec
346
346
 
347
347
  @ta.overload
348
- def isinstance(self, v: ta.Any, spec: ta.Type[T], msg: CheckMessage = None) -> T:
348
+ def isinstance(self, v: ta.Any, spec: ta.Type[T], msg: CheckMessage = None, /) -> T:
349
349
  ...
350
350
 
351
351
  @ta.overload
352
- def isinstance(self, v: ta.Any, spec: ta.Any, msg: CheckMessage = None) -> ta.Any:
352
+ def isinstance(self, v: ta.Any, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Any:
353
353
  ...
354
354
 
355
355
  def isinstance(self, v, spec, msg=None):
@@ -365,14 +365,14 @@ class Checks:
365
365
  return v
366
366
 
367
367
  @ta.overload
368
- def of_isinstance(self, spec: ta.Type[T], msg: CheckMessage = None) -> ta.Callable[[ta.Any], T]:
368
+ def of_isinstance(self, spec: ta.Type[T], msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], T]:
369
369
  ...
370
370
 
371
371
  @ta.overload
372
- def of_isinstance(self, spec: ta.Any, msg: CheckMessage = None) -> ta.Callable[[ta.Any], ta.Any]:
372
+ def of_isinstance(self, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], ta.Any]:
373
373
  ...
374
374
 
375
- def of_isinstance(self, spec, msg=None):
375
+ def of_isinstance(self, spec, msg=None, /):
376
376
  spec = self._unpack_isinstance_spec(spec)
377
377
 
378
378
  def inner(v):
@@ -380,7 +380,7 @@ class Checks:
380
380
 
381
381
  return inner
382
382
 
383
- def cast(self, v: ta.Any, cls: ta.Type[T], msg: CheckMessage = None) -> T:
383
+ def cast(self, v: ta.Any, cls: ta.Type[T], msg: CheckMessage = None, /) -> T:
384
384
  if not isinstance(v, cls):
385
385
  self._raise(
386
386
  TypeError,
@@ -391,13 +391,13 @@ class Checks:
391
391
 
392
392
  return v
393
393
 
394
- def of_cast(self, cls: ta.Type[T], msg: CheckMessage = None) -> ta.Callable[[T], T]:
394
+ def of_cast(self, cls: ta.Type[T], msg: CheckMessage = None, /) -> ta.Callable[[T], T]:
395
395
  def inner(v):
396
396
  return self.cast(v, cls, msg)
397
397
 
398
398
  return inner
399
399
 
400
- def not_isinstance(self, v: T, spec: ta.Any, msg: CheckMessage = None) -> T: # noqa
400
+ def not_isinstance(self, v: T, spec: ta.Any, msg: CheckMessage = None, /) -> T: # noqa
401
401
  if isinstance(v, self._unpack_isinstance_spec(spec)):
402
402
  self._raise(
403
403
  TypeError,
@@ -409,7 +409,7 @@ class Checks:
409
409
 
410
410
  return v
411
411
 
412
- def of_not_isinstance(self, spec: ta.Any, msg: CheckMessage = None) -> ta.Callable[[T], T]:
412
+ def of_not_isinstance(self, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Callable[[T], T]:
413
413
  spec = self._unpack_isinstance_spec(spec)
414
414
 
415
415
  def inner(v):
@@ -419,7 +419,7 @@ class Checks:
419
419
 
420
420
  ##
421
421
 
422
- def issubclass(self, v: ta.Type[T], spec: ta.Any, msg: CheckMessage = None) -> ta.Type[T]: # noqa
422
+ def issubclass(self, v: ta.Type[T], spec: ta.Any, msg: CheckMessage = None, /) -> ta.Type[T]: # noqa
423
423
  if not issubclass(v, spec):
424
424
  self._raise(
425
425
  TypeError,
@@ -431,7 +431,7 @@ class Checks:
431
431
 
432
432
  return v
433
433
 
434
- def not_issubclass(self, v: ta.Type[T], spec: ta.Any, msg: CheckMessage = None) -> ta.Type[T]:
434
+ def not_issubclass(self, v: ta.Type[T], spec: ta.Any, msg: CheckMessage = None, /) -> ta.Type[T]:
435
435
  if issubclass(v, spec):
436
436
  self._raise(
437
437
  TypeError,
@@ -443,7 +443,7 @@ class Checks:
443
443
 
444
444
  return v
445
445
 
446
- def not_issubclass_except_nameerror(self, v: ta.Type[T], spec: ta.Callable[[], type], msg: CheckMessage = None) -> ta.Type[T]: # noqa
446
+ def not_issubclass_except_nameerror(self, v: ta.Type[T], spec: ta.Callable[[], type], msg: CheckMessage = None, /) -> ta.Type[T]: # noqa
447
447
  try:
448
448
  c = spec()
449
449
  except NameError:
@@ -462,7 +462,7 @@ class Checks:
462
462
 
463
463
  #
464
464
 
465
- def in_(self, v: T, c: ta.Container[T], msg: CheckMessage = None) -> T:
465
+ def in_(self, v: T, c: ta.Container[T], msg: CheckMessage = None, /) -> T:
466
466
  if v not in c:
467
467
  self._raise(
468
468
  ValueError,
@@ -474,7 +474,7 @@ class Checks:
474
474
 
475
475
  return v
476
476
 
477
- def not_in(self, v: T, c: ta.Container[T], msg: CheckMessage = None) -> T:
477
+ def not_in(self, v: T, c: ta.Container[T], msg: CheckMessage = None, /) -> T:
478
478
  if v in c:
479
479
  self._raise(
480
480
  ValueError,
@@ -486,7 +486,7 @@ class Checks:
486
486
 
487
487
  return v
488
488
 
489
- def empty(self, v: SizedT, msg: CheckMessage = None) -> SizedT:
489
+ def empty(self, v: SizedT, msg: CheckMessage = None, /) -> SizedT:
490
490
  if len(v) != 0:
491
491
  self._raise(
492
492
  ValueError,
@@ -498,7 +498,7 @@ class Checks:
498
498
 
499
499
  return v
500
500
 
501
- def iterempty(self, v: ta.Iterable[T], msg: CheckMessage = None) -> ta.Iterable[T]:
501
+ def iterempty(self, v: ta.Iterable[T], msg: CheckMessage = None, /) -> ta.Iterable[T]:
502
502
  it = iter(v)
503
503
  try:
504
504
  next(it)
@@ -515,7 +515,7 @@ class Checks:
515
515
 
516
516
  return v
517
517
 
518
- def not_empty(self, v: SizedT, msg: CheckMessage = None) -> SizedT:
518
+ def not_empty(self, v: SizedT, msg: CheckMessage = None, /) -> SizedT:
519
519
  if len(v) == 0:
520
520
  self._raise(
521
521
  ValueError,
@@ -527,7 +527,7 @@ class Checks:
527
527
 
528
528
  return v
529
529
 
530
- def unique(self, it: ta.Iterable[T], msg: CheckMessage = None) -> ta.Iterable[T]:
530
+ def unique(self, it: ta.Iterable[T], msg: CheckMessage = None, /) -> ta.Iterable[T]:
531
531
  dupes = [e for e, c in collections.Counter(it).items() if c > 1]
532
532
  if dupes:
533
533
  self._raise(
@@ -539,7 +539,7 @@ class Checks:
539
539
 
540
540
  return it
541
541
 
542
- def single(self, obj: ta.Iterable[T], msg: CheckMessage = None) -> T:
542
+ def single(self, obj: ta.Iterable[T], msg: CheckMessage = None, /) -> T:
543
543
  try:
544
544
  [value] = obj
545
545
  except ValueError:
@@ -553,7 +553,7 @@ class Checks:
553
553
 
554
554
  return value
555
555
 
556
- def opt_single(self, obj: ta.Iterable[T], msg: CheckMessage = None) -> ta.Optional[T]:
556
+ def opt_single(self, obj: ta.Iterable[T], msg: CheckMessage = None, /) -> ta.Optional[T]:
557
557
  it = iter(obj)
558
558
  try:
559
559
  value = next(it)
@@ -575,7 +575,7 @@ class Checks:
575
575
 
576
576
  raise RuntimeError # noqa
577
577
 
578
- async def async_single(self, obj: ta.AsyncIterable[T], msg: CheckMessage = None) -> T:
578
+ async def async_single(self, obj: ta.AsyncIterable[T], msg: CheckMessage = None, /) -> T:
579
579
  ait = obj.__aiter__()
580
580
 
581
581
  try:
@@ -604,7 +604,7 @@ class Checks:
604
604
 
605
605
  raise RuntimeError # noqa
606
606
 
607
- async def async_opt_single(self, obj: ta.AsyncIterable[T], msg: CheckMessage = None) -> ta.Optional[T]:
607
+ async def async_opt_single(self, obj: ta.AsyncIterable[T], msg: CheckMessage = None, /) -> ta.Optional[T]:
608
608
  ait = obj.__aiter__()
609
609
 
610
610
  try:
@@ -634,7 +634,7 @@ class Checks:
634
634
 
635
635
  #
636
636
 
637
- def none(self, v: ta.Any, msg: CheckMessage = None) -> None:
637
+ def none(self, v: ta.Any, msg: CheckMessage = None, /) -> None:
638
638
  if v is not None:
639
639
  self._raise(
640
640
  ValueError,
@@ -644,7 +644,7 @@ class Checks:
644
644
  render_fmt='%s',
645
645
  )
646
646
 
647
- def not_none(self, v: ta.Optional[T], msg: CheckMessage = None) -> T:
647
+ def not_none(self, v: ta.Optional[T], msg: CheckMessage = None, /) -> T:
648
648
  if v is None:
649
649
  self._raise(
650
650
  ValueError,
@@ -658,7 +658,7 @@ class Checks:
658
658
 
659
659
  #
660
660
 
661
- def equal(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
661
+ def equal(self, v: T, o: ta.Any, msg: CheckMessage = None, /) -> T:
662
662
  if o != v:
663
663
  self._raise(
664
664
  ValueError,
@@ -670,7 +670,7 @@ class Checks:
670
670
 
671
671
  return v
672
672
 
673
- def not_equal(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
673
+ def not_equal(self, v: T, o: ta.Any, msg: CheckMessage = None, /) -> T:
674
674
  if o == v:
675
675
  self._raise(
676
676
  ValueError,
@@ -682,7 +682,7 @@ class Checks:
682
682
 
683
683
  return v
684
684
 
685
- def is_(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
685
+ def is_(self, v: T, o: ta.Any, msg: CheckMessage = None, /) -> T:
686
686
  if o is not v:
687
687
  self._raise(
688
688
  ValueError,
@@ -694,7 +694,7 @@ class Checks:
694
694
 
695
695
  return v
696
696
 
697
- def is_not(self, v: T, o: ta.Any, msg: CheckMessage = None) -> T:
697
+ def is_not(self, v: T, o: ta.Any, msg: CheckMessage = None, /) -> T:
698
698
  if o is v:
699
699
  self._raise(
700
700
  ValueError,
@@ -706,7 +706,7 @@ class Checks:
706
706
 
707
707
  return v
708
708
 
709
- def callable(self, v: T, msg: CheckMessage = None) -> T: # noqa
709
+ def callable(self, v: T, msg: CheckMessage = None, /) -> T: # noqa
710
710
  if not callable(v):
711
711
  self._raise(
712
712
  TypeError,
@@ -718,7 +718,7 @@ class Checks:
718
718
 
719
719
  return v
720
720
 
721
- def non_empty_str(self, v: ta.Optional[str], msg: CheckMessage = None) -> str:
721
+ def non_empty_str(self, v: ta.Optional[str], msg: CheckMessage = None, /) -> str:
722
722
  if not isinstance(v, str) or not v:
723
723
  self._raise(
724
724
  ValueError,
@@ -730,7 +730,7 @@ class Checks:
730
730
 
731
731
  return v
732
732
 
733
- def replacing(self, expected: ta.Any, old: ta.Any, new: T, msg: CheckMessage = None) -> T:
733
+ def replacing(self, expected: ta.Any, old: ta.Any, new: T, msg: CheckMessage = None, /) -> T:
734
734
  if old != expected:
735
735
  self._raise(
736
736
  ValueError,
@@ -742,7 +742,7 @@ class Checks:
742
742
 
743
743
  return new
744
744
 
745
- def replacing_none(self, old: ta.Any, new: T, msg: CheckMessage = None) -> T:
745
+ def replacing_none(self, old: ta.Any, new: T, msg: CheckMessage = None, /) -> T:
746
746
  if old is not None:
747
747
  self._raise(
748
748
  ValueError,
@@ -756,7 +756,7 @@ class Checks:
756
756
 
757
757
  #
758
758
 
759
- def arg(self, v: bool, msg: CheckMessage = None) -> None:
759
+ def arg(self, v: bool, msg: CheckMessage = None, /) -> None:
760
760
  if not v:
761
761
  self._raise(
762
762
  RuntimeError,
@@ -766,7 +766,7 @@ class Checks:
766
766
  render_fmt='%s',
767
767
  )
768
768
 
769
- def state(self, v: bool, msg: CheckMessage = None) -> None:
769
+ def state(self, v: bool, msg: CheckMessage = None, /) -> None:
770
770
  if not v:
771
771
  self._raise(
772
772
  RuntimeError,
@@ -0,0 +1,36 @@
1
+ base_image = 'ubuntu:24.04'
2
+
3
+ dep_sets = [
4
+ 'system',
5
+ 'python',
6
+ 'x11',
7
+ ]
8
+
9
+ jdks = [
10
+ 'zulu21-ca-jdk',
11
+ 'zulu25-ca-jdk',
12
+ ]
13
+
14
+ go_version = '1.26.0'
15
+
16
+ zig_version = '0.15.2'
17
+
18
+ nvm_versions = [
19
+ '20',
20
+ '22',
21
+ '25',
22
+ ]
23
+
24
+ pyenv_version_keys = [
25
+ '8',
26
+ '13',
27
+ '14',
28
+ ]
29
+
30
+ config_files = [
31
+ '.gdbinit',
32
+ '.tmux.conf',
33
+ '.vimrc',
34
+ ]
35
+
36
+ workdir = '/omlish'
@@ -0,0 +1,186 @@
1
+ """
2
+ FIXME:
3
+ - zipsafe / resourcey, but still hard refs .versions file in repo root lol
4
+
5
+ TODO:
6
+ - per-feature config, obv
7
+
8
+ ====
9
+
10
+ docker run --rm -it "$(docker build -q -f x/dockerdev/Dockerfile .)" bash
11
+ """
12
+ import io
13
+ import tomllib
14
+ import typing as ta
15
+
16
+ from omlish import dataclasses as dc
17
+ from omlish import lang
18
+ from omlish import marshal as msh
19
+
20
+ from .content import LazyContent
21
+ from .content import Resource
22
+ from .helpers import APT_CACHE_MOUNTS
23
+ from .helpers import fragment_section
24
+ from .helpers import read_versions_file_versions
25
+ from .helpers import render_apt_install_dep_sets
26
+ from .ops import Cmd
27
+ from .ops import Entrypoint
28
+ from .ops import Env
29
+ from .ops import From
30
+ from .ops import Op
31
+ from .ops import Run
32
+ from .ops import Section
33
+ from .ops import Workdir
34
+ from .ops import Write
35
+ from .rendering import render_op
36
+
37
+
38
+ ##
39
+
40
+
41
+ @dc.dataclass(frozen=True)
42
+ class Config:
43
+ base_image: str
44
+
45
+ workdir: str | None = None
46
+
47
+ _: dc.KW_ONLY
48
+
49
+ dep_sets: ta.Sequence[str] | None = None
50
+
51
+ jdks: ta.Sequence[str] | None = None
52
+
53
+ go_version: str | None = None
54
+
55
+ zig_version: str | None = None
56
+
57
+ nvm_versions: ta.Sequence[str] | None = None
58
+
59
+ pyenv_version_keys: ta.Sequence[str] | None = None
60
+
61
+ config_files: ta.Sequence[str] | None = None
62
+
63
+
64
+ ##
65
+
66
+
67
+ def gen_ops(cfg: Config) -> ta.Sequence[Op]:
68
+ ops: list[Op] = [
69
+ From(cfg.base_image),
70
+ ]
71
+
72
+ # ops.append(Section('timestamp', [
73
+ # Copy(src='docker/.timestamp', dst='/'),
74
+ # ]))
75
+
76
+ ops.append(Section('locale', [
77
+ Env([
78
+ ('LANG', 'en_US.UTF-8'),
79
+ ('LANGUAGE', 'en_US:en'),
80
+ ('LC_ALL', 'en_US.UTF-8'),
81
+ ]),
82
+ ]))
83
+
84
+ ops.append(Section('deps', [
85
+ Run(
86
+ [
87
+ Resource('fragments/apt.sh'),
88
+ LazyContent(lambda: render_apt_install_dep_sets(*(cfg.dep_sets or []))),
89
+ ],
90
+ cache_mounts=APT_CACHE_MOUNTS,
91
+ ),
92
+ ]))
93
+
94
+ ops.append(fragment_section(
95
+ 'firefox',
96
+ cache_mounts=APT_CACHE_MOUNTS,
97
+ ))
98
+
99
+ ops.append(fragment_section(
100
+ 'docker',
101
+ cache_mounts=APT_CACHE_MOUNTS,
102
+ ))
103
+
104
+ if cfg.jdks:
105
+ ops.append(fragment_section(
106
+ 'jdk',
107
+ static_env={'JDKS': cfg.jdks},
108
+ cache_mounts=APT_CACHE_MOUNTS,
109
+ ))
110
+
111
+ ops.append(fragment_section('rust'))
112
+
113
+ if cfg.go_version is not None:
114
+ ops.append(fragment_section(
115
+ 'go',
116
+ static_env={'GO_VERSION': cfg.go_version},
117
+ ))
118
+
119
+ if cfg.zig_version is not None:
120
+ ops.append(fragment_section(
121
+ 'zig',
122
+ static_env={'ZIG_VERSION': cfg.zig_version},
123
+ ))
124
+
125
+ ops.append(fragment_section('vcpkg'))
126
+
127
+ if cfg.nvm_versions:
128
+ ops.append(fragment_section(
129
+ 'nvm',
130
+ static_env={'NVM_VERSIONS': cfg.nvm_versions},
131
+ ))
132
+
133
+ if cfg.pyenv_version_keys:
134
+ ops.append(fragment_section(
135
+ 'pyenv',
136
+ static_env=lambda: {
137
+ 'PYENV_VERSIONS': list(read_versions_file_versions(*[
138
+ f'PYTHON_{k}' for k in cfg.pyenv_version_keys
139
+ ]).values()),
140
+ },
141
+ cache_mounts=['/root/.pyenv_cache'],
142
+ ))
143
+
144
+ ops.append(fragment_section('sshd'))
145
+
146
+ # ops.append(Section('x11', [
147
+ # Run('touch /root/.Xauthority'),
148
+ # Write('/root/xu', Resource('xu')),
149
+ # ]))
150
+
151
+ if cfg.config_files:
152
+ ops.append(Section('configs', [
153
+ Write(f'/root/{n}', Resource(f'configs/{n}'))
154
+ for n in cfg.config_files
155
+ ]))
156
+
157
+ ops.append(Section('entrypoint', [
158
+ *([Workdir(cfg.workdir)] if cfg.workdir is not None else []),
159
+ Entrypoint(['dumb-init', '--']),
160
+ Cmd(['sh', '-c', 'echo "Ready" && sleep infinity']),
161
+ ]))
162
+
163
+ return ops
164
+
165
+
166
+ ##
167
+
168
+
169
+ def _main() -> None:
170
+ cfg_src = lang.get_relative_resources(globals=globals())['config.toml'].read_text()
171
+ cfg_dct = tomllib.loads(cfg_src)
172
+ cfg = msh.unmarshal(cfg_dct, Config)
173
+
174
+ ops = gen_ops(cfg)
175
+
176
+ out = io.StringIO()
177
+ for i, section in enumerate(ops):
178
+ if i:
179
+ out.write('\n\n\n')
180
+ out.write(render_op(section))
181
+
182
+ print(out.getvalue())
183
+
184
+
185
+ if __name__ == '__main__':
186
+ _main()
@@ -1,3 +1,10 @@
1
1
  set -ex ;
2
2
 
3
3
  curl --proto '=https' --tlsv1.2 -sSf 'https://sh.rustup.rs' | sh -s -- -y ;
4
+
5
+ $HOME/.cargo/bin/cargo install \
6
+ \
7
+ cargo-edit \
8
+ rust-script \
9
+ \
10
+ ;