| 1 |
# gardm Feature Checklist |
| 2 |
|
| 3 |
## Core Functionality |
| 4 |
|
| 5 |
### Authentication |
| 6 |
- [ ] PAM integration for password authentication |
| 7 |
- [ ] Multi-factor auth support (PAM handles this transparently) |
| 8 |
- [ ] Account lockout after failed attempts |
| 9 |
- [ ] "Remember last user" functionality |
| 10 |
- [ ] Guest session support (optional) |
| 11 |
|
| 12 |
### Session Management |
| 13 |
- [ ] Discover X11 sessions from `/usr/share/xsessions/` |
| 14 |
- [ ] Parse .desktop files for session metadata |
| 15 |
- [ ] Remember user's last session choice |
| 16 |
- [ ] Support custom session commands |
| 17 |
- [ ] Proper session environment setup (DISPLAY, XDG_*, etc.) |
| 18 |
- [ ] systemd-logind session registration |
| 19 |
|
| 20 |
### X11 Server Management |
| 21 |
- [ ] Start Xorg on appropriate VT |
| 22 |
- [ ] Handle X server crashes gracefully |
| 23 |
- [ ] Support multi-seat (seat0 initially) |
| 24 |
- [ ] Pass correct display/VT to sessions |
| 25 |
- [ ] Clean X server shutdown on logout |
| 26 |
|
| 27 |
### Power Management |
| 28 |
- [ ] Shutdown button (requires polkit or root) |
| 29 |
- [ ] Reboot button |
| 30 |
- [ ] Suspend button |
| 31 |
- [ ] Hibernate button (if available) |
| 32 |
- [ ] Scheduled actions (shutdown in 5 min, etc.) - optional |
| 33 |
|
| 34 |
## User Interface |
| 35 |
|
| 36 |
### Login Form |
| 37 |
- [ ] Username input (with dropdown of available users) |
| 38 |
- [ ] Password input (masked) |
| 39 |
- [ ] Session selector dropdown |
| 40 |
- [ ] Login button |
| 41 |
- [ ] Clear error messages on auth failure |
| 42 |
- [ ] Loading/spinner during authentication |
| 43 |
|
| 44 |
### Visual Design |
| 45 |
- [ ] Centered login form |
| 46 |
- [ ] Blurred background image |
| 47 |
- [ ] Configurable blur radius/brightness |
| 48 |
- [ ] Smooth fade-in on greeter start |
| 49 |
- [ ] Smooth transition to session (fade-out) |
| 50 |
- [ ] Clock display |
| 51 |
- [ ] Current date display |
| 52 |
|
| 53 |
### User List |
| 54 |
- [ ] Show available users with avatars |
| 55 |
- [ ] Filter system accounts (UID < 1000) |
| 56 |
- [ ] Filter accounts with nologin shell |
| 57 |
- [ ] Support user icons from AccountsService |
| 58 |
- [ ] Keyboard navigation through user list |
| 59 |
|
| 60 |
### Theming |
| 61 |
- [ ] Configurable colors/fonts via config file |
| 62 |
- [ ] Support custom background images |
| 63 |
- [ ] garbg wallpaper integration |
| 64 |
- [ ] Logo/branding support |
| 65 |
- [ ] Dark/light theme variants |
| 66 |
|
| 67 |
### Accessibility |
| 68 |
- [ ] Keyboard-only navigation (Tab, Enter, Escape) |
| 69 |
- [ ] High contrast mode (optional) |
| 70 |
- [ ] Screen reader support (optional, complex) |
| 71 |
- [ ] On-screen keyboard (optional, complex) |
| 72 |
|
| 73 |
## gar Integration |
| 74 |
|
| 75 |
### garbg Wallpaper Sync |
| 76 |
- [ ] Read garbg config for default wallpaper |
| 77 |
- [ ] Read garbg playlist state for current wallpaper |
| 78 |
- [ ] Apply consistent blur to match gar lock screen |
| 79 |
- [ ] Seamless visual transition to gar session |
| 80 |
|
| 81 |
### Shared Configuration |
| 82 |
- [ ] Read gar color scheme for consistent theming |
| 83 |
- [ ] Use same fonts as garbar |
| 84 |
- [ ] Respect gar's corner radius settings |
| 85 |
|
| 86 |
## System Integration |
| 87 |
|
| 88 |
### systemd |
| 89 |
- [ ] Proper service file |
| 90 |
- [ ] Socket activation (optional) |
| 91 |
- [ ] sd_notify for readiness |
| 92 |
- [ ] Proper shutdown handling (SIGTERM) |
| 93 |
- [ ] Alias as display-manager.service |
| 94 |
|
| 95 |
### D-Bus |
| 96 |
- [ ] systemd-logind integration for session management |
| 97 |
- [ ] AccountsService for user info (optional) |
| 98 |
- [ ] polkit for power actions (optional) |
| 99 |
|
| 100 |
### Files and Paths |
| 101 |
- [ ] Config file: `/etc/gardm/config.toml` |
| 102 |
- [ ] PAM config: `/etc/pam.d/gardm` |
| 103 |
- [ ] Socket: `/run/gardm.sock` |
| 104 |
- [ ] PID file: `/run/gardm.pid` |
| 105 |
- [ ] Log file: via journald |
| 106 |
- [ ] State dir: `/var/lib/gardm/` |
| 107 |
|
| 108 |
## Security |
| 109 |
|
| 110 |
### Hardening |
| 111 |
- [ ] Greeter runs as unprivileged user |
| 112 |
- [ ] Minimal daemon attack surface |
| 113 |
- [ ] Socket permissions (0600, gardm:gardm) |
| 114 |
- [ ] No credentials in logs |
| 115 |
- [ ] Secure memory handling for passwords |
| 116 |
|
| 117 |
### Input Validation |
| 118 |
- [ ] Sanitize username input |
| 119 |
- [ ] Prevent path traversal in session selection |
| 120 |
- [ ] Rate limiting on auth attempts |
| 121 |
- [ ] Timeout for idle greeter |
| 122 |
|
| 123 |
## Error Handling |
| 124 |
|
| 125 |
- [ ] X server fail to start |
| 126 |
- [ ] PAM errors (account locked, expired, etc.) |
| 127 |
- [ ] Session fail to start |
| 128 |
- [ ] IPC communication errors |
| 129 |
- [ ] Missing configuration graceful fallback |
| 130 |
- [ ] Greeter crash recovery (restart greeter) |
| 131 |
|
| 132 |
## Testing |
| 133 |
|
| 134 |
- [ ] Unit tests for IPC protocol |
| 135 |
- [ ] Unit tests for session discovery |
| 136 |
- [ ] Integration tests with mock PAM |
| 137 |
- [ ] Manual testing checklist |
| 138 |
- [ ] Xephyr-based testing for greeter UI |
| 139 |
|
| 140 |
## Documentation |
| 141 |
|
| 142 |
- [ ] README with quick start |
| 143 |
- [ ] Configuration reference |
| 144 |
- [ ] Theming guide |
| 145 |
- [ ] Troubleshooting guide |
| 146 |
- [ ] Man pages (gardmd.8, gardm-greeter.1) |
| 147 |
|
| 148 |
## Nice-to-Have (Future) |
| 149 |
|
| 150 |
- [ ] Wayland greeter support |
| 151 |
- [ ] Network login (LDAP, etc.) |
| 152 |
- [ ] Fingerprint authentication |
| 153 |
- [ ] Auto-login configuration |
| 154 |
- [ ] Remote desktop support |
| 155 |
- [ ] Multi-monitor greeter |
| 156 |
- [ ] Animated backgrounds |
| 157 |
- [ ] Weather/calendar widgets |