Omahub
← All plugins
G

Linear

by gpdenny

Linear inbox in the Omarchy shell — unread badge, list, detail, and create issue.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
5dc90af
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
5dc90af
Reviewed
1 month ago

The reviewed code is a straightforward Linear client: it reads an API key from a user-specified file or environment variable and sends GraphQL requests only to api.linear.app. No install-time commands, obfuscation, credential exfiltration, or destructive operations were found, and the documented key-handling practices match the implementation.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/gpdenny/omarchy-linear --enable
Developer Tools #bar #quickshell

omarchy-linear

Linear inbox for Omarchy Quattro — a Quickshell bar widget with list, detail, mark-read, and create-issue.

Installs as plugin id gpdenny.linear.

Inbox

Inbox

Detail

Detail

Features

  • Unread count pill on the bar (polls every 120s by default)
  • Keyboard-friendly inbox panel (j/k, Enter for detail)
  • Mark one (r) or all visible (R) as read
  • Open the notification URL in your browser (o)
  • Detail view for issues, PRs, projects, and comments
  • Create issue form with team picker (c)
  • Themed with Omarchy Color / Style tokens (no hard-coded palette)

Dependencies

  • Omarchy Quattro (omarchy-shell / Quickshell)
  • A Linear personal API key with read + write scope
  • Network access to https://api.linear.app
  • Optional: xdg-open (open notifications), wl-copy (copy after create)

License: MIT (see LICENSE).

Install

omarchy plugin add https://github.com/gpdenny/omarchy-linear.git --enable
# or add-only, then place in bar layout via shell.json / bar settings

Toggle from IPC / a keybind:

omarchy-shell shell toggle gpdenny.linear '{}'

Remove

omarchy plugin remove gpdenny.linear

That disables the widget and deletes the plugin checkout. Optional leftovers you can delete by hand:

  • API key file — default ~/.config/linear-api-key
  • Plugin state — ~/.local/state/gpdenny.linear/

The plugin does not modify other Omarchy or Hyprland config without your explicit action.

API key

Create a key at Linear → Settings → Security & access.

Provide it via (checked in this order by the widget):

  1. A file — default ~/.config/linear-api-key (mode 600) — recommended
  2. LINEAR_API_KEY environment variable (set via ~/.config/uwsm/env + logout, or hyprctl eval 'hl.env("LINEAR_API_KEY", "…")' then omarchy restart shell)
echo 'lin_api_...' > ~/.config/linear-api-key
chmod 600 ~/.config/linear-api-key

Never put the key in shell.json. The widget setting apiKeyPath only stores a path.

Settings

Key Default Meaning
pollIntervalSec 120 Unread / inbox poll interval
apiKeyPath ~/.config/linear-api-key API key file
hideRead true Hide read notifications in the panel list

Example bar layout entry:

{ "id": "gpdenny.linear", "pollIntervalSec": 120, "hideRead": true }

Toggle in the panel with the Unread/All header button or press h. The choice is remembered under ~/.local/state/gpdenny.linear/hide-read.

Keybindings (panel)

Key Action
j / k Move selection
Enter Open detail (list) / open URL (detail) / submit (create)
o Open in browser
r / R Mark read / mark all visible read
h Toggle hide-read filter
c Create issue
g Refresh
Esc Back / close

After create: o open, u copy URL, y copy identifier, b copy branch.

Develop

# Validate manifest (on Quattro)
omarchy plugin validate .

# Optional CLI GraphQL helper (reads key file, body on stdin)
echo '{"query":"{ viewer { id } }"}' | ./scripts/linear-gql.sh ~/.config/linear-api-key

Demo mode

Skip the live Linear API and load the same mock fixtures as omarchy-linear-notifications --demo.

One-off (current session):

hyprctl eval 'hl.env("LINEAR_DEMO", "1")'
omarchy restart shell

Persistent (survives logout):

# add to ~/.config/uwsm/env, then log out and back in
export LINEAR_DEMO=1

Clear with hyprctl eval 'hl.env("LINEAR_DEMO", "")' and omarchy restart shell (and remove the UWSM line if you added one).

With demo mode on, no API key is required. Inbox, mark-read, teams, and create-issue all use local fake data.

State (last selected team) lives in ~/.local/state/gpdenny.linear/.

License

MIT