ndrop(1)
ndrop - run, show and hide programs on niri
ndrop [OPTIONS] [COMMAND]
The usual command you would run to start the desired program
-c, --class Set classname of the program to be run. Use this if the classname is different from the name of the [COMMAND] and ndrop has not yet a hardcoded replacement.
-F, --focus Changes the default behaviour: focus the specified program's window and switch to its present workspace if necessary. Do not hide it, if it's already on the current workspace."
-H, --help
Print help message
-i, --insensitive Case insensitive partial matching of class names. Can work as a stopgap if a running program is not recognized and a new instance is launched instead. Note: incorrect matches may occur, adding a special handling of the program to ndrop (hardcoded or via -c, --class) is preferable.
-o, --online Delay initial launch for up to 20 seconds until internet connectivity is established.
-v, --verbose
Show notifications regarding the matching process. Try this to figure out why running programs are not matched."
-V, --version
Print version
This script emulates the main features of tdrop in niri:
- if the specified program is not running: launch it and bring it to the foreground.
- if the specified program is already running on another workspace: bring it to the current workspace and focus it.
- if the specified program is already on the current workspace: move it to workspace 'special:ndrop', thereby hiding it until called up again by ndrop.
Multiple instances of the same program can be run concurrently, if different class names are assigned to each instance. Presently there is support for the following flags in the [COMMAND] string:
-a ('foot' terminal emulator)
--class (all other programs).
bind = $mainMod, b, exec, ndrop librewolf
bind = $mainMod, x, exec, ndrop kitty --class kitty_1
bind = $mainMod CTRL, x, exec, ndrop kitty --class kitty_2
bind = $mainMod, c, exec, ndrop foot -a foot_1
bind = $mainMod CTRL, c, exec, ndrop foot -a foot_2
Note: defining a class name is only necessary when running several instances of the same program.
If you want to run a program on boot and have it wait in the background until called up by ndrop you can use this:
exec-once = ndrop -b librewolf
Set no_cursor_warps = true in niri.conf section general
If ndrop can't match an already running program and starts a new instance instead, then its class name is most likely different from its command name. For example, the class name of telegram-desktop is org.telegram.desktop and the class name of logseq is Logseq.
Run ndrop -v [COMMAND] in the terminal to see maximum output for troubleshooting and find out the actual class name. Then use ndrop -c CLASSNAME to make it work. ndrop -i [COMMAND] might be sufficient, as long as a case insensitive (partial) match is sufficient.
Please report instances of programs with differing class names, so that they can be added to ndrop.
Close the program (don't just hide it with ndrop). The changed arguments are only applied when the program is restarted.
Dependencies: bash jq niri
Part of: https://github.com/hyprwm/contrib
Author: Schweber (https://github.com/Schweber/ndrop)
License: AGPL3