{"id":34878357,"url":"https://github.com/xani/uberstatus","last_synced_at":"2026-04-01T18:41:15.153Z","repository":{"id":26749281,"uuid":"30207065","full_name":"XANi/uberstatus","owner":"XANi","description":"i3 status line generator","archived":false,"fork":false,"pushed_at":"2025-04-06T10:09:41.000Z","size":2501,"stargazers_count":12,"open_issues_count":2,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-06T10:30:49.482Z","etag":null,"topics":["go","i3"],"latest_commit_sha":null,"homepage":" http://xani.github.io/uberstatus/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/XANi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-02-02T20:32:53.000Z","updated_at":"2025-04-06T10:09:44.000Z","dependencies_parsed_at":"2025-04-06T10:36:41.441Z","dependency_job_id":null,"html_url":"https://github.com/XANi/uberstatus","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/XANi/uberstatus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XANi%2Fuberstatus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XANi%2Fuberstatus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XANi%2Fuberstatus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XANi%2Fuberstatus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/XANi","download_url":"https://codeload.github.com/XANi/uberstatus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XANi%2Fuberstatus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31008622,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T01:56:05.093Z","status":"online","status_checked_at":"2026-03-27T02:00:08.055Z","response_time":164,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","i3"],"created_at":"2025-12-26T01:06:11.963Z","updated_at":"2026-03-27T02:03:43.574Z","avatar_url":"https://github.com/XANi.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Uberstatus\n\n![byzanz-record -x 3065 -y 0 -h 22 -w 775 uberstatus.gif](doc/uberstatus.gif)\n\nStatus line generator for i3wm and (eventually) other WMs\n\nGoals:\n\n* integrate most of core functionality directly (checking cpu, network etc. without extra forking\n* Support push and pull (polling) type of plugins\n* Async (each plugin on its own timer) and sync mode with optional low power/slow update (WIP)\n\n# Installation\n\nIf you have go set up already then *usually* just `go get github.com/XANi/uberstatus` (if any of upstream deps didn't break) if not, get the repo and:\n\n    make # will make binary in application root\n    mkdir -p ~/.config/uberstatus\n\nBinaries will be made in current directory. If you dont have config already, copy one:\n\n    cp cfg/uberstatus.default.conf ~/.config/uberstatus/uberstatus.conf # copy default config\n    \nThen just put it in i3 config in section defining bars\n\n    bar {\n        ...\n        status_command path/to/uberstatus/uberstatus\n        ...\n    }\n\n\n# Operation\n\nEach of plugins operates asynchronously and can send update of its status at any time. On each plugin update state is sent upstream (including previous cached plugin state) so it is possible to have each plugin update separetely.\n\nEach plugin have a name (by default plugin name) and instance (in case of plugins that will be used multiple times, like network interfaces).\n\n# Commandline options\n\n* `-config file/name` - use alternate config file\n* `-d` - enable remote debugging on localhost:6060\n\n# Plugins\n\nAll plugins have `interval` option defining refresh rate in miliseconds\n\n## CPU\n\n* `prefix`\n\n## CPUFreq\n\n\n## Clock\n\nParameters:\n\n* `long_format`/`short_format` - time format, as golang formatting string\n* `interval` - update interval in miliseconds. Note that it can be longer than it because of run time so for update every second something like 990 ms is better\n\n## Disk free\n\n```yaml\n    - name: disk-root\n      instance: df\n      plugin: df\n      config:\n       prefix: \"💾\"\n       mounts:\n         - /\n         - /var\n         - /home\n```\n\n`prefix` will be added at beginning of the status bar. name and instance are just to distinguish between different instances\n\n## GPU\n\nGets stats from GPU. So far only NVIDIA is supported via `nvidia-smi` which needs to be installed prior to running the plugin.\n\n```yaml\n    - name: gpu\n      plugin: gpu\n      config:\n        id: 0\n        type: nvidia\n```\n\n## Memory\n\nClick to get detailed stats\n\n## MQTT\n\nSubscribe to MQTT queue\n\n```yaml\n    - name: mqtt\n      plugin: mqtt\n      config:\n        # password included in URL\n        address: tcp://mqtt:mqtt@192.168.1.4:1883\n        lisp_filter: (aget (split (aget (split x \":\" ) 1) \".\") 0)\n        template: \"P: {{ color ( intOr0 .Msg | sub100 | percentToColor ) (intOr0 .Msg | percentToBar) }}  {{ color ( intOr0 .Msg | sub100 | percentToColor ) \\\"%\\\"}}\"\n        template_on_click: \"P: {{ color ( intOr0 .Msg | percentToColor )  .Msg }} %\"\n        subscribe: collectd/some-data/phone/power-battery\n```\n`lisp_filter` is [zygo](https://github.com/glycerine/zygomys) lisp code ran on the data read from `subscribe` channel.\nMain use is for formatting data received from the topic defined in `subscribe`\n\n`template` is Go template string working on struct:\n\n```\nEvent{\n\t\tMsg: p.lastMessage,\n\t\tTS:  p.lastMQTTUpdate,\n\t})\n```\n\n\n## Network\n\nLeft click for interface's IP, right click for secondary IP (usually IPv6), middle click to display all addresses.\n\nParameters:\n\n* `iface` - interface to use\n\n## Ping\n\n* `type` - tcp/http\n* `addr` - address of a target, host:port format for tcp, url for http(s)\n\n## Pipe\n\nAccepts data to display in pipe. Data is updated instantly.\n\n* `path` - path to named pipe (will be created if not exist\n* `parse_template` - enable template parsing, that allows for using template functions like `{{color #00ff00 \"message\"}}`. Note that some (like `color`) will only work/make sense with markup enabled \n* `markup` - enable pango markup. Enabled by default\n* `interval` - regenerate message every x milliseconds. Only matters if you use templates that will change with time.\n\nThis will pass data directly to i3 which means that any pango formatting it supports it works but also that you need to escape any HTMLisms (`\u003c\u003e` and such) on your own.\n\nYou can also just disable markup (`markup: false`) or use escaping function in template (`{{escape \"\u003ctitle\u003ehai\u003c/title\u003e\"}}`)\n\n \n\n\n## Pomodoro\n\nSimple pomodoro timer. Click button 1 (left) to start/acknowledge break, button 2 to display stats\n\n## I3blocks\n\ni3blocks-compatible input. It will also pass events in compatible way so plugins like volume can be used\n\nParameters:\n\n* `command` - command to run\n* `prefix` - prefix command with text\n\nExample:\n\n```yaml\n    - name: volume\n      plugin: i3blocks\n      config:\n        command: /path/to/i3blocks/volume\n```\n\n## Icinga\n\nIcinga2 plugin. Icinga2 must have API enabled and served on given URL\n\nParameters:\n```yaml\n    - name: icinga\n      plugin: icinga\n      config:\n        url: https://icinga/plugin/url\n        user: uber\n        pass: status_pass\n        # api_update_interval: 5m # defaults to 30s\n        # host_filter: icinga2 filter for hosts\n        # service_filter: icinga2 filter for services\n```\n\n## Uptime\n\nSystem uptime. Parameters:\n\n* `prefix`\n\n## Weather\n\nDisplays temperature, left click for more detailed weather data\n\nTo set it up first, get you token [here](https://openweathermap.org/), then get city name or id and set it in location\n\nExample:\n\n```yaml\n    - name: weather\n      plugin: weather\n      config:\n        openweather_api_key: 1111cccccccc11111111\n        openweather_location: London\n```\n\nweather will automatically update every 10 minutes which is way below their free tier ratelimit\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxani%2Fuberstatus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxani%2Fuberstatus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxani%2Fuberstatus/lists"}