Files
Nomarchy/docs/HOOKS.md
Bernardo Magri 878c11bd41
All checks were successful
Check / eval-and-lint (push) Successful in 6m35s
docs: add RUNTIME_HOOKS.md and link from README
2026-05-31 20:35:58 +01:00

2.0 KiB

Nomarchy Runtime Hooks

Hooks allow you to run custom bash scripts when specific system events occur. They are the primary way to extend Nomarchy's behavior without modifying the core Nix configuration.

1. How it works

Hooks are simple bash scripts located in ~/.config/nomarchy/hooks/.

When a supported event occurs, Nomarchy checks for a file with the corresponding name in that directory. If the file exists, it is executed.

  • Location: ~/.config/nomarchy/hooks/<hook-name>
  • Language: Bash (or any executable script with a shebang).
  • Execution: Synchronous. The calling Nomarchy script waits for your hook to finish.

2. Available Hooks

Hook Name Triggered when... Arguments
post-install The nomarchy-welcome wizard finishes. None
post-update nomarchy-env-update finishes successfully. None
theme-set A new system theme is applied. $1: theme-id (e.g. nord)
font-set A new system font is applied. $1: font name (e.g. JetBrainsMono Nerd Font)
battery-low Battery drops below 15% (laptop only). $1: Current percentage

3. Examples

Auto-sync dotfiles after update

Create ~/.config/nomarchy/hooks/post-update:

#!/bin/bash
notify-send "Nomarchy" "Syncing personal dotfiles..."
git -C ~/Projects/dotfiles pull && git -C ~/Projects/dotfiles push

Apply custom color overrides after theme change

Create ~/.config/nomarchy/hooks/theme-set:

#!/bin/bash
# Re-apply a specific transparency hack that Stylix might have overwritten
hyprctl keyword decoration:active_opacity 0.95

4. Samples

Nomarchy ships sample hooks with the .sample extension. You can use these as a starting point by copying them:

cp ~/.config/nomarchy/hooks/post-install.sample ~/.config/nomarchy/hooks/post-install
chmod +x ~/.config/nomarchy/hooks/post-install

5. Development

If you want to trigger a hook manually for testing:

nomarchy-hook <name> [args...]