- stinkpot은 Bash 명령 기록을 SQLite에 저장해 세션과 무관하게 관리하고, 검색 TUI로 빠르게 찾을 수 있게 함
- Atuin에서 동기화 서버, AI, dotfiles·스크립트 관리자, KV 저장소를 덜어내고 필요한 기능만 약 400줄의 Go로 구현함
- 기존 Bash 히스토리는
stinkpot import로 가져오며,Ctrl+R을 누르면 역방향 검색 TUI가 열림 - NixOS에서는 home-manager 모듈을 제공하고, 그 외 환경에서는
.bashrc에서eval "$(stinkpot init)"으로 초기화함 - 데이터베이스는
~/.local/share/stinkpot에 저장되며, 업그레이드 후 손상되면 삭제한 뒤 히스토리를 다시 가져올 수 있음
Atuin에서 필요한 기능만 분리
- stinkpot은 Atuin을 사용하면서 세션 독립적 히스토리 관리와 검색 TUI만 필요했던 경험에서 출발함
- 동기화 서버, Atuin AI, dotfiles 관리자, 스크립트 관리자, KV 저장소는 포함하지 않음
- 머신마다 설정과 실행 명령이 크게 달라 동기화 기능도 사용하지 않았음
- 프로젝트는 약 400줄의 Go로 작성됐으며, 저장소 언어 비중은 Go 82.5%, Nix 17.5%임
- 이름은 작은 거북 종인
stinkpot에서 따옴 - 역방향 검색 속도를 높이기 위해 SQLite 실행 계획이 정렬용 임시 B-tree 대신 커버링 인덱스(covering index) 를 사용함
설치와 히스토리 검색
- 소스에서는 다음 명령으로 빌드함
go build -o stinkpot .
- NixOS home-manager 사용자는 제공되는
homeManagerModules.default모듈을 가져올 수 있음 - 다른 환경에서는
.bashrc에 다음 초기화 명령을 추가함
eval "$(stinkpot init)"
- 기존 Bash 히스토리는 다음 명령으로 가져옴
stinkpot import
- 셸에서
Ctrl+R을 누르면 검색 TUI가 열림↑·↓로 이동하고Tab또는Enter로 선택함- 선택 후
Enter를 다시 누르면 명령을 실행함 Esc로 취소함
- 히스토리 DB는
~/.local/share/stinkpot에 저장됨- 업그레이드 후 DB가 깨지면 파일을 삭제하고
stinkpot import를 다시 실행함
- 업그레이드 후 DB가 깨지면 파일을 삭제하고