WMFS(1)

πŸ“¦ version 201902, in nixos 26.05, nixpkgs unstable

πŸŽ€ WMFS(1) πŸŽ€

okay bestie, this is the manual page for wmfs β€” Window Manager From Scratch. The manual name is WMFS(1), and it is literally the manual of wmfs. Let's get into it. ✨


🌸 NAME 🌸

wmfs β€” Window Manager From Scratch. Periodt. 🫢

πŸ¦‹ SYNOPSIS πŸ¦‹

wmfs [-hv] [-C <file>] [-c <uicb_function> <cmd>]

🌈 DESCRIPTION 🌈

WMFS is a lightweight and highly configurable tiling window manager for X, and it's written in C. No cap, that's the whole vibe. πŸ’…

✨ OPTIONS ✨

  • -C <file> β€” Load a configuration file. πŸŽ€
  • -c <uicb_function> <cmd> β€” Execute an uicb function to control WMFS. πŸ¦‹
  • -v β€” Print version information to standard output, then exit. πŸ’–
  • -h β€” Print help information, then exit. 🌸

πŸ”₯ DEFAULT KEY BINDINGS πŸ”₯

These are the stock keybinds, bestie. Learn them, live them, slay with them. πŸ‘‘

  • Control-Alt + r β€” Reload the WMFS binary.
  • Super + Return β€” Run a terminal (urxvt by default).
  • Super + q β€” Quit the selected client.
  • Control-Alt + q β€” Exit WMFS.
  • Super + f β€” Toggle free on the selected client.
  • Super + Shift + f β€” Toggle ignore_tag on the selected client.
  • Super + Shift + h β€” Toggle infobar visibility.
  • Alt + Tab β€” Give the focus to the next client.
  • Alt-Shift + Tab β€” Give the focus to the previous client.
  • Alt + h β€” Give the focus to the client on the left.
  • Alt + l β€” Give the focus to the client on the right.
  • Alt + k β€” Give the focus to the client on the top.
  • Alt + j β€” Give the focus to the client on the bottom.
  • Super + Tab β€” Give the focus to the next tabbed client.
  • Super-Shift + Tab β€” Give the focus to the previous tabbed client.
  • Control-Shift + h β€” Swap with the client on the left.
  • Control-Shift + l β€” Swap with the client on the right.
  • Control-Shift + k β€” Swap with the client on the top.
  • Control-Shift + j β€” Swap with the client on the bottom.
  • Alt-Shift + h β€” Tab in the client on the left.
  • Alt-Shift + l β€” Tab in the client on the right.
  • Alt-Shift + k β€” Tab in the client on the top.
  • Alt-Shift + j β€” Tab in the client on the bottom.
  • Alt-Shift + u β€” Untab the client.
  • Super + h β€” Increase the client to the left.
  • Super + l β€” Decrease the client from the left.
  • Super + k β€” Increase the client to the top.
  • Super + j β€” Decrease the client from the top.
  • Super-Control + h β€” Decrease the client from the right.
  • Super-Control + l β€” Increase the client to the right.
  • Super-Control + k β€” Decrease the client from the bottom.
  • Super-Control + j β€” Increase the client to the bottom.
  • Control + Right β€” Next tag.
  • Control + Left β€” Previous tag.
  • Control + Up β€” Next screen.
  • Control + Down β€” Previous screen.
  • Super + m β€” Vertical mirror layout.
  • Super-Shift + m β€” Horizontal mirror layout.
  • Super + r β€” Rotate layout right.
  • Super-Shift + r β€” Rotate layout left.
  • Super-Control-Alt + h β€” Integrate client in left layout.
  • Super-Control-Alt + j β€” Integrate client in bottom layout.
  • Super-Control-Alt + k β€” Integrate client in top layout.
  • Super-Control-Alt + l β€” Integrate client in right layout.
  • Super + o β€” Restore previous layout.
  • Super-Shift + o β€” Restore next layout.
  • Super + p β€” Display a launcher in the statusbar to run an unix command.
  • Super + F[1..9] β€” Change tag view.
  • Super-Shift + F[1..9] β€” Transfer the selected client to the wanted tag.
  • Super + - β€” Delete current tag.
  • Super-Shift + - β€” Add current tag.

🧚 CONFIGURATION 🧚

WMFS gets configured by $HOME/.config/wmfs/wmfsrc. That's the config file, bestie. πŸŽ€

wmfsrc supports @include so you can split the configuration file by section. Usage:

@include ~/.config/wmfs/wmfs_themes

πŸ’… [themes] β€” themes for client and statusbar πŸ’…

wmfsrc supports themes for client and statusbar. Here's the whole theme menu, no skips. 🌈

🫢 Misc

  • name β€” theme name, will be used in next sections.
  • font β€” theme font in XLFD format.

πŸ“ Bars

  • bars_width β€” bar height in pixels.
  • bars_fg/bg β€” statusbar text/background color.

🧚 Tags

  • tags_normal_fg/bg β€” normal tag text/button color.
  • tags_normal_statusline β€” normal tag statusline.
  • tags_sel_fg/bg β€” selected tag text/button color.
  • tags_sel_statusline β€” selected tag statusline.
  • tags_occupied_fg/bg β€” occupied tag text/button color.
  • tags_occupied_statusline β€” occupied tag statusline.
  • tags_urgent_fg/bg β€” urgent tag text/button color.
  • tags_urgent_statusline β€” urgent tag statusline.
  • tags_border_color β€” tag button border color.
  • tags_border_width β€” tag button border width.

πŸ¦‹ Clients

  • client_normal_fg/bg β€” normal client titlebar text/background color.
  • client_normal_statusline β€” normal client statusline.
  • client_sel_fg/bg β€” selected client titlebar text/background color.
  • client_sel_statusline β€” selected client statusline.
  • frame_bg β€” client border color.
  • client_titlebar_width β€” client titlebar height in pixels.
  • client_border_width β€” client border height in pixels.

🌈 [bars] β€” statusbar setup 🌈

  • position β€” statusbar position on screen (0=Top; 1=Bottom, 2=Hide).
  • screen β€” screen to display statusbar (starts at 0); set to -1 to display on every screen.
  • elements β€” ordered statusbar elements t=Tags, s=Statustext, y=Systray, l=Launcher.
  • theme β€” names of the statusbar theme.

πŸŽ€ [tags] β€” tag behavior πŸŽ€

  • circular β€” enable tag wrapping. default is true.
  • screen β€” screen to display tag. use no screen option or screen = -1 to set tag on each screen.
  • name β€” display tagname.
  • statusline β€” draw a custom statusline in the specific tag (can display any sequences).
  • mousebinds β€” mouse actions on the tag buttons.

πŸ’œ [client] β€” client behavior πŸ’œ

  • theme β€” apply theme to client by default.
  • key_modifier β€” key modifier to perform actions on clients.
  • focus β€” select the focus mouse options; enter=focus follow mouse, click=click to focus, everything-else=disable focus mouse support.
  • mousebinds β€” mouse actions on client.
  • padding β€” enable padding between clients. default is 0.
  • autofocus β€” give focus to new created clients. default is false.

🌸 [rules] β€” specific rules for clients 🌸

To identify an application, use xprop.

  • instance β€” first part of WM_CLASS.
  • class β€” second part of WM_CLASS.
  • role β€” WM_WINDOW_ROLE.
  • name β€” _NET_WM_NAME.
  • theme β€” apply theme to client.
  • tag β€” specify a tag to display client (start at 0).
  • screen β€” display client on a specific screen.
  • free β€” client in auto-free mode (true/false).
  • tab β€” open client in a tab (true/false).
  • ignore_tag β€” specify to client to ignore tags (client is displayed on every tag).

🧸 [launchers] β€” launcher definitions 🧸

  • name β€” launcher-name, will be used in the [keys] section.
  • prompt β€” display text at the beginning of the prompt.
  • command β€” command used by the launcher. can be an uicb function or an uicb function + extension.

πŸ”‘ [keys] β€” keybind config πŸ”‘

Each line is contained within [key]...[/key].

  • mod β€” key modifier (Alt, Control, Shift, Super).
  • key β€” key to press, you can identify it with "xev".
  • func β€” uicb function to launch.
  • cmd β€” if func = "spawn" set the external command to launch.

⭐ STATUS ⭐

Statusbars, tags, surfaces and titlebars support sequences to display text, images bars and graphs through the wmfs -c status command. This is the fun stuff, bestie. πŸ’–

πŸ“ Syntax

  • position β€” "left/right" (relative) or "x;y" (absolute).
  • dimension β€” "ww;hh" for width;height of the rectangle or the image, to display an image at its original size, set it to "0;0".
  • color β€” "#rrggbb".
  • imagepath β€” absolute path for the image.
  • border β€” width of the progressbar border in pixels.
  • curser β€” width of the curser in the positionbar.
  • value β€” a variable, to draw progressbar.
  • valuemax β€” maximum value of the value used in the progressbar.

πŸ’… Usage

basic usage:

wmfs -c status "<barname> TEXT visible on 'barname'"

display colors:

wmfs -c status "<barname> ^s[<position>;<color>;<text>]"

display rectangles:

wmfs -c status "<barname> ^R[<position>;<dimensions>;<color>]"

display images:

wmfs -c status "<barname> ^i[<position>;<dimensions>;<imagepath>]"

display progressbars:

wmfs -c status "<barname> ^p[<position>;<dimensions>;<border>;<value>;<valuemax>;<bgcolor>;<fgcolor>]"

display positionbars:

wmfs -c status "<barname> ^P[<position>;<dimensions>;<curser>;<value>;<valuemax>;<bgcolor>;<fgcolor>]"

display graph:

wmfs -c status "<barname> ^g[<position>;<dimensions>;<value>;<valuemax>;<bgcolor>;<fgcolor>;<name>]"

mousebinds: sequences support mousebinds with format (<key>;<uicb-function>) or (<key>;<spawn>;<command>).

surfaces: you can display popups from the statusbar with the mousebind:

(<key>;status_surface;<position>,<dimension>,<color> <datas>)

πŸ’– UICB Functions πŸ’–

okay so this is the UICB functions list β€” that’s β€œUser Interface Call Backs” for the uninitiated, iykyk πŸ’…. These are the little actions you can wire up from your config, your status script, or your terminal.

Here’s how they show up in the wild, bestie:

  • in the wmfsrc: func = "tag_next" or func = "spawn" cmd = "urxvt -e vim" ✨
  • in status.sh: wmfs -c status "<barname> ^s[<position>;<color>;next](1;tag_next)"
  • straight from your terminal: wmfs -c tag_next

Now for the whole cast β€” no skips, no cap 🫢:

  • spawn β€” launches a command. ex: func = "spawn" cmd = "urxvtc -e screen irssi" πŸ”₯
  • quit β€” quits wmfs. bye bestie πŸ‘‹
  • reload β€” reloads wmfs. ✨
  • tag_set β€” sets the tag by number.
  • tag β€” sets the tag by name.
  • tag_next/prev β€” sets the next/previous tag.
  • tag_client β€” tags the client.
  • tag_client_and_set β€” β€œteg the client and set the tag.” 😭 that’s literally the page’s wording, and yes it’s the tag-the-client-and-set-the-tag one.
  • tag_move_client_next/prev β€” tags the client with the next/previous tag.
  • tag_click β€” displays the tag when you do a clic on the tag button πŸ–±οΈβœ¨
  • tag_new/del β€” adds/deletes a tag.
  • infobar_toggle_hide β€” toggles visibility of a specific infobar; the infobar_name goes in cmd.
  • layout_vmirror β€” vertical mirror tiling.
  • layout_hmirror β€” horizontal mirror tiling.
  • layout_rotate_left β€” tiling rotate anti/clockwise.
  • layout_prev_set β€” goes back to the previous set layout.
  • layout_next_set β€” goes to the next set layout.
  • layout_integrate_left/right/top/bottom β€” client integration in the client zone by direction.
  • client_close β€” closes the client.
  • client_resize_right/left/top/bottom β€” resizes the client with direction.
  • client_focus_right/left/top/bottom β€” focuses the client with direction.
  • client_tab_right/left/top/bottom β€” tabs the client with direction.
  • client_swap_right/left/top/bottom β€” swaps the client with direction.
  • client_focus_next/prev β€” moves focus to the next/previous client.
  • client_swap_next/prev β€” swaps with the next/previous client.
  • client_untab β€” untabs the client.
  • client_focus_next_tab β€” moves focus to the next tab-client.
  • client_focus_prev_tab β€” moves focus to the previous tab-client.
  • client_focus_click β€” gives focus to the client with a clic.
  • client_toggle_free β€” toggles free on the selected client.
  • client_toggle_ignore_tag β€” toggles ignore_tag on the selected client.
  • client_tab_next_opened β€” opens the client in a tab.
  • status β€” displays the argument text in the statusbar.
  • status_surface β€” displays a surface; it can contain sequences.
  • mouse_resize β€” resizes the client.
  • mouse_move β€” moves the client.
  • mouse_swap β€” swaps the client.
  • mouse_tab β€” tabs the client.
  • screen_next/prev β€” goes to the next/previous screen.
  • screen_move_client_next/prev β€” moves the client to the next/previous screen.
  • launcher β€” native prompt. ex: func = "launcher" cmd = "exec" displays the β€œexec” launcher.

πŸ’€ BUGS πŸ’€

WMFS isnΒ΄t stable for now. So it certainly contains some bugs. πŸ’€ No cap β€” keep that in mind.

🫢 AUTHOR 🫢

Martin Duquesnoy <xorg62@gmail.com[1]> β€” that’s the author, bestie πŸ’Œ.

🌈 WWW 🌈

πŸŽ€ COPYING πŸŽ€

WMFS is under the BSD license. See COPYING for more information. πŸ‘‘

xoxo, your wmfs girlie πŸ’– β€” source/version wmfs, dated 2012/05/02, manual section WMFS(1). periodt ✨

πŸ“¦ where this page comes from