Workspace Background Fonts Shaders Per Target Tuning Mouse Cursor Borders Animations

Visual Enhancements

Most parts of the user interface can be tuned to look more or less bland, and almost all tuning can be accessed from the menu from either the global/config/visual path or the target/video path with the exception of some minor details like the palette used to colorize widget text (see durden/gconf.lua).

Workspace Background

Workspace background image is set with the global/config/workspace/background and default-background paths. The default-background path changes the global default for newly created workspaces. To unset, simply cancel the browser being spawned.

It is also possible to assign the contents of a window as a background image source. This feature is accessed with the target/window/workspace-background path.


The same font settings are used for all windows except terminals and TUI clients. Font settings are found via the global/config/visual/font menu path and covers the size, hinting, typeface and a fallback. The fallback is used when a specific glyph (for internationalization or emojii support) is not found in the main typeface.

As a security/safety feature, arcan limits font access to the ARCAN_FONTPATH namespace, which can be controlled as an startup environment variable parameter. It defaults to applname/fonts (so durden/fonts) in this case.


For more advanced configuration, it is also possible to associate UI elements with a shader, with a few predefined roles and states for each UI component. These can be found in the source tree as durden/shaders/ui and cover some lua- defined metadata an a vertex/fragment step in GLSL120.

The uniforms defined in a shader can be accessed in-UI from global/config/visual/shaders/target/shader state.

Values changed in this way do not currently persist, either change the default values in the shader file, or activate the menu path through the durden/autorun.lua file for the time being.

There are also shader groups for last-stage display corrections, per window canvas scaling effects and workspace background.

Per Target Tuning

Default settings for a window comes from its archetype profile. The accepted profiles are found in the source tree at durden/atypes/*.lua. Media and game clients, for instance, will have different default shader and scaling behavior than terminals and text clients.

The actual size of a window is partly determined by the workspace layout mode and partly by the current scaling settings. target/video/scaling allows you to switch between different sizing behaviors.

With normal, a window will prefer the client supplied dimensions, and in tiling modes, force a downscale if the client exceeds the alloted size and ignores sizing hints.

With stretch a window will use whatever size you set to it and the client will be force-scaled to those dimensions.

aspect behaves like stretch but will maintain the width/height ratio of the source transfer size.

You can also enable a post-processing shader via the target/video/shader path.

If you activate target/video/advanced/source fullscreen these settings, any shaders and filtering will be ignored in favor of direct mode. Check display management for more details.

Mouse Cursor

There are three options that affect the visual look of the mouse cursor.

The first is the scale parameter, controlled by global/config/visual/mouse scale. The second is the reveal animation from global/input/mouse/reveal,hide that spawns little green squared when returning from a hidden state.

The last is the local mouse state, which is partly controlled by the client (it can send hints) or forced by your own hand through target/input/mouse/cursor where you can force-hide the cursor on a client that insists on software rendering its own.

Borders <a name=borders”/>

Window border decorations are split in two parameters: border area and border thickness. They are accessed via global/config/visual/border area and border thickness respectively.

Area covers the entire space that will be reserved, and border area is constrained to a subset of this space. This is to allow for gaps between tiles in tiling workspace mode.


Durden distinguishes between animations and transitions. Animations cover the small effects, like the path indicators in the menu. Transitions cover larger shifts from switching between workspaces and going between workspace view and the menu HUD.

Animation speed can be tuned via the global/config/visual/animation speed setting.

The ‘switch workspaces’ transition effect can be controlled from the global/config/visual/transition-in,out and you can have different behavior for the workspace that is leaving and the workspace that is entering.

The speed is controlled from the global/config/visual/transition speed.

Future Changes

  • Privilege state and window meta-data associatd
  • Shader lookup texture support
  • Window canvas contents as lookup texture input
  • Icon support, multi-channel signed distance fields
  • Switchable mouse cursor themes
  • Border-area shadow controls
  • Multipass target- shader effects
  • Consistent settings persistance
  • Mouse reveal/hide effect control
  • Invisible ‘padding’ windows for non-uniform tiling mode gaps
  • Workspace-mode sensitive border configuration