This Bash script emulates the main features of tdrop in Hyprland:
- 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:hdrop', thereby hiding it until called up again by hdrop.
hdrop [OPTIONS] [COMMAND]
[COMMAND]
The usual command you would run to start the desired program
-b, --background
Changes the default behaviour: if the specified program is not running, launch it in the background instead of in the foreground. Thereafterhdrop -b
will work the same as without this flag.-c, --class
Set classname of the program to be run. Use this if the classname is different from the name of the [COMMAND] and hdrop does not have a hardcoded replacement.-f, --floating
Spawn as a floating window. Standard is top half, full width, no gap. Can be adjusted with -g, -h, -p and -w.-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."-g, --gap
If using --floating: specify gap to the screen edge in pixels.-h, --height
If using --floating: set the height of the window. Enter percentage value without % sign, e.g. '30'.-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 hdrop (hardcoded or via-c, --class
) is preferable.-p, --position
If using --floating: set the position of the window. One of: '[t]op' '[b]ottom' '[l]eft' '[r]ight'.-v, --verbose
Show notifications regarding the matching process. Try this to figure out why running programs are not matched.-V, --version
Print version-w, --width
If using --floating: set the width of the window. Enter percentage value without % sign, e.g. '30'.
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
|--app-id
(foot terminal emulator)
--class
(all other programs)
bind = $mainMod, b, exec, hdrop librewolf
bind = $mainMod, x, exec, hdrop kitty --class kitty_1
bind = $mainMod CTRL, x, exec, hdrop kitty --class kitty_2
bind = $mainMod, c, exec, hdrop foot -a foot_1
bind = $mainMod CTRL, c, exec, hdrop 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 hdrop you can use this:
exec-once = hdrop -b librewolf
Set no_warps = true
in hyprland.conf
section cursor.
If hdrop 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 hdrop -v [COMMAND]
in the terminal to see maximum output for troubleshooting and find out the actual class name. Then use hdrop -c CLASSNAME
to make it work. hdrop -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 hdrop
.
This happens sometimes and will apparently be fixed in hyprland 0.43
Close the program (don't just hide it with hdrop). The changed arguments are only applied when the program is restarted.
This is a known issue and no workaround is known to me.
If hdrop isn't installed but just added to PATH, then you might have to use this instead:
exec-once = [workspace special:hdrop silent] hdrop [OPTIONS] [COMMAND]
Make sure that bash
, jq
and awk
(for using the --floating
option) are in your PATH.
Download the script, make it executable and add it to your PATH.
Note: hdrop
will only work in a Hyprland
session.
exec-once = hdrop -b
might not work with this installation method.
Use the provided Makefile.
hdrop
is part of hyprwm/contrib, which is a collection of useful scripts for Hyprland
.