Oasis Dots 1.0: vim modes for all of Hyprland, a which-key for every submap, and keyboard driven Quickshell desktop on the Lua config
Sure, I occasionally have to reach for the mouse... but that's fine, right?
No. It is not fine.
_I wanted a vim-like experience across my entire desktop: fully keyboard driven, mouse completely optional._
So I started a personal pilgrimage to bring vim motions everywhere, one tool and one problem at a time. It runs on Hyprland's Lua config (tested on 0.56.2), with HyprVim, a vim-modal layer I wrote, for normal/insert/visual modes across windows and workspaces. Every submap gets its own which-key panel, and Quickshell draws the bar, popups, pickers, lock and login screens on top.
I've been daily-driving and tweaking this since 2024, and I just tagged 1.0, the first public release. The longer story of how it got here is in the release notes.
_Nothing in the video touches the mouse. It's one live take: no cuts, no speed-ups._
What is in the video
- 0:00 Login: a Metal Gear Solid 2 login under greetd (press start, load game, pick the save, enter the password). There are also Ocarina of Time, Final Fantasy VII, GoldenEye, TIE Fighter and CRT terminal skins.
- 0:17 Session launcher: SUPER + SHIFT + O opens a configured session, and its apps land on their assigned workspaces, monitors and positions: Neovim and Yazi, an AI agent, btop and lazygit, and Firefox.
- 0:21 Resize submap: SUPER + R enters a resize submap, its which-key panel is generated from the binds, and SHIFT + L widens the editor.
- 0:26 Palettes: the Settings panel switches oasis.nvim palettes live. Window borders, the bar, kitty, tmux and Neovim all repaint together.
- 0:39 Live styles: the whole shell (bar, popups, OSD, cursor, sounds) switches style at runtime: PSX, FF7, GoldenEye, Game Boy, Metroid and Oasis, with the same calendar, weather and volume OSD in each. 16 styles total.
- 1:31 Agent kickoff: an agent gets a task in tmux and keeps working while the rest of the video plays.
- 1:36 Workspace overview: every monitor and workspace in one view. Hop across monitors with hjkl, mark two windows and move them to another workspace together, then search for a window by name and jump to it.
- 1:49 Screenshot tool: region selection with hjkl in 100, 10 and 1 px steps, a zoom loupe for pixel-perfect edges, then copy.
- 2:02 Command prompt: HyprVim's : prompt. :layout, Tab down to scrolling, and the workspace re-tiles live. It takes any Hyprland command for one-off changes, plus some shortcuts of my own.
- 2:10 KeepTabs: a popup listing running AI agent sessions with little animations for their state, and a jump straight to the one that finished. See KeepTabs.
What is NOT in the video
- Wallpapers that follow the world outside: art in <Season>/<Period>/<Weather>/ folders (like Fall/Night/Rain) rotates to match. The beach in the video is from my Summer Evening set.
- SUPER + C drives the mouse from the keyboard, with wl-kbptr hint labels to click anything in a couple of keystrokes.
- Bar popups you walk between with CTRL + h/l, including voice dictation.
- Screen recording, scrolling capture with OCR, and a color picker.
- Fuzzy pickers for apps, clipboard and emoji.
- Email in Betterbird with vim motions, a which-key, visual selection and a : command line.
- A screen-share picker, a tmux overview, and keybind search that runs what you pick (SUPER + /).
- All the HyprVim features such as registers, marks, vim text editing via submaps, counts, open vim in any text field, and more.
What's going on under the hood
- Portable. Machine-specific values go in a per-hostname machine profile, your own config in a gitignored custom/ that runs after everything else, and everything tracked stays generic.
- Monitor-local workspaces. Each monitor gets its own range (1–5, 6–10, ...), and the number keys stay on the monitor you're on.
- Submaps as verbs. Submaps read like vim grammar: SUPER + D is delete, so B closes every browser, O closes everything else on the workspace, and SHIFT + D kills the whole workspace. SUPER + G is go-to, SUPER + C is mouse cursor... etc:
- One file per submap. Every bind carries its own description, which feeds both the which-key panels and the SUPER + / keybind search.
- Per-submap unbinding. hl.unbind can't target a single submap (#15040), so the Bind library tracks binds per submap and Bind.unbind(key, submap) lets you override one from your own config.
- Sessions in Lua. Sessions.add takes a list of apps pinned to monitors and workspaces. If a session's monitor isn't connected, it folds onto one that is, so sessions work on any layout.
- One palette, every generator. Switching palettes reruns generators for Hyprland, rofi, the terminals and Quickshell, and can push the matching colorscheme to every running Neovim over RPC.
- Non-blocking prompts. dmenu-style prompts run asynchronously and call back through hyprctl, so the compositor never waits on your input.
- Undo for closed windows. Anything closed through a bind is remembered (the last 20), and SUPER + U reopens it, like CTRL + SHIFT + T in a browser.
- Quickshell is optional for the pickers. When it isn't running, the launcher and pickers fall back to rofi, fuzzel or wofi.
Before you ask
- Can I take just the Hyprland config?
- Yes. just repos && just stow hypr links only ~/.config/hypr. It expects a few neighbours (the bar and pickers from the quickshell package, wl-kbptr and friends), and the hypr README lists them. HyprVim also has its own repo.
- What versions?
- Hyprland with the Lua config (tested on 0.56.2) and Quickshell 0.3.1 or newer. The full installer is Arch only.
- Did you use AI?
- Yes! I'm a dad running a business, so recreating the entire MGS2 intro by hand was never going to happen. AI agents built a lot of this with me, especially the Quickshell side. The ideas, design and taste are all mine; the agents just got me there without giving up family time or the business.
Credits
- Music: "Science Tour" by slowerpace: <soundcloud.com>
- Wallpaper art: Mark Ferrari: <markferrari.com>
Resources
Dotfiles: <uhs-robert/oasis-dots>
Discord: <discord.gg>
Is my pilgrimage over? I don't think it ever will be. If there's a vim feature you think is missing, file an issue or tell me about it on Discord. Happy to answer any questions.
I hope you enjoy the fruits of my labor, and welcome to the Oasis.
85 points · 17 comments
Mentions
Some 0.57.0 regressions including black screens, keybind issues, config issues, etc. have now been fixed with the 0.57.1 update :) github.com/hyprwm/Hyprland/releases/tag/v0.57.1
平铺窗口管理器,好用的往往长得朴素。 Hyprland 偏要两头都占:渐变边框、模糊、阴影、弹簧曲线动画都有。 Dwindle、Master、滚动等平铺布局可以按工作区分别设,配置一保存就生效,还自带插件管理器。 4 万星的 Wayland 合成器。 hyprwm/Hyprland
今日のGitHubトレンド hyprwm/Hyprland 見た目にこだわった独立した動的タイル型Waylandコンポジタの開発を目的としています。 最新のWayland機能の提供や高度なカスタマイズ性、視覚効果、強力なプラグイン、簡単なIPCなどの実装により、利便性と美しさを兼ね備えた環境を提供します。
How to Share Specific Workspace Only? So in the 0.57 update there is the new feature Hyprland#16440 which to my understanding makes it so when you screenshare (i.e OBS or Discord) you should be able to select a specific workspace instead of only monitors, applications or region. However after installing the update I can't figure out how to use it. The wiki doesn't mention anything (maybe it's not updated idk) and the selection menu when beginning a screenshare looks the same. Can somebody explain to me how to use this feature or link me some documentation that explains it? Edit: Enabling extra-testing allowed me to update to 1.5.0-1 which adds the workspace sharing feature but it unfortunately still doesn't work. It just says "No shareable workspaces are available.". Does anybody know how to fix this? Neither on the Hyprland Wiki nor on the Hyprland or portal wiki did I find anything about required config changes to get this working. Processing img cvbwibak9myh1...
My new linux dashboard Im using hyprland and Vitreus, I made this addon for vitreus that lets you link your homeassistant instance and have a quick access on your desktop, you can configure your entities in a simple json, divide them by rooms, show temperature and humidity by room... I made a repo if someone is interested datingesp-hash/HomeAssistant-Vitreus-Addon
[Hyprland + Noctalia] I made a work-hours tracker for my bar: one-click check in, overtime balance, and it asks about absences Hi everyone! I've been running Noctalia on Hyprland for a while, and I wrote a small widget for it to keep track of my working hours. Just so there's no confusion: it's a Noctalia widget, not a Hyprland plugin, so there's nothing to install with hyprpm. If you're on CachyOS's Hyprland edition like me, you likely already have Noctalia. I recently joined a tiny startup, and unlike my previous job there's no tooling for this kind of thing, so I built something to help me organize my own time. Shift turns my weekly hours into a daily target, shows my day in the bar, and keeps my overtime balance with public holidays and days off, so I always know where I stand and can plan my week. When I come back from a break or a meeting, it asks whether that time was work instead of guessing. Everything stays in local JSON files, with no account and no telemetry. A few Hyprland bits A keybind to check in and out: hl.bind("SUPER + F9", hl.dsp.exec_cmd("noctalia msg plugin hbollon/shift:core all toggle")) Already running hypridle? Set Idle detection to External in Shift's settings and feed it your idle events, no swayidle needed: listener { timeout = 300 on-timeout = noctalia msg plugin hbollon/shift:core all signal idle on-resume = noctalia msg plugin hbollon/shift:core all signal active } Using hyprlock? Shift detects locks through logind's LockedHint, which Noctalia's lock screen sets but hyprlock doesn't yet (hyprlock#907). You can wrap it so Shift knows: general { lock_cmd = pidof hyprlock || (noctalia msg plugin hbollon/shift:core all signal lock; hyprlock; noctalia msg plugin hbollon/shift:core all signal unlock) } Install: Noctalia Settings → Plugins → search "Shift" (needs Noctalia 5.2+). Repo and user guide: hbollon/shift It's not a project or client tracker (no tags, no billing): it's about managing your own time and keeping an eye on your overtime. Feedback and bug reports are very welcome!
@dhh TTFF (Time To First Frame) latency is quite high, which suggests a performance issue within upstream Hyprland:.github#116
The hyprperks dotfiles have been released, snapshotted from the beginning of the Omacom Sponsorship
Thanks to @omarchy's Omacom Foundation sponsorship, the Hyprperks Dotfiles have been released publicly under MIT. Feel free to study them, pick them apart, and incorporate them into your own creations. hyprwm/hyprperks-dotfiles
Oasis Dots 1.0: vim modes for all of Hyprland, a which-key for every submap, and keyboard driven Quickshell desktop on the Lua config Sure, I occasionally have to reach for the mouse... but that's fine, right? No. It is not fine. _I wanted a vim-like experience across my entire desktop: fully keyboard driven, mouse completely optional._ So I started a personal pilgrimage to bring vim motions everywhere, one tool and one problem at a time. It runs on Hyprland's Lua config (tested on 0.56.2), with HyprVim, a vim-modal layer I wrote, for normal/insert/visual modes across windows and workspaces. Every submap gets its own which-key panel, and Quickshell draws the bar, popups, pickers, lock and login screens on top. I've been daily-driving and tweaking this since 2024, and I just tagged 1.0, the first public release. The longer story of how it got here is in the release notes. _Nothing in the video touches the mouse. It's one live take: no cuts, no speed-ups._ What is in the video - 0:00 Login: a Metal Gear Solid 2 login under greetd (press start, load game, pick the save, enter the password). There are also Ocarina of Time, Final Fantasy VII, GoldenEye, TIE Fighter and CRT terminal skins. - 0:17 Session launcher: SUPER + SHIFT + O opens a configured session, and its apps land on their assigned workspaces, monitors and positions: Neovim and Yazi, an AI agent, btop and lazygit, and Firefox. - 0:21 Resize submap: SUPER + R enters a resize submap, its which-key panel is generated from the binds, and SHIFT + L widens the editor. - 0:26 Palettes: the Settings panel switches oasis.nvim palettes live. Window borders, the bar, kitty, tmux and Neovim all repaint together. - 0:39 Live styles: the whole shell (bar, popups, OSD, cursor, sounds) switches style at runtime: PSX, FF7, GoldenEye, Game Boy, Metroid and Oasis, with the same calendar, weather and volume OSD in each. 16 styles total. - 1:31 Agent kickoff: an agent gets a task in tmux and keeps working while the rest of the video plays. - 1:36 Workspace overview: every monitor and workspace in one view. Hop across monitors with hjkl, mark two windows and move them to another workspace together, then search for a window by name and jump to it. - 1:49 Screenshot tool: region selection with hjkl in 100, 10 and 1 px steps, a zoom loupe for pixel-perfect edges, then copy. - 2:02 Command prompt: HyprVim's : prompt. :layout, Tab down to scrolling, and the workspace re-tiles live. It takes any Hyprland command for one-off changes, plus some shortcuts of my own. - 2:10 KeepTabs: a popup listing running AI agent sessions with little animations for their state, and a jump straight to the one that finished. See KeepTabs. What is NOT in the video - Wallpapers that follow the world outside: art in <Season>/<Period>/<Weather>/ folders (like Fall/Night/Rain) rotates to match. The beach in the video is from my Summer Evening set. - SUPER + C drives the mouse from the keyboard, with wl-kbptr hint labels to click anything in a couple of keystrokes. - Bar popups you walk between with CTRL + h/l, including voice dictation. - Screen recording, scrolling capture with OCR, and a color picker. - Fuzzy pickers for apps, clipboard and emoji. - Email in Betterbird with vim motions, a which-key, visual selection and a : command line. - A screen-share picker, a tmux overview, and keybind search that runs what you pick (SUPER + /). - All the HyprVim features such as registers, marks, vim text editing via submaps, counts, open vim in any text field, and more. What's going on under the hood - Portable. Machine-specific values go in a per-hostname machine profile, your own config in a gitignored custom/ that runs after everything else, and everything tracked stays generic. - Monitor-local workspaces. Each monitor gets its own range (1–5, 6–10, ...), and the number keys stay on the monitor you're on. - Submaps as verbs. Submaps read like vim grammar: SUPER + D is delete, so B closes every browser, O closes everything else on the workspace, and SHIFT + D kills the whole workspace. SUPER + G is go-to, SUPER + C is mouse cursor... etc: - One file per submap. Every bind carries its own description, which feeds both the which-key panels and the SUPER + / keybind search. - Per-submap unbinding. hl.unbind can't target a single submap (#15040), so the Bind library tracks binds per submap and Bind.unbind(key, submap) lets you override one from your own config. - Sessions in Lua. Sessions.add takes a list of apps pinned to monitors and workspaces. If a session's monitor isn't connected, it folds onto one that is, so sessions work on any layout. - One palette, every generator. Switching palettes reruns generators for Hyprland, rofi, the terminals and Quickshell, and can push the matching colorscheme to every running Neovim over RPC. - Non-blocking prompts. dmenu-style prompts run asynchronously and call back through hyprctl, so the compositor never waits on your input. - Undo for closed windows. Anything closed through a bind is remembered (the last 20), and SUPER + U reopens it, like CTRL + SHIFT + T in a browser. - Quickshell is optional for the pickers. When it isn't running, the launcher and pickers fall back to rofi, fuzzel or wofi. Before you ask - Can I take just the Hyprland config? - Yes. just repos && just stow hypr links only ~/.config/hypr. It expects a few neighbours (the bar and pickers from the quickshell package, wl-kbptr and friends), and the hypr README lists them. HyprVim also has its own repo. - What versions? - Hyprland with the Lua config (tested on 0.56.2) and Quickshell 0.3.1 or newer. The full installer is Arch only. - Did you use AI? - Yes! I'm a dad running a business, so recreating the entire MGS2 intro by hand was never going to happen. AI agents built a lot of this with me, especially the Quickshell side. The ideas, design and taste are all mine; the agents just got me there without giving up family time or the business. Credits - Music: "Science Tour" by slowerpace: <soundcloud.com> - Wallpaper art: Mark Ferrari: <markferrari.com> Resources Dotfiles: <uhs-robert/oasis-dots> Discord: <discord.gg> Is my pilgrimage over? I don't think it ever will be. If there's a vim feature you think is missing, file an issue or tell me about it on Discord. Happy to answer any questions. I hope you enjoy the fruits of my labor, and welcome to the Oasis.