{"id":13440577,"url":"https://github.com/michaelforney/velox","last_synced_at":"2025-04-05T09:08:25.976Z","repository":{"id":716642,"uuid":"363669","full_name":"michaelforney/velox","owner":"michaelforney","description":"velox window manager","archived":false,"fork":false,"pushed_at":"2022-09-01T13:15:02.000Z","size":723,"stargazers_count":523,"open_issues_count":13,"forks_count":24,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-03-29T08:08:00.787Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michaelforney.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-11-06T19:50:13.000Z","updated_at":"2025-03-21T19:11:08.000Z","dependencies_parsed_at":"2023-01-11T15:47:41.037Z","dependency_job_id":null,"html_url":"https://github.com/michaelforney/velox","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Fvelox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Fvelox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Fvelox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Fvelox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelforney","download_url":"https://codeload.github.com/michaelforney/velox/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247312081,"owners_count":20918344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:01:24.080Z","updated_at":"2025-04-05T09:08:25.937Z","avatar_url":"https://github.com/michaelforney.png","language":"C","funding_links":[],"categories":["C","Compositors","Packages","Compositor"],"sub_categories":["window-managers","Tiling"],"readme":"velox\n=====\nvelox is a simple window manager based on\n[swc](http://github.com/michaelforney/swc). It is inspired by dwm and xmonad.\n\nDesign\n------\nvelox uses tag-based window management similar to dwm. This allows you to\nconstruct your workspace by selecting a set of tags to work with. However, in\ncontrast with dwm, windows do not have any screen associated with them; they are\nshown on whichever screen has their tag selected, allowing you to easily move\nwindows between screens by selecting their tag on a different screen. This is\nsimilar to the multi-monitor workspace switching in xmonad.\n\nTo ensure that we never attempt to show a window in two places at once, we have\nto impose several constraints. First, each window must have exactly one tag. In\npractice, I've found that I rarely intentionally mark a window with more than\none tag anyway. Second, when you select a tag that is currently displayed on a\ndifferent screen, the tag is first deselected from that screen.\n\nConfiguration\n-------------\nvelox uses a text file for its configuration. The configuration file is\nsearched for first in `${HOME}/.velox.conf` and then `/etc/velox.conf`.\n\nInternally, the configuration structure is organized as a tree. For example, the\nidentifier `window.border_width` refers to the property controlling the border\nwidth of the windows, and the identifier `tag.3.toggle` refers to the action\nthat toggles visibility of the third tag.\n\nThe format is fairly simple. Each line consists of a command, followed by\ncommand-specific arguments. The currently available commands are `set`,\n`action`, `key`, `button` and `rule`.\n\n### The `set` command\n    set \u003cproperty\u003e \u003cvalue\u003e\n\nThe `set` command is used to set the value of a property. It takes as its first\nargument the identifier of the property to set, and as its second argument the\nnew value. The interpretation of the strings provided as values is dependent\nupon the property being set. For example, `window.border_color_active`\ninterprets its value as a hexadecimal color, while `tag.1.name` simply sets the\nname of the tag to the given string.\n\n### The `action` command\n    action \u003cidentifier\u003e \u003ctype\u003e \u003ctype-specific-arguments\u003e\n\nThe `action` command creates a new action that can be invoked using key\nbindings. The first argument is an identifier to use for the action to be\ncreated. The second argument is the type of action to be created. Right now, the\nonly action type is `spawn`. All remaining arguments are interpreted based on\nthe action type.\n\n#### The `spawn` action type\n    action \u003cidentifier\u003e spawn \u003cshell-command\u003e\n\nThe `spawn` action type is used to create actions which spawn a command when\ninvoked. This is useful to create key bindings which launch a particular\nprogram. Its arguments are treated as a single string and are interpreted by the\nshell using `sh -c '\u003cshell-command\u003e'`.\n\n### The `key` command\n    key \u003ckeysym\u003e \u003cmodifier-list\u003e \u003caction-when-pressed\u003e[:\u003caction-when-released\u003e]\n\nThe `key` command registers a key binding which invokes a particular action. The\nfirst argument is the name of the keysym to bind to. These can be found in\n`/usr/include/xkbcommon/xkbcommon-keysyms.h` (dropping the `XKB_KEY_` prefix).\nThe second argument is a comma separated list of modifiers under which to\nactivate the binding. Valid modifiers are `ctrl`, `alt`, `logo`, `shift`, `any`,\nor `mod`. `any` matches any set of modifiers, and `mod` is a convenience\nmodifier which refers to the value of the `mod` property. The third and final\nargument are the identifier of the action(s) to invoke when the key is pressed\nor released. The general form is `\u003caction-when-pressed\u003e:\u003caction-when-released\u003e`,\nand either action identifier can be omitted if none is desired. For convenience,\nthe common case of `\u003caction-when-pressed\u003e:` can be written as just\n`\u003caction-when-pressed\u003e`.\n\nThese actions can be internal to velox, such as `focus_next`, or\ncustom actions created with the `action` command.\n\n### The `button` command\n    button \u003cbutton\u003e \u003cmodifier-list\u003e \u003caction-when-pressed\u003e[:\u003caction-when-released\u003e]\n\nThe `button` command works identically to `key`, except that instead of a\nkeysym, it takes a button name. Valid button names are `left`, `right`,\n`middle`, `side`, and `extra`.\n\n### The `rule` command\n    rule \u003ctype\u003e \u003cidentifier\u003e action\n\nThe `rule` command creates a new rule that will match new windows when they are\ncreated. This is useful to, for example, spawn certain windows on certain tags.\nThe first argument is one of `title` or `app_id` and indicates which property of\nthe window should be matched. The second argument is the value to match the\nwindow property against. If the type is `title` it is compared with the window\ntitle, and if the type is `app_id` it compared with the application ID (see the\n`xdg_shell` protocol for more details). The last argument is the action to\nexecute when the newly created window matches the rule. This action is invoked\nwith the new window as an argument. An example to always spawn a window with\ntitle `st` on tag 2, is:\n\n    rule title st tag.2.apply\n\nSee velox.conf.sample for an example of a basic configuration file.\n\n\u003c!-- vim: set ft=markdown tw=80 spell : --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelforney%2Fvelox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelforney%2Fvelox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelforney%2Fvelox/lists"}