A fully customizable, collapsible toolbar that floats above the keyboard, intentionally replacing parts of the default mobile toolbar/navigation UX. Highly polished, feature-rich, loud, and opinionated. Built primarily around my own mobile workflow and tastes — both aesthetically and interactionally — and shared with anyone else who enjoys that energy. The defaults are intentionally colorful, gesture-dense, and high-contrast. If you want something quieter, the plugin is deeply customizable: desaturate it, make everything grey, simplify layouts, preserve more native behavior, whatever you want. I genuinely welcome contributions that support different philosophies and workflows — especially if they’re bundled cleanly into optional settings instead of diluting the core defaults. Built (and maintained!) with ❤️
In edit mode (wrench 🔧 icon, or obsidian command Gay Toolbar: Toggle edit mode), each button can be assigned a primary (tap) and optional secondary (long-press) obsidian command, as well as any number of swipe commands, each assigned to a different swipe direction. Buttons can be moved between slots by long-pressing and dragging in edit mode. Their colors can be customized from a customizable color palette or assigned in bulk. The background color of the whole toolbar can be set to a solid color, or you can use your own CSS value for crazy radial gradients or whatever. Did I mention this toolbar is customizable? The number and size of rows and columns can also be set independently, and when you arrive at a config you like, you can snapshot it like a video game save slot.
P.S. My partner and I are looking for freelance work. She specializes in real-time full-stack app development (web sockets, Go, etc.). I specialize in real-time front ends, animation, and performance. Together, we've built apps, AI integrations, plugins, and much more. P.P.S. I've found Code Editor Shortcuts to be utterly indispensable so I highly recommend you explore what other plugins add the behavior you want so you can add it to your Gay toolbar.
And if your disagreement with the defaults is strong enough that you want new settings (“desaturate all defaults”, “keep the native navbar”, “load monochrome color pallet”, etc.), PRs are warmly welcomed. I’d happily collect options like these into a dedicated “Minimalist and Proud” settings section.
setInterval usage is local UI: optional slow auto-scroll of the long quote on the Restore default settings screen.Function constructor (same general idea as pasting code in the developer console): only code you write and save runs, loaded from your vault settings—not fetched from the network for execution. Treat custom commands like any privileged automation: don’t paste untrusted snippets.(now for the AI-generated part BUT there's still helpful clarifications here. Think of it like a Q&A)
Gay Toolbar: Minimize command hides the toolbar, leaving one floating button that re-opens the toolbar. In the default config, it's the middle button in the right-most column.Gay Toolbar: Toggle Edit Mode via the Command Palette.radial-gradient(circle at bottom, pink, grey, white)). Layout, appearance, and other options are grouped in accordion sections.plugin, app, and console. Use Test to run the code; any console.log/warn/error output appears in the panel below. For full debugging, use Help → Developer tools. Test commands before saving and manage them in a table. Commands are persisted and loaded on startup. You can also Restore defaults (toolbar layout and settings) from the main settings without losing your custom commands or color presets.Example Command - Toggle underline on selected text:
const view = app.workspace.activeEditor;
if (view && view.editor) {
const editor = view.editor;
const selection = editor.getSelection();
if (selection) {
const underlineRegex = /^\s*<u>(.*?)<\/u>\s*$/s;
const match = selection.match(underlineRegex);
if (match) {
editor.replaceSelection(match[1]);
} else {
editor.replaceSelection(`<u>${selection}</u>`);
}
} else {
new Notice("No text selected");
}
}
+) to insert a button (new button color is chosen randomly from color presets -- edit these in the color picker modal).Long-press delay option. Personally, I like to group related commands like undo/redo and indent/outdent.If you’re excited about seeing any of these or other ideas implemented, I’d love to collaborate! I’m happy to hop on a call and pair-code with you, even if you’re new to coding. What matters most to me is our shared investment in shaping our tools to meet our needs — I cherish connection built on loving the technology that supports us.
Time-dependent Colors: Automatically change toolbar colors based on time (daily or even every second).
Better Icon Support: Add emoji support to icon selector.
Separate Icon and Command Selection Flow
Swipe Button Actions: Add additional swipe gestures for more commands (e.g., swipe up, down, left, right). Visual cues will display custom colors for each gesture on the border of each button and dynamically as the user swipes. Example button for block editing:
To run the plugin locally:
Install dependencies:
npm i
Start development mode (builds main.js from src/main.tsx, watches source and styles/*.css and writes combined styles.css):
npm run dev
Build for production:
npm run build
Run tests:
npm run test
npm run test:watch # watch mode
npm run test:coverage # coverage report
To sync changes to your Android Obsidian installation via ADB on save, have npm run dev running in another terminal and then:
fswatch -o main.js styles.css manifest.json data.json | xargs -n1 -I{} sh -c 'echo "Files changed, syncing..."; adb push main.js <path/to/.obsidian>/plugins/gay-toolbar/ && adb push styles.css <path/to/.obsidian>/plugins/gay-toolbar/ && adb push manifest.json <path/to/.obsidian>/plugins/gay-toolbar/ && adb push data.json <path/to/.obsidian>/plugins/gay-toolbar/ && echo "Sync complete"'
Replace <path/to/.obsidian> with your actual Obsidian vault path. The data.json sync is optional - you can remove it from the command if you don't want to sync your settings.
I've found the hot-reload plugin sometimes useful, as well as the dev tools plugin, tho for the latter case it's often easier to use the chrome devtools on mac, connected to android via adb. Lmk if you need help; happy to accept PRs!