diff --git a/README.md b/README.md new file mode 100644 index 0000000..af7f385 --- /dev/null +++ b/README.md @@ -0,0 +1,128 @@ +# i3toolwait + +Launch a program and move it to the correct workspace. + +## Usage + +`i3toolwait -c FILE` + +Optionally start multiple programs and wait for their windows to appear. +Once these windows appeared a custom i3 command can be specified. + +## Example + +```yaml +--- +timeout: 10000 +init: | + (begin + (define i3_path ".container.window_properties.class") + (define sway_path ".container.app_id") + (defun idmatch (name) (== (if (has-key sway_path) (load sway_path) (load i3_path)) name)) + (defun match (name) (and (== (load ".change") "new") (idmatch name))) + (defun match-load (name) (if (match name) (load ".container.id") F)) + ) +cmd: 'workspace 1' +programs: +- run: 'exec gtk-launch librewolf' + cmd: 'for_window [con_id="{result}"] focus; move container to workspace 1' + match: '(match-load "LibreWolf")' +- run: 'exec gtk-launch nheko || gtk-launch io.element.Element' + cmd: 'for_window [con_id="{result}"] focus; move container to workspace 2' + match: '(if (or (match "Electron") (match "nheko")) (load ".container.id") F)' +- run: 'exec gtk-launch thunderbird' + cmd: 'for_window [con_id="{result}"] focus; move container to workspace 3' + match: '(match-load "thunderbird")' +- run: 'exec nm-applet --indicator' +- run: 'exec blueman-applet' +- run: 'exec gtk-launch org.kde.kdeconnect.nonplasma' +- run: 'exec gtk-launch syncthing-gtk' +``` + +## Configuration + +The configuration file is in YAML format. + + +### Configuration + +#### timeout: int + +_Optional_ _Default_ `3000` + +Total program timeout in ms. + +#### init: String + +_Optional_ _Default_ `""` + +Initialization program; Used to initialize the environment, useful +to define custom functions which should be available everywhere. + +#### cmd: String + +_Optional_ _Default_ `""` + +A final i3 command to be executed before exiting. + +#### programs: List[Union[[Program](#program), [Signal](#signal)]] + +_Optional_ _Default_ `[]` + +A list of programs to execute. + +### Program + +Launch all programs using [`run`](#run-string) and execute +[`cmd`](#cmd-string-1) once [`match`](#match-string) matches +a window. + +#### match: String + +_Required_ + +A lisp program which analyzes the i3 window event and returns a value. +If the return value is `false` the window does not match and no +further processing occurs. Otherwise the i3 command +[`cmd`](#cmd-string-1). +will be executed. + +#### cmd: String + +_Required_ + +A i3 command. Can contain a format `{result}` which gets replaced +by the output of the match command. + +**Example:** + +`for_window [con_id="{result}"] focus; move container to window 1` + +#### run: String + +_Optional_ _Default_ `null` + +A i3 command which is run at program startup, can be used to launch +programs. + +**Example:** + +`exec gtk-launch firefox` + +### Signal + +Programs are launched in order and only advance after +[`timeout`](#timeout-int-1) or after receiving signal +`SIGUSR1`. + +#### run: String + +_Optional_ _Default_ `null` + +A i3 command. + +#### timeout: int + +_Optional_ _Default_ `500` + +How long to wait for the signal in ms.