{"id":17837351,"url":"https://github.com/netfri25/safwm","last_synced_at":"2025-03-19T21:30:38.742Z","repository":{"id":188441734,"uuid":"678731663","full_name":"netfri25/safwm","owner":"netfri25","description":"a Simple and Adequate Floating Window Manager (safwm)","archived":false,"fork":false,"pushed_at":"2023-09-13T14:46:50.000Z","size":603,"stargazers_count":18,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-28T21:06:46.562Z","etag":null,"topics":["linux","window-manager","x11"],"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/netfri25.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-15T08:36:35.000Z","updated_at":"2024-11-19T16:44:07.000Z","dependencies_parsed_at":"2023-08-15T10:57:52.102Z","dependency_job_id":"ac391217-d02a-44ff-8484-617a2c0c2498","html_url":"https://github.com/netfri25/safwm","commit_stats":null,"previous_names":["netfri25/safwm"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netfri25%2Fsafwm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netfri25%2Fsafwm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netfri25%2Fsafwm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netfri25%2Fsafwm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netfri25","download_url":"https://codeload.github.com/netfri25/safwm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244022639,"owners_count":20385134,"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":["linux","window-manager","x11"],"created_at":"2024-10-27T20:46:37.453Z","updated_at":"2025-03-19T21:30:38.418Z","avatar_url":"https://github.com/netfri25.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# safwm\na Simple and Adequate Floating Window Manager\n\n\u003cimg src='images/not-really-tiling.png'\u003e\n\u003cimg src='images/floating.png'\u003e\n\n## But why another window manager?\nI'm a man of simplicity.\nI used many window managers for a really long time (about a week) and I've came to the realization of what is the best window manager that can be created (imo ofc).\\\nIt's important to know that I can't please everyone, so a \"must be\" thing is source code readability and ease of modification - meaning that everyone who wants to can modify/add/remove from the source code without any problem.\n\n## TLDR\nsimplicity.\n\n### There are some window managers that almost met my expectancies:\n* [Ragnar](https://github.com/cococry/Ragnar) - The first ever window manager that I've used. truly an amazing piece of software, but the source was hard to modify, although it was easy to understand.\n* [sowm](https://github.com/dylanaraps/sowm) - Really amazing window manager. most of my source code is inspired (stolen) from it. the only problem I had is variable naming (hard to understand the difference between `client.f` and `client.fs` - which one is focus? which one is fullscreen? both words contain `f` and `s`...) and weird control flow (it took me about an hour to understand `for win if`, until I figured out that `win` is actually a macro).\\\n  sowm also killed windows instead of properly closing them, and it also windows became invisible when trying to do a screenshot and I couldn't figure out why (this is the thing that made me decide on starting to write my own window manager).\n* [dwm](https://dwm.suckless.org/) - the first minimal window manager I've encountered (but not the first one I've settled on using), but the source code was just... weird? and I was too lazy to actually understand how it works.\n* [xmonad](https://xmonad.org/) - I'm in love Haskell for about a year and a half already, but XMonad made the installation process and configuration a lot more complicated than it should be :(\n\n## Installation\n```shell\n$ git clone https://github.com/netfri25/safwm\n$ cd safwm\n$ sudo make install\n```\nif you are using a session manager, then also run:\n```shell\n$ sudo cp safwm.desktop /usr/share/xsessions\n```\nif you are using startx (why) then just add this to the end of your `xinit` script:\n```conf\nexec safwm\n```\n\n## Keybindings\n###### (more will be added in the future)\n**General window manager keybindings**\n| Key Combo               | action     |\n| ----------------------- | ---------- |\n| `Super` + `Shift` + `q` | quit safwm |\n\n\n**Window related keybindings**\n| Key Combo               | action                        |\n| ----------------------- | ----------------------------- |\n| `Mouse`                 | focus under cursor            |\n| `Super` + `LMB`         | move window                   |\n| `Super` + `RMB`         | resize window                 |\n| `Super` + `c`           | center window                 |\n| `Super` + `m`           | maximize window               |\n| `Super` + `f`           | fullscreen window             |\n| `Super` + `q`           | quit window                   |\n| `Super` + `h`           | shrink left                   |\n| `Super` + `l`           | shrink right                  |\n| `Super` + `k`           | shrink up                     |\n| `Super` + `j`           | shrink down                   |\n| `Super` + `Shift` + `h` | extend left                   |\n| `Super` + `Shift` + `l` | extend right                  |\n| `Super` + `Shift` + `k` | extend up                     |\n| `Super` + `Shift` + `j` | extend down                   |\n| `Super` + `Alt` + `h`   | move left                     |\n| `Super` + `Alt` + `l`   | move right                    |\n| `Super` + `Alt` + `k`   | move up                       |\n| `Super` + `Alt` + `j`   | move down                     |\n| `Super` + `Left`        | swap with the previous window |\n| `Super` + `Right`       | swap with the next window     |\n\n\n**Workspace keybindings**\n| Key Combo               | action                                                        |\n| ----------------------- | ------------------------------------------------------------- |\n| `Super` + `1`           | goto workspace 1                                              |\n| `Super` + `2`           | goto workspace 2                                              |\n| `Super` + `3`           | goto workspace 3                                              |\n| `Super` + `4`           | goto workspace 4                                              |\n| `Super` + `Shift` + `1` | move the focused window to workspace 1                        |\n| `Super` + `Shift` + `2` | move the focused window to workspace 2                        |\n| `Super` + `Shift` + `3` | move the focused window to workspace 3                        |\n| `Super` + `Shift` + `4` | move the focused window to workspace 4                        |\n| `Super` + `d`           | go to the next workspace                                      |\n| `Super` + `a`           | go to the previous workspace                                  |\n| `Super` + `Shift` + `d` | drag the focused window to the next workspace                 |\n| `Super` + `Shift` + `a` | drag the focused window to the previous workspace             |\n| `Alt` + `Tab`           | focus the next window in the current workspace                |\n| `Alt` + `Shift` + `Tab` | focues the previous window in the current workspace           |\n| `Super` + `v`           | toggle the visibility of all windows in the current workspace |\n\n\n**Applications keybindings**\n| Key Combo          | action                    | command                          |\n| ------------------ | ------------------------- | -------------------------------- |\n| `Super` + `s`      | application launcher      | `rofi -show drun -theme gruvbox` |\n| `Super` + `Return` | terminal                  | `alacritty`                      |\n| `Super` + `b`      | bar                       | toggles the bar                  |\n| `Shift` + `Print`  | screenshot                | _compilcated long command_       |\n| `Print`            | screenshot with selection | _compilcated long command_       |\n| `Super` + `F2`     | increase volume           | `amixer sset Master 5%+`         |\n| `Super` + `F1`     | decrease volume           | `amixer sset Master 5%-`         |\n| `Alt` + `F3`       | media next track          | `playerctl next`                 |\n| `Alt` + `F2`       | media previous track      | `playerctl previous`             |\n| `Alt` + `F1`       | media toggle play/pause   | `playerctl play-pause`           |\n| `Super` + `F4`     | increase brightness       | `brightnessctl set 2%+ -n`       |\n| `Super` + `F3`     | decrease brightness       | `brightnessctl set 2%- -n`       |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetfri25%2Fsafwm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetfri25%2Fsafwm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetfri25%2Fsafwm/lists"}