Compare commits

...
6 Commits
7 changed files with 105 additions and 17 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ My current setup is built around these core components:
- **`scripts/`**: Global utility scripts seamlessly exposed as commands by the installer. See [`commands.md`](commands.md).
- **`wallpapers/`**: A collection of local custom wallpapers for dynamic theming. See [`wallpaper-gallery/`](wallpaper-gallery/index.md) for the full gallery (split alphabetically across multiple pages).
- **`themes/`**: Drop-in local color themes (one `colors.toml` per theme) that `install.sh` deploys into Omarchy's theme directory. See [`themes/README.md`](themes/README.md).
- **`branding/`**: Custom ASCII art and system branding assets.
- **`branding/`**: Custom ASCII art and system branding assets. `blob_icon.svg` is the bar menu button.
- **`kitty/`**: kitty terminal config and its color theme, applied by hand rather than by `install.sh`. See [`kitty/README.md`](kitty/README.md).
## Docs
+19
View File
@@ -57,6 +57,11 @@ const [stayAwake, setStayAwake] = pollBool(
2000,
)
const [tabletFollow, setTabletFollow] = pollBool(
"omarchy-toggle-tablet-follow status 2>/dev/null | grep -q '\"enabled\":true' && echo on || echo off",
2000,
)
const [recording] = pollBool(
"pgrep -f '^gpu-screen-recorder' >/dev/null && echo on || echo off",
2000,
@@ -219,6 +224,20 @@ function Toggles() {
}}
/>
</box>
<box class="qs-tiles" spacing={8} homogeneous>
<Tile
icon={""}
label="Tablet Lock"
active={tabletFollow}
tooltip={tabletFollow.as((on: boolean) =>
on ? "Tablet follows focused monitor" : "Tablet spans all monitors",
)}
onClicked={() => {
setTabletFollow(!tabletFollow.get())
sh("omarchy-toggle-tablet-follow toggle")
}}
/>
</box>
</box>
)
}
+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="520.000000pt" height="511.000000pt" viewBox="0 0 520.000000 511.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,511.000000) scale(0.050000,-0.050000)"
fill="#000000" stroke="none">
<path d="M4790 10147 c-3157 -250 -5335 -3216 -4578 -6237 784 -3132 4321
-4735 7258 -3290 2905 1429 3734 5102 1723 7628 -1028 1292 -2741 2030 -4403
1899z m1090 -337 c3940 -604 5501 -5305 2677 -8061 -2334 -2278 -6268 -1614
-7707 1301 -1482 3002 510 6440 3940 6798 173 18 888 -7 1090 -38z"/>
<path d="M2810 8049 c-22 -5 -89 -19 -150 -31 -998 -194 -1377 -1466 -652
-2188 1078 -1073 2875 139 2209 1490 -238 483 -926 840 -1407 729z m550 -269
c782 -263 1032 -1216 470 -1788 -633 -642 -1757 -350 -1959 510 -195 826 658
1558 1489 1278z"/>
<path d="M2626 7544 c-486 -174 -571 -762 -147 -1018 572 -345 1209 298 812
819 -142 185 -447 277 -665 199z"/>
<path d="M6930 8029 c-1037 -228 -1420 -1465 -682 -2199 855 -850 2351 -270
2351 910 0 832 -830 1473 -1669 1289z m689 -256 c777 -270 1012 -1233 437
-1796 -638 -624 -1745 -325 -1945 525 -197 836 666 1564 1508 1271z"/>
<path d="M7295 7073 c-373 -105 -571 -506 -415 -839 286 -608 1249 -418 1249
246 0 411 -420 710 -834 593z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+2
View File
@@ -1,2 +1,4 @@
-- Extra autostart processes.
o.launch_on_start("ags run")
o.launch_on_start("omarchy-toggle-tablet-follow autostart")
+15 -7
View File
@@ -23,7 +23,7 @@ Ported from the old `waybar/config.jsonc`, section for section:
| `network` | `omarchy.network` |
| `pulseaudio` | `omarchy.audio` |
| `battery` | `omarchy.power` |
| `cpu` | `blob.cpu` (custom module) |
| `cpu` | dropped (btop and the AGS system monitor have no bar entry point now) |
| `custom/notification` | `blob.notifications` (custom module) |
| (new in Omarchy 4) | `omarchy.agents` - AI agent usage |
| (new in Omarchy 4) | `omarchy.monitor` - brightness and display controls |
@@ -52,11 +52,9 @@ clears it. The lock screen carries the branding on its own (see
## Custom modules
The bar accepts arbitrary ids with `type: "command"`, which is how the two
AGS entry points survive the move off waybar:
The bar accepts arbitrary ids with `type: "command"`, which is how the AGS
entry points survive the move off waybar:
- `blob.cpu` - left opens btop, middle opens alacritty, right toggles the AGS
system monitor
- `blob.notifications` - left toggles the AGS notification center, right
toggles notification silencing
- `blob.clock` - left toggles AGS quick settings, middle opens the shell's own
@@ -78,14 +76,24 @@ by hand; see below for why.
hardcodes workspaces 1-5 as always visible and has no setting for it, so the
clone changes that list to 1-9 to match the old waybar `persistent-workspaces`.
`plugins/blob.menu/` clones `omarchy.menu` to widen it and to let a menu row
choose where it sits. `cardWidth` in `Menu.qml` is hardcoded at
`plugins/blob.menu/` clones `omarchy.menu` to widen it, to let a menu row
choose where it sits, and to put the Blob icon on the bar button. `cardWidth` in `Menu.qml` is hardcoded at
`Style.space(300)`; the clone raises it to 440, so the apps menu (Super + Space)
and the root menu (Super + Alt + Space) are both wider. The two oversized menus
(screen recording, font picker) keep their own 520 and are untouched.
`omarchy-menu` still targets `omarchy.menu` on the CLI - the manifest records
`clonedFrom`, and the shell routes those calls here.
`BarWidget.qml` swaps the stock `\ue900` glyph from the `omarchy` icon font for
`branding/blob_icon.svg`. An SVG is text, so the fill is rewritten to the bar
foreground in QML and the result handed to `Image` as a base64 `data:` URL -
the same trick the `theme-set` hook uses with `sed` for the fastfetch logo, so
both consumers of the icon work the same way. The color is read off
`button.foreground` rather than the theme, which keeps the icon on the bar's own
foreground animation, and rebuilding the URL is what reloads the image, so there
is no image cache to bust. The glyph stays as the `text` fallback and is shown
whenever the SVG cannot be read or decoded, so the button is never blank.
`mergeMenuSources` in `MenuModel.js` reads the default menu first and the user
extension second, so a row that only exists in `extensions/omarchy-menu.jsonc`
lands at the bottom of its menu with no way to move it. The clone adds a
+43
View File
@@ -1,24 +1,67 @@
import QtQuick
import Quickshell
import Quickshell.Io
import qs.Commons
import qs.Ui
BarWidget {
id: root
moduleName: "omarchy.menu"
readonly property string iconPath: Quickshell.env("HOME") + "/.config/omarchy/branding/blob_icon.svg"
readonly property int iconSize: Math.round(Style.font.body * 1.35)
property string iconSvg: ""
readonly property string iconColor: hexColor(button.foreground)
readonly property string tintedSvg: iconSvg.replace(/fill="#000000"/g, 'fill="' + iconColor + '"')
readonly property string iconUrl: iconSvg.length > 0 ? "data:image/svg+xml;base64," + Qt.btoa(tintedSvg) : ""
readonly property bool iconReady: icon.status === Image.Ready
function hexColor(value) {
function channel(fraction) {
return ("0" + Math.round(fraction * 255).toString(16)).slice(-2)
}
return "#" + channel(value.r) + channel(value.g) + channel(value.b)
}
implicitWidth: button.implicitWidth
implicitHeight: button.implicitHeight
FileView {
path: root.iconPath
watchChanges: true
printErrors: false
onLoaded: root.iconSvg = text()
onLoadFailed: root.iconSvg = ""
onFileChanged: reload()
}
WidgetButton {
id: button
anchors.fill: parent
bar: root.bar
text: "\ue900"
fontFamily: "omarchy"
labelVisible: !root.iconReady
fixedWidth: root.iconReady ? root.iconSize + Style.spaceReal(15) : -1
horizontalMargin: 7.5
onPressed: function(button) {
if (!root.bar) return
if (button === Qt.RightButton) root.bar.run("xdg-terminal-exec")
else root.bar.run("omarchy-shell shell toggle omarchy.menu '{\"menu\":\"root\"}'")
}
Image {
id: icon
anchors.centerIn: parent
width: root.iconSize
height: root.iconSize
source: root.iconUrl
sourceSize.width: root.iconSize * 2
sourceSize.height: root.iconSize * 2
smooth: true
visible: root.iconReady
}
}
}
-9
View File
@@ -51,15 +51,6 @@
{
"id": "omarchy.monitor"
},
{
"id": "blob.cpu",
"type": "command",
"text": "󰍛",
"tooltip": "System monitor",
"onClick": "omarchy-launch-or-focus-tui btop",
"onMiddleClick": "alacritty",
"onRightClick": "ags toggle sys-monitor"
},
{
"id": "omarchy.power"
},