I recently upgraded my System76 laptop to Pop!_OS 24.04 LTS, and switched from X11 to Wayland in the process. I had been hearing about Wayland for a long time, but hadn't paid much attention. I was mostly interested in trying the new COSMIC desktop. I'm happy I made the switch, but there was one problem: the Window Chord programs I had written to do keyboard-only window manipulation no longer worked because they were dependent on X11. Fortunately, COSMIC's tiling window manager is good enough that I don't need most of that. It even remembers to move windows back to my big monitor when the laptop wakes up. The only feature of Window Chord I missed was the ability to launch or select apps up with a single keystroke. I wrote COSMIC Chord to fill that need. Thanks to Claude Code for making that a quick project.
COSMIC Chord, coschord, helps you stay focused while you switch apps. Given an app ID, it
will make sure that the app is running and has a window selected.
After you've putcoschordon a few keyboard shortcuts, when your monkey brain thinks "show
me web page," your fingers can make the right thing happen
instantly. No fiddling with the mouse, and no distractions.
I set up COSMIC's custom keyboard shortcuts (cosmic-settings keyboard) like this:
| chord | app | command |
|---|---|---|
| ctrl-alt-shift-f | COSMIC Files | coschord com.system76.CosmicFiles |
| ctrl-alt-shift-t | COSMIC Terminal | coschord com.system76.CosmicTerm |
| ctrl-alt-shift-e | GNU Emacs | coschord emacs |
| ctrl-alt-shift-w | Google Chrome | coschord google-chrome |
Usage: coschord [<app_id>] [<launch_command>...]
If there are matching windows, coschord will select the first one it finds. If one is already selected, coschord will select the next one.
If there are no matching windows, coschord will start the app using launch_command, e.g.:
coschord emacs /usr/local/bin/emacs
If you only supply app_id (e.g. coschord emacs), coschord will run the launch command for app_id found in ~/.config/coschord/commands.json.
To see the app IDs of all running programs, run coschord with no arguments.
Here's a sample commands.json configuration file:
{
"com.system76.CosmicFiles": ["cosmic-files"],
"com.system76.CosmicTerm": ["cosmic-term"],
"emacs": ["emacs"],
"google-chrome": ["google-chrome"]
}
You can find COSMIC Chord on Github. It is written in Rust. To build and install it:
cd coschord cargo build --release cargo install --path .