From a79d1b6cb463e176c822d3b6e5da747cef5c94a9 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:21:47 -0400 Subject: [PATCH 1/9] workstation-v0: add sourceos palette (fuzzel/wofi/rofi/fzf) and drop albert assumptions --- .../linux-dev/workstation-v0/bin/sourceos | 60 ++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/profiles/linux-dev/workstation-v0/bin/sourceos b/profiles/linux-dev/workstation-v0/bin/sourceos index b750a4c..48dcfdd 100644 --- a/profiles/linux-dev/workstation-v0/bin/sourceos +++ b/profiles/linux-dev/workstation-v0/bin/sourceos @@ -2,7 +2,7 @@ set -euo pipefail # SourceOS workstation helper (linux-dev/workstation-v0) -# Dependency-light command surface intended to be callable from Albert. +# Dependency-light command surface intended to be callable from a launcher. PROFILE_DIR_DEFAULT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PROFILE_DIR="${SOURCEOS_PROFILE_DIR:-$PROFILE_DIR_DEFAULT}" @@ -18,7 +18,6 @@ cache_dir(){ } json_escape(){ - # Minimal JSON string escape (no unicode escaping) local s=${1:-} s=${s//\\/\\\\} s=${s//"/\\"} @@ -44,14 +43,14 @@ usage(){ sourceos (workstation helper) Usage: + sourceos palette sourceos doctor [--open] sourceos status [--json|--open|--write ] sourceos profile apply sourceos profile path Env: - SOURCEOS_PROFILE_DIR Override profile directory (default: $PROFILE_DIR_DEFAULT) - SOURCEOS_ALLOW_THIRDPARTY_REPOS See gnome/albert-install.sh + SOURCEOS_PROFILE_DIR Override profile directory (default: $PROFILE_DIR_DEFAULT) EOF } @@ -129,10 +128,6 @@ status_collect(){ fi if gnome_detect; then - if ! check_bin albert; then - REQUIRED_MISSING+=("albert") - fi - if ! check_bin gsettings; then WARNINGS+=("gsettings missing") fi @@ -255,6 +250,51 @@ status_write(){ exit "$rc" } +palette_menu(){ + # Print menu entries as: labelcommand + cat <<'EOF' +Status (open report) sourceos status --open +Doctor (open report) sourceos doctor --open +Apply profile sourceos profile apply +Open sesh sesh +Open tmux tmux +Open k9s k9s +Open lazygit lazygit +Open lazydocker lazydocker +Open yazi yazi +EOF +} + +palette_select(){ + # Prefer Wayland-first fuzzel, then wofi, then rofi, then terminal fzf. + if have fuzzel; then + palette_menu | fuzzel --dmenu --prompt 'sourceos> ' | awk -F '\t' '{print $2}' + return + fi + if have wofi; then + palette_menu | wofi --dmenu --prompt 'sourceos> ' | awk -F '\t' '{print $2}' + return + fi + if have rofi; then + palette_menu | rofi -dmenu -p 'sourceos> ' | awk -F '\t' '{print $2}' + return + fi + if have fzf; then + palette_menu | fzf --with-nth=1 --delimiter=$'\t' --prompt='sourceos> ' | awk -F '\t' '{print $2}' + return + fi + + err "no launcher found (fuzzel/wofi/rofi/fzf)" + return 2 +} + +run_palette(){ + local cmd + cmd="$(palette_select || true)" + [[ -n "$cmd" ]] || exit 0 + exec bash -lc "$cmd" +} + main(){ local cmd=${1:-} case "$cmd" in @@ -262,6 +302,10 @@ main(){ usage ;; + palette) + run_palette + ;; + doctor) shift || true case "${1:-}" in From fb1d4c07014517f7fccd818b344703b241ffa3c1 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:25:50 -0400 Subject: [PATCH 2/9] workstation-v0: add GNOME hotkey for sourceos palette (Super+Space) --- .../workstation-v0/gnome/palette-hotkey.sh | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 profiles/linux-dev/workstation-v0/gnome/palette-hotkey.sh diff --git a/profiles/linux-dev/workstation-v0/gnome/palette-hotkey.sh b/profiles/linux-dev/workstation-v0/gnome/palette-hotkey.sh new file mode 100644 index 0000000..a304e2f --- /dev/null +++ b/profiles/linux-dev/workstation-v0/gnome/palette-hotkey.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Configure a GNOME custom keybinding for the SourceOS palette. +# We bind Super+Space to `sourceos palette`. +# We also avoid collision with GNOME input-source switching by moving that to Alt+Shift. + +info(){ printf "INFO: %s\n" "$*" >&2; } +warn(){ printf "WARN: %s\n" "$*" >&2; } + +have(){ command -v "$1" >/dev/null 2>&1; } + +is_gnome(){ + [[ "${XDG_CURRENT_DESKTOP:-}" == *GNOME* ]] && return 0 + [[ "${DESKTOP_SESSION:-}" == *gnome* ]] && return 0 + return 1 +} + +main(){ + if ! have gsettings; then + warn "gsettings missing; cannot set hotkey" + exit 0 + fi + + if ! is_gnome; then + warn "GNOME not detected; skipping hotkey" + exit 0 + fi + + # Move input source switching away from Super+Space (macOS uses Cmd+Space for search). + gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['Shift_L']" || true + gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['Shift_R']" || true + + local base="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/" + local custom0="${base}custom0/" + + gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['${custom0}']" || true + + gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} name "SourceOS Palette" || true + gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} command "sourceos palette" || true + gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} binding "space" || true + + info "SourceOS palette hotkey set: Space → sourceos palette" + info "Input source switching moved to Alt+Shift (L/R)" +} + +main "$@" From 6cf4ebdd932cf14cfc3ca1cff5db50e3685b65cb Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:27:00 -0400 Subject: [PATCH 3/9] workstation-v0: add launcher install script (fuzzel preferred) --- .../workstation-v0/gnome/launcher-install.sh | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 profiles/linux-dev/workstation-v0/gnome/launcher-install.sh diff --git a/profiles/linux-dev/workstation-v0/gnome/launcher-install.sh b/profiles/linux-dev/workstation-v0/gnome/launcher-install.sh new file mode 100644 index 0000000..d0272bb --- /dev/null +++ b/profiles/linux-dev/workstation-v0/gnome/launcher-install.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Install an open-source launcher for the SourceOS palette. +# Wayland-first preference: fuzzel (MIT) +# Fallbacks: wofi (GPL-3.0-only), rofi (GPL) + +info(){ printf "INFO: %s\n" "$*" >&2; } +warn(){ printf "WARN: %s\n" "$*" >&2; } + +have(){ command -v "$1" >/dev/null 2>&1; } + +is_gnome(){ + [[ "${XDG_CURRENT_DESKTOP:-}" == *GNOME* ]] && return 0 + [[ "${DESKTOP_SESSION:-}" == *gnome* ]] && return 0 + return 1 +} + +os_id(){ + if [[ -r /etc/os-release ]]; then + . /etc/os-release + echo "${ID:-linux}" + else + echo "linux" + fi +} + +install_fedora(){ + # Prefer fuzzel (Wayland-first). + if have rpm-ostree; then + info "Installing launcher via rpm-ostree" + sudo rpm-ostree install fuzzel || true + return + fi + + if have dnf; then + info "Installing launcher via dnf" + sudo dnf install -y fuzzel || true + return + fi +} + +main(){ + if have fuzzel || have wofi || have rofi; then + info "launcher already present (fuzzel/wofi/rofi)" + exit 0 + fi + + if ! is_gnome; then + warn "GNOME not detected; skipping launcher install" + exit 0 + fi + + local id + id="$(os_id)" + + if [[ "$id" == "fedora" ]]; then + install_fedora + else + warn "Unsupported distro for launcher install (id=$id). Install fuzzel/wofi/rofi manually." + exit 0 + fi + + if have fuzzel || have wofi || have rofi; then + info "launcher installed" + else + warn "no launcher found after install attempt (expected: fuzzel)" + fi +} + +main "$@" From 5bde798e22fd9315aba742491ab6382f11484fcf Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:30:20 -0400 Subject: [PATCH 4/9] workstation-v0: use palette launcher install and hotkey --- profiles/linux-dev/workstation-v0/install.sh | 25 ++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/profiles/linux-dev/workstation-v0/install.sh b/profiles/linux-dev/workstation-v0/install.sh index 8e4a1dc..70eff5f 100644 --- a/profiles/linux-dev/workstation-v0/install.sh +++ b/profiles/linux-dev/workstation-v0/install.sh @@ -87,6 +87,27 @@ apply_gnome_extensions(){ fi } +apply_launcher_install(){ + local script="$PROFILE_DIR/gnome/launcher-install.sh" + if [[ -x "$script" ]]; then + info "Installing launcher (best-effort)" + "$script" || warn "launcher install failed (non-fatal)" + else + warn "launcher install script not found: $script" + fi +} + +apply_palette_hotkey(){ + local script="$PROFILE_DIR/gnome/palette-hotkey.sh" + if [[ -x "$script" ]]; then + info "Setting palette hotkey (best-effort)" + "$script" || warn "palette hotkey setup failed (non-fatal)" + else + warn "palette hotkey script not found: $script" + fi +} + +# Legacy functions retained for backwards compatibility. Not invoked. apply_albert_install(){ local script="$PROFILE_DIR/gnome/albert-install.sh" if [[ -x "$script" ]]; then @@ -115,8 +136,8 @@ main(){ install_sourceos_cli apply_gnome_baseline apply_gnome_extensions - apply_albert_install - apply_albert_hotkey + apply_launcher_install + apply_palette_hotkey info "installed workstation-v0 (linux-dev)" info "next: ./doctor.sh" } From b3fd89a8371c96f2264130fd364744c907dfbcca Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:31:51 -0400 Subject: [PATCH 5/9] workstation-v0: doctor requires open-source launcher on GNOME (fuzzel/wofi/rofi) --- profiles/linux-dev/workstation-v0/doctor.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/profiles/linux-dev/workstation-v0/doctor.sh b/profiles/linux-dev/workstation-v0/doctor.sh index 72103e0..888dfca 100644 --- a/profiles/linux-dev/workstation-v0/doctor.sh +++ b/profiles/linux-dev/workstation-v0/doctor.sh @@ -39,7 +39,6 @@ check_gnome_extension(){ } check_sourceos_binding(){ - # Ensure the `sourceos` command on PATH is bound to THIS profile directory. if ! have sourceos; then err "missing: sourceos" return @@ -64,6 +63,15 @@ check_sourceos_binding(){ info "ok: sourceos (profile bound)" } +check_launcher(){ + # Require at least one launcher for the SourceOS palette on GNOME. + if have fuzzel || have wofi || have rofi; then + info "ok: launcher (fuzzel/wofi/rofi)" + return + fi + err "missing: launcher (need fuzzel/wofi/rofi for sourceos palette)" +} + main(){ info "doctor: linux-dev/workstation-v0" @@ -85,7 +93,7 @@ main(){ # USER expectations check brew - # SourceOS helper (needed for Albert SourceOS plugin actions) + # SourceOS helper check_sourceos_binding # Core CLI must-haves @@ -122,7 +130,7 @@ main(){ # GNOME expectations if gnome_detect; then - check albert + check_launcher if have gsettings; then info "gnome: detected; gsettings present" @@ -135,7 +143,7 @@ main(){ local hk hk=$(gsettings get org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} binding 2>/dev/null || true) if [[ -n "$hk" ]]; then - info "gnome: albert binding = ${hk}" + info "gnome: hotkey binding = ${hk}" fi else @@ -145,8 +153,6 @@ main(){ check_gnome_extension 'dash-to-dock@micxgx.gmail.com' check_gnome_extension 'appindicatorsupport@rgcjonas.gmail.com' - # Autostart is intentionally not enforced. - else info "gnome: not detected (ok)" fi From 90ce5bfeeca84922909b3a34056d4d9089c04f5a Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:33:09 -0400 Subject: [PATCH 6/9] docs(workstation): pivot runbook from albert to open-source palette launcher --- docs/workstation/RUNBOOK.md | 55 ++++++++++++------------------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/docs/workstation/RUNBOOK.md b/docs/workstation/RUNBOOK.md index 3d4707e..163e372 100644 --- a/docs/workstation/RUNBOOK.md +++ b/docs/workstation/RUNBOOK.md @@ -9,7 +9,7 @@ Key properties: - CLI-first, keyboard-first. - GNOME customization is **behavioral** (GSettings + extensions), no GNOME core forks. - `sourceos` is installed as a **profile-pinned wrapper** (stable command surface). -- Albert is installed best-effort; third-party repo fallback is **opt-in**. +- SourceOS uses an **open-source launcher palette** (Wayland-first) for Super+Space. --- @@ -17,7 +17,7 @@ Key properties: We assume: - Fedora / Silverblue / CoreOS-derived host, or any Linux host with `dnf` or `rpm-ostree`. -- GNOME session if you want the GNOME+Albert integration. +- GNOME session if you want the GNOME integration. Quick checks: @@ -45,26 +45,28 @@ Notes: - SYSTEM baseline (git/ssh/podman/toolbox/wl-clipboard/jq/xclip) - USER toolset via `brew` (manifest-driven) - shell spine config to `$XDG_CONFIG_HOME/sourceos/shell/common.sh` - - GNOME baseline + extensions + Albert hotkey + - GNOME baseline + extensions + - open-source launcher (fuzzel preferred) + SourceOS palette hotkey - `sourceos` helper wrapper into `~/.local/bin` --- -## 2) Trust boundary: Albert install fallback +## 2) Launcher palette (open-source) -Albert install logic: -1. Try native repos (`dnf` / `rpm-ostree`). -2. If not available, **do not** automatically add third-party repos. +SourceOS uses an open-source launcher palette for Super+Space. -To allow the optional OBS repo fallback, explicitly opt in: +Priority order: +1) `fuzzel` (Wayland-first, MIT) +2) `wofi` (GPL-3.0-only) +3) `rofi` (GPL) +4) terminal fallback: `fzf` + +The palette is invoked by: ```bash -export SOURCEOS_ALLOW_THIRDPARTY_REPOS=1 -./profiles/linux-dev/workstation-v0/install.sh +sourceos palette ``` -If you do not set this, the installer will print the exact `.repo` URL and exit non-zero for the Albert install step. - --- ## 3) Ensure PATH includes ~/.local/bin @@ -110,7 +112,7 @@ Exit codes: ### Hotkey The profile applies a GNOME custom keybinding: -- `space` → `albert toggle` +- `space` → `sourceos palette` If GNOME doesn’t pick it up immediately, log out/in. @@ -124,28 +126,7 @@ On `rpm-ostree`, GNOME shell extensions may require reboot/logout after install. --- -## 6) Albert integration (SourceOS actions) - -Albert must be running for the hotkey to work. - -Basic verification: - -```bash -command -v albert && albert --help >/dev/null 2>&1 || true -``` - -The SourceOS Albert plugin lives in `SociOS-Linux/albert` (dev branch) and is intended to provide: -- `SourceOS: status` → `sourceos status --open` -- `SourceOS: doctor` → `sourceos doctor --open` -- plus quick-launch actions (sesh/tmux/k9s/lazygit/lazydocker/yazi) - -If you are using a distro-provided Albert package, it may not include this SourceOS plugin. In that case: -- build/install Albert from `SociOS-Linux/albert`, or -- package the plugin into your chosen distribution lane (future workstream). - ---- - -## 7) One-line acceptance test +## 6) One-line acceptance test After install, this should succeed: @@ -154,8 +135,8 @@ sourceos status --json && sourceos doctor ``` And on GNOME, you should be able to: -- press `space` to toggle Albert -- run SourceOS actions from inside Albert (when plugin is installed) +- press `space` to open the SourceOS palette +- run SourceOS actions from the palette --- From 37071586ee4cc65d3e5635100ba4f829245c2ee8 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:34:33 -0400 Subject: [PATCH 7/9] workstation-v0: remove non-OSI launcher install script (Albert) --- .../workstation-v0/gnome/albert-install.sh | 172 ------------------ 1 file changed, 172 deletions(-) delete mode 100644 profiles/linux-dev/workstation-v0/gnome/albert-install.sh diff --git a/profiles/linux-dev/workstation-v0/gnome/albert-install.sh b/profiles/linux-dev/workstation-v0/gnome/albert-install.sh deleted file mode 100644 index 7a899ee..0000000 --- a/profiles/linux-dev/workstation-v0/gnome/albert-install.sh +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Install Albert on Fedora-based systems. -# Strategy: -# 1) Try native repos (dnf/rpm-ostree). -# 2) If not available, *optionally* add the OBS repo from home:manuelschneid3r and retry. -# -# Trust note: -# - Adding a third-party RPM repo expands the host trust boundary. -# - Therefore the OBS fallback is gated behind: -# SOURCEOS_ALLOW_THIRDPARTY_REPOS=1 - -info(){ printf "INFO: %s\n" "$*" >&2; } -warn(){ printf "WARN: %s\n" "$*" >&2; } - -have(){ command -v "$1" >/dev/null 2>&1; } - -is_gnome(){ - [[ "${XDG_CURRENT_DESKTOP:-}" == *GNOME* ]] && return 0 - [[ "${DESKTOP_SESSION:-}" == *gnome* ]] && return 0 - return 1 -} - -os_id(){ - if [[ -r /etc/os-release ]]; then - . /etc/os-release - echo "${ID:-linux}" - else - echo "linux" - fi -} - -os_version_id(){ - if [[ -r /etc/os-release ]]; then - . /etc/os-release - echo "${VERSION_ID:-}" - else - echo "" - fi -} - -allow_thirdparty_repos(){ - case "${SOURCEOS_ALLOW_THIRDPARTY_REPOS:-0}" in - 1|true|TRUE|yes|YES) return 0 ;; - *) return 1 ;; - esac -} - -fedora_obs_repofile_url(){ - local v - v="$(os_version_id)" - - if [[ "$v" == "rawhide" || "$v" == "Rawhide" || -z "$v" ]]; then - echo "https://download.opensuse.org/repositories/home:manuelschneid3r/Fedora_Rawhide/home:manuelschneid3r.repo" - return - fi - - echo "https://download.opensuse.org/repositories/home:manuelschneid3r/Fedora_${v}/home:manuelschneid3r.repo" -} - -install_obs_repo(){ - local url - url="$(fedora_obs_repofile_url)" - - local dest="/etc/yum.repos.d/home:manuelschneid3r.repo" - - info "Adding OBS repo for Albert (home:manuelschneid3r): $url" - - if have curl; then - curl -fsSL "$url" | sudo tee "$dest" >/dev/null - elif have wget; then - wget -qO- "$url" | sudo tee "$dest" >/dev/null - else - warn "Neither curl nor wget found; cannot add OBS repo automatically" - return 1 - fi - - info "Repo file installed: $dest" -} - -try_install_native(){ - if have rpm-ostree; then - info "Trying rpm-ostree install albert" - sudo rpm-ostree install albert || true - return 0 - fi - - if have dnf; then - info "Trying dnf install albert" - sudo dnf install -y albert || true - return 0 - fi - - warn "No rpm-ostree/dnf found; cannot install Albert" - return 1 -} - -try_install_with_obs(){ - install_obs_repo || return 1 - - if have rpm-ostree; then - info "Retrying rpm-ostree install albert (with OBS repo)" - sudo rpm-ostree install albert || true - return 0 - fi - - if have dnf; then - info "Retrying dnf install albert (with OBS repo)" - sudo dnf install -y albert || true - return 0 - fi - - return 1 -} - -print_obs_instructions(){ - local url - url="$(fedora_obs_repofile_url)" - warn "OBS fallback is disabled by default (trust boundary expansion)." - warn "To allow enabling the OBS repo automatically, set:" - warn " export SOURCEOS_ALLOW_THIRDPARTY_REPOS=1" - warn "Then re-run this installer." - warn "If you prefer manual install, repo file URL is: $url" -} - -main(){ - if have albert; then - info "albert already present" - exit 0 - fi - - if ! is_gnome; then - warn "GNOME not detected; skipping Albert install" - exit 0 - fi - - local id - id="$(os_id)" - - if [[ "$id" != "fedora" ]]; then - warn "Unsupported distro for Albert install (id=$id). Install Albert manually." - exit 0 - fi - - try_install_native - - if have albert; then - info "albert installed (native repos)" - exit 0 - fi - - warn "Albert not found in native repos." - - if ! allow_thirdparty_repos; then - print_obs_instructions - exit 2 - fi - - warn "Third-party repos allowed; attempting OBS repo fallback" - try_install_with_obs - - if have albert; then - info "albert installed (OBS repo)" - else - warn "albert not found after install attempts." - warn "You may need to install manually from software.opensuse.org for your Fedora version." - exit 2 - fi -} - -main "$@" From fb0f449a6cfc4dc620af7528adb1d32d988042ed Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 19:03:11 -0400 Subject: [PATCH 8/9] workstation-v0: remove albert hotkey script (replaced by palette-hotkey.sh) --- .../workstation-v0/gnome/albert-hotkey.sh | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100644 profiles/linux-dev/workstation-v0/gnome/albert-hotkey.sh diff --git a/profiles/linux-dev/workstation-v0/gnome/albert-hotkey.sh b/profiles/linux-dev/workstation-v0/gnome/albert-hotkey.sh deleted file mode 100644 index e148601..0000000 --- a/profiles/linux-dev/workstation-v0/gnome/albert-hotkey.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Configure a GNOME custom keybinding for Albert. -# We bind Super+Space to `albert toggle` by default. -# We also avoid collision with GNOME input-source switching by moving that to Alt+Shift. - -info(){ printf "INFO: %s\n" "$*" >&2; } -warn(){ printf "WARN: %s\n" "$*" >&2; } - -have(){ command -v "$1" >/dev/null 2>&1; } - -is_gnome(){ - [[ "${XDG_CURRENT_DESKTOP:-}" == *GNOME* ]] && return 0 - [[ "${DESKTOP_SESSION:-}" == *gnome* ]] && return 0 - return 1 -} - -main(){ - if ! have gsettings; then - warn "gsettings missing; cannot set hotkey" - exit 0 - fi - - if ! is_gnome; then - warn "GNOME not detected; skipping hotkey" - exit 0 - fi - - # Move input source switching away from Super+Space (macOS uses Cmd+Space for search). - # GNOME typically uses: org.gnome.desktop.wm.keybindings switch-input-source / switch-input-source-backward - gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['Shift_L']" || true - gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['Shift_R']" || true - - # Add a custom keybinding for Albert. - # Path style: /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ - local base="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/" - local custom0="${base}custom0/" - - gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['${custom0}']" || true - - gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} name "Albert" || true - gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} command "albert toggle" || true - gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${custom0} binding "space" || true - - info "Albert hotkey set: Space → albert toggle" - info "Input source switching moved to Alt+Shift (L/R)" -} - -main "$@" From cb6d1c7ee70b2d6929d221585c0af5ed33f6e132 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sun, 19 Apr 2026 19:04:38 -0400 Subject: [PATCH 9/9] workstation-v0: pivot manifest launcher from albert to open-source palette (fuzzel) --- profiles/linux-dev/workstation-v0/manifest.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/profiles/linux-dev/workstation-v0/manifest.yaml b/profiles/linux-dev/workstation-v0/manifest.yaml index c66774c..1e094d3 100644 --- a/profiles/linux-dev/workstation-v0/manifest.yaml +++ b/profiles/linux-dev/workstation-v0/manifest.yaml @@ -14,6 +14,8 @@ spec: - wl-clipboard - jq - xclip + # launcher (Wayland-first) + - fuzzel dnf: - git - openssh-clients @@ -22,6 +24,8 @@ spec: - wl-clipboard - jq - xclip + # launcher (Wayland-first) + - fuzzel user: brew: - fzf @@ -73,7 +77,10 @@ spec: enabled: true note: "libinput gestures; validate hardware" launcher: - albert: - plugin: - id: sourceos - trigger: "sourceos " + palette: + primary: fuzzel + fallbacks: + - wofi + - rofi + trigger: "space" + command: "sourceos palette"