aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 81f3e15a8519cef70d9477912e754770ec62fec4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<div align=center>

<img width="500px" src="https://github.com/user-attachments/assets/f8f42b9f-43c9-4c0b-914c-fc2bce5a438d" />


# MikuSays 🎤

A `cowsay` clone with Hatsune Miku ASCII art and speech bubbles.  

**NOW WITH**  
<img height=24 src="https://cdn.xserv.pp.ua/files/css/COLORS.svg" alt="COLORS">


[![GitHub release (latest by date)](https://img.shields.io/github/v/release/xxanqw/mikusays?style=for-the-badge)](https://github.com/xxanqw/mikusays/releases/latest)
[![AUR Package Version](https://img.shields.io/aur/version/mikusays?style=for-the-badge)](https://aur.archlinux.org/packages/mikusays)

</div>

## Usage

```bash
Usage: mikusays [OPTIONS] [TEXT]

Arguments:
  [TEXT]  Text to display in the speech bubble

Options:
  -s, --style <STYLE>            Style of the Miku art. A random one is chosen if not specified
  -l, --list                     List all available art styles with their indices
      --rainbow                  Apply a smooth rainbow gradient across the ASCII art
      --saturation <SATURATION>  Saturation level for rainbow gradient (0-100) [default: 100]
      --brightness <BRIGHTNESS>  Brightness level for rainbow gradient (0-100) [default: 50]
      --color <COLOR>            Override with a single solid color
      --gradient <START:END>     Define a custom two-color gradient (e.g., --gradient red:blue)
      --no-color                 Disable all coloring (respects NO_COLOR environment variable)
  -h, --help                     Print help
  -V, --version                  Print version
```

## Installation

### Arch Linux
```bash
yay -S mikusays
paru -S mikusays
```

### Debian / Ubuntu / Fedora / RHEL / CentOS
The repository and instructions available here: https://apt.xxanqw.pp.ua

### macOS (or Linux if using Homebrew)
```bash
brew tap xxanqw/mikusays
brew install mikusays
```

### Windows  
- **Using Scoop**:
  
  ```bash
  scoop bucket add extras
  scoop bucket add xxanqw-bucket https://github.com/xxanqw/scoop-bucket
  scoop update
  scoop install mikusays
  ```
- **Using Installer**:
  
  Download `mikusays-windows-inst-any-x.x.x.exe` from [Latest release page](https://github.com/xxanqw/mikusays/releases/latest)

---

### Download from [Releases](https://github.com/xxanqw/mikusays/releases):

- **Windows**: `mikusays-windows-*.exe`
    - Small note for Windows that application depends on `vcredist2022`  
      (installing with scoop and installer resolve this dependency automatically)
- **Linux**: `mikusays-linux-*.tar.gz`
- **macOS**: `mikusays-macos-*.tar.gz`

Linux and macOS archives preserve the executable permission. Extract and run one with:

```bash
archive="mikusays-linux-x64-VERSION.tar.gz"
tar -xzf "$archive"
"./${archive%.tar.gz}" "Hello, World!"
```

The macOS binaries are currently unsigned. If Gatekeeper quarantines an extracted binary,
remove the quarantine attribute before running it:

```bash
xattr -d com.apple.quarantine ./mikusays-macos-arm64-VERSION
```

Or build from source:
```bash
cargo build --release
```

## Development

### Release automation

Tagged releases build the platform binaries first, then trigger the Scoop bucket.
After all DEB and RPM assets have uploaded, the package workflow triggers the APT/RPM
repository with the exact tag. The `RELEASE_TOKEN` Actions secret must be able to create
repository dispatch events in `xxanqw/scoop-bucket`, `xxanqw/homebrew-mikusays`, and
`xxanqw/apt-repository`.

The distribution repositories keep scheduled and manual workflows as recovery paths if
an event dispatch fails.

1. Fork repository
2. Clone your fork
3. Implement your changes
4. If needed, write tests (it would be great)
5. Run your code with your changes
   ```bash
   cargo run -- [your implemented methods, or just text if it's ASCII only].
   ```
7. Run the tests
   ```bash
   cargo test
   ```
8. Check your code quality with:
   ```bash
   cargo clippy -- -D warnings
   ```
   Fix any errors that appear
   
10. Finally, run the formatter:
    ```bash
    cargo fmt
    ```
11. Commit and push your changes
12. Open a pull request

Now you're a contributor!

<div align=center>

<img height="124" src="https://github.com/user-attachments/assets/f3d4e4e8-0fa4-40a1-bc89-aafbbd896a73" />

</div>