Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/aminnairi/i3status

Library to create your own i3 status bar in Node.js using the Flux architecture
https://github.com/aminnairi/i3status

Last synced: about 5 hours ago
JSON representation

Library to create your own i3 status bar in Node.js using the Flux architecture

Awesome Lists containing this project

README

        

# @aminnairi/i3status

[![NPM badge](https://badgen.net/badge/npm/1.1.0/blue)](https://www.npmjs.com/package/@aminnairi/i3status/v/1.1.0) [![Bundle size](https://badgen.net/bundlephobia/minzip/@aminnairi/[email protected])](https://bundlephobia.com/package/@aminnairi/[email protected]) [![Tree shaking support](https://badgen.net/bundlephobia/tree-shaking/@aminnairi/[email protected])](https://bundlephobia.com/package/@aminnairi/[email protected]) ![Vulnerabilities count](https://badgen.net/snyk/aminnairi/i3status)

Library to create your own i3 status bar in Node.js using the Flux architecture

![Status Bar](https://user-images.githubusercontent.com/18418459/146653832-246fe8e9-b680-47ac-8c90-6fe7fbf1a121.png)

## Why

- Because it is inspired by The Elm Architecture, Redux, and the Flux architecture.
- Because it is written using modern ECMAScript syntax.
- Because it is written using modern ECMAScript Modules.
- Because it is written with functional programming in mind.
- Because it is well documented with many examples (and many to come).
- Because it is tested from integration to end-to-end.
- Because it is powered by the Node.js platform and all of its operating system's API and ecosystem.
- Because it allows you to build complex, dynamic status bars with ease.
- Because it does not require any global installation (but you can if you want).
- Because it does not require any yaml, env files, and is just plain JavaScript, nothing else.
- Because it has full support for asynchronous updates through dispatches.
- Because it has full support for i3wm click events (buttons, modfiiers, coordinates, ...).
- Because it has full supports for i3wm blocks configuration (color, padding, separator, ...).
- Because it has no external dependencies.
- Because it has been made with love.

## Instructions

### Recommended

#### Requirements

- [JavaScript](https://developer.mozilla.org/fr/docs/Web/JavaScript)
- [GNU/Linux](https://en.wikipedia.org/wiki/Linux)
- [Terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator)
- [Text editor](https://en.wikipedia.org/wiki/Text_editor)
- [Node](https://nodejs.org/en/)
- [NPM](https://www.npmjs.com/)
- [i3wm](https://i3wm.org/)

#### Installation

Open a new terminal emulator and type the following commands.

```bash
mkdir ~/my-i3status
cd ~/my-i3status
touch index.mjs
npm install --save-exact --save @aminnairi/i3status
```

Open the created file `index.mjs` and copy/paste the following block of code into it.

```javascript
import {createInterface} from "readline/promises";
import {stdin as input, stdout as output} from "process";
import {createRenderer} from "@aminnairi/i3status";

const render = createRenderer({
createInterface,
input,
output
});

render({
initialBlocks: [
{
full_text: "Hello, world!"
}
]
});
```

Open the file `~/.config/i3/config` and replace the following option `status_command` if it already exists, or add it to the `bar` block.

```
bar {
status_command node ~/my-i3status/index.mjs
}
```

In the same terminal emulator you just opened, type the following command.

```bash
i3-msg reload
```

### Manual

#### Requirements

- [JavaScript](https://developer.mozilla.org/fr/docs/Web/JavaScript)
- [GNU/Linux](https://en.wikipedia.org/wiki/Linux)
- [Terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator)
- [Text editor](https://en.wikipedia.org/wiki/Text_editor)
- [Docker](https://www.docker.com/)
- [Docker Compose](https://docs.docker.com/compose/)
- [i3wm](https://i3wm.org/)

#### Installation

Open a new terminal emulator and type the following commands

```bash
git clone https://github.com/aminnairi/i3status ~/my-i3status
cd ~/my-i3status
docker-compose run --rm npm install
docker-compose run --rm npm test
docker-compose run --rm npm run build
```

Choose one of the example script (for instance, [`simple.mjs`](https://github.com/aminnairi/i3status/tree/production/examples/simple.mjs)) in the [`examples`](https://github.com/aminnairi/i3status/tree/production/examples) folder and replace the import path `@aminnairi/i3status` to `../build/index.mjs`. Then open the file `~/.config/i3/config` and replace the following option `status_command` if it already exists, or add it to the `bar` block.

```
bar {
status_command node ~/my-i3status/example/simple.mjs
}
```

In the same terminal emulator you just opened, type the following command.

```bash
i3-msg reload
```

## Examples

See [`examples`](https://github.com/aminnairi/i3status/tree/production/examples).

## Changelog

See [`CHANGELOG.md`](https://github.com/aminnairi/i3status/tree/production/CHANGELOG.md).

## Contributing

See [`CONTRIBUTING.md`](https://github.com/aminnairi/i3status/tree/production/CONTRIBUTING.md).

## Code of conduct

See [`CODE_OF_CONDUCT.md`](https://github.com/aminnairi/i3status/tree/production/CODE_OF_CONDUCT.md).

## License

See [`LICENSE`](https://github.com/aminnairi/i3status/tree/production/LICENSE).