Skip to content

What is Rabbithole

SaintRyoh edited this page Jan 10, 2023 · 1 revision

Overview

rabbitholediagram drawio

Background

Post lockdown I found myself working from multiple locations with my laptop: from home and from cafes. While at Home I had two external monitors that I could hook up to my laptop, but when traveling, I naturally only had my laptop screen. If I began a project at home, then decided I needed a change of scenery I'd have to prepare myself to restore all my windows into a mobile workflow. Likewise once I returned home and reconnected my external monitors I'd have to reposition everything back into a workflow that worked for me. This process was very tedious, and added to it was that I'm sometimes working on multiple things asynchronously and projects might get mixed up.

I needed a way to pack up and work from anywhere without the cost of interrupting my workflow. So I came up with this project. It combines concepts from multiple window managers like Xmonad and AwesomeWM into one solution that will keep you organized while moving between docked and mobile setups.

Like AwesomeWM there's still the concept of "tags" to group together windows into a user-defined layout. But these tags are now distributed across all usable screens into an Xmonad-like workspace to keep you organized between screen configurations. Finally, you're able to have many of these workspaces that you can switch based on the task. It's like if Xmonad workspaces were nested into MATE workspaces.

Existing solutions

On Windows, when connecting additional monitors, your desktop is stretched across the new monitors effectively creating one big desktop. Likewise, when disconnecting monitors your desktop shrinks and the windows from the disconnected monitor will merge into one of the primary screens. When reconnecting monitors the desktop is stretched again, and the user will have to manually move his applications to the new screen.

On the latest version of macOS, virtual desktops are called "Spaces." Spaces allow you to create multiple virtual desktops and switch between them easily. You can use Spaces to organize your work by grouping related windows together on a single virtual desktop, or by separating work and personal windows onto different virtual desktops.

macOS

On the latest version of macOS, virtual desktops are called "Spaces." Spaces allow you to create multiple virtual desktops and switch between them easily. You can use Spaces to organize your work by grouping related windows together on a single virtual desktop, or by separating work and personal windows onto different virtual desktops.

On macOS, you can use multiple monitors with Spaces to create a more immersive and organized computing experience. When using multiple monitors with Spaces, each monitor can display a different Space, or you can span a single Space across multiple monitors.

Once your monitors are set up, you can use the Mission Control preferences to specify how you want your Spaces to be displayed on the monitors. You can choose to have each monitor display a different Space, or you can span a single Space across all of your monitors.

Proposed solution

Rabbithole is a window manager that allows users to create and switch between multiple virtual desktops, called "tags," and to further organize these tags into "workspaces." This allows users to easily categorize and access their work, and to focus on specific tasks or projects. Rabbithole includes a "global workspace" that allows each workspace to share tags by putting them in the always accessible global workspace. This can be useful for accessing common tools or references while working on different projects. Rabbithole can save workspaces, tags, and their respective Xclients into session files that can be restored during the next boot or transferred to other machines running Rabbithole. Rabbithole will be implemented using the Awesome Window Manager framework and will include a command line client that can be used with hotkey daemons such as sxhkd to interface with the window manager over dbus. GUI elements from existing desktop environments can also create bindings to interface with Rabbithole, although a default GUI will be optionally provided.

Design Goals

  • Provide a flexible and customizable system for organizing windows and virtual desktops
  • Allow users to easily create and switch between tags and workspaces using both the GUI and command line interface
  • Enable users to group related tags together in workspaces for better organization and productivity
  • Allow integration with hotkey daemons and existing desktop environments through the command line
  • Allow the creation of a global workspace that is accessible from all other workspaces, enabling the sharing of common tags between workspaces
  • Allow users to save and restore workspaces, tags, and their respective Xclients through session files

Features

  • Create and switch between multiple tags using the GUI, command line interface, or hotkey daemon
  • Group tags into workspaces using the GUI, command line interface, or hotkey daemon, including the ability to add tags to the global workspace
  • Customize the behavior of tags and workspaces using a configuration file, which can be edited to specify how windows are arranged within a tag or how workspaces are switched between
  • Use the command line interface or hotkey daemon to manage tags and workspaces from the terminal or through user-defined hotkeys
  • Optionally use the default GUI or create bindings for existing desktop environments to manage tags and workspaces
  • Save workspaces, tags, and their respective Xclients into session files that can be restored during the next boot or transferred to other machines running Rabbithole

Implementation Details

  • Rabbithole will be implemented in LUA using the Awesome Window Manager framework
  • The command line client will be implemented in LUA and will use dbus to communicate with the window manager
  • The default GUI, if used, will be implemented in LUA using a toolkit such as GTK or Qt
  • Existing desktop environments can create bindings to interface with Rabbithole using the command line client and dbus
  • The system for organizing tags and workspaces will be stored in a configuration file, which users can edit to customize the behavior of Rabbithole
  • Keyboard shortcuts will be configurable and will use a combination of the Control and Alt keys, with additional keys for specific actions such as creating a new tag or switching between workspaces. These shortcuts can be set using the command line interface or hotkey daemon.
  • Session files will be implemented using a serialization library such as JSON or YAML and will store the configuration of workspaces, tags

TL;DR

In the rabbithole window manager, virtual desktops, or "tags," can be organized into larger groups called "workspaces." This allows you to further categorize and organize your work by grouping related tags together in a single workspace. For example, you could create a workspace for all of your programming-related tags, and another workspace for all of your personal tags.

By using workspaces to group related tags together, you can easily switch between different sets of tags and focus on specific tasks or projects. You can also use workspaces to separate work and personal tags, or to divide tags by client or team. Using workspaces can help you stay organized and more productive by allowing you to quickly access the tags that you need for a particular task or project.

FAQ

How does your system differ from MacOs:

On macOS, virtual desktops are called "Spaces." Spaces allow you to create multiple virtual desktops and switch between them easily, which can be helpful for organizing your work or separating work and personal windows. In a similar way, your window manager's workspaces allow you to group related tags together and quickly switch between them to focus on specific tasks or projects.

One key difference between Spaces on macOS and workspaces in your window manager is that workspaces can contain multiple tags, while each Space on macOS is a single virtual desktop. This allows workspaces in your window manager to provide a more granular level of organization, as you can group together multiple tags that are related to a specific task or project. In contrast, each Space on macOS functions as an independent virtual desktop, and you would need to switch between multiple Spaces to access different sets of windows.