omdev 0.0.12__tar.gz → 0.0.14__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 (483) hide show
  1. {omdev-0.0.12/omdev.egg-info → omdev-0.0.14}/PKG-INFO +6 -6
  2. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/codegen.py +6 -1
  3. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/config.py +6 -2
  4. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/gen.py +46 -4
  5. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/ops.py +5 -0
  6. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/rendering.py +53 -25
  7. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/depsets/system.toml +4 -0
  8. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/apt.sh +0 -2
  9. omdev-0.0.14/omdev/dockerdev/resources/fragments/chgrp.sh +3 -0
  10. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/docker.sh +0 -2
  11. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/firefox.sh +0 -2
  12. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/go.sh +0 -2
  13. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/jdk.sh +0 -2
  14. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/man.sh +0 -2
  15. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/nvm.sh +0 -2
  16. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -2
  17. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -2
  18. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/rust.sh +0 -2
  19. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/sshd.sh +0 -2
  20. omdev-0.0.14/omdev/dockerdev/resources/fragments/user.sh +14 -0
  21. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/uv.sh +0 -2
  22. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -2
  23. omdev-0.0.14/omdev/dockerdev/resources/fragments/workdir.sh +3 -0
  24. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/fragments/zig.sh +0 -2
  25. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/__init__.py +6 -0
  26. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/actionmenu.py +2 -0
  27. omdev-0.0.14/omdev/tui/textual/dom2.py +30 -0
  28. {omdev-0.0.12 → omdev-0.0.14/omdev.egg-info}/PKG-INFO +6 -6
  29. {omdev-0.0.12 → omdev-0.0.14}/omdev.egg-info/SOURCES.txt +3 -0
  30. {omdev-0.0.12 → omdev-0.0.14}/omdev.egg-info/requires.txt +5 -5
  31. {omdev-0.0.12 → omdev-0.0.14}/pyproject.toml +6 -6
  32. omdev-0.0.12/omdev/dockerdev/resources/fragments/user.sh +0 -6
  33. {omdev-0.0.12 → omdev-0.0.14}/LICENSE +0 -0
  34. {omdev-0.0.12 → omdev-0.0.14}/MANIFEST.in +0 -0
  35. {omdev-0.0.12 → omdev-0.0.14}/README.md +0 -0
  36. {omdev-0.0.12 → omdev-0.0.14}/omdev/.omlish-manifests.json +0 -0
  37. {omdev-0.0.12 → omdev-0.0.14}/omdev/README.md +0 -0
  38. {omdev-0.0.12 → omdev-0.0.14}/omdev/__about__.py +0 -0
  39. {omdev-0.0.12 → omdev-0.0.14}/omdev/__init__.py +0 -0
  40. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/__init__.py +0 -0
  41. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/__main__.py +0 -0
  42. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/cli/__init__.py +0 -0
  43. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/cli/main.py +0 -0
  44. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/__init__.py +0 -0
  45. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/gen.py +0 -0
  46. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/imports.py +0 -0
  47. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/manifests.py +0 -0
  48. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/resources.py +0 -0
  49. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/srcfiles.py +0 -0
  50. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/strip.py +0 -0
  51. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/types.py +0 -0
  52. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/gen/typing.py +0 -0
  53. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/info.py +0 -0
  54. {omdev-0.0.12 → omdev-0.0.14}/omdev/amalg/sources.py +0 -0
  55. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/__init__.py +0 -0
  56. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/__init__.py +0 -0
  57. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/cache.py +0 -0
  58. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/contexts.py +0 -0
  59. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/currents.py +0 -0
  60. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/fns.py +0 -0
  61. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/resolvers.py +0 -0
  62. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/storage.py +0 -0
  63. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/compute/types.py +0 -0
  64. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/__init__.py +0 -0
  65. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/actions.py +0 -0
  66. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/cache.py +0 -0
  67. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/consts.py +0 -0
  68. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/defaults.py +0 -0
  69. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/manifests.py +0 -0
  70. {omdev-0.0.12 → omdev-0.0.14}/omdev/cache/data/specs.py +0 -0
  71. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/__init__.py +0 -0
  72. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/darwin/__init__.py +0 -0
  73. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/darwin/aps.py +0 -0
  74. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/darwin/ax.py +0 -0
  75. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/darwin/cf.py +0 -0
  76. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/darwin/cg.py +0 -0
  77. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/linux/__init__.py +0 -0
  78. {omdev-0.0.12 → omdev-0.0.14}/omdev/capi/linux/x11.py +0 -0
  79. {omdev-0.0.12 → omdev-0.0.14}/omdev/cc/__init__.py +0 -0
  80. {omdev-0.0.12 → omdev-0.0.14}/omdev/cc/__main__.py +0 -0
  81. {omdev-0.0.12 → omdev-0.0.14}/omdev/cc/cdeps.py +0 -0
  82. {omdev-0.0.12 → omdev-0.0.14}/omdev/cc/cdeps.toml +0 -0
  83. {omdev-0.0.12 → omdev-0.0.14}/omdev/cc/cli.py +0 -0
  84. {omdev-0.0.12 → omdev-0.0.14}/omdev/cc/srclangs.py +0 -0
  85. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/__init__.py +0 -0
  86. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_boilerplate.cc +0 -0
  87. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/LICENSE +0 -0
  88. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/__init__.py +0 -0
  89. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/build_ext.py +0 -0
  90. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  91. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  92. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/compilers/options.py +0 -0
  93. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  94. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/dir_util.py +0 -0
  95. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/errors.py +0 -0
  96. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/extension.py +0 -0
  97. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/file_util.py +0 -0
  98. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/modified.py +0 -0
  99. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/spawn.py +0 -0
  100. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/sysconfig.py +0 -0
  101. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/util.py +0 -0
  102. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/_distutils/version.py +0 -0
  103. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/build.py +0 -0
  104. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/cmake.py +0 -0
  105. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/importhook.py +0 -0
  106. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/magic.py +0 -0
  107. {omdev-0.0.12 → omdev-0.0.14}/omdev/cexts/scan.py +0 -0
  108. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/__init__.py +0 -0
  109. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/__main__.py +0 -0
  110. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/cache.py +0 -0
  111. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/ci.py +0 -0
  112. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/cli.py +0 -0
  113. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/compose.py +0 -0
  114. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/consts.py +0 -0
  115. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/__init__.py +0 -0
  116. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/buildcaching.py +0 -0
  117. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/cache.py +0 -0
  118. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  119. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/cacheserved/cache.py +0 -0
  120. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  121. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/cmds.py +0 -0
  122. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/dataserver.py +0 -0
  123. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/imagepulling.py +0 -0
  124. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/inject.py +0 -0
  125. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/packing.py +0 -0
  126. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/repositories.py +0 -0
  127. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/docker/utils.py +0 -0
  128. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/__init__.py +0 -0
  129. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/__init__.py +0 -0
  130. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/clients.py +0 -0
  131. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v1/__init__.py +0 -0
  132. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v1/api.py +0 -0
  133. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v1/client.py +0 -0
  134. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v2/__init__.py +0 -0
  135. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v2/api.py +0 -0
  136. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v2/azure.py +0 -0
  137. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/api/v2/client.py +0 -0
  138. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/bootstrap.py +0 -0
  139. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/cache.py +0 -0
  140. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/cli.py +0 -0
  141. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/env.py +0 -0
  142. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/github/inject.py +0 -0
  143. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/inject.py +0 -0
  144. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/requirements.py +0 -0
  145. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/shell.py +0 -0
  146. {omdev-0.0.12 → omdev-0.0.14}/omdev/ci/utils.py +0 -0
  147. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/__init__.py +0 -0
  148. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/__main__.py +0 -0
  149. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/_pathhack.py +0 -0
  150. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/clicli.py +0 -0
  151. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/install.py +0 -0
  152. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/main.py +0 -0
  153. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/managers.py +0 -0
  154. {omdev-0.0.12 → omdev-0.0.14}/omdev/cli/types.py +0 -0
  155. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/__init__.py +0 -0
  156. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/capi/__init__.py +0 -0
  157. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/capi/darwin_cf.py +0 -0
  158. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/capi/linux_x11.py +0 -0
  159. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/commands.py +0 -0
  160. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/platform.py +0 -0
  161. {omdev-0.0.12 → omdev-0.0.14}/omdev/clipboard/types.py +0 -0
  162. {omdev-0.0.12 → omdev-0.0.14}/omdev/cmake.py +0 -0
  163. {omdev-0.0.12 → omdev-0.0.14}/omdev/cmdlog/__init__.py +0 -0
  164. {omdev-0.0.12 → omdev-0.0.14}/omdev/cmdlog/__main__.py +0 -0
  165. {omdev-0.0.12 → omdev-0.0.14}/omdev/cmdlog/_cmdlog.py +0 -0
  166. {omdev-0.0.12 → omdev-0.0.14}/omdev/cmdlog/cli.py +0 -0
  167. {omdev-0.0.12 → omdev-0.0.14}/omdev/cmdlog/cmdlog.py +0 -0
  168. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/__init__.py +0 -0
  169. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/__main__.py +0 -0
  170. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/_dumping.py +0 -0
  171. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/_template.py +0 -0
  172. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/cli.py +0 -0
  173. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataclasses/dumping.py +0 -0
  174. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataserver/__init__.py +0 -0
  175. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataserver/handlers.py +0 -0
  176. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataserver/http.py +0 -0
  177. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataserver/routes.py +0 -0
  178. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataserver/server.py +0 -0
  179. {omdev-0.0.12 → omdev-0.0.14}/omdev/dataserver/targets.py +0 -0
  180. {omdev-0.0.12 → omdev-0.0.14}/omdev/diffs/__init__.py +0 -0
  181. {omdev-0.0.12 → omdev-0.0.14}/omdev/diffs/__main__.py +0 -0
  182. {omdev-0.0.12 → omdev-0.0.14}/omdev/diffs/cli.py +0 -0
  183. {omdev-0.0.12 → omdev-0.0.14}/omdev/diffs/parsing.py +0 -0
  184. {omdev-0.0.12 → omdev-0.0.14}/omdev/diffs/rendering.py +0 -0
  185. {omdev-0.0.12 → omdev-0.0.14}/omdev/diffs/types.py +0 -0
  186. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/__init__.py +0 -0
  187. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/__main__.py +0 -0
  188. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/cli.py +0 -0
  189. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/config.toml +0 -0
  190. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/content.py +0 -0
  191. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/helpers.py +0 -0
  192. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/.python-versions.json +0 -0
  193. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  194. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  195. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  196. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  197. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  198. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  199. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  200. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  201. {omdev-0.0.12 → omdev-0.0.14}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  202. {omdev-0.0.12 → omdev-0.0.14}/omdev/git/__init__.py +0 -0
  203. {omdev-0.0.12 → omdev-0.0.14}/omdev/git/magic.py +0 -0
  204. {omdev-0.0.12 → omdev-0.0.14}/omdev/git/revisions.py +0 -0
  205. {omdev-0.0.12 → omdev-0.0.14}/omdev/git/shallow.py +0 -0
  206. {omdev-0.0.12 → omdev-0.0.14}/omdev/git/status.py +0 -0
  207. {omdev-0.0.12 → omdev-0.0.14}/omdev/home/__init__.py +0 -0
  208. {omdev-0.0.12 → omdev-0.0.14}/omdev/home/paths.py +0 -0
  209. {omdev-0.0.12 → omdev-0.0.14}/omdev/home/secrets.py +0 -0
  210. {omdev-0.0.12 → omdev-0.0.14}/omdev/home/shadow.py +0 -0
  211. {omdev-0.0.12 → omdev-0.0.14}/omdev/imgur.py +0 -0
  212. {omdev-0.0.12 → omdev-0.0.14}/omdev/intellij/__init__.py +0 -0
  213. {omdev-0.0.12 → omdev-0.0.14}/omdev/intellij/cli.py +0 -0
  214. {omdev-0.0.12 → omdev-0.0.14}/omdev/intellij/ides.py +0 -0
  215. {omdev-0.0.12 → omdev-0.0.14}/omdev/intellij/open.py +0 -0
  216. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/__init__.py +0 -0
  217. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/__main__.py +0 -0
  218. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/cli.py +0 -0
  219. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/default.py +0 -0
  220. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/inject.py +0 -0
  221. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/inspect.py +0 -0
  222. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/providers/__init__.py +0 -0
  223. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/providers/base.py +0 -0
  224. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/providers/inject.py +0 -0
  225. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/providers/running.py +0 -0
  226. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/providers/standalone.py +0 -0
  227. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/providers/system.py +0 -0
  228. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/pyenv/__init__.py +0 -0
  229. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/pyenv/inject.py +0 -0
  230. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/pyenv/install.py +0 -0
  231. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/pyenv/provider.py +0 -0
  232. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/pyenv/pyenv.py +0 -0
  233. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/resolvers.py +0 -0
  234. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/types.py +0 -0
  235. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/uv/__init__.py +0 -0
  236. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/uv/inject.py +0 -0
  237. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/uv/provider.py +0 -0
  238. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/uv/uv.py +0 -0
  239. {omdev-0.0.12 → omdev-0.0.14}/omdev/interp/venvs.py +0 -0
  240. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/__init__.py +0 -0
  241. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/messages/__init__.py +0 -0
  242. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/messages/base.py +0 -0
  243. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/messages/formats.py +0 -0
  244. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/messages/messages.py +0 -0
  245. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/messages/parsing.py +0 -0
  246. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/numerics/__init__.py +0 -0
  247. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/numerics/formats.py +0 -0
  248. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/numerics/numerics.py +0 -0
  249. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/numerics/types.py +0 -0
  250. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/LICENSE +0 -0
  251. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/__init__.py +0 -0
  252. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/consts.py +0 -0
  253. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/errors.py +0 -0
  254. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/message.py +0 -0
  255. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/nuh.py +0 -0
  256. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/parsing.py +0 -0
  257. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/rendering.py +0 -0
  258. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/tags.py +0 -0
  259. {omdev-0.0.12 → omdev-0.0.14}/omdev/irc/protocol/utils.py +0 -0
  260. {omdev-0.0.12 → omdev-0.0.14}/omdev/java/__init__.py +0 -0
  261. {omdev-0.0.12 → omdev-0.0.14}/omdev/java/__main__.py +0 -0
  262. {omdev-0.0.12 → omdev-0.0.14}/omdev/java/cli.py +0 -0
  263. {omdev-0.0.12 → omdev-0.0.14}/omdev/java/pomgen.py +0 -0
  264. {omdev-0.0.12 → omdev-0.0.14}/omdev/java/utils.py +0 -0
  265. {omdev-0.0.12 → omdev-0.0.14}/omdev/java/xml.py +0 -0
  266. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/__init__.py +0 -0
  267. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/__main__.py +0 -0
  268. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/cli.py +0 -0
  269. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/find.py +0 -0
  270. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/magic.py +0 -0
  271. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/prepare.py +0 -0
  272. {omdev-0.0.12 → omdev-0.0.14}/omdev/magic/styles.py +0 -0
  273. {omdev-0.0.12 → omdev-0.0.14}/omdev/manifests/__init__.py +0 -0
  274. {omdev-0.0.12 → omdev-0.0.14}/omdev/manifests/__main__.py +0 -0
  275. {omdev-0.0.12 → omdev-0.0.14}/omdev/manifests/_dumping.py +0 -0
  276. {omdev-0.0.12 → omdev-0.0.14}/omdev/manifests/building.py +0 -0
  277. {omdev-0.0.12 → omdev-0.0.14}/omdev/manifests/dumping.py +0 -0
  278. {omdev-0.0.12 → omdev-0.0.14}/omdev/manifests/main.py +0 -0
  279. {omdev-0.0.12 → omdev-0.0.14}/omdev/markdown/__init__.py +0 -0
  280. {omdev-0.0.12 → omdev-0.0.14}/omdev/markdown/incparse.py +0 -0
  281. {omdev-0.0.12 → omdev-0.0.14}/omdev/markdown/tokens.py +0 -0
  282. {omdev-0.0.12 → omdev-0.0.14}/omdev/mypy/__init__.py +0 -0
  283. {omdev-0.0.12 → omdev-0.0.14}/omdev/mypy/debug.py +0 -0
  284. {omdev-0.0.12 → omdev-0.0.14}/omdev/mypy/report.py +0 -0
  285. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/__init__.py +0 -0
  286. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/building.py +0 -0
  287. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/compression.py +0 -0
  288. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/data.py +0 -0
  289. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/datarefs.py +0 -0
  290. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/dataserver.py +0 -0
  291. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/loading.py +0 -0
  292. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/media.py +0 -0
  293. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/pack/__init__.py +0 -0
  294. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/pack/packing.py +0 -0
  295. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/pack/repositories.py +0 -0
  296. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/pack/unpacking.py +0 -0
  297. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/repositories.py +0 -0
  298. {omdev-0.0.12 → omdev-0.0.14}/omdev/oci/tars.py +0 -0
  299. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/__init__.py +0 -0
  300. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/marshal.py +0 -0
  301. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/names.py +0 -0
  302. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/requires.py +0 -0
  303. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/revisions.py +0 -0
  304. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/specifiers.py +0 -0
  305. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/versions.py +0 -0
  306. {omdev-0.0.12 → omdev-0.0.14}/omdev/packaging/wheelfile.py +0 -0
  307. {omdev-0.0.12 → omdev-0.0.14}/omdev/pip.py +0 -0
  308. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/__init__.py +0 -0
  309. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/__main__.py +0 -0
  310. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/base.py +0 -0
  311. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/blanklines.py +0 -0
  312. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/caches.py +0 -0
  313. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/git.py +0 -0
  314. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/imports.py +0 -0
  315. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/lite.py +0 -0
  316. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/main.py +0 -0
  317. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/manifests.py +0 -0
  318. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/scripts.py +0 -0
  319. {omdev-0.0.12 → omdev-0.0.14}/omdev/precheck/unicode.py +0 -0
  320. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/__init__.py +0 -0
  321. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/asts/__init__.py +0 -0
  322. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/asts/parents.py +0 -0
  323. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/asts/toplevel.py +0 -0
  324. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/asts/visitors.py +0 -0
  325. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/attrdocs.py +0 -0
  326. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/bracepy.py +0 -0
  327. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/classdot.py +0 -0
  328. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/LICENSE +0 -0
  329. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/__init__.py +0 -0
  330. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/attrdoc.py +0 -0
  331. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/common.py +0 -0
  332. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/epydoc.py +0 -0
  333. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/google.py +0 -0
  334. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/numpydoc.py +0 -0
  335. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/parser.py +0 -0
  336. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/docstrings/rest.py +0 -0
  337. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/findimports.py +0 -0
  338. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/reprs.py +0 -0
  339. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/scripts/__init__.py +0 -0
  340. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/scripts/bumpversion.py +0 -0
  341. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/scripts/execstat.py +0 -0
  342. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/scripts/importtrace.py +0 -0
  343. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/srcheaders.py +0 -0
  344. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tokens/__init__.py +0 -0
  345. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tokens/all.py +0 -0
  346. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tokens/tokenizert.py +0 -0
  347. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tokens/utils.py +0 -0
  348. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tools/__init__.py +0 -0
  349. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tools/importscan.py +0 -0
  350. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tools/mkrelimp.py +0 -0
  351. {omdev-0.0.12 → omdev-0.0.14}/omdev/py/tools/pipdepup.py +0 -0
  352. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/__init__.py +0 -0
  353. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/__main__.py +0 -0
  354. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/cli.py +0 -0
  355. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/configs.py +0 -0
  356. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/inject.py +0 -0
  357. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/pkg.py +0 -0
  358. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/reqs.py +0 -0
  359. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/resources/dockerdev.sh +0 -0
  360. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/resources/python.sh +0 -0
  361. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/tools/__init__.py +0 -0
  362. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/tools/aboutdeps.py +0 -0
  363. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/tools/buildrs.py +0 -0
  364. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/tools/pyversions.py +0 -0
  365. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/venvs.py +0 -0
  366. {omdev-0.0.12 → omdev-0.0.14}/omdev/pyproject/versions.py +0 -0
  367. {omdev-0.0.12 → omdev-0.0.14}/omdev/rs/__init__.py +0 -0
  368. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/__init__.py +0 -0
  369. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/ci.py +0 -0
  370. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/interp.py +0 -0
  371. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/__init__.py +0 -0
  372. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/formats/__init__.py +0 -0
  373. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/formats/goyaml.py +0 -0
  374. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/inject.py +0 -0
  375. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/io/__init__.py +0 -0
  376. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/io/pipelines.py +0 -0
  377. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/io/streams.py +0 -0
  378. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/logs.py +0 -0
  379. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/lib/marshal.py +0 -0
  380. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/pyproject.py +0 -0
  381. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/slowcat.py +0 -0
  382. {omdev-0.0.12 → omdev-0.0.14}/omdev/scripts/tmpexec.py +0 -0
  383. {omdev-0.0.12 → omdev-0.0.14}/omdev/supervisor/__init__.py +0 -0
  384. {omdev-0.0.12 → omdev-0.0.14}/omdev/supervisor/__main__.py +0 -0
  385. {omdev-0.0.12 → omdev-0.0.14}/omdev/supervisor/cli.py +0 -0
  386. {omdev-0.0.12 → omdev-0.0.14}/omdev/tagstrings.py +0 -0
  387. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/__init__.py +0 -0
  388. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/cloc.py +0 -0
  389. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/diff.py +0 -0
  390. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/doc.py +0 -0
  391. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/docker.py +0 -0
  392. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/git/__init__.py +0 -0
  393. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/git/__main__.py +0 -0
  394. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/git/cli.py +0 -0
  395. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/git/cloning.py +0 -0
  396. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/git/consts.py +0 -0
  397. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/git/messages.py +0 -0
  398. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/__init__.py +0 -0
  399. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/__main__.py +0 -0
  400. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/cli.py +0 -0
  401. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/formats.py +0 -0
  402. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/io.py +0 -0
  403. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/parsing.py +0 -0
  404. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/processing.py +0 -0
  405. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/json/rendering.py +0 -0
  406. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/jsonview/__init__.py +0 -0
  407. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/jsonview/__main__.py +0 -0
  408. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/jsonview/cli.py +0 -0
  409. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  410. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  411. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  412. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/linehisto.py +0 -0
  413. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/mkenv.py +0 -0
  414. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/notebook.py +0 -0
  415. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/pawk/README.md +0 -0
  416. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/pawk/__init__.py +0 -0
  417. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/pawk/__main__.py +0 -0
  418. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/pawk/pawk.py +0 -0
  419. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/pip.py +0 -0
  420. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/prof.py +0 -0
  421. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/qr.py +0 -0
  422. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/shadow.py +0 -0
  423. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/shell.py +0 -0
  424. {omdev-0.0.12 → omdev-0.0.14}/omdev/tools/sqlrepl.py +0 -0
  425. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/__init__.py +0 -0
  426. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/__init__.py +0 -0
  427. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/edit/__init__.py +0 -0
  428. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/edit/main.py +0 -0
  429. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/irc/__init__.py +0 -0
  430. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/irc/__main__.py +0 -0
  431. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/irc/app.py +0 -0
  432. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/irc/client.py +0 -0
  433. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/irc/commands.py +0 -0
  434. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/irc/main.py +0 -0
  435. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/LICENSE +0 -0
  436. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/__init__.py +0 -0
  437. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/__main__.py +0 -0
  438. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/app.py +0 -0
  439. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/cli.py +0 -0
  440. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  441. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/utils.py +0 -0
  442. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/jtree/widgets.py +0 -0
  443. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/markdown/__init__.py +0 -0
  444. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/markdown/__main__.py +0 -0
  445. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/apps/markdown/cli.py +0 -0
  446. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/__init__.py +0 -0
  447. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/console2.py +0 -0
  448. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/LICENSE +0 -0
  449. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/__init__.py +0 -0
  450. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/__main__.py +0 -0
  451. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/_compat.py +0 -0
  452. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/cli.py +0 -0
  453. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/renderables.py +0 -0
  454. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/rendering.py +0 -0
  455. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/diff/underlinebar.py +0 -0
  456. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/markdown2.py +0 -0
  457. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/textual/__init__.py +0 -0
  458. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/textual/dark.py +0 -0
  459. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/textual/dump.py +0 -0
  460. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/textual/themes.py +0 -0
  461. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/rich/trirule.py +0 -0
  462. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/app2.py +0 -0
  463. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  464. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  465. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/autocomplete/matching.py +0 -0
  466. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/autocomplete/paths.py +0 -0
  467. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/autocomplete/widget.py +0 -0
  468. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/binding2.py +0 -0
  469. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/clipboard.py +0 -0
  470. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/debug/__init__.py +0 -0
  471. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/debug/dominfo.py +0 -0
  472. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/debug/screen.py +0 -0
  473. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/devtools.py +0 -0
  474. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/drivers2.py +0 -0
  475. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/logging2.py +0 -0
  476. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/render2.py +0 -0
  477. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/screen2.py +0 -0
  478. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/types.py +0 -0
  479. {omdev-0.0.12 → omdev-0.0.14}/omdev/tui/textual/widgets2.py +0 -0
  480. {omdev-0.0.12 → omdev-0.0.14}/omdev.egg-info/dependency_links.txt +0 -0
  481. {omdev-0.0.12 → omdev-0.0.14}/omdev.egg-info/entry_points.txt +0 -0
  482. {omdev-0.0.12 → omdev-0.0.14}/omdev.egg-info/top_level.txt +0 -0
  483. {omdev-0.0.12 → omdev-0.0.14}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.12
3
+ Version: 0.0.14
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,10 +14,10 @@ Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.12
17
+ Requires-Dist: omlish==0.0.14
18
18
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.12; extra == "all"
20
- Requires-Dist: ommlds==0.0.12; extra == "all"
19
+ Requires-Dist: ominfra==0.0.14; extra == "all"
20
+ Requires-Dist: ommlds==0.0.14; extra == "all"
21
21
  Requires-Dist: black~=26.3; extra == "all"
22
22
  Requires-Dist: pycparser~=3.0; extra == "all"
23
23
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -33,9 +33,9 @@ Requires-Dist: textual~=8.2; extra == "all"
33
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
34
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
35
  Provides-Extra: ominfra
36
- Requires-Dist: ominfra==0.0.12; extra == "ominfra"
36
+ Requires-Dist: ominfra==0.0.14; extra == "ominfra"
37
37
  Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.12; extra == "ommlds"
38
+ Requires-Dist: ommlds==0.0.14; extra == "ommlds"
39
39
  Provides-Extra: black
40
40
  Requires-Dist: black~=26.3; extra == "black"
41
41
  Provides-Extra: c
@@ -266,7 +266,12 @@ class DataclassCodeGen:
266
266
  continue
267
267
 
268
268
  cls_name_tup = (x.cls_module, x.cls_qualname)
269
- check.not_in(cls_name_tup, seen_cls_name_tups)
269
+ check.not_in(
270
+ cls_name_tup,
271
+ seen_cls_name_tups,
272
+ f'Class {cls_name_tup!r} has already been seen - this is usually caused by the module failing to '
273
+ f'successfully import (and trying again) - ensure the module imports successfully.',
274
+ )
270
275
  seen_cls_name_tups.add(cls_name_tup)
271
276
 
272
277
  try:
@@ -6,13 +6,17 @@ from omlish import dataclasses as dc
6
6
  ##
7
7
 
8
8
 
9
+ DEFAULT_UID = 4317
10
+ DEFAULT_GID = DEFAULT_UID
11
+
12
+
9
13
  @dc.dataclass(frozen=True)
10
14
  class Config:
11
15
  base_image: str
12
16
 
13
17
  user: str | None = None
14
- uid: int = 2000
15
- gid: int = 2000
18
+ uid: int = DEFAULT_UID
19
+ gid: int = DEFAULT_GID
16
20
 
17
21
  workdir: str | None = None
18
22
 
@@ -4,6 +4,7 @@ TODO:
4
4
  - install pnpm
5
5
  """
6
6
  import io
7
+ import re
7
8
  import typing as ta
8
9
 
9
10
  from omlish import lang
@@ -26,6 +27,7 @@ from .ops import Section
26
27
  from .ops import User
27
28
  from .ops import Workdir
28
29
  from .ops import Write
30
+ from .rendering import RenderContext
29
31
  from .rendering import render_op
30
32
 
31
33
 
@@ -70,9 +72,9 @@ def gen_ops(cfg: Config) -> ta.Sequence[Op]:
70
72
  WithStaticEnv(
71
73
  Resource('fragments/user.sh'),
72
74
  {
73
- 'NEWUSER': cfg.user,
74
- 'NEWUID': str(cfg.uid),
75
- 'NEWGID': str(cfg.gid),
75
+ 'NEW_USER': cfg.user,
76
+ 'NEW_UID': str(cfg.uid),
77
+ 'NEW_GID': str(cfg.gid),
76
78
  },
77
79
  ),
78
80
  ),
@@ -136,6 +138,27 @@ def gen_ops(cfg: Config) -> ta.Sequence[Op]:
136
138
  cache_mount_args=[f'uid={cfg.uid}', f'gid={cfg.gid}'],
137
139
  ))
138
140
 
141
+ ##
142
+ # ownership
143
+
144
+ if cfg.workdir is not None:
145
+ ops.append(fragment_section(
146
+ 'workdir',
147
+ static_env={
148
+ 'WORKDIR': cfg.workdir,
149
+ },
150
+ ))
151
+
152
+ ops.append(fragment_section(
153
+ 'chgrp',
154
+ static_env={
155
+ 'CHGRP_ROOTS': [
156
+ home,
157
+ *([cfg.workdir] if cfg.workdir is not None else []),
158
+ ],
159
+ },
160
+ ))
161
+
139
162
  ##
140
163
  # config
141
164
 
@@ -167,13 +190,32 @@ def gen_ops(cfg: Config) -> ta.Sequence[Op]:
167
190
  return ops
168
191
 
169
192
 
193
+ ##
194
+
195
+
196
+ RESOURCE_PREAMBLES: ta.Sequence[tuple[re.Pattern, ta.Sequence[str]]] = [
197
+ (re.compile(r'.*\.sh$'), [
198
+ 'set -ex ;',
199
+ 'umask 0002 ;',
200
+ ]),
201
+ ]
202
+
203
+
204
+ WRITE_CHMOD = '664'
205
+
206
+
170
207
  def gen_src(cfg: Config) -> str:
171
208
  ops = gen_ops(cfg)
172
209
 
210
+ ctx = RenderContext(
211
+ resource_preambles=RESOURCE_PREAMBLES,
212
+ write_chmod=WRITE_CHMOD,
213
+ )
214
+
173
215
  out = io.StringIO()
174
216
  for i, section in enumerate(ops):
175
217
  if i:
176
218
  out.write('\n\n\n')
177
- out.write(render_op(section))
219
+ out.write(render_op(section, ctx))
178
220
 
179
221
  return out.getvalue()
@@ -34,6 +34,11 @@ class User(Op):
34
34
  user: str
35
35
 
36
36
 
37
+ @dc.dataclass(frozen=True)
38
+ class Shell(Op):
39
+ parts: ta.Sequence[str]
40
+
41
+
37
42
  @dc.dataclass(frozen=True, kw_only=True)
38
43
  class Copy(Op):
39
44
  src: str
@@ -2,10 +2,12 @@ import collections.abc
2
2
  import functools
3
3
  import io
4
4
  import json
5
+ import re
5
6
  import shlex
6
7
  import typing as ta
7
8
 
8
9
  from omlish import check
10
+ from omlish import dataclasses as dc
9
11
 
10
12
  from .content import Content
11
13
  from .content import LazyContent
@@ -20,6 +22,7 @@ from .ops import From
20
22
  from .ops import Op
21
23
  from .ops import Run
22
24
  from .ops import Section
25
+ from .ops import Shell
23
26
  from .ops import User
24
27
  from .ops import Workdir
25
28
  from .ops import Write
@@ -31,27 +34,44 @@ from .ops import Write
31
34
  INDENT = ' ' * 2
32
35
 
33
36
 
37
+ ##
38
+ # Context
39
+
40
+
41
+ @dc.dataclass(frozen=True, kw_only=True)
42
+ class RenderContext:
43
+ resource_preambles: ta.Sequence[tuple[re.Pattern, ta.Sequence[str]]] | None = None
44
+
45
+ write_chmod: str | None = None
46
+
47
+
34
48
  ##
35
49
  # Content
36
50
 
37
51
 
38
52
  @functools.singledispatch
39
- def render_content(c: Content) -> str:
53
+ def render_content(c: Content, ctx: RenderContext) -> str:
40
54
  raise TypeError(c)
41
55
 
42
56
 
43
57
  @render_content.register(str)
44
- def render_str(c: str) -> str:
58
+ def render_str(c: str, ctx: RenderContext) -> str:
45
59
  return c
46
60
 
47
61
 
48
62
  @render_content.register(Resource)
49
- def render_resource(c: Resource) -> str:
50
- return read_resource(c)
63
+ def render_resource(c: Resource, ctx: RenderContext) -> str:
64
+ s = read_resource(c)
65
+
66
+ for pat, lines in ctx.resource_preambles or []:
67
+ if lines and pat.match(c.path):
68
+ s = '\n'.join([*lines, '', s])
69
+
70
+ return s
51
71
 
52
72
 
53
73
  @render_content.register(WithStaticEnv)
54
- def render_with_static_env(c: WithStaticEnv) -> str:
74
+ def render_with_static_env(c: WithStaticEnv, ctx: RenderContext) -> str:
55
75
  out = io.StringIO()
56
76
 
57
77
  if c.env:
@@ -72,19 +92,19 @@ def render_with_static_env(c: WithStaticEnv) -> str:
72
92
 
73
93
  out.write('\\\n')
74
94
 
75
- out.write(render_content(c.body))
95
+ out.write(render_content(c.body, ctx))
76
96
 
77
97
  return out.getvalue()
78
98
 
79
99
 
80
100
  @render_content.register(LazyContent)
81
- def render_lazy_content(c: LazyContent) -> str:
82
- return render_content(c.fn())
101
+ def render_lazy_content(c: LazyContent, ctx: RenderContext) -> str:
102
+ return render_content(c.fn(), ctx)
83
103
 
84
104
 
85
105
  @render_content.register(collections.abc.Sequence)
86
- def render_sequence_content(c: ta.Sequence[Content]) -> str:
87
- return '\n'.join([render_content(cc) for cc in c])
106
+ def render_sequence_content(c: ta.Sequence[Content], ctx: RenderContext) -> str:
107
+ return '\n'.join([render_content(cc, ctx) for cc in c])
88
108
 
89
109
 
90
110
  ##
@@ -147,17 +167,17 @@ def render_var_sections(
147
167
 
148
168
 
149
169
  @functools.singledispatch
150
- def render_op(op: Op) -> str:
170
+ def render_op(op: Op, ctx: RenderContext) -> str:
151
171
  raise TypeError(op)
152
172
 
153
173
 
154
174
  @render_op.register(From)
155
- def render_from(op: From) -> str:
175
+ def render_from(op: From, ctx: RenderContext) -> str:
156
176
  return f'FROM {op.spec}'
157
177
 
158
178
 
159
179
  @render_op.register(Section)
160
- def render_section(op: Section) -> str:
180
+ def render_section(op: Section, ctx: RenderContext) -> str:
161
181
  out = io.StringIO()
162
182
 
163
183
  out.write(f'## {op.header or ""}'.strip())
@@ -167,13 +187,13 @@ def render_section(op: Section) -> str:
167
187
  if i:
168
188
  out.write('\n')
169
189
  out.write('\n')
170
- out.write(render_op(c))
190
+ out.write(render_op(c, ctx))
171
191
 
172
192
  return out.getvalue()
173
193
 
174
194
 
175
195
  @render_op.register(Env)
176
- def render_env(op: Env) -> str:
196
+ def render_env(op: Env, ctx: RenderContext) -> str:
177
197
  return '\n'.join([
178
198
  f'ENV {k}={v}'
179
199
  for k, v in op.items
@@ -181,22 +201,27 @@ def render_env(op: Env) -> str:
181
201
 
182
202
 
183
203
  @render_op.register(User)
184
- def render_user(op: User) -> str:
204
+ def render_user(op: User, ctx: RenderContext) -> str:
185
205
  return f'USER {op.user}'
186
206
 
187
207
 
208
+ @render_op.register(Shell)
209
+ def render_shell(op: Shell, ctx: RenderContext) -> str:
210
+ return f'SHELL {render_cmd_parts(*op.parts)}'
211
+
212
+
188
213
  @render_op.register(Copy)
189
- def render_copy(op: Copy) -> str:
214
+ def render_copy(op: Copy, ctx: RenderContext) -> str:
190
215
  return f'COPY {op.src} {op.dst}'
191
216
 
192
217
 
193
218
  @render_op.register(Write)
194
- def render_write(op: Write) -> str:
219
+ def render_write(op: Write, ctx: RenderContext) -> str:
195
220
  out = io.StringIO()
196
221
 
197
222
  out.write("RUN echo '\\\n")
198
223
 
199
- c = render_content(op.content)
224
+ c = render_content(op.content, ctx)
200
225
  s = sh_quote(c)[1:-1]
201
226
  for l in s.splitlines(keepends=True):
202
227
  # l = l.replace('$', '\\$')
@@ -207,13 +232,16 @@ def render_write(op: Write) -> str:
207
232
  out.write(l)
208
233
  out.write('\\\n')
209
234
 
210
- out.write(f"' {'>>' if op.append else '>'} {op.path}")
235
+ last = f"' {'>>' if op.append else '>'} {op.path}"
236
+ if ctx.write_chmod is not None:
237
+ last += f' && chmod {ctx.write_chmod} {op.path}'
238
+ out.write(last)
211
239
 
212
240
  return out.getvalue()
213
241
 
214
242
 
215
243
  @render_op.register(Run)
216
- def render_run(op: Run) -> str:
244
+ def render_run(op: Run, ctx: RenderContext) -> str:
217
245
  out = io.StringIO()
218
246
 
219
247
  if op.cache_mounts:
@@ -233,7 +261,7 @@ def render_run(op: Run) -> str:
233
261
  else:
234
262
  out.write('RUN (\\\n')
235
263
 
236
- s = render_content(op.body)
264
+ s = render_content(op.body, ctx)
237
265
  for l in s.strip().splitlines():
238
266
  out.write(l)
239
267
  if not l.rstrip().endswith('\\'):
@@ -246,15 +274,15 @@ def render_run(op: Run) -> str:
246
274
 
247
275
 
248
276
  @render_op.register(Workdir)
249
- def render_workdir(op: Workdir) -> str:
277
+ def render_workdir(op: Workdir, ctx: RenderContext) -> str:
250
278
  return f'WORKDIR {op.path}'
251
279
 
252
280
 
253
281
  @render_op.register(Entrypoint)
254
- def render_entrypoint(op: Entrypoint) -> str:
282
+ def render_entrypoint(op: Entrypoint, ctx: RenderContext) -> str:
255
283
  return f'ENTRYPOINT {render_cmd_parts(*op.parts)}'
256
284
 
257
285
 
258
286
  @render_op.register(Cmd)
259
- def render_cmd(op: Cmd) -> str:
287
+ def render_cmd(op: Cmd, ctx: RenderContext) -> str:
260
288
  return f'CMD {render_cmd_parts(*op.parts)}'
@@ -6,9 +6,13 @@ deps = [
6
6
 
7
7
  # base system
8
8
  'dumb-init',
9
+ 'gosu',
9
10
  'lsb-release',
10
11
  'sudo',
11
12
 
13
+ # filesystem
14
+ 'bindfs',
15
+
12
16
  # networking & network diagnostics
13
17
  'aria2',
14
18
  'bmon',
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  rm -f /etc/apt/apt.conf.d/docker-clean ;
4
2
  rm -f /etc/dpkg/dpkg.cfg.d/excludes ;
5
3
 
@@ -0,0 +1,3 @@
1
+ for D in ${CHGRP_ROOTS} ; do
2
+ chgrp -R $(id -g) "$D" && chmod -R g=u "$D" ;
3
+ done ;
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  mkdir -p /etc/apt/keyrings ;
4
2
  curl -fsSL 'https://download.docker.com/linux/ubuntu/gpg' | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg ;
5
3
  echo \
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  sudo add-apt-repository ppa:mozillateam/ppa ;
4
2
 
5
3
  echo "
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  GO_VERSION=$(curl -fsSL 'https://go.dev/VERSION?m=text' | head -n1 | sed 's/^go//') ;
4
2
 
5
3
  curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-$(dpkg --print-architecture).tar.gz" | tar -C "$HOME" -xzf - ;
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  sudo apt install gnupg ca-certificates curl ;
4
2
  curl -s 'https://repos.azul.com/azul-repo.key' | sudo gpg --dearmor -o /usr/share/keyrings/azul.gpg ;
5
3
  echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" | sudo tee /etc/apt/sources.list.d/zulu.list ;
@@ -1,3 +1 @@
1
- set -ex ;
2
-
3
1
  yes | sudo unminimize ;
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  NVM_VERSION=$(
4
2
  curl -fsSL -o /dev/null -w '%{url_effective}' 'https://github.com/nvm-sh/nvm/releases/latest' |
5
3
  sed 's#.*\/tag/##'
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  git clone 'https://github.com/pyenv/pyenv' ~/.pyenv ;
4
2
 
5
3
  for V in ${PYENV_VERSIONS} ; do
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  curl -fsSL 'https://rbenv.org/install.sh' | bash ;
4
2
 
5
3
  for RV in ${RBENV_VERSIONS}; do
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  curl --proto '=https' --tlsv1.2 -sSf 'https://sh.rustup.rs' | sh -s -- -y ;
4
2
 
5
3
  $HOME/.cargo/bin/cargo install \
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  sudo sed -i 's/^#*PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config ;
4
2
  sudo sed -i 's/^#X11UseLocalhost yes/X11UseLocalhost no/' /etc/ssh/sshd_config ;
5
3
  sudo sed -i 's/^# Ciphers and keying/Ciphers chacha20-poly1305@openssh.com/' /etc/ssh/sshd_config ;
@@ -0,0 +1,14 @@
1
+ if id -u ubuntu >/dev/null 2>&1; then
2
+ userdel ubuntu ;
3
+ fi ;
4
+ if getent group ubuntu >/dev/null 2>&1; then
5
+ groupdel ubuntu ;
6
+ fi ;
7
+ rm -rf /home/ubuntu ;
8
+
9
+ groupadd --gid ${NEW_GID} ${NEW_USER} ;
10
+ useradd --uid ${NEW_UID} --gid ${NEW_GID} -m -s /bin/bash -d /${NEW_USER} ${NEW_USER} ;
11
+
12
+ echo "${NEW_USER} ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/${NEW_USER} ;
13
+
14
+ chmod 0440 /etc/sudoers.d/${NEW_USER} ;
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  curl -LsSf 'https://astral.sh/uv/install.sh' | sh ;
4
2
 
5
3
  for PV in ${UV_PYTHON_VERSIONS} ; do
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  git clone 'https://github.com/microsoft/vcpkg' ~/.vcpkg_root ;
4
2
  (cd ~/.vcpkg_root && ./bootstrap-vcpkg.sh) ;
5
3
 
@@ -0,0 +1,3 @@
1
+ sudo mkdir -p "$WORKDIR" ;
2
+ sudo chown -R $(id -un) "$WORKDIR" ;
3
+ sudo chgrp -R $(id -gn) "$WORKDIR" ;
@@ -1,5 +1,3 @@
1
- set -ex ;
2
-
3
1
  ZIG_VERSION=$(
4
2
  curl -fsSL 'https://ziglang.org/download/index.json' |
5
3
  jq -r 'to_entries | map(select(.key != "master")) | map(.value) | sort_by(.version) | last | .version'
@@ -81,6 +81,8 @@ with _lang.auto_proxy_init(globals()):
81
81
  from textual.content import ContentType # noqa
82
82
  from textual.content import EMPTY_CONTENT # noqa
83
83
  from textual.content import Span # noqa
84
+ from textual.css.query import NoMatches # noqa
85
+ from textual.css.query import WrongType # noqa
84
86
  from textual.document._document import Document # noqa
85
87
  from textual.document._document import Location # noqa
86
88
  from textual.document._document import Selection # noqa
@@ -283,6 +285,10 @@ with _lang.auto_proxy_init(globals()):
283
285
  set_root_logger_to_devtools,
284
286
  )
285
287
 
288
+ from .dom2 import ( # noqa
289
+ find_ancestor,
290
+ )
291
+
286
292
  from .drivers2 import ( # noqa
287
293
  PendingWritesDriverMixin,
288
294
  get_pending_writes_driver_class,
@@ -39,6 +39,8 @@ class ActionMenu(Vertical):
39
39
 
40
40
  ActionMenu ActionMenuButton {
41
41
  width: 100%;
42
+ content-align: left middle;
43
+ text-align: left;
42
44
  }
43
45
  """
44
46
 
@@ -0,0 +1,30 @@
1
+ import typing as ta
2
+
3
+ from textual.dom import DOMNode
4
+
5
+
6
+ T = ta.TypeVar('T')
7
+
8
+
9
+ ##
10
+
11
+
12
+ @ta.overload
13
+ def find_ancestor(flt: ta.Callable[[DOMNode], bool], no: DOMNode) -> DOMNode | None:
14
+ ...
15
+
16
+
17
+ @ta.overload
18
+ def find_ancestor(flt: type[T], no: DOMNode) -> T | None:
19
+ ...
20
+
21
+
22
+ def find_ancestor(flt, no):
23
+ if isinstance(flt, type):
24
+ flt = (lambda ty: lambda x: isinstance(x, ty))(flt) # noqa
25
+
26
+ while (no := no.parent) is not None:
27
+ if flt(no):
28
+ return no
29
+
30
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.12
3
+ Version: 0.0.14
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,10 +14,10 @@ Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.12
17
+ Requires-Dist: omlish==0.0.14
18
18
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.12; extra == "all"
20
- Requires-Dist: ommlds==0.0.12; extra == "all"
19
+ Requires-Dist: ominfra==0.0.14; extra == "all"
20
+ Requires-Dist: ommlds==0.0.14; extra == "all"
21
21
  Requires-Dist: black~=26.3; extra == "all"
22
22
  Requires-Dist: pycparser~=3.0; extra == "all"
23
23
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -33,9 +33,9 @@ Requires-Dist: textual~=8.2; extra == "all"
33
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
34
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
35
  Provides-Extra: ominfra
36
- Requires-Dist: ominfra==0.0.12; extra == "ominfra"
36
+ Requires-Dist: ominfra==0.0.14; extra == "ominfra"
37
37
  Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.12; extra == "ommlds"
38
+ Requires-Dist: ommlds==0.0.14; extra == "ommlds"
39
39
  Provides-Extra: black
40
40
  Requires-Dist: black~=26.3; extra == "black"
41
41
  Provides-Extra: c
@@ -181,6 +181,7 @@ omdev/dockerdev/resources/depsets/python.toml
181
181
  omdev/dockerdev/resources/depsets/system.toml
182
182
  omdev/dockerdev/resources/depsets/x11.toml
183
183
  omdev/dockerdev/resources/fragments/apt.sh
184
+ omdev/dockerdev/resources/fragments/chgrp.sh
184
185
  omdev/dockerdev/resources/fragments/docker.sh
185
186
  omdev/dockerdev/resources/fragments/firefox.sh
186
187
  omdev/dockerdev/resources/fragments/go.sh
@@ -194,6 +195,7 @@ omdev/dockerdev/resources/fragments/sshd.sh
194
195
  omdev/dockerdev/resources/fragments/user.sh
195
196
  omdev/dockerdev/resources/fragments/uv.sh
196
197
  omdev/dockerdev/resources/fragments/vcpkg.sh
198
+ omdev/dockerdev/resources/fragments/workdir.sh
197
199
  omdev/dockerdev/resources/fragments/zig.sh
198
200
  omdev/dockerdev/resources/scripts/install-claude
199
201
  omdev/dockerdev/resources/scripts/install-codex
@@ -461,6 +463,7 @@ omdev/tui/textual/app2.py
461
463
  omdev/tui/textual/binding2.py
462
464
  omdev/tui/textual/clipboard.py
463
465
  omdev/tui/textual/devtools.py
466
+ omdev/tui/textual/dom2.py
464
467
  omdev/tui/textual/drivers2.py
465
468
  omdev/tui/textual/logging2.py
466
469
  omdev/tui/textual/render2.py
@@ -1,8 +1,8 @@
1
- omlish==0.0.12
1
+ omlish==0.0.14
2
2
 
3
3
  [all]
4
- ominfra==0.0.12
5
- ommlds==0.0.12
4
+ ominfra==0.0.14
5
+ ommlds==0.0.14
6
6
  black~=26.3
7
7
  pycparser~=3.0
8
8
  pcpp~=1.30
@@ -35,10 +35,10 @@ pygments~=2.20
35
35
  mypy~=1.20
36
36
 
37
37
  [ominfra]
38
- ominfra==0.0.12
38
+ ominfra==0.0.14
39
39
 
40
40
  [ommlds]
41
- ommlds==0.0.12
41
+ ommlds==0.0.14
42
42
 
43
43
  [prof]
44
44
  gprof2dot~=2025.4