Skip to content

Commit ec7264b

Browse files
first commit
0 parents  commit ec7264b

40 files changed

+4233
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Bug report
2+
description: Report a reproducible bug in gmtui
3+
labels: [bug]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thanks for taking the time to report a bug. Please include as much detail as possible.
9+
- type: input
10+
id: version
11+
attributes:
12+
label: gmtui version
13+
description: Output of `gmtui --version` or git commit
14+
validations:
15+
required: true
16+
- type: textarea
17+
id: steps
18+
attributes:
19+
label: Steps to reproduce
20+
description: Exact steps so I can reproduce the issue
21+
validations:
22+
required: true
23+
- type: textarea
24+
id: expected
25+
attributes:
26+
label: Expected behavior
27+
description: What you expected to happen
28+
validations:
29+
required: true
30+
- type: textarea
31+
id: actual
32+
attributes:
33+
label: Actual behavior
34+
description: What actually happened
35+
validations:
36+
required: true
37+
- type: textarea
38+
id: logs
39+
attributes:
40+
label: Logs / screenshots
41+
description: Paste logs or screenshots if helpful
42+
validations:
43+
required: false

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Security issues
4+
url: https://github.com/pro-grammer-SD/gmtui/security/policy
5+
about: Please report security issues privately.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: Feature request
2+
description: Suggest a feature or improvement
3+
labels: [enhancement]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Share what you want to do and why. If it slows the app down, I'll push back.
9+
- type: textarea
10+
id: problem
11+
attributes:
12+
label: Problem
13+
description: What problem are you trying to solve?
14+
validations:
15+
required: true
16+
- type: textarea
17+
id: solution
18+
attributes:
19+
label: Proposed solution
20+
description: What should gmtui do instead?
21+
validations:
22+
required: true
23+
- type: textarea
24+
id: alternatives
25+
attributes:
26+
label: Alternatives
27+
description: Any alternatives you've considered
28+
validations:
29+
required: false

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Summary
2+
-
3+
4+
# Checklist
5+
- [ ] Tests added or updated
6+
- [ ] `cargo fmt` clean
7+
- [ ] `cargo clippy --all-targets -- -D warnings` clean
8+
- [ ] No new dependencies added
9+
10+
# Notes
11+
-

.github/workflows/ci.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Name: Soumalya Das
2+
# Email: geniussantu1983@gmail.com
3+
# GitHub: https://github.com/pro-grammer-SD
4+
# Year: 2026
5+
# Repo: https://github.com/pro-grammer-SD/gmtui
6+
name: ci
7+
8+
on:
9+
push:
10+
branches: [main, dev]
11+
pull_request:
12+
branches: [main]
13+
14+
jobs:
15+
check:
16+
runs-on: ${{ matrix.os }}
17+
strategy:
18+
matrix:
19+
os: [ubuntu-latest, windows-latest, macos-latest]
20+
steps:
21+
- uses: actions/checkout@v4
22+
- uses: dtolnay/rust-toolchain@stable
23+
- uses: Swatinem/rust-cache@v2
24+
- run: cargo check --all-targets
25+
26+
fmt:
27+
runs-on: ubuntu-latest
28+
steps:
29+
- uses: actions/checkout@v4
30+
- uses: dtolnay/rust-toolchain@stable
31+
- uses: Swatinem/rust-cache@v2
32+
- run: cargo fmt --check
33+
34+
clippy:
35+
runs-on: ubuntu-latest
36+
steps:
37+
- uses: actions/checkout@v4
38+
- uses: dtolnay/rust-toolchain@stable
39+
- uses: Swatinem/rust-cache@v2
40+
- run: cargo clippy --all-targets -- -D warnings
41+
42+
test:
43+
runs-on: ubuntu-latest
44+
steps:
45+
- uses: actions/checkout@v4
46+
- uses: dtolnay/rust-toolchain@stable
47+
- uses: Swatinem/rust-cache@v2
48+
- run: cargo test --all
49+
50+
build:
51+
runs-on: ${{ matrix.os }}
52+
strategy:
53+
matrix:
54+
os: [ubuntu-latest, windows-latest, macos-latest]
55+
steps:
56+
- uses: actions/checkout@v4
57+
- uses: dtolnay/rust-toolchain@stable
58+
- uses: Swatinem/rust-cache@v2
59+
- run: cargo build --release

.github/workflows/release.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Name: Soumalya Das
2+
# Email: geniussantu1983@gmail.com
3+
# GitHub: https://github.com/pro-grammer-SD
4+
# Year: 2026
5+
# Repo: https://github.com/pro-grammer-SD/gmtui
6+
name: release
7+
8+
on:
9+
push:
10+
tags:
11+
- "v*.*.*"
12+
13+
jobs:
14+
build:
15+
runs-on: ${{ matrix.os }}
16+
strategy:
17+
matrix:
18+
include:
19+
- os: ubuntu-latest
20+
target: x86_64-unknown-linux-gnu
21+
use-cross: true
22+
- os: macos-latest
23+
target: x86_64-apple-darwin
24+
use-cross: false
25+
- os: macos-latest
26+
target: aarch64-apple-darwin
27+
use-cross: false
28+
- os: windows-latest
29+
target: x86_64-pc-windows-msvc
30+
use-cross: false
31+
steps:
32+
- uses: actions/checkout@v4
33+
- uses: dtolnay/rust-toolchain@stable
34+
- uses: Swatinem/rust-cache@v2
35+
36+
- name: Install cross
37+
if: matrix.use-cross
38+
run: cargo install cross --locked
39+
40+
- name: Build
41+
run: |
42+
if [ "${{ matrix.use-cross }}" = "true" ]; then
43+
cross build --release --target ${{ matrix.target }}
44+
else
45+
cargo build --release --target ${{ matrix.target }}
46+
fi
47+
shell: bash
48+
49+
- name: Package
50+
run: |
51+
set -e
52+
BIN="target/${{ matrix.target }}/release/gmtui"
53+
if [ "${{ matrix.os }}" = "windows-latest" ]; then
54+
BIN="target/${{ matrix.target }}/release/gmtui.exe"
55+
fi
56+
OUT="gmtui-${{ matrix.target }}"
57+
if [ "${{ matrix.os }}" = "windows-latest" ]; then
58+
OUT="${OUT}.exe"
59+
fi
60+
cp "$BIN" "$OUT"
61+
shell: bash
62+
63+
- uses: actions/upload-artifact@v4
64+
with:
65+
name: gmtui-${{ matrix.target }}
66+
path: gmtui-${{ matrix.target }}*
67+
68+
release:
69+
runs-on: ubuntu-latest
70+
needs: build
71+
steps:
72+
- uses: actions/download-artifact@v4
73+
with:
74+
path: dist
75+
76+
- uses: softprops/action-gh-release@v2
77+
with:
78+
files: dist/**/gmtui-*

.gitignore

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/target/
2+
**/*.rs.bk
3+
Cargo.lock
4+
**/*.rlib
5+
**/*.d
6+
7+
.env
8+
.env.*
9+
token.json
10+
config.toml
11+
12+
*.log
13+
*.tmp
14+
*.bak
15+
*.old
16+
*.swp
17+
*.DS_Store
18+
Thumbs.db
19+
20+
.vscode/
21+
.idea/
22+
*.sublime-project
23+
*.sublime-workspace
24+
*.code-workspace
25+
*.iml
26+
27+
*.DS_Store
28+
Thumbs.db
29+
ehthumbs.db
30+
Desktop.ini
31+
32+
/build/
33+
*.exe
34+
*.dll
35+
*.so
36+
*.dylib
37+
*.pdb
38+
39+
/coverage/
40+
*.prof
41+
*.gcda
42+
*.gcno
43+
*.gcov
44+
45+
*.orig
46+
*.rej
47+
*.lock
48+
*.log.*

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Changelog
2+
3+
All notable changes to this project are documented in this file.
4+
The format is based on Keep a Changelog and this project follows Semantic Versioning.
5+
6+
## [0.1.0] - 2026-03-24
7+
8+
### Added
9+
10+
- Gmail OAuth2 PKCE flow with a local redirect listener
11+
- Token cache with expiry checks and refresh
12+
- Inbox fetch by Gmail category with minimal API calls
13+
- Email detail fetch with body decoding
14+
- Read/unread handling and mark-as-read action
15+
- Keyboard-driven TUI with inbox, reading, and search modes
16+
- Real-time client-side search over subject and sender
17+
- Config loading with defaults and platform-correct paths
18+
- CI and release workflows for multi-platform builds
19+
20+
Name: Soumalya Das
21+
Email: geniussantu1983@gmail.com
22+
GitHub: https://github.com/pro-grammer-SD
23+
Repo: https://github.com/pro-grammer-SD/gmtui

CODE_OF_CONDUCT.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Code of Conduct
2+
3+
This project follows the Contributor Covenant Code of Conduct. Be respectful, stay constructive, and keep discussions technical.
4+
5+
## Our Standards
6+
7+
- Be concise and helpful
8+
- Assume good intent
9+
- Accept feedback gracefully
10+
- Avoid harassment or discriminatory language
11+
12+
## Reporting
13+
14+
If you experience unacceptable behavior, contact the maintainer:
15+
16+
- Email: `geniussantu1983@gmail.com`
17+
18+
Reports are reviewed in good faith and handled promptly.
19+
20+
Name: Soumalya Das
21+
Email: geniussantu1983@gmail.com
22+
GitHub: https://github.com/pro-grammer-SD
23+
Repo: https://github.com/pro-grammer-SD/gmtui

CONTRIBUTING.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Contributing to gmtui
2+
3+
Thanks for taking the time to contribute. I maintain `gmtui` for daily use, so changes need to be fast, reliable, and easy to reason about. If that matches your goals, welcome.
4+
5+
## Principles
6+
7+
- Keep the UI fast and keyboard-first.
8+
- Minimize Gmail API calls and respect rate limits.
9+
- Prefer explicit errors over silent recovery.
10+
- Avoid adding new dependencies without prior discussion.
11+
12+
## Code Style
13+
14+
- Keep modules focused and cohesive.
15+
- Use `Result<T, GmtuiError>` for fallible logic.
16+
- Avoid `unwrap()` and `expect()` outside `main.rs`.
17+
- Add tests for logic changes when practical.
18+
19+
## Commit Messages
20+
21+
Use Conventional Commits:
22+
23+
- `feat: add threaded view`
24+
- `fix: handle empty payload body`
25+
- `docs: clarify OAuth setup`
26+
27+
## Running Tests
28+
29+
```bash
30+
cargo test --all
31+
```
32+
33+
Formatting and linting:
34+
35+
```bash
36+
cargo fmt
37+
cargo clippy --all-targets -- -D warnings
38+
```
39+
40+
## Pull Requests
41+
42+
- Open an issue for UX or API changes first.
43+
- Keep PRs small and focused.
44+
- Describe behavior changes clearly.
45+
- Include tests or explain why they’re not feasible.
46+
47+
## Issue Triage
48+
49+
- Bugs: include steps to reproduce and expected vs actual results.
50+
- Features: explain the user story and tradeoffs.
51+
- Performance: include measurements where possible.
52+
53+
## License
54+
55+
By contributing, you agree that your work is released under the MIT License.
56+
57+
Name: Soumalya Das
58+
Email: geniussantu1983@gmail.com
59+
GitHub: https://github.com/pro-grammer-SD
60+
Repo: https://github.com/pro-grammer-SD/gmtui

0 commit comments

Comments
 (0)