Create, reorder, group, and focus workspaces easily in i3. Fully configurable with enhanced polybar modules.

Overview

i3-wsman i3-wsman

Create, reorder, group, and focus workspaces fast and easily in i3.

Features

Focus Mode: Eliminate Distractions

Enable Focus Mode: Use groups and focus mode to hide workspaces so you can focus.

i3-wsman enables distrction free

Stay Focused, by limiting navigation to workspaces in the current focus mode.

i3-wsman allows you to stay focused

Allow Important Distractions Through: Urgent workspaces will peek through, so you don't miss anything.

i3-wsman allows important distractions through

Multitask: Right-click to focus multiple groups at a time.

i3-wsman allows you to multitask

Organize and Create Workspaces

No More Looping: Creating a workspace is now as easy as going to the next workspace! Workspaces are created automatically.

i3-wsman creates new workspaces

Organize Workspaces: Reorder workspaces left and right to optimize workflow.

i3-wsman allows reordering workspaces

Create Adjacent Workspaces: Squeeze in a new workspace to the left or right, so you don't have to reorder!

i3-wsman allows creating adjacent workspaces

Current Features

Focus Mode

  • Assign workspaces to groups
  • Select one or more groups to focus
    • Optional: Auto-focus on nearest workspace
  • Multi-monitor support
    • Optional: Per-monitor groups and focus mode

Create and Navigate

  • Reorder workspaces
  • Create adjacent workspace
  • Next/Prev Workspace
    • Optional: Create new, loop, or do nothing
  • New workspaces inherit the group of the current workspace

Configuration

  • i3-wsman configuration
    • New Startup, Create, and Navigation options coming
  • Polybar module formatting and styling

Coming Soon

  • Finish i3-wsman configuration
  • Polybar formatting:
    • Last missing label styles: label-*-minlen, -maxlen, -ellipsis, -alignment
    • Add missing labels: label-separator, label-output-separator
  • CLI Configurator for config and polybar styling
  • Move window/container to next/prev workspace
  • Move window/container to new workspace on the left/right
  • Auto-assign new workspace based on application

Future Roadmap

  • Polybar animations for actions (fade out workspaces, animation for swapping, etc...)
  • New UI for assigning Workspace to Group
  • Workspace Picker UI: Preview workspaces Expose-style
  • Assign a workspace to multiple groups (maybe?)

Getting Started

This project is brand new. These steps will become easier and more automated soon. Star and watch this repo for updates!

Build Manually

  1. Clone this repo
  2. Build the project with cargo build --release

Install

Distro-specific packages will be coming soon. Star and watch this repo for updates!

  • Install i3-wsm by placing it in your path

Configure

  1. Copy examples/i3-wsman.toml to ~/.config/i3/i3-wsman.toml (CLI Configurator coming soon)
  2. Update your ~/.config/i3/config
    • Be sure to add exec --no-startup-id "i3-wsman polybar watch"
  3. Update your ~/.config/polybar/config.ini
Click to see an example i3/config
# switch to workspace
bindsym $mod+1 exec --no-startup-id "i3-wsman goto 1"
bindsym $mod+2 exec --no-startup-id "i3-wsman goto 2"
bindsym $mod+3 exec --no-startup-id "i3-wsman goto 3"
bindsym $mod+4 exec --no-startup-id "i3-wsman goto 4"
bindsym $mod+5 exec --no-startup-id "i3-wsman goto 5"
bindsym $mod+6 exec --no-startup-id "i3-wsman goto 6"
bindsym $mod+7 exec --no-startup-id "i3-wsman goto 7"
bindsym $mod+8 exec --no-startup-id "i3-wsman goto 8"
bindsym $mod+9 exec --no-startup-id "i3-wsman goto 9"
bindsym $mod+0 exec --no-startup-id "i3-wsman goto 10"

# Left/Right Navigation
# Ctrl + Super + Left/Right
bindsym $mod+Ctrl+Left exec --no-startup-id "i3-wsman prev create group nogroup output"
bindsym $mod+Ctrl+Right exec --no-startup-id "i3-wsman next create group nogroup output"

# Reorder Workspace
# Ctrl + Super + Shift + Left/Right
bindsym $mod+Ctrl+Shift+Left exec --no-startup-id "i3-wsman reorder left"
bindsym $mod+Ctrl+Shift+Right exec --no-startup-id "i3-wsman reorder right"

# Create adjacent workspace
# Ctrl + Alt + Super + Left/Right
bindsym $mod+Ctrl+Mod1+Left exec --no-startup-id "i3-wsman adjacent left"
bindsym $mod+Ctrl+Mod1+Right exec --no-startup-id "i3-wsman adjacent right"

# Assign workspace to group
# Super + Shift + g
bindsym $mod+Shift+g exec --no-startup-id i3-input -F 'exec --no-startup-id "i3-wsman group assign %s"' -P 'Group: '

# Rename workspace
# Super + Shift + n
bindsym $mod+Shift+n exec --no-startup-id i3-input -F 'exec --no-startup-id "i3-wsman rename %s"' -P 'Workspace Name: '

# Start the i3-wsman watcher
exec --no-startup-id "i3-wsman polybar watch"
Click to see an example polybar/config.ini
[bar/my-bar]
; Must enable ipc!
enable-ipc = true
; ...
modules-left = i3wsm-groups i3wsm-workspaces i3wsm-toggle-hidden

[module/i3wsm-groups]
type = custom/ipc
hook-0 = i3-wsman polybar module-groups
initial = 1
format = <label>
format-font = 3

[module/i3wsm-toggle-hidden]
type = custom/ipc
hook-0 = i3-wsman polybar module-toggle-hidden
initial = 1
format = <label>
format-font = 3

[module/i3wsm-workspaces]
type = custom/ipc
hook-0 = i3-wsman polybar module-workspaces
initial = 1
format = <label>
format-font = 3
You might also like...
Yet Another Kalman Filter Implementation. As well as Lie Theory (Lie group and algebra) on SE(3). [no_std] is supported by default.

yakf - Yet Another Kalman Filter Yet Another Kalman Filter Implementation, as well as, Lie Theory (Lie group, algebra, vector) on SO(3), SE(3), SO(2),

Uses the cardano mini-protocols to receive every block and transaction, and save them to a configurable destination

cardano-slurp Connects to one or more cardano-node's, streams all available transactions, and saves them to disk (or to S3) in raw cbor format. Usage

`decaf377-rdsa` is a randomizable signature scheme using the `decaf377` group.

decaf377-rdsa is a variant of RedDSA, instantiated using the decaf377 group. Signatures are parameterized by domain (for instance, Binding and SpendAu

An NTP implementation in Rust, supported by Internet Security Research Group's Prossimo project.

NTPD-rs NTPD-rs is an implementation of NTP completely written in Rust, with a focus on exposing a minimal attack surface. The project is currently in

Librarian runs pre-configured commands against a group of files that match a set of filters

Filesystem Librarian Librarian runs pre-configured commands against a group of files that match a set of filters. The group of files is called a libra

Sky Island Showdown: CSE 125 Spring 2023 Group 5 Project, a Multiplayer, 3D Game

As the Wind Blows 💨 Project for CSE 125 Spring 2023, Group 5 Homepage » As the Wind Blows is a 3D multiplayer game, created with Rust, WGPU, and a to

An optimizing IK solver based on the Lie group of rigid transforms SE(3)
An optimizing IK solver based on the Lie group of rigid transforms SE(3)

OptIK A fast inverse kinematics solver for arbitrary serial chains, providing Rust and Python programming interfaces. The implementation is similar to

Monorepo for dprint—a pluggable and configurable code formatting platform

dprint Monorepo for dprint—a pluggable and configurable code formatting platform. This project is under active early development. I recommend you chec

Simple OpenAI CLI wrapper written in Rust, feat. configurable prompts and models

Quick Start git clone https://github.com/ryantinder/ask-rs cd ask cargo install --path . Example ask tell me about the Lockheed Martin SR71 The Loc

Comments
  • Refactor for Global and Polybar Styling Configuration

    Refactor for Global and Polybar Styling Configuration

    General

    • [x] Refactor common into separate modules
    • [x] Update all commands to use new refactored code
      • [x] i3-wsman group * command
      • [x] New i3-wsman rename * command for workspaces
      • [x] All other commands
    • [ ] Polybar config
      • [x] label %tokens%
      • [ ] label-NAME-maxlen
      • [ ] label-NAME-minlen
      • [ ] label-NAME-alignment
      • [ ] label-NAME-ellipsis
    • [x] Config Examples
      • [x] i3 Configuration
      • [x] Polybar Configuration

    Polybar Configuration

    • [ ] [i3-wsman]
      • [x] pin-workspaces = bool
      • [x] show-urgent = bool
      • [x] show-hidden-urgent = bool
      • [ ] ~strip-wmnumbers = bool~ (Replaced by %num% label token)
      • [ ] ~index-sort = bool~ (i3-wsman augments position, so this is not possible)
      • [x] enable-click = bool
      • [ ] enable-scroll = bool
      • [ ] wrapping-scroll = bool
      • [ ] reverse-scroll = bool

    module-show-hidden

    • [x] [show-hidden-toggle]
      • [x] format-* (from Polybar Formatting)
      • [x] label-on, label-on-*
      • [x] label-off, label-off-*
      • [x] label-disabled, label-disabled-*

    module-workspaces

    • [x] [workspaces]
      • [x] format = <label-state>
      • [ ] ~format = <label-mode>~ (coming in module-mode)
      • [ ] label-separator
      • [ ] label-output-separator
      • [x] label-focused
      • [x] label-visible
      • [x] label-unfocused
      • [x] label-urgent
      • [x] [workspaces/group-hidden]
        • [x] label-focused
        • [x] label-visible
        • [x] label-unfocused
        • [x] label-urgent
      • [x] [workspaces/unassigned]
        • [x] label-focused
        • [x] label-visible
        • [x] label-unfocused
        • [x] label-urgent

    module-workspaces

    • [x] [groups]
      • [x] format = <label-all><label-state>
      • [x] label-all
      • [x] label-all-activated
      • [x] label-focused
      • [x] label-unfocused
      • [x] label-activated
      • [x] label-hidden-unfocused
      • [x] label-hidden-focused

    Global Configuration

    Non-blocker: Will be completed in the next PR :upside_down_face:

    • [ ] [startup]
      • [ ] initial_workspace_group
      • [x] active_workspace_groups
      • [x] show_hidden_workspaces
    • [x] [groups]
      • [x] default_groups
      • [x] always_visible
      • [x] sort_method
      • [x] sort_default_first
      • [x] unique_groups_on_outputs
    • [x] [focus]
      • [x] hide_unassigned_workspaces
      • [x] auto_focus_nearest_group
    • [ ] [create]
      • [ ] inherit_focused_group
      • [ ] inherit_nearest_active_group
      • [ ] default_group
    • [x] [navigation]
      • [x] allow_urgent
    • [x] [navigation.next]
      • [x] behavior
    • [x] [navigation.prev]
      • [x] behavior
    • [x] [navigation.goto]
      • [x] restrict_to_output
      • [x] behavior
      • [x] include_hidden_groups
      • [x] honor_show_hidden
    opened by Swivelgames 0
  • Remember last focused workspace when switching groups

    Remember last focused workspace when switching groups

    When toggling between two groups, rather than jumping to the closest workspace, there should be an option to "remember" the workspace that was focused when the previous group was activated and switch to that instead.

    enhancement 
    opened by Swivelgames 0
  • Create Polybar Daemon

    Create Polybar Daemon

    i3-wsman polybar run

    • [ ] Configuration
      • [ ] Configure bars per output
    • [ ] Start bars for each output (as specified in config)
    • [ ] Run watch to notify i3-wsman modules
    enhancement 
    opened by Swivelgames 0
  • Create `i3-wsman init` function

    Create `i3-wsman init` function

    • [ ] Read $XDG_CONFIG_HOME/polybar/config.ini, copy internal/i3
      • [ ] Support for different configurations for different bars??
    • [ ] Init Quiz / Walkthrough to customize config first time around
    enhancement 
    opened by Swivelgames 0
Releases(v0.2.4)
  • v0.2.4(Sep 3, 2023)

    What changed?

    • [x] Fixed mutex race condition

    Full Changelog: https://github.com/i3-wsman/i3-wsman/compare/v0.2.3...v0.2.4

    Can I use this on insert-distro-here?

    Yes! The only requirement for this to work is polybar and i3! Feel free to submit issues if you have them!

    How do I use this?

    • A CLI Configurator is coming soon, until then:
      • Download the binary and place it in your PATH
    • Review the configuration files and copy them to the appropriate locations
      • Copy i3-wsman.toml to ~/.config/i3/i3-wsman.toml
      • Copy i3-wsman.ini to ~/.config/polybar/i3-wsman.ini
        • Almost everything from your existing internal/i3 polybar config can be copied into this file. Review it thoroughly and copy/paste the properties where they go.
        • For styling, review Polybar's Formatting and i3 wiki pages
    • Review the README.md file and set up your ~/.config/i3/config and ~/.config/polybar/config.ini files to use i3-wsman for everything outline

    What's next?

    Top priority items for next release:

    • [ ] CLI Configurator (Copies existing polybar config, walkthrough of features, i3 keybind keybind configurator)
    • [ ] Documentation (Reference, Tutorials, Topic Guides)
    Source code(tar.gz)
    Source code(zip)
    i3-wsman(5.77 MB)
  • v0.2.3(Sep 2, 2023)

    What changed?

    • [x] Fixed additional issue with auto_focus_nearest_group
    • [x] Updated README.md with (subjectively) better keybinds
    • [x] Adjustment to adjacent

    Full Changelog: https://github.com/i3-wsman/i3-wsman/compare/v0.2.2...v0.2.3

    How do I use this?

    • Check out v0.2.4 for the most stable release
    Source code(tar.gz)
    Source code(zip)
    i3-wsman(5.77 MB)
  • v0.2.2(Sep 2, 2023)

    What changed?

    • [x] Fixed issue where adjacent left created workspace to the right

    Full Changelog: https://github.com/i3-wsman/i3-wsman/compare/v0.2.1...v0.2.2

    How do I use this?

    • Check out v0.2.3 for the most stable release
    Source code(tar.gz)
    Source code(zip)
    i3-wsman(5.77 MB)
  • v0.2.1(Sep 2, 2023)

    What changed?

    • [x] Fixed auto_focus_nearest_group
    • [x] Assigning workspace to a group does not always work

    Full Changelog: https://github.com/i3-wsman/i3-wsman/compare/v0.2.0...v0.2.1

    How do I use this?

    • Check out v0.2.3 for the most stable release
    Source code(tar.gz)
    Source code(zip)
    i3-wsman(5.77 MB)
  • v0.2.0(Sep 2, 2023)

Owner
i3-wsman
Create, reorder, group, and focus workspaces easily in i3. Fully configurable with enhanced polybar modules.
i3-wsman
An enhanced history(1) for bash

history This is a replacement for the history builtin in bash. It has a couple of additional features that relative to the one included with bash: Con

Robert T. McGibbon 4 Aug 25, 2022
An enhanced version of filetime, which can set file creation time on Windows.

filetime_creation Documentation An enhanced version of filetime, which can set file creation time on Windows. Internally, this use SetFileTime Win32 A

29 4 Dec 5, 2022
An enhanced search engine just for Lemmy/Fediverse

Please Read If anyone wants to help contribute to this, please feel free to reach out to me. You can obviously find me on Lemmy, mainly https://lemmy.

null 51 Jul 4, 2023
Rust version of webpack/enhanced-resolve

Oxc Resolver Rust port of enhanced-resolve. built-in tsconfig-paths-webpack-plugin support extending tsconfig defined in tsconfig.extends support path

oxc 9 Dec 30, 2023
zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets you're watching easily into watchlists for easy access on your terminal.

zigfi zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets

Aldrin Zigmund Cortez Velasco 18 Oct 24, 2022
A fully modular window manager, extremely extensibile and easily approachable.

AquariWM is a fully modular window manager, allowing extreme extensibility while remaining easily approachable. Installation AquariWM is currently in

AquariWM Window Manager 8 Nov 14, 2022
An utility application to help managing your C++ OI workspaces.

oi_helper oi_helper is an utility application to help managing your C++ OI workspaces. Why oi_helper We all know that we often need a project manager

27Onion Nebell 11 Aug 24, 2022
Awesome-like workspaces for Hyprland

Hyprsome Hyprsome is a binary that interacts with Hyprland's Unix socket to make workspaces behave similarly to AwesomeWM in a multi-monitor setup. If

null 17 Jan 1, 2023
A visual studio code's workspaces organizer written in Rust

ruscode A visual studio code's workspaces organizer written in Rust Supports Linux, and Windows. What is a workspaces organizer? After months of or ev

晧暐 8 Dec 15, 2022
Python/Rust implementations and notes from Proofs Arguments and Zero Knowledge study group

What is this? This is where I'll be collecting resources related to the Study Group on Dr. Justin Thaler's Proofs Arguments And Zero Knowledge Book. T

Thor 65 Dec 16, 2022