WMFS(1)
π 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 (urxvtby default).Super + qβ Quit the selected client.Control-Alt + qβ Exit WMFS.Super + fβ Togglefreeon the selected client.Super + Shift + fβ Toggleignore_tagon 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 at0); set to-1to display on every screen.elementsβ ordered statusbar elementst=Tags,s=Statustext,y=Systray,l=Launcher.themeβ names of the statusbar theme.
π [tags] β tag behavior π
circularβ enable tag wrapping. default istrue.screenβ screen to display tag. use no screen option orscreen = -1to 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 is0.autofocusβ give focus to new created clients. default isfalse.
πΈ [rules] β specific rules for clients πΈ
To identify an application, use xprop.
instanceβ first part ofWM_CLASS.classβ second part ofWM_CLASS.roleβWM_WINDOW_ROLE.nameβ_NET_WM_NAME.themeβ apply theme to client.tagβ specify a tag to display client (start at0).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β iffunc = "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 thevalueused 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"orfunc = "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; theinfobar_namegoes incmd.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β togglesignore_tagon 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 π
- Main site:
https://github.com/xorg62/wmfs - Wiki:
https://github.com/xorg62/wmfs/wiki - Bug tracker:
https://github.com/xorg62/wmfs/issues
π 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
- nixos 26.05: wmfs 201902
- nixpkgs unstable: wmfs 201902
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms