Controls Linux tiling window managers and desktop environments. It uses Unix sockets to handle communication with the client program. Development is currently focused on the tiling window manager Qtile.
Desktop automator designed to allow programmatic control of the desktop environments and general system stuff. It runs as a service in the background and is controlled via a client; the two communicate over a Unix Domain Socket. The project was started as an excuse to experiment with Unix Sockets, but a few additions to the original spec have made it quite useful! As of now it is only compatible with LeftWM, Qtile, and BSPWM as those are the environment I use. However support for more tiling window managers, and (maybe) floating window managers is planned for the future.
- configuring of layouts that can be done with ease.
- consistent API and endpoint makes controlling the system easy.
- simple programmatic API so you can write your own scripts to control the WM/DE and system.
- consistent across different WM and DE allowing one script to work across mutipple environments.
layouts allow for opening apps on specific workspaces, and optionally clearing that workspace. They also allow for running of arbitrary commands and will soon have the ability to tear themselves down.
- BSPWM (support is old but should still work)
- Qtile (support is old but should still work)
- LeftWM (tested and working as intended)
see spec.md
- systemd
- loginctl
- alsa
- playerctl
- xbacklight
- xrandr
- gtk-launch
- xdotool
I would describe the current state as good enough for basic usage.
(ideas the distant future/things I'm considering adding)
- 1. write a Mycroft skill to add voice control
- 2. write a rofi script to search through and select layouts.
- 3. add a "procedure", feature. it will be a list of command to run and will be able to be acivated from a layout files or by its self.
- 4. and a keystroke parameter to yaml layout files that will send keystrokes to the window. (for qtile this can use the
cmd_simulate_keypress
function from the qtile helper python library, for others it can use xdotool)
(things planned for the immediate/foreseeable future)
- change between full screen, tiled, floating, and pseudo_tiled.
- add simple xrandr/autorandr controls.
- restructure directories to be more rusty.
-
add pass through for querying BSPWM. - add better documentation. (ongoing).
- make layout configured with yaml.
- make layout function idempotent (add an option to only open the program if not already open)).
- give layouts the ability to tear them selves down.
- write an install.sh file as well as default config files.
- when launching a program make it use
gtk-launch
to launch desktop files. - make setting of layouts multi-threaded.
- write a rofi script to select between layouts.
- add Qtile support.
- add leftwm support.
- send logs to client and let the client print them as well.
- add a
commands
list to the config file. this will be a list of commands to run when the layout is loaded. these commands should be headless shell commands (commands that do not launch a gui of any sort). - deprecate iw dependency
- add support for Hyprland
- make hyprland plugin to integrate with Auto-desk
- add Auto-desk controls for Hyprland
- 1. make prototype/proof of concept.
- 2. rewrite in Rust/Golang. (this was done in Rust)
- 3. add misc features.
- 4. write systemd service.
- 5. add mycroft support. (repo)
- 6. add python module to be imported from qtile conf.
- 7. add leftwm support.
- 8. write rofi layout script. (repo)
- 9. finish port sensor. <= we are working on this. (everything below this is subject to change)
- 10. add finishing touches to BSPWM/LeftWM/Qtile support.
- BSPWM
- LeftWM
- Qtile