Skip to content

greenm01/eww-triad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eww-triad

eww-triad is a Rust client for Triad native IPC. It connects to Triad's Unix socket, reads the compositor state, and projects that state into JSON shaped for Eww.

The crate is the main interface. The eww-triad binary uses the same client for Eww configs and shell scripts.

Rust Crate

Use the crate from Rust code instead of shelling out to the binary:

eww-triad = { version = "0.1", default-features = false }
use eww_triad::{Client, QueryRequest};

fn main() -> eww_triad::Result<()> {
    let client = Client::connect_default()?;
    let state = client.eww_state_once()?;
    let capabilities = client.query(QueryRequest::Capabilities)?;

    println!("{}", serde_json::to_string(&state)?);
    println!("{capabilities}");
    Ok(())
}

The package name is eww-triad; the Rust crate name is eww_triad.

Enable Tokio when your project already runs on an async runtime:

eww-triad = { version = "0.1", default-features = false, features = ["tokio"] }

See docs/rust-api.md for the library API.

Binary

Install the command-line wrapper:

cargo install eww-triad

During local development:

cargo run -- listen

Stream Eww-friendly state:

eww-triad listen

Read state once:

eww-triad once

Read native Triad replies:

eww-triad query capabilities
eww-triad query layout-state

Stream raw native events:

eww-triad event-stream --events state,layout,window

Send commands:

eww-triad focus-workspace 2
eww-triad focus-window 4278190198
eww-triad switch-layout
eww-triad set-layout scroller --workspace 2
eww-triad action move-window-to-workspace --payload '{"id":4278190198,"workspace_idx":2,"follow":true}'
eww-triad dispatch-binding key Super+Return

Socket lookup follows this order: --socket, $TRIAD_SOCKET, then $XDG_RUNTIME_DIR/triad.sock.

See docs/native-ipc.md for the CLI and JSON contract.

Eww Example

(deflisten triad :initial "{}" "eww-triad listen")

(defwidget triad-workspaces []
  (box :class "workspaces"
    (for workspace in {triad.workspaces}
      (button :class {workspace.is_active ? "active" : workspace.occupied ? "occupied" : "empty"}
              :onclick "eww-triad focus-workspace ${workspace.workspace_idx}"
        {workspace.workspace_idx}))))

See examples/eww for a starter config.

About

Native Triad IPC for Eww

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages