# Worm - a floating, tag based window manager

**URL:** <https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298>\
**Category:** Lounge\
**Created:** [October 2, 2021, 2:10am UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298 "2021-10-02T02:10:57Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 2:10am UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/1 "2021-10-02T02:10:57Z")

</div>

I’ve spent quite a while of my spare time writing a X11 window manager over the past couple weeks, as a fun side project.  
It is:

- reparenting (draws titlebars)
- floating (a tiling layout is also planned)
- IPC based
- has tags (right now they only function like workspaces, but it’s very trivial to add IPC commands for more complicated use-cases)
- written in pure Rust (later rewritten in Nim)

Check it out!

> **[GitHub - codic12/worm: A dynamic, tag-based window manager written in Nim](https://github.com/codic12/worm/)**
>
> A dynamic, tag-based window manager written in Nim - GitHub - codic12/worm: A dynamic, tag-based window manager written in Nim

![](https://forum.endeavouros.com/uploads/default/original/3X/f/c/fc4d102f02d97d86a52fe9df31150eea9cf97ea2.jpeg)

---

<div class="post-metadata">

**Author:** ![flyingcakes](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/flyingcakes/32/6218_2.png) [@flyingcakes](https://forum.endeavouros.com/u/flyingcakes)\
**Post date:** [October 2, 2021, 2:17am UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/2 "2021-10-02T02:17:39Z")

</div>

> [@codic12](#):
>
> written in pure Rust

🦀  
yes

---

<div class="post-metadata">

**Author:** ![andrewb](https://forum.endeavouros.com/letter_avatar_proxy/v4/letter/a/85e7bf/32.png) [@andrewb](https://forum.endeavouros.com/u/andrewb)\
**Post date:** [October 2, 2021, 9:14am UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/3 "2021-10-02T09:14:47Z")

</div>

Looks pretty interesting! This won’t show up as an option at login or under an icon one has to click to start it at login, will it?

---

<div class="post-metadata">

**Author:** ![manuel](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/manuel/32/396_2.png) [@manuel](https://forum.endeavouros.com/u/manuel)\
**Post date:** [October 2, 2021, 10:22am UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/4 "2021-10-02T10:22:22Z")

</div>

@codic12  
Are you planning to write a PKGBUILD for it? 😅

---

<div class="post-metadata">

**Author:** ![niksondistrohopper](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/niksondistrohopper/32/35349_2.png) [@niksondistrohopper](https://forum.endeavouros.com/u/niksondistrohopper)\
**Post date:** [October 2, 2021, 11:41am UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/5 "2021-10-02T11:41:23Z")

</div>

if you need more screenshots for this, i can help you

---

<div class="post-metadata">

**Author:** ![flyingcakes](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/flyingcakes/32/6218_2.png) [@flyingcakes](https://forum.endeavouros.com/u/flyingcakes)\
**Post date:** [October 2, 2021, 2:44pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/6 "2021-10-02T14:44:50Z")

</div>

I’m on it 😉

Edit : @moson did it. Thanks!

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 3:35pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/7 "2021-10-02T15:35:23Z")

</div>

Thanks, I have no idea how 😉

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 3:37pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/8 "2021-10-02T15:37:39Z")

</div>

well, it can by constructing a simple worm.desktop file and putting it in /usr/share/xsessions:

```auto
[Desktop Entry]
Encoding=UTF-8
Name=Worm
Comment=Floating, tag based window manager
Exec=worm
Type=XSession

```

(here worm should be in the global path, or otherwise you can change the Exec= line to point to it).

I’ll add these instructions to the readme too.

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 3:37pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/9 "2021-10-02T15:37:54Z")

</div>

go ahead!

---

<div class="post-metadata">

**Author:** ![moson](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/moson/32/78325_2.png) [@moson](https://forum.endeavouros.com/u/moson)\
**Post date:** [October 2, 2021, 3:40pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/10 "2021-10-02T15:40:55Z")

</div>

> **PKGBUILD**
>
> ```auto
> _pkgbase='worm'
> pkgname='worm-git'
> pkgdesc="A floating, tag-based window manager written in Rust"
> pkgver=0.1.0.7.g15c2d00
> pkgrel=1
> arch=('x86_64')
> url="https://github.com/codic12/worm"
> license=('unknown')
> makedepends=('cargo')
> source=("$_pkgbase::git+$url.git")
> sha256sums=('SKIP')
> 
> pkgver() {
> cd "$_pkgbase"
> echo "$(grep '^version =' Cargo.toml|head -n1|cut -d\" -f2|cut -d\- -f1).$(git rev-list --count HEAD).g$(git rev-parse --short HEAD)"
> }
> 
> build(){
> cd "$_pkgbase"
> cargo build --release --locked
> }
> 
> package() {
> cd "$_pkgbase"
> install -D -m755 "target/release/worm" "$pkgdir/usr/bin/worm"
> install -D -m755 "target/release/wormc" "$pkgdir/usr/bin/wormc"
> }
> 
> ```

Not sure what to put as deps though. xorg obviously.

I’m just getting a black screen when I run worm though 🤔

@codic12 You may want to add a license.

I can publish it to the AUR if you want.

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 3:47pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/11 "2021-10-02T15:47:22Z")

</div>

> I’m just getting a black screen when I run worm though 🤔

yeah, I haven’t added an autostart script yet, so that’s expected; you can go to another tty and do `DISPLAY=:1 someapp` (or if you don’t have another wm running somewhere else, set DISPLAY to `:0`). I’ll get to the autostart script later today, that should be fairly trivial.

Thanks for packaging! Added a MIT license, I think the xorg dep is enough for runtime.

Feel free to publish it to the AUR!

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 4:50pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/12 "2021-10-02T16:50:51Z")

</div>

I’ve just added support for autostarting. You can make an executable ~/.config/worm/autostart and it will run.

---

<div class="post-metadata">

**Author:** ![moson](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/moson/32/78325_2.png) [@moson](https://forum.endeavouros.com/u/moson)\
**Post date:** [October 2, 2021, 4:58pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/13 "2021-10-02T16:58:25Z")

</div>

Github is good with timezones lol

![image](https://forum.endeavouros.com/uploads/default/original/3X/b/9/b949105a64f99c859657ee7db8146b92f1738863.png)

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 5:05pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/14 "2021-10-02T17:05:36Z")

</div>

My laptop’s timezone is broken and I never bothered to fix it; probably from that

---

<div class="post-metadata">

**Author:** ![moson](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/moson/32/78325_2.png) [@moson](https://forum.endeavouros.com/u/moson)\
**Post date:** [October 2, 2021, 5:32pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/15 "2021-10-02T17:32:31Z")

</div>

🙂

Here’s the AUR package:

[https://aur.archlinux.org/packages/worm-git/](https://aur.archlinux.org/packages/worm-git/)

testers are welcome. 😉

---

<div class="post-metadata">

**Author:** ![codic12](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/codic12/32/23959_2.png) [@codic12](https://forum.endeavouros.com/u/codic12)\
**Post date:** [October 2, 2021, 5:37pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/16 "2021-10-02T17:37:58Z")

</div>

Thanks a lot!  
I’ve added a link to the README. The package works perfectly on my system.

---

<div class="post-metadata">

**Author:** ![ParanoidNemo](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/paranoidnemo/32/38486_2.png) [@ParanoidNemo](https://forum.endeavouros.com/u/ParanoidNemo)\
**Post date:** [October 2, 2021, 5:59pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/17 "2021-10-02T17:59:12Z")

</div>

Will test as soon as I can! Thank you for your work!

---

<div class="post-metadata">

**Author:** ![moson](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/moson/32/78325_2.png) [@moson](https://forum.endeavouros.com/u/moson)\
**Post date:** [October 2, 2021, 6:26pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/18 "2021-10-02T18:26:16Z")

</div>

👍 If you want to make versioned releases at some point, let me know.  
Then we can add a “normal”/versioned -worm- package as well.

---

<div class="post-metadata">

**Author:** ![Kresimir](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/kresimir/32/73739_2.png) [@Kresimir](https://forum.endeavouros.com/u/Kresimir)\
**Post date:** [October 2, 2021, 7:12pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/19 "2021-10-02T19:12:53Z")

</div>

This is fantastic. Great work @codic12!

---

<div class="post-metadata">

**Author:** ![s4ndm4n](https://forum.endeavouros.com/user_avatar/forum.endeavouros.com/s4ndm4n/32/70472_2.png) [@s4ndm4n](https://forum.endeavouros.com/u/s4ndm4n)\
**Post date:** [October 2, 2021, 8:15pm UTC](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298/20 "2021-10-02T20:15:53Z")

</div>

Congrats grate work.

I’m just out of curiosity. The worm is like a tiling WM but with tiling? And tags, are they the numbers that show up in the Awesome bar? or is it something else?

[Next page](https://forum.endeavouros.com/t/worm-a-floating-tag-based-window-manager/18298.md?page=2)
