COSMIC Chord

HomeAbout
Tue 17 Mar 2026

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:

chordappcommand
ctrl-alt-shift-fCOSMIC Filescoschord com.system76.CosmicFiles
ctrl-alt-shift-tCOSMIC Terminalcoschord com.system76.CosmicTerm
ctrl-alt-shift-eGNU Emacscoschord emacs
ctrl-alt-shift-wGoogle Chromecoschord 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 .