devstuff 2.5.0__tar.gz → 2.6.0__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 (171) hide show
  1. {devstuff-2.5.0 → devstuff-2.6.0}/CHANGELOG.md +6 -0
  2. {devstuff-2.5.0 → devstuff-2.6.0}/PKG-INFO +12 -1
  3. {devstuff-2.5.0 → devstuff-2.6.0}/README.md +11 -0
  4. {devstuff-2.5.0 → devstuff-2.6.0}/pyproject.toml +1 -1
  5. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/functions.yaml +27 -0
  6. {devstuff-2.5.0 → devstuff-2.6.0}/uv.lock +1 -1
  7. {devstuff-2.5.0 → devstuff-2.6.0}/.claude/skills/run-stuff/SKILL.md +0 -0
  8. {devstuff-2.5.0 → devstuff-2.6.0}/.claude/skills/run-stuff/smoke.sh +0 -0
  9. {devstuff-2.5.0 → devstuff-2.6.0}/.github/workflows/bump.yml +0 -0
  10. {devstuff-2.5.0 → devstuff-2.6.0}/.github/workflows/ci.yml +0 -0
  11. {devstuff-2.5.0 → devstuff-2.6.0}/.github/workflows/publish.yml +0 -0
  12. {devstuff-2.5.0 → devstuff-2.6.0}/.github/workflows/test-installs.yml +0 -0
  13. {devstuff-2.5.0 → devstuff-2.6.0}/.gitignore +0 -0
  14. {devstuff-2.5.0 → devstuff-2.6.0}/CLAUDE.md +0 -0
  15. {devstuff-2.5.0 → devstuff-2.6.0}/dev/Dockerfile +0 -0
  16. {devstuff-2.5.0 → devstuff-2.6.0}/dev/Dockerfile.ci +0 -0
  17. {devstuff-2.5.0 → devstuff-2.6.0}/dev/Makefile +0 -0
  18. {devstuff-2.5.0 → devstuff-2.6.0}/dev/docker-compose.yml +0 -0
  19. {devstuff-2.5.0 → devstuff-2.6.0}/devstuff +0 -0
  20. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/README.md +0 -0
  21. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/agent/development-plan.md +0 -0
  22. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/agent/specifications.md +0 -0
  23. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/agent/stack-decisions.md +0 -0
  24. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/ansible-config/development-plan.md +0 -0
  25. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/ansible-config/specifications.md +0 -0
  26. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/ansible-config/stack-decisions.md +0 -0
  27. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/bat-config/development-plan.md +0 -0
  28. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/bat-config/specifications.md +0 -0
  29. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/bat-config/stack-decisions.md +0 -0
  30. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/commitizen-config/development-plan.md +0 -0
  31. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/commitizen-config/specifications.md +0 -0
  32. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/commitizen-config/stack-decisions.md +0 -0
  33. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/docker-config/development-plan.md +0 -0
  34. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/docker-config/specifications.md +0 -0
  35. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/docker-config/stack-decisions.md +0 -0
  36. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/lazygit-config/development-plan.md +0 -0
  37. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/lazygit-config/specifications.md +0 -0
  38. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/lazygit-config/stack-decisions.md +0 -0
  39. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/precommit-config/development-plan.md +0 -0
  40. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/precommit-config/specifications.md +0 -0
  41. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/precommit-config/stack-decisions.md +0 -0
  42. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/starship-config/development-plan.md +0 -0
  43. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/starship-config/specifications.md +0 -0
  44. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/starship-config/stack-decisions.md +0 -0
  45. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/uv-backbone/development-plan.md +0 -0
  46. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/uv-backbone/specifications.md +0 -0
  47. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/uv-backbone/stack-decisions.md +0 -0
  48. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/verbose-mode/development-plan.md +0 -0
  49. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/verbose-mode/specifications.md +0 -0
  50. {devstuff-2.5.0 → devstuff-2.6.0}/docs/specs/verbose-mode/stack-decisions.md +0 -0
  51. {devstuff-2.5.0 → devstuff-2.6.0}/install.sh +0 -0
  52. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/__init__.py +0 -0
  53. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/__main__.py +0 -0
  54. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/__init__.py +0 -0
  55. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/approval.py +0 -0
  56. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/bridges.py +0 -0
  57. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/catalog.py +0 -0
  58. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/completion.py +0 -0
  59. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/config.py +0 -0
  60. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/loop.py +0 -0
  61. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/ollama.py +0 -0
  62. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/preflight.py +0 -0
  63. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/primitives.py +0 -0
  64. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/registry.py +0 -0
  65. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/sandbox.py +0 -0
  66. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/session.py +0 -0
  67. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/transcript.py +0 -0
  68. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent/wizard.py +0 -0
  69. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent_tools.schema.json +0 -0
  70. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/agent_tools.yaml +0 -0
  71. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/base.py +0 -0
  72. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/catalog.py +0 -0
  73. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/cli.py +0 -0
  74. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/__init__.py +0 -0
  75. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/add_cmd.py +0 -0
  76. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/agent_cmd.py +0 -0
  77. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/catalog_cmd.py +0 -0
  78. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/configure_cmd.py +0 -0
  79. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/delete_cmd.py +0 -0
  80. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/docs_cmd.py +0 -0
  81. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/doctor_cmd.py +0 -0
  82. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/functions_cmd.py +0 -0
  83. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/help_cmd.py +0 -0
  84. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/install_cmd.py +0 -0
  85. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/list_cmd.py +0 -0
  86. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/remove_cmd.py +0 -0
  87. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/run_cmd.py +0 -0
  88. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/skills_cmd.py +0 -0
  89. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/commands/update_cmd.py +0 -0
  90. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/__init__.py +0 -0
  91. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/ansible/__init__.py +0 -0
  92. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/ansible/detect.py +0 -0
  93. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/ansible/model.py +0 -0
  94. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/ansible/render.py +0 -0
  95. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/ansible/validate.py +0 -0
  96. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/ansible/wizard.py +0 -0
  97. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/bat/__init__.py +0 -0
  98. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/bat/detect.py +0 -0
  99. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/bat/model.py +0 -0
  100. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/bat/preview.py +0 -0
  101. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/bat/render.py +0 -0
  102. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/bat/wizard.py +0 -0
  103. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/commitizen/__init__.py +0 -0
  104. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/commitizen/detect.py +0 -0
  105. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/commitizen/model.py +0 -0
  106. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/commitizen/render.py +0 -0
  107. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/commitizen/validate.py +0 -0
  108. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/commitizen/wizard.py +0 -0
  109. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/docker/__init__.py +0 -0
  110. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/docker/detect.py +0 -0
  111. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/docker/model.py +0 -0
  112. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/docker/render.py +0 -0
  113. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/docker/validate.py +0 -0
  114. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/docker/wizard.py +0 -0
  115. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/lazygit/__init__.py +0 -0
  116. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/lazygit/detect.py +0 -0
  117. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/lazygit/model.py +0 -0
  118. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/lazygit/render.py +0 -0
  119. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/lazygit/validate.py +0 -0
  120. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/lazygit/wizard.py +0 -0
  121. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/precommit/__init__.py +0 -0
  122. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/precommit/detect.py +0 -0
  123. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/precommit/model.py +0 -0
  124. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/precommit/render.py +0 -0
  125. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/precommit/validate.py +0 -0
  126. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/precommit/wizard.py +0 -0
  127. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/reptyr/__init__.py +0 -0
  128. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/reptyr/wizard.py +0 -0
  129. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/starship/__init__.py +0 -0
  130. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/starship/fonts.py +0 -0
  131. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/starship/model.py +0 -0
  132. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/starship/preview.py +0 -0
  133. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/starship/render.py +0 -0
  134. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/configure/starship/wizard.py +0 -0
  135. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/doctor.py +0 -0
  136. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/function_runner.py +0 -0
  137. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/functions.schema.json +0 -0
  138. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/functions_catalog.py +0 -0
  139. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/functions_registry.py +0 -0
  140. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/generic.py +0 -0
  141. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/registry.py +0 -0
  142. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/tools.yaml +0 -0
  143. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/ui.py +0 -0
  144. {devstuff-2.5.0 → devstuff-2.6.0}/src/dev_setup/verbose.py +0 -0
  145. {devstuff-2.5.0 → devstuff-2.6.0}/tests/__init__.py +0 -0
  146. {devstuff-2.5.0 → devstuff-2.6.0}/tests/integration/__init__.py +0 -0
  147. {devstuff-2.5.0 → devstuff-2.6.0}/tests/integration/conftest.py +0 -0
  148. {devstuff-2.5.0 → devstuff-2.6.0}/tests/integration/test_agent_smoke.py +0 -0
  149. {devstuff-2.5.0 → devstuff-2.6.0}/tests/integration/test_agent_tui.py +0 -0
  150. {devstuff-2.5.0 → devstuff-2.6.0}/tests/integration/test_commitizen_config.py +0 -0
  151. {devstuff-2.5.0 → devstuff-2.6.0}/tests/integration/test_tools.py +0 -0
  152. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_agent.py +0 -0
  153. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_agent_completion.py +0 -0
  154. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_agent_loop.py +0 -0
  155. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_agent_sandbox.py +0 -0
  156. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_agent_tools.py +0 -0
  157. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_agent_wizard.py +0 -0
  158. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_catalog.py +0 -0
  159. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_ansible.py +0 -0
  160. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_bat.py +0 -0
  161. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_commitizen.py +0 -0
  162. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_docker.py +0 -0
  163. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_lazygit.py +0 -0
  164. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_precommit.py +0 -0
  165. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_reptyr.py +0 -0
  166. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_configure_starship.py +0 -0
  167. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_doctor.py +0 -0
  168. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_functions.py +0 -0
  169. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_generic.py +0 -0
  170. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_registry.py +0 -0
  171. {devstuff-2.5.0 → devstuff-2.6.0}/tests/test_verbose.py +0 -0
@@ -1,3 +1,9 @@
1
+ ## v2.6.0 (2026-09-09)
2
+
3
+ ### Features
4
+
5
+ - **functions**: add pids-of username lookup
6
+
1
7
  ## v2.5.0 (2026-09-09)
2
8
 
3
9
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: devstuff
3
- Version: 2.5.0
3
+ Version: 2.6.0
4
4
  Summary: Development environment setup CLI for Linux
5
5
  Project-URL: Repository, https://github.com/thesawdawg/dev-setup-py
6
6
  Author-email: Sawyer <sawyerksu@gmail.com>
@@ -1176,6 +1176,7 @@ ones tools already have — for now, custom functions are hand-edited YAML at
1176
1176
 
1177
1177
  | Key | Category | Type | Description | Args |
1178
1178
  |-----|----------|------|--------------|------|
1179
+ | `pids-of` | system | script | List process IDs owned by a user, one per line | `username` |
1179
1180
  | `ssh-agent-key` | auth | shell-eval (bashrc) | Start ssh-agent in the current shell and add a key to it | `key_path` |
1180
1181
  | `validate-docker-compose` | validation | script | Validate a docker-compose.yml file in the current directory | — |
1181
1182
  | `validate-yaml` | validation | script | Validate a YAML file's syntax using `yq` | `file` |
@@ -1184,6 +1185,16 @@ ones tools already have — for now, custom functions are hand-edited YAML at
1184
1185
  | `aws-saml-reauth` | web-dev | script | Reauthorize the AWS CLI via `saml2aws login --force` | `profile` (optional) |
1185
1186
  | `which-ansible` | validation | script | Show which ansible a directory will actually use — the project's uv venv or the global one | `path` (optional) |
1186
1187
 
1188
+ #### `pids-of`
1189
+
1190
+ ```bash
1191
+ devstuff run pids-of sawyer
1192
+ ```
1193
+
1194
+ Prints one PID per line for processes whose effective user matches `username`.
1195
+ Requires `pgrep` (the `procps` package). A user with no visible processes returns
1196
+ an empty result successfully; an unknown user produces an error.
1197
+
1187
1198
  #### `whats-on-port`
1188
1199
 
1189
1200
  ```bash
@@ -1149,6 +1149,7 @@ ones tools already have — for now, custom functions are hand-edited YAML at
1149
1149
 
1150
1150
  | Key | Category | Type | Description | Args |
1151
1151
  |-----|----------|------|--------------|------|
1152
+ | `pids-of` | system | script | List process IDs owned by a user, one per line | `username` |
1152
1153
  | `ssh-agent-key` | auth | shell-eval (bashrc) | Start ssh-agent in the current shell and add a key to it | `key_path` |
1153
1154
  | `validate-docker-compose` | validation | script | Validate a docker-compose.yml file in the current directory | — |
1154
1155
  | `validate-yaml` | validation | script | Validate a YAML file's syntax using `yq` | `file` |
@@ -1157,6 +1158,16 @@ ones tools already have — for now, custom functions are hand-edited YAML at
1157
1158
  | `aws-saml-reauth` | web-dev | script | Reauthorize the AWS CLI via `saml2aws login --force` | `profile` (optional) |
1158
1159
  | `which-ansible` | validation | script | Show which ansible a directory will actually use — the project's uv venv or the global one | `path` (optional) |
1159
1160
 
1161
+ #### `pids-of`
1162
+
1163
+ ```bash
1164
+ devstuff run pids-of sawyer
1165
+ ```
1166
+
1167
+ Prints one PID per line for processes whose effective user matches `username`.
1168
+ Requires `pgrep` (the `procps` package). A user with no visible processes returns
1169
+ an empty result successfully; an unknown user produces an error.
1170
+
1160
1171
  #### `whats-on-port`
1161
1172
 
1162
1173
  ```bash
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "devstuff"
3
- version = "2.5.0"
3
+ version = "2.6.0"
4
4
  description = "Development environment setup CLI for Linux"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1,6 +1,33 @@
1
1
  # yaml-language-server: $schema=./functions.schema.json
2
2
  version: 1
3
3
  functions:
4
+ pids-of:
5
+ name: PIDs Of User
6
+ description: List process IDs owned by a user, one per line
7
+ category: system
8
+ type: script
9
+ params:
10
+ - name: username
11
+ description: User whose processes to list
12
+ required: true
13
+ script: |
14
+ set -uo pipefail
15
+ if ! command -v pgrep >/dev/null 2>&1; then
16
+ echo "pgrep is required (install the procps package)." >&2
17
+ exit 1
18
+ fi
19
+ if ! uid="$(id -u -- "$username" 2>/dev/null)"; then
20
+ echo "Unknown user: $username" >&2
21
+ exit 2
22
+ fi
23
+ pgrep -u "$uid"
24
+ status=$?
25
+ # pgrep returns 1 for no matches, which is a successful empty lookup.
26
+ if [ "$status" -eq 1 ]; then
27
+ exit 0
28
+ fi
29
+ exit "$status"
30
+
4
31
  ssh-agent-key:
5
32
  name: SSH Agent + Add Key
6
33
  description: Start ssh-agent in the current shell and add a key to it
@@ -167,7 +167,7 @@ wheels = [
167
167
 
168
168
  [[package]]
169
169
  name = "devstuff"
170
- version = "2.5.0"
170
+ version = "2.6.0"
171
171
  source = { editable = "." }
172
172
  dependencies = [
173
173
  { name = "click" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes