Application install/uninstall descriptions for use with apps.zsh
helper
The apps
helper script is a Zsh utility designed to provide a fuzzy, interactive interface for managing and executing application actions defined in Markdown files. This makes it easy to organize, discover, and run application-specific tasks or installation commands, especially when maintaining portable or modular dotfiles.
- Fuzzy App Selection: Browse and select from available application definitions using
fzf
. - Section/Action Picker: Select specific actions (sections) to run for each app, such as
install
,update
, or custom actions. - Modular App Definitions: Application actions are defined in Markdown files (one per app), allowing for easy organization and documentation.
- Exit Code Propagation: Correctly returns the exit status of script blocks, enabling use in shell conditionals (
if apps ...; then ...
). - Pipeable Output: Ensures only script output is sent to
stdout
; logs and info go tostderr
, so you can safely pipe output (e.g.apps tailscale status | grep online
). - Lightweight & Extensible: Easily add new apps or actions by creating or editing Markdown files.
By default, app definitions live in ~/.dotapps/
. Each app has a Markdown file, possibly nested in subdirectories, e.g.:
~/.dotapps/
tailscale.md
bundle/
essential.md
obsidian.md
Each Markdown file uses sections (## section-name
) and code blocks for actions
You can define actions that are specific to an operating system (like linux, darwin, or windows), or to a package manager or method (like flatpak, appimage, brew, etc). The script will automatically select the most appropriate override based on the current environment.
Section naming convention
## action
— Generic action (default for all systems)## <os>-action
— OS-specific override (e.g.bluefin-install
,fedora-install
)## <packager>-action
— Packager-specific override (e.g.flatpak-install
,brew-install
)
When running an action, the script checks in order:
- OS-specific (
<os>-action
) - Packager-specific (
<packager>-action
) - Generic (
action
)
Simply add a new section with the appropriate suffix (as above) to your application's markdown file. The helper script will handle the rest, picking the best-matching action for your current environment.
apps
Prompts you to select an app and then an action/section to run.
apps bundle/essential
Prompts you to select an action/section for bundle/essential.
apps tailscale install
Runs the install action for tailscale, applying any OS/packager-specific overrides.
if apps obsidian check user; then
echo "Obsidian user install detected!"
fi
The exit code from the script block is returned, so you can use apps in if/elif/else statements.
apps tailscale status | grep online
Only the output from the script block is sent to stdout, so piping and grepping works as expected.
~/.local/share/applications/apps-onlyoffice.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=OnlyOffice desktop editors
Exec=zsh -c "dotfiles source; apps onlyoffice run -bg"
Icon=prompt-icon-128.png
Keywords=apps
Terminal=false
Categories=Utility;
Note
This can be generated with apps-export onlyoffice "OnlyOffice desktop editors"
or using F5 in the apps
launcher.
[Desktop Entry]
Version=1.0
Type=Application
Name=apps launcher
Exec=zsh -c "dotfiles source; apps"
Icon=prompt-icon-128.png
Keywords=apps
Terminal=false
Categories=Utility;