{"id":15578142,"url":"https://github.com/heyvito/howe","last_synced_at":"2025-09-17T16:55:03.143Z","repository":{"id":57593675,"uuid":"133601065","full_name":"heyvito/howe","owner":"heyvito","description":"🌡 Howe crafts MOTDs with stats \u0026 style ","archived":false,"fork":false,"pushed_at":"2019-02-05T16:58:38.000Z","size":935,"stargazers_count":25,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-24T02:12:51.429Z","etag":null,"topics":["docker","motd","stats","status","systemd","uptime"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/heyvito.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-16T02:46:57.000Z","updated_at":"2025-01-19T11:03:13.000Z","dependencies_parsed_at":"2022-09-13T01:22:31.541Z","dependency_job_id":null,"html_url":"https://github.com/heyvito/howe","commit_stats":null,"previous_names":["victorgama/howe"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyvito%2Fhowe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyvito%2Fhowe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyvito%2Fhowe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyvito%2Fhowe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heyvito","download_url":"https://codeload.github.com/heyvito/howe/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250546087,"owners_count":21448260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["docker","motd","stats","status","systemd","uptime"],"created_at":"2024-10-02T19:06:18.982Z","updated_at":"2025-09-17T16:54:58.062Z","avatar_url":"https://github.com/heyvito.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Howe\n\n**Howe** provides a replacement for MOTD. Its contents can be customised in\norder to provide relevant information about your system.\n\n![Howe](docs/screenshot.png)\n\n## Installing\n\nUse the [releases](https://github.com/victorgama/howe/releases) to get the\nlatest version for your platform. In case your platform isn't available, please\n[open an issue](https://github.com/victorgama/howe/issues/new/choose) or build from\nsource.\n\nAfter downloading:\n\n1. Place `howe` in your `/bin` or `/usr/local/bin` directory\n2. Copy the [default configuration](support/config.default.yml) to\n`/etc/howe/config.yml`, editing it as you wish.\n3. Backup your `/etc/update-motd.d`\n4. Backup your `/etc/update-motd.d`\n5. **Backup your** `/etc/update-motd.d`\n6. Remove all files from `/etc/update-motd.d`\n7. Create a new file, `/etc/update-motd.d/00-howe`, with the following contents:\n```bash\n#!/bin/sh\n/bin/howe # or /usr/local/bin/howe, or just howe, depending on how your system\n          # is configured\n```\n8. Ensure `/etc/update-motd.d/00-howe` is executable\n\n## Configuring\n\nHowe contains several widgets that collects and processes system information\nevery time the utility is executed. Widgets can be configured through the\nconfiguration file stored in `/etc/howe/config.yml`, which has the following\nstructure:\n\n```yaml\nhowe:\n  - type: widget-name-here\n    widget-options: here\n  - type: other-widget-name-here\n    more-options: here\n  [...]\n```\n\n### Available Widgets\n\n#### Banner\nBanner displays an ASCII-Art (Figlet) using the output of a command or static\ntext. Examples:\n\n```yaml\n  - type: banner\n    text: Howe\n  # Outputs a static text\n  #  _    _\n  # | |  | |\n  # | |__| | _____      _____\n  # |  __  |/ _ \\ \\ /\\ / / _ \\\n  # | |  | | (_) \\ V  V /  __/\n  # |_|  |_|\\___/ \\_/\\_/ \\___|\n\n  - type: banner\n    text: $(whoami)\n  # Outputs the output of the command:\n  #                  _\n  #                 | |\n  #  _ __ ___   ___ | |_\n  # | '__/ _ \\ / _ \\| __|\n  # | | | (_) | (_) | |_\n  # |_|  \\___/ \\___/ \\__|\n```\n##### Custom Fonts\n\n`banner` also accepts custom colours and fonts through the `font` and `color`\nparameters. Fonts passed without an extension will automatically receive a\n`.flf` extension before lookup. Also, relative paths will be expanded using\n`/usr/share/howe` as the base directory. Provide an absolute path if your fonts\nare stored in another directory. When omitted, Howe will use a default, bundled\nfont.\n\nAvailable colours are:\n\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `rainbow`\n\n```yaml\n  - type: banner\n    text: Howe\n    font: bigmoney-ne\n    color: cyan\n  #  /$$   /$$\n  # | $$  | $$\n  # | $$  | $$  /$$$$$$  /$$  /$$  /$$  /$$$$$$\n  # | $$$$$$$$ /$$__  $$| $$ | $$ | $$ /$$__  $$\n  # | $$__  $$| $$  \\ $$| $$ | $$ | $$| $$$$$$$$\n  # | $$  | $$| $$  | $$| $$ | $$ | $$| $$_____/\n  # | $$  | $$|  $$$$$$/|  $$$$$/$$$$/|  $$$$$$$\n  # |__/  |__/ \\______/  \\_____/\\___/  \\_______/\n```\n\n\n\u003e **Notice**: Figlets will be wrapped at 80 columns.\n\n#### Blank\nBlank simply outputs a blank line. Example:\n```yaml\n  - type: print\n    text: Hello\n  - type: blank\n  - type: print\n    text: World\n  # Outputs:\n  # Hello\n  #\n  # World\n```\n\n#### Disks\nLists all or a range of disks. Example:\n```yaml\n  - type: disks\n    disks:\n     - '*'\n  # Placing a single disk named '*' will cause all mountpoints to be listed\n  # Filesystems                    Size  Used  Free  Use%\n  #   /                            110G  9.9G   94G   10%\n  #   [=================================================]\n  #   /mnt/sdc                     292G   64M  277G    1%\n  #   [=================================================]\n  #   /mnt/sdb                     1.8T  373G  1.3T   22%\n  #   [=================================================]\n  #   /mnt/sdd                     457G   33G  402G    8%\n  #   [=================================================]\n  #\n```\n\n\u003e **Notice**: The `'*'` wildcard will cause all mountpoints to be listed, which,\n\u003e in a few cases, will show the same device more than once.\n\n```yaml\n  - type: disks\n    disks:\n     - '/dev/sda1'\n     - '/dev/sdb1'\n     - '/dev/sdc1'\n  # Providing paths for the devices makes Howe to list only provided devices:\n  # Filesystems  Size  Used  Free  Use%\n  # /dev/sda1    110G  8.2G   96G    8%\n  # [=================================]\n  # /dev/sdb1    1.8T  289G  1.4T   17%\n  # [=================================]\n  # /dev/sdc1    292G   16G  262G    6%\n  # [=================================]\n```\n\n\u003e **Protip**: Mountpoints can also be used as disk names. Feel free to use `/`,\n\u003e `/boot`, and any other mountpoint as the name of a disk, and Howe will\n\u003e automatically find and use information about the mapped disk, providing a\n\u003e better name.\n\n#### Docker\nLists status of provided Docker containers. Examples:\n```yaml\n  - type: docker\n    containers:\n      - plex\n  # Outputs all listed containers:\n  # Docker:\n  #     plex:    Running, Up 2 hours (healthy)\n```\n\nThis widget also allows regexes to be used as the container name, through the\n`regexp:` prefix:\n\n```yaml\n  - type: docker\n    containers:\n      - regexp:^pl.{2}$\n  # Outputs containers whose names matches the provided regexp:\n  # Docker:\n  #     plex:    Running, Up 2 hours (healthy)\n```\n\n#### Load\nLoad displays current system load. It takes no arguments.\n\n```yaml\n  - type: load\n  # Outputs system load average:\n  # load average: 0.01, 0.03, 0.00\n```\n\n#### Print\nMuch like [`banner`](#banner), but more discreet.\n\n```yaml\n  - type: print\n    text: Howe\n  # Outputs a static text\n  # Howe\n\n  - type: print\n    text: $(whoami)\n  # Outputs the output of the command:\n  # root\n\n  # Command and variable expansions are available and can be mixed with text:\n  - type: print\n    text: Logged in as $(whoami) @ $(hostname), running $SHELL\n  # Prints the provided text, replacing commands wrapped in `$()` with their\n  # outputs, and environment variables prefixed with `$` with their value.\n  # Missing variables are replaced with an empty string, but an invalid command\n  # or a command that returns an error will cause Howe to halt processing the\n  # rest of your widgets.\n```\n\n#### Systemd Services\nDisplays status of provided systemd units.\n\n```yaml\n  - type: systemd-services\n    services:\n      - docker\n      - transmission-daemon\n  # Outputs the status of each provided unit:\n  # Services:\n  #  docker:                 Running\n  #  transmission-daemon:    Running\n```\n\n#### Updates\nOn Debian systems, attempts to provide the number of available updates. It takes\nno arguments.\n\n```yaml\n  - type: updates\n  # Outputs a brief description about available updates for your system.\n  # 9 updates available\n```\n\n#### Uptime\nDisplays the uptime of the system. Takes no arguments.\n\n```yaml\n  - type: uptime\n  # Outputs for how long the system is up:\n  # up 2 hours, 40 minutes\n```\n\n## Diagnosing Problems\nIn order to not clobber the output, Howe may indicate problems such as \"Could\nnot read disk information\" instead of showing a detailed error. In those cases,\nHowe will output the error to the system's syslog, when such feature is\navailable. In case anything goes awry, do not panic and\n[open an issue](https://github.com/victorgama/howe/issues/new/choose)\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at\nhttps://github.com/victorgama/howe. This project is intended to be a safe,\nwelcoming space for collaboration, and contributors are expected to adhere to\nthe [Contributor Covenant](http://contributor-covenant.org) code of conduct.\n\n## Code of Conduct\n\nEveryone interacting in the Howe project’s codebases, issue trackers, chat\nrooms and mailing lists is expected to follow the\n[code of conduct](https://github.com/victorgama/howe/blob/master/CODE_OF_CONDUCT.md).\n\n## Acknowledgements\nHowe was a private project that after a update, inherited styles and ideas from\n[panda-motd](https://github.com/taylorthurlow/panda-motd), a Ruby MOTD generator\nlicensed under the MIT license.\n\nHowe was built using the following awesome Open Source projects:\n\n| Name                                                                | License      |\n|---------------------------------------------------------------------|--------------|\n| [cloudfoundry/gosigar](https://github.com/cloudfoundry/gosigar)     | Apache 2.0   |\n| [coreos/go-systemd](https://github.com/coreos/go-systemd)           | Apache 2.0   |\n| [fatih/color](https://github.com/fatih/color)                       | MIT          |\n| [fsouza/go-dockerclient](https://github.com/fsouza/go-dockerclient) | BSD-2-Clause |\n| [lukesampson/figlet](https://github.com/lukesampson/figlet)         | BSD-3-Clause |\n| [go-yaml/yaml](https://github.com/go-yaml/yaml)                     | Apache 2.0   |\n| [hashicorp/go-syslog](https://github.com/hashicorp/go-syslog)       | MIT          |\n| [arsham/rainbow](https://github.com/arsham/rainbow)                 | Apache 2.0   |\n\n## License\n\n```\nThe MIT License (MIT)\n\nCopyright (c) 2018 Victor Gama\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheyvito%2Fhowe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheyvito%2Fhowe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheyvito%2Fhowe/lists"}