# PulseGate

**PulseGate** ist ein neon-inspiriertes SSH Control Center als TUI-Anwendung für dein Terminal.  
Die App verwaltet gespeicherte Server, unterstützt Key- und Passwort-Login, Quick Commands, Statuschecks und Kitty/TERM-Fixes für saubere SSH-Sessions unter Hyprland/Kitty.

![PulseGate Screenshot](./pulsegate_screenshot.png)

## Features

- Server aus `config.yaml` laden
- Server hinzufügen, bearbeiten und löschen
- SSH-Verbindung per Key oder Passwort
- Passwortspeicherung über den Linux-Keyring
- Quick Commands pro ausgewähltem Server ausführen
- Command-Output in der TUI anzeigen
- SSH-Port-Statuscheck mit Refresh
- Kitty-Fix über `TERM=xterm-256color`
- Vollbild-TUI mit Navigation, Settings und Help-View

## Voraussetzungen

### Arch / CachyOS

```bash
sudo pacman -S go git sshpass gnome-keyring libsecret seahorse
```

Optional, aber empfohlen:

```bash
sudo pacman -S openssh
```

## Installation

Repository klonen oder Projektordner öffnen:

```bash
cd ~/Projects/pulsegate
```

Go-Abhängigkeiten installieren:

```bash
go mod tidy
```

Falls du die Dependencies manuell installieren möchtest:

```bash
go get github.com/charmbracelet/bubbletea
go get github.com/charmbracelet/lipgloss
go get github.com/charmbracelet/bubbles/textinput
go get gopkg.in/yaml.v3
go get github.com/99designs/keyring
go get golang.org/x/term
```

## Konfiguration

Lege im Projektordner eine `config.yaml` an:

```yaml
settings:
  theme: neon-green
  terminal:
    term: xterm-256color
    enable_kitty_fix: true

servers:
  - name: Unraid
    host: 10.0.0.15
    user: root
    port: 22
    group: Homelab
    auth: password
    password_id: unraid-root
    kitty_fix: true

  - name: Webhost
    host: 10.0.0.23
    user: administrator
    port: 22
    group: Homelab
    auth: key
    key: ~/.ssh/id_ed25519
    kitty_fix: true

quick_commands:
  - name: Docker PS
    command: docker ps

  - name: Disk Usage
    command: df -h

  - name: RAM Usage
    command: free -h

  - name: Uptime
    command: uptime
```

## Starten

Während der Entwicklung:

```bash
go run .
```

Als Binary bauen:

```bash
go build -o pulsegate
./pulsegate
```

Optional global installieren:

```bash
sudo cp pulsegate /usr/local/bin/
pulsegate
```

## Bedienung

| Taste | Funktion |
|---|---|
| `↑` / `↓` oder `k` / `j` | Auswahl bewegen |
| `Enter` | Server verbinden oder Command ausführen |
| `a` | Server hinzufügen |
| `e` | Server bearbeiten |
| `d` | Server löschen |
| `c` | Quick Commands öffnen |
| `r` | SSH-Port-Status aktualisieren |
| `Tab` | Ansicht wechseln |
| `s` | Settings öffnen |
| `h` | Hilfe öffnen |
| `q` | Zurück oder beenden |

## Passwort-Login

PulseGate speichert Passwörter nicht in der `config.yaml`, sondern über den Linux-Keyring.  
Beim ersten Verbindungsaufbau mit `auth: password` fragt PulseGate nach dem Passwort und speichert es unter der angegebenen `password_id`.

Beispiel:

```yaml
auth: password
password_id: unraid-root
```

Zum Anzeigen oder Löschen gespeicherter Passwörter kannst du Seahorse verwenden:

```bash
seahorse
```

Dort nach `pulsegate` oder der jeweiligen `password_id` suchen.

## SSH-Key-Login

Beispielkonfiguration:

```yaml
auth: key
key: ~/.ssh/id_ed25519
```

Public Key auf den Server kopieren:

```bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip
```

## Kitty / TERM Fix

Wenn du über Kitty per SSH auf Server gehst, kann es zu Fehlern kommen wie:

```text
Error opening terminal: xterm-kitty
```

PulseGate kann für solche Server automatisch setzen:

```bash
TERM=xterm-256color
```

Aktivierung global:

```yaml
settings:
  terminal:
    term: xterm-256color
    enable_kitty_fix: true
```

Aktivierung pro Server:

```yaml
kitty_fix: true
```
## Roadmap

Mögliche nächste Features:

- Suche und Filter mit `/`
- Scrollbarer Command-Output
- Servergruppen / Tags
- Import aus `~/.ssh/config`
- Passwort ändern/löschen direkt in der TUI
- Themes wie `neon-green`, `neon-cyan`, `orange-authentik`
- Quick Commands pro Servergruppe
