Skip to content

Actually, this is a shortcut daemon that is configured by config file and is graphical session agnostic

License

Notifications You must be signed in to change notification settings

DeprecatedLuar/akeyshually

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

akeyshually banner

Errm... Akeyshually, this is an evdev-based userspace daemon configured in TOML that intercepts raw input events, performs stateful modifier tracking, and executes arbitrary shell commands through a fire-and-forget subprocess model regardless of session type or graphical environment manager


Every shortcuts manager is coupled to your display server (X11 vs Wayland ), your window manager (sway vs Hyprland vs i3), and your current machine.

I made akeyshually to not only have my configs in a single git tracked file, but to work anywhere I want.


The cool features you've never seen before

Actually...

  • Works on X11, Wayland, literally any WM/DE via evdev
  • All settings declared in a single TOML config
  • Actually lightweight takes about ~3MB binary, <3MB RAM, 0% CPU when idle
  • Configs are hot-reloaded on edit
  • Special modes like .whileheld, .toggle, .switch, .onrelease
  • You can literally make an auto-clicker with a single line
  • Works alongside remappers (keyd, kanata, kmonad, xremap...)

Installation

curl -sSL https://raw.githubusercontent.com/DeprecatedLuar/akeyshually/main/install.sh | bash
Other Install Methods

Manual Install

# Build from source
git clone https://github.com/DeprecatedLuar/akeyshually.git
cd akeyshually
go build -ldflags="-s -w" -o akeyshually ./cmd

# Install to ~/.local/bin
./other/install-local.sh

# Or install system-wide
sudo cp akeyshually /usr/local/bin/

Prerequisites:

  • Go 1.21+ (for building)
  • User must be in input group:
    sudo usermod -aG input $USER
    # Logout and login for group change to take effect

First run auto-generates config files in ~/.config/akeyshually/. Just run akeyshually and you're good.


Actually...

Commands

Command Description
start Daemonize in background
stop Stop daemon (via pidfile or systemctl)
update Check for and install updates
version Show version
--help Show help

Note

akeyshually with no args runs in foreground


Configuration

Config lives at ~/.config/akeyshually/:

  • config.toml - All-in-one config (settings, shortcuts, command aliases)
  • akeyshually.service - Systemd service file (with install instructions)
Configuration Example
# ~/.config/akeyshually/config.toml

[settings]
default_loop_interval = 100  # Milliseconds for .whileheld/.toggle behaviors
disable_media_keys = false   # Forward media keys to system (GNOME/KDE daemons)
#shell = "/bin/bash"         # Optional: override $SHELL
#env_file = "~/.profile"     # Optional: source before commands

[shortcuts]
"super+k" = "edit_config"

#-[LAUNCHERS]--------------------------------

"super.onrelease" = "rofi"  # Modifier tap (executes on release if pressed alone)
"super+b" = "browser"
"super+shift+b" = "browser2"
"super+return" = "kitty"
"super+f" = "dolphin"
"super+x" = "xkill"
"super+e" = "email"
"super+v" = "copyq toggle"
"super+w" = "whatsapp"
"shift+super+n" = "notetaker"

#-[UTILS]------------------------------------

"print" = "prtscr"
"super+p" = "prtscr"
"shift+print" = "/home/user/Workspace/tools/bin/screenshot-save"
"ctrl+print" = "bash -c \"xdg-open ~/Media/Pictures/temp.png\""
"ctrl+mute" = "mute_mic"

# Advanced behaviors
"f9.whileheld(50)" = "xdotool click 1"  # Auto-clicker: clicks every 50ms while held
"f10.toggle" = "xdotool click 1"        # Toggle: starts/stops loop on each press
"super+tab.switch" = ["window1", "window2", "window3"]  # Cycle through commands

# Media keys - uncomment to enable
#"volumeup" = "volume_up"
#"volumedown" = "volume_down"
#"mute" = "mute_toggle"

[command_variables]
edit_config = "kitty micro ~/.config/akeyshually/config.toml"

browser = "brave-browser --user-data-dir=/home/user/.config/BraveSoftware/1"
browser2 = "brave-browser --user-data-dir=/home/user/.config/BraveSoftware/2"
rofi = "~/.config/rofi/scripts/launcher_t7"
email = "flatpak run org.mozilla.Thunderbird"
mute_mic = "pactl set-source-mute @DEFAULT_SOURCE@ toggle"
whatsapp = "flatpak run com.rtosta.zapzap"
notetaker = "bash -c \"source ~/.bashrc && /home/user/.config/bash/bin/notetaker/notetaker\""
prtscr = "/home/user/Workspace/tools/bin/screenshot-save --temp"

# Media key commands (uncomment shortcuts above to use)
volume_up = "pactl set-sink-volume @DEFAULT_SINK@ +5%"
volume_down = "pactl set-sink-volume @DEFAULT_SINK@ -5%"
mute_toggle = "pactl set-sink-mute @DEFAULT_SINK@ toggle"
Shortcut Behaviors

Normal (default):

"super+t" = "kitty"  # Executes on key press

While Held (repeat while key is held):

"f9.whileheld" = "xdotool click 1"       # Uses default_loop_interval
"f9.whileheld(0.05)" = "xdotool click 1"   # Custom interval (50ms)
"f9.whileheld(0.015)" = "xdotool click"  # Sub-second intervals (15ms)
"f9.loop(50)" = "xdotool click 1"        # Alias for .whileheld

Toggle (start/stop on each press):

"f10.toggle" = "xdotool click 1"       # Loop continues after release
"f10.toggle(0.1)" = "xdotool click 1"  # Custom interval in seconds

Switch (cycle through commands):

"super+tab.switch" = ["cmd1", "cmd2", "cmd3"]  # Cycles on each press

Release timing:

"super.onrelease" = "rofi"  # Modifier tap: executes on release if pressed alone
"super+t.onrelease" = "cmd" # Executes when keys are released
Available Key Names

Modifiers: super, ctrl, alt, shift

Letters: a-z

Numbers: 0-9

Special keys: return/enter, space, tab, esc/escape, backspace, print/printscreen, delete, insert, home, end, pageup, pagedown

Arrows: left, right, up, down

Function keys: f1-f12

Media keys: Enabled via enable_media_keys = true in config.toml (see media-keys.toml for defaults)


Troubleshooting

"Permission denied" error:

groups | grep input  # Verify you're in input group
# If not there:
sudo usermod -aG input $USER
# Then logout and login

"No keyboards detected":

ls -l /dev/input/by-id/*kbd*  # Check devices exist
cat /dev/input/event* | head -c 1  # Test evdev access

Shortcut not triggering:

  • Keys must be lowercase in config (super+t not Super+T)
  • Verify command works: sh -c "your-command"
  • Check logs if running as systemd service: journalctl --user -u akeyshually

Enable debug logging:

LOGGING=1 akeyshually
akeyshually banner

About

Actually, this is a shortcut daemon that is configured by config file and is graphical session agnostic

Resources

License

Stars

Watchers

Forks

Packages

No packages published