Configuration wmfsrc

arpinux edited this page May 3, 2012 · 11 revisions

WMFS² configuration

you can configure WMFS² by editing its main configuration file in text mode: $XDG_CONFIG_HOME/wmfs/wmfsrc. on first wmfs install, you have to copy the default wmfsrc in your configuration directory (~/.config/wmfs/) from the source file (/usr/local/etc/xdg/wmfs/wmfsrc). you can also take the last version on [git repo](https://github.com/xorg62/wmfs).
to modify your configuration, you just have to edit this file then reload wmfs.
this page details the wmfsrc file by section. for a complete list of uicb functions, visit the dedicated page.

include

wmfsrc supports ”@include” to split configuration file.
ex:

# Possible file inclusion:
@include ~/.config/wmfs/wmfs_themes
@include ~/.config/wmfs/wmfs_rules

[themes]

wmfs² support theme(s) creation.

# Multi theme section
[themes]

  [theme]
     # No name mean default
     # name = "default"

     font = "fixed"
     # Bars
     bars_width = 14
     bars_fg = "#AABBAA"
     bars_bg = "#223322"

     # Element tags
     tags_normal_fg = "#AABBAA"
     tags_normal_bg = "#223322"
     # tags_normal_statusline = ""
     tags_sel_fg    = "#223322"
     tags_sel_bg    = "#AABBAA"
     # tags_sel_statusline = ""
     tags_occupied_fg = "#AABBAA"
     tags_occupied_bg = "#445544"
     tags_occupied_statusline = "\R[0;0;3;3;#AABBAA]"
     tags_urgent_fg    = "#223322"
     tags_urgent_bg    = "#CC5544"
     # tags_urgent_statusline = ""
     tags_border_color = "#112211"
     tags_border_width = 1

     # Frame / Client
     client_normal_fg = "#AABBAA"
     client_normal_bg = "#223322"
     client_normal_statusline = "\s[3;9;#121212;x] \s[2;8;#ff0000;x](1;client_close)"
     client_sel_fg = "#223322"
     client_sel_bg = "#AABBAA"
     client_sel_statusline = "\s[3;9;#121212;x] \s[2;8;#ff0000;x](1;client_close)"
     # client_free_statusline = ""
     frame_bg = "#555555"
     client_titlebar_width = 12
     client_border_width = 1
   [/theme]

[/themes]
  • name theme name: will be used in the next sections.
  • font theme font, in XLFD (X Logical Font Description) format. ex "-*-terminus-medium-*-*-*-12-*-*-*-*-*-*-*"
  • bars
    bars_width bar height pixels.
    bars_fg statusbar text color.
    bars_bg statusbar color.
  • tags
    tags_normal_fg normal tag text color.
    tags_normal_bg normal tag button color.
    tags_normal_statusline normal tag statusline.
    tags_sel_fg selected tag text color.
    tags_sel_bg selected tag button color.
    tags_sel_statusline selected tag statusline.
    tags_occupied_fg occupied tag text color.
    tags_occupied_bg occupied tag button color.
    tags_occupied_statusline occupied tag statusline.
    tags_urgent_fg urgent tag text color.
    tags_urgent_bg urgent tag 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 normal client titlebar text color.
    client_normal_bg normal client titlebar color.
    client_normal_statusline normal client statusline.
    client_sel_fg selected client titlebar text color.
    client_sel_bg selected client titlebar color.
    client_sel_statusline selected client titlebar statusline.
    client_free_statusline free client titlebar statusline.
    frame_bg client color.
    client_titlebar_width client titlebar height in pixels.
    client_border_width client border width in pixels.

[bars]

wmfs² handles several statusbar if you need. each bar support configuration and theme.

[bars]

  # Position:
  #
  # 0  Top
  # 1  Bottom
  # 2  Hide

  # Element type:
  #
  # t  Tags
  # s  Statustext (will take available space)
  # y  Systray (can be set only ONE time among all element)
  # l  Launcher (will be expended at launcher use)

  [bar]
     position = 0
     screen = 0
     elements = "tlsy"   # element order in bar
     theme = "default"
  [/bar]

# [bar]
#    position = 0
#    screen = 1
#    elements = "ts"
#    theme = "default"
# [/bar]

[/bars]

positon position of the statusbar on the screen.
screen screen to display statusbar (start at 0), set to -1 to display on every screen.
theme apply theme on the statusbar, must be an existing theme-name.

[tags]

[tags]

  # enable/disable tag wrapping navigation
  circular = false

  # Use no screen option or screen = -1 to set tag on each screen
  [tag]
      screen = -1
      name = "1"
      # statusline ""
  [/tag]

  [tag] name = "2" [/tag]
  [tag] name = "3" [/tag]
  [tag] name = "4" [/tag]
  [tag] name = "5" [/tag]
  [tag] name = "6" [/tag]
  [tag] name = "7" [/tag]

  # Mousebinds associated to Tags element button
  [mouse] button = "1" func = "tag_click" [/mouse]
  [mouse] button = "4" func = "tag_next"  [/mouse]
  [mouse] button = "5" func = "tag_prev"  [/mouse]

[/tags]

circular tag wrapping navigation.
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. here left-clic(bouton1) set the tag, scrollup(b4) set next tag and scrolldown(b5) set previous tag.

[client]

[client]

  # padding between clients (default: 0):
  padding = 75

  # Give focus to new created client (default = false)
  autofocus = false

  theme = "default"
  key_modifier = "Super"

  # Focus type:
  #  enter : focus follow mouse (default)
  #  click : click to focus
  #  everything-else : disable mouse focus support
  focus = enter

  [mouse] button = "1" func = "client_focus_click"    [/mouse]
  [mouse] button = "1" func = "mouse_swap"            [/mouse]
  [mouse] button = "2" func = "mouse_tab"             [/mouse]
  [mouse] button = "3" func = "mouse_resize"          [/mouse]
  [mouse] button = "4" func = "client_focus_next_tab" [/mouse]
  [mouse] button = "5" func = "client_focus_prev_tab" [/mouse]

[/client]

padding padding between clients in pixels.
autofocus give focus to new created client (default is false)
theme apply theme to client by default (can be overwrite in the [rules] section).
key_modifier key modifier to perform actions on clients. (Alt, Super, Control, Shift…)
focus select the focus mouse options
mousebinds mouse actions on client, see the functions list.

[rules]

specific rules for clients: to identify an application, use xprop.

[rules]

  [rule]
      instance = "chromium"
      # class = ""
      # role   = ""
      # name   = ""
      # theme  = "default"

      tag    = 1  # 2nd tag
      screen = 0

      free       = false
      tab        = false
      ignore_tag = false
  [/rule]

[/rules]

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 set tag to 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 tag client with all tags (aka “sticky”)

[launchers]

[launchers]

  # command can be an uicb function or an uicb function + extension (see example)
  [launcher]
     name = "exec"
     prompt = "Run:"

     # Example of uicb + ext:
     #   command = "spawn xterm -e"
     command = "spawn"

     width = 150
  [/launcher]

[/launchers]

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. see tips page for an “howto create a custom launcher”

[keys]

[keys]

  [key] mod = {"Super"} key = "Return" func = "spawn" cmd = "urxvt || xterm" [/key]

  [key] mod = {"Control", "Alt"} key = "q" func = "quit" [/key]
  [key] mod = {"Control", "Alt"} key = "r" func = "reload" [/key]

  # Tag manipulation
  [key] mod = {"Super"} key = "F1" func = "tag_set" cmd = "0" [/key]
  [key] mod = {"Super"} key = "F2" func = "tag_set" cmd = "1" [/key]
  [key] mod = {"Super"} key = "F3" func = "tag_set" cmd = "2" [/key]
  [key] mod = {"Super"} key = "F4" func = "tag_set" cmd = "3" [/key]
  [key] mod = {"Super"} key = "F5" func = "tag_set" cmd = "4" [/key]
  [key] mod = {"Super"} key = "F6" func = "tag_set" cmd = "5" [/key]
  [key] mod = {"Super"} key = "F7" func = "tag_set" cmd = "6" [/key]
  [key] mod = {"Super"} key = "F8" func = "tag_set" cmd = "7" [/key]

  [key] mod = {"Super", "Shift"} key = "F1" func = "tag_client" cmd = "0" [/key]
  [key] mod = {"Super", "Shift"} key = "F2" func = "tag_client" cmd = "1" [/key]
  [key] mod = {"Super", "Shift"} key = "F3" func = "tag_client" cmd = "2" [/key]
  [key] mod = {"Super", "Shift"} key = "F4" func = "tag_client" cmd = "3" [/key]
  [key] mod = {"Super", "Shift"} key = "F5" func = "tag_client" cmd = "4" [/key]
  [key] mod = {"Super", "Shift"} key = "F6" func = "tag_client" cmd = "5" [/key]
  [key] mod = {"Super", "Shift"} key = "F7" func = "tag_client" cmd = "6" [/key]
  [key] mod = {"Super", "Shift"} key = "F8" func = "tag_client" cmd = "7" [/key]

  [key] mod = {"Super"} key = "minus" func = "tag_del" [/key]
  [key] mod = {"Super", "Shift"} key = "minus" func = "tag_new" [/key]

  # tag function: cmd = nameofthetag
  #[key] mod = {"Super"} key = "z" func = "tag" cmd = "2" [/key]

  [key] mod = {"Control"} key = "Right" func = "tag_next" [/key]
  [key] mod = {"Control"} key = "Left"  func = "tag_prev" [/key]

  [key] mod = {"Control"} key = "Up"  func = "screen_next" [/key]
  [key] mod = {"Control"} key = "Down" func = "screen_prev" [/key]

  [key] mod = {"Super"} key = "q" func = "client_close" [/key]

  # Focus next / prev client and next / prev tabbed client
  [key] mod = { "Alt" }            key = "Tab" func = "client_focus_next" [/key]
  [key] mod = { "Alt", "Shift" }   key = "Tab" func = "client_focus_prev" [/key]
  [key] mod = { "Super" }          key = "Tab" func = "client_focus_next_tab" [/key]
  [key] mod = { "Super", "Shift" } key = "Tab" func = "client_focus_prev_tab" [/key]

  # Focus next client with direction
  [key] mod = {"Alt"} key = "h" func = "client_focus_left"   [/key]
  [key] mod = {"Alt"} key = "l" func = "client_focus_right"  [/key]
  [key] mod = {"Alt"} key = "k" func = "client_focus_top"    [/key]
  [key] mod = {"Alt"} key = "j" func = "client_focus_bottom" [/key]

  # swap next client with direction:
  [key] mod = {"Control", "Shift"} key = "h" func = "client_swap_left"   [/key]
  [key] mod = {"Control", "Shift"} key = "l" func = "client_swap_right"  [/key]
  [key] mod = {"Control", "Shift"} key = "k" func = "client_swap_top"    [/key]
  [key] mod = {"Control", "Shift"} key = "j" func = "client_swap_bottom" [/key]

  # Resize selected tiled client with direction
  [key] mod = {"Super"} key = "h" func = "client_resize_left"   cmd = "20" [/key]
  [key] mod = {"Super"} key = "l" func = "client_resize_left"   cmd = "-20" [/key]
  [key] mod = {"Super"} key = "k" func = "client_resize_top"    cmd = "20" [/key]
  [key] mod = {"Super"} key = "j" func = "client_resize_top"    cmd = "-20" [/key]
  [key] mod = {"Super", "Control"} key = "h" func = "client_resize_right"  cmd = "-20" [/key]
  [key] mod = {"Super", "Control"} key = "l" func = "client_resize_right"  cmd = "20" [/key]
  [key] mod = {"Super", "Control"} key = "k" func = "client_resize_bottom" cmd = "-20" [/key]
  [key] mod = {"Super", "Control"} key = "j" func = "client_resize_bottom" cmd = "20" [/key]

  # Tabbing command
  [key] mod = {"Alt", "Shift"} key = "h" func = "client_tab_left"   [/key]
  [key] mod = {"Alt", "Shift"} key = "l" func = "client_tab_right"  [/key]
  [key] mod = {"Alt", "Shift"} key = "k" func = "client_tab_top"    [/key]
  [key] mod = {"Alt", "Shift"} key = "j" func = "client_tab_bottom" [/key]
  [key] mod = {"Alt", "Shift"} key = "u" func = "client_untab" [/key]

  # Layout manipulation
  [key] mod = {"Super"}          key = "m" func = "layout_vmirror" [/key]
  [key] mod = {"Super", "Shift"} key = "m" func = "layout_hmirror" [/key]
  [key] mod = {"Super"}          key = "r" func = "layout_rotate_right" [/key]
  [key] mod = {"Super", "Shift"} key = "r" func = "layout_rotate_left" [/key]

  [key] mod = {"Control", "Super", "Alt"} key = "h" func = "layout_integrate_left" [/key]
  [key] mod = {"Control", "Super", "Alt"} key = "j" func = "layout_integrate_bottom" [/key]
  [key] mod = {"Control", "Super", "Alt"} key = "k" func = "layout_integrate_top" [/key]
  [key] mod = {"Control", "Super", "Alt"} key = "l" func = "layout_integrate_right" [/key]

  # Layout set historic travelling function (TESTING)
  [key] mod = {"Super"} key = "o" func = "layout_prev_set" [/key]
  [key] mod = {"Super", "Shift"} key = "o" func = "layout_next_set" [/key]

  # Toggle client free/tile
  [key] mod = {"Super"} key = "f" func = "client_toggle_free" [/key]

  # Toggle client ignore_tag
  [key] mod = {"Super","Shift"} key = "f" func = "client_toggle_ignore_tag" [/key]

  # Launcher
  [key] mod = {"Super"} key = "p" func = "launcher" cmd = "exec" [/key]

[/keys]

[keys] section syntax: each line is contained within [key] … [/key]
mod key modifier’s). ex:{"Control", "Alt"}
key key to press.
func uicb function to launch.
cmd if func = spawn, set the command to launch. ex:func = "spawn" cmd = "cream-browser"