View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
View devmobasa's full-sized avatar

Block or report devmobasa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
devmobasa/README.md

Hi there 👋

I build open-source tools for the Linux desktop, mostly around Wayland, Hyprland, and Omarchy. By day I'm a web developer working in .NET and JavaScript.

Most of my projects started as fixes for things that bugged me in my own workflow, so they tend to be local-first and keyboard-friendly. My main project atm is Wayscriber, a ZoomIt-style screen annotation tool for Linux and Wayland.

RustC++.NETTypeScriptShellWaylandArch Linux

Start here

✍️ Wayscriber
Real-time screen annotation for Linux and Wayland, inspired by ZoomIt. Draw over any app, zoom into details, keep persistent boards. Website & docs →
🎥 Omarec
Screen recording for Omarchy and Hyprland, built on GPU Screen Recorder. Adds session recovery, menus, and bar integration.
🧭 Omarchy Nexus
A keyboard-driven cockpit for Omarchy: media controls, system metrics, quick settings, clipboard history, and notes.
🧹 dotnet-anti-slop
Roslyn analyzers that catch real reliability and performance mistakes in C#, ASP.NET Core, and EF Core code.

Linux desktop & Wayland

  • 🖊️ Omascribe: a small C++23/Qt 6 overlay for drawing live annotations on the Omarchy and Hyprland desktop.
  • 🖍️ SharpMarker: a .NET 11 and SkiaSharp screen annotation tool for Linux and Wayland, with drawing tools, boards, capture, zoom, and persistent sessions.
  • ⌨️ Keyway: a small Rust/GTK4 keystroke visualizer for Wayland, handy for demos and screen recordings.
  • 🗣️ SpeechToText: local push-to-talk transcription for Linux, with GPU acceleration and Wayland/X11 output.

Developer workflow & automation

  • 🎬 Wayscriber Video Toolkit: the Wayland capture and FFmpeg pipeline I use to produce Wayscriber videos, posters, and contact sheets.
  • 🔥 ff: fire-and-forget launchers that run commands as detached systemd jobs or in hidden Hyprland terminals.
  • 🌳 Treeist: a Git worktree helper with a compact wt CLI, interactive pickers, and cleanup workflows.
  • 🤖 Yummy: a Mattermost bridge for the pi and codex coding-agent CLIs, with resumable sessions and progress updates.
  • 🔐 QuickOTP: a cross-platform TOTP manager with a terminal UI, QR support, and 2FAS backup import/export. The popup is built for hotkey use: I summon it with Super+Shift+A, type a few letters, hit Enter, and the code is on my clipboard.

Omarchy plugins

Plugins and add-ons I've built for the Omarchy bar and desktop.

At a glance

  • ✍️ Wayscriber Deck: Wayscriber controls in the Omarchy bar, with live status, capture and presentation actions, plus quick access to boards and recent sessions.
  • 📅 Calendar Agenda: upcoming-event countdowns and a two-week agenda from ICS or CalDAV export URLs.
  • 📥 Dev Inbox: GitHub notifications, review requests, assigned issues, and failed CI in one bar badge.
  • 🧼 Git Hygiene: a bar badge that finds dirty and unpushed repositories across your project roots.
  • 🍅 Pomodoro: a restart-proof focus timer with work/break cycles and automatic Do Not Disturb.
  • 🔴 Privacy Dots: dots in the bar that show which app is using your microphone or screen.
  • ⏱️ Screen Time: local per-app focus tracking with a daily breakdown and a week-at-a-glance chart.
  • 🩺 systemd Health: a quiet status chip that only appears when system or user units fail.

Windows & workspaces

  • 🪟 Window Switcher: a keyboard-first Quickshell switcher with MRU ordering, search, and live window previews.
  • 🔭 Window Overview: a Mission Control-style overview with live thumbnails and drag-to-move workspace organization.
  • 📦 Minimizer Tray: shows how many windows you've stashed on the minimized workspace and brings them back.
  • 🗂️ Scratchpad Deck: named drop-down scratchpads that spawn their app if it isn't running yet.

System control

  • 💾 Drive Bay: mount, unmount, and check free space on removable drives through UDisks2.
  • 🎮 Game Mode: a one-click bar toggle that strips compositor effects for gaming, then puts your exact Hyprland config back.
  • 🖥️ Monitor Layout: drag-to-arrange displays with mode, scale, rotation, and VRR, remembered per monitor.
  • 🛡️ Permission Center: a UI for Hyprland's permission rules that keeps them enforced across restarts.
  • 🔒 VPN Manager: tunnel state, routing-leak visibility, and control of NetworkManager and systemd VPNs.
  • 🖼️ Wallpaper Hub: a native wallpaper library with Wallhaven search, download, and Omarchy theme integration.

Automation & screencasting

  • Context Rules: automates your desktop based on live context like screen sharing, the focused app, time, and battery.
  • ⌨️ Keycast: an on-screen keystroke HUD for screencasts, powered by Hyprland's event bus.

How I build

  • Native where it matters. I reach for Rust, C++, QML, or .NET when a tool needs to feel fast and fit the platform.
  • Local first. Private data and everyday workflows should stay on the machine whenever possible.
  • Keyboard friendly. Fast paths for the things you do all day, without hiding how anything works.
  • Built from real needs. Every tool here started as a fix for something that kept getting in my way.

Pinned Loading

  1. wayscriberwayscriberPublic

    Live overlay for drawing, annotating, presenting with zoom, hiding text, and capturing screenshots on Linux. Can be used as whiteboard or blackboard. Packed with features. Highly customisable. Writ…

    Rust 724 23