3 releases
new 0.1.2 | Dec 25, 2024 |
---|---|
0.1.1 | Dec 24, 2024 |
0.1.0 | Dec 22, 2024 |
#55 in GUI
146 downloads per month
70KB
1.5K
SLoC
About the Project
The utility extends the standard functionality of the i3 and Sway window managers.
Main features include:
- Workspace groups. Useful when working on multiple projects simultaneously, allowing you to extend the standard workspace functionality ($mod+1, $mod+2, … $mod+9) to multiple groups, organized by project. You can configure it so that $mod+N switches workspaces only within the current group, while also enabling the creation of additional groups and switching between them.
- Event handler. A simple way to define event-handling logic via a configuration file.
Installation
Currently installation is only possible directly from the source.
Install Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Install the project:
cargo install i3im
Getting started
The utility has a robust command-line interface. Don’t hesitate to call it with help
.
To start, you need to create a configuration file. You can do this with the following command:
i3im config generate > $HOME/.config/i3im.yaml
Workspace groups
Add the following to your i3 configuration:
bindsym $mod+1 exec i3im focus workspace 1
bindsym $mod+2 exec i3im focus workspace 2
bindsym $mod+3 exec i3im focus workspace 3
bindsym $mod+4 exec i3im focus workspace 4
bindsym $mod+5 exec i3im focus workspace 5
bindsym $mod+6 exec i3im focus workspace 6
bindsym $mod+7 exec i3im focus workspace 7
bindsym $mod+8 exec i3im focus workspace 8
bindsym $mod+9 exec i3im focus workspace 9
bindsym $mod+0 exec i3im focus workspace 10
bindsym $mod+Shift+1 exec i3im move window-to-group-workspace 1
bindsym $mod+Shift+2 exec i3im move window-to-group-workspace 2
bindsym $mod+Shift+3 exec i3im move window-to-group-workspace 3
bindsym $mod+Shift+4 exec i3im move window-to-group-workspace 4
bindsym $mod+Shift+5 exec i3im move window-to-group-workspace 5
bindsym $mod+Shift+6 exec i3im move window-to-group-workspace 6
bindsym $mod+Shift+7 exec i3im move window-to-group-workspace 7
bindsym $mod+Shift+8 exec i3im move window-to-group-workspace 8
bindsym $mod+Shift+9 exec i3im move window-to-group-workspace 9
bindsym $mod+Shift+0 exec i3im move window-to-group-workspace 10
bindsym $mod+Shift+s exec i3im focus wm-workspace "`i3im list wm-workspaces | rofi -dmenu -p 'Switch to workspace'`"
Note that the last command uses rofi.
Now, with the $mod+Shift+s key combination, you can create a new workspace group. Within the group, switching between workspaces works with the usual keys. You can return to the default group (which has no name) using the same key combination — $mod+Shift+s. Similarly, you can create multiple workspace groups if needed.
Event handler
i3im can operate in event-handler mode. To do this, run:
i3im listen
By default, the list of handlers is empty. They need to be described in the configuration file under the
window_event_handlers
and workspace_event_handlers
sections. Each entry consists of two elements:
condition_list
: A list of conditions that must be met for the handler to activate.action
: The action to be performed when the conditions are met.
You can see the full list of available conditions and actions by calling the configuration help:
i3im config documentation
Example: Increasing brightness for fullscreen windows
Add the following to your configuration:
window_event_handlers:
# Event handler for entering fullscreen mode
- condition_list:
# Event type: fullscreen mode change
- EventType: [ FullscreenMode ]
# New fullscreen mode status: activated
- NodeFullscreenMode: Fullscreen
action:
# Execute a shell command
ShellCommand:
command: ~/.config/i3/scripts/brightness_autoset.sh 100
# Event handler for exiting fullscreen mode
- condition_list:
# Event type: fullscreen mode change
- EventType: [ FullscreenMode ]
# New fullscreen mode status: not activated
- NodeFullscreenMode: None
action:
# Execute a shell command
ShellCommand:
command: ~/.config/i3/scripts/brightness_autoset.sh
Content of the script ~/.config/i3/scripts/brightness_autoset.sh
:
#! /bin/sh
DEFAULT_BRIGHTNESS='20'
STATE_FILE="$XDG_STATE_HOME/brightness_autoset"
BRIGHTNESS="$1"
if [ -z "$BRIGHTNESS" ]; then
BRIGHTNESS="$(cat "$STATE_FILE" 2>/dev/null || echo "$DEFAULT_BRIGHTNESS")"
brightnessctl set "${BRIGHTNESS}%"
exit 0
fi
brightnessctl brightnessctl -m | cut -d, -f4 | tr -d % > "$STATE_FILE"
brightnessctl set "${BRIGHTNESS}%"
Example: Automatically closing Jitsi sharing notification windows
Many find it annoying that the Jitsi video conferencing system automatically shows a notification window about sharing. You can automatically close it using the following workaround:
window_event_handlers:
- condition_list:
# Event type: creation of a new window
- EventType: [ New ]
# The window title must match the regular expression
- Title:
Regex:
regex: 'jitsi.*is sharing'
action:
# Execute a shell command
ShellCommand:
command: xdotool windowclose "$I3IM_CONTAINER_WINDOW_ID"
Example: Retrieving environment variables
In the example above, you may have noticed the environment variable $I3IM_CONTAINER_WINDOW_ID
. To retrieve the full
list of variables, you can attach an empty condition to an event:
window_event_handlers:
- condition_list: []
action:
# Execute a shell command
ShellCommand:
command: env | grep I3IM_ > /tmp/i3im-environment-list.txt
You can do the same for workspace events.
Debugging
By default, the utility writes logs to syslog. You can force it to write logs to the console by running it with the following environment variable:
RUST_LOG=debug i3im listen
# The same, with logging level "info":
RUST_LOG=info i3im listen
Dependencies
~8–18MB
~237K SLoC