{"id":48894773,"url":"https://github.com/phlx0/drift","last_synced_at":"2026-04-16T10:06:30.722Z","repository":{"id":345600984,"uuid":"1186582345","full_name":"phlx0/drift","owner":"phlx0","description":"Terminal screensaver that activates when you're idle — constellations, rain, particles \u0026 more. Press any key to resume. Just drift away!","archived":false,"fork":false,"pushed_at":"2026-04-11T18:29:52.000Z","size":32103,"stargazers_count":427,"open_issues_count":0,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-11T20:23:16.320Z","etag":null,"topics":["animation","ascii","cli","go","golang","idle","screensaver","tcell","terminal","tui","unixporn"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phlx0.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-19T19:25:38.000Z","updated_at":"2026-04-11T18:30:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/phlx0/drift","commit_stats":null,"previous_names":["phlx0/drift"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/phlx0/drift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phlx0%2Fdrift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phlx0%2Fdrift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phlx0%2Fdrift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phlx0%2Fdrift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phlx0","download_url":"https://codeload.github.com/phlx0/drift/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phlx0%2Fdrift/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31880935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","ascii","cli","go","golang","idle","screensaver","tcell","terminal","tui","unixporn"],"created_at":"2026-04-16T10:06:30.599Z","updated_at":"2026-04-16T10:06:30.663Z","avatar_url":"https://github.com/phlx0.png","language":"Go","readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cpre\u003e\n·  ·    ·        ·     ·    ·  ·\n    ·      d r i f t      ·\n  ·    ·        ·    ·       ·\n\u003c/pre\u003e\n\n**A terminal screensaver that turns idle time into ambient art.**\n\nEvery OS has a screensaver. The terminal had nothing — until now.\n\n[![Go](https://img.shields.io/badge/go-1.23+-00ADD8?style=flat-square\u0026logo=go\u0026logoColor=white)](https://go.dev)\n[![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)\n[![Release](https://img.shields.io/github/v/release/phlx0/drift?style=flat-square\u0026color=blueviolet)](https://github.com/phlx0/drift/releases)\n[![CI](https://img.shields.io/github/actions/workflow/status/phlx0/drift/ci.yml?style=flat-square\u0026label=ci)](https://github.com/phlx0/drift/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/phlx0/drift?style=flat-square)](https://goreportcard.com/report/github.com/phlx0/drift)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square)](CONTRIBUTING.md)\n[![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-brightgreen?style=flat-square)](https://github.com/phlx0/drift/releases)\n[![AUR](https://img.shields.io/aur/version/drift-bin?style=flat-square\u0026label=AUR\u0026color=1793d1)](https://aur.archlinux.org/packages/drift-bin)\n[![Homebrew](https://img.shields.io/badge/homebrew-phlx0%2Fdrift-orange?style=flat-square\u0026logo=homebrew)](https://github.com/phlx0/homebrew-drift)\n[![Downloads](https://img.shields.io/github/downloads/phlx0/drift/total?style=flat-square\u0026label=downloads)](https://github.com/phlx0/drift/releases)\n\n\u003c/div\u003e\n\n---\n\n\u003cimg src=\"demo/waveform.gif\" width=\"100%\" /\u003e\n\n---\n\n## Scenes\n\ndrift ships **11 scenes** and **9 built-in themes**. They cycle automatically or you can lock to one.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**waveform** — braille sine waves that breathe\n\n\u003cimg src=\"demo/waveform.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**constellation** — stars drift and connect\n\n\u003cimg src=\"demo/constellation.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**rain** — katakana characters fall in columns\n\n\u003cimg src=\"demo/rain.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**particles** — a flow field of drifting glyphs\n\n\u003cimg src=\"demo/particles.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**pipes** — box-drawing pipes snake across the screen and wrap at the edges\n\n\u003cimg src=\"demo/pipes.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**maze** — a perfect maze builds itself, holds, then dissolves and regenerates\n\n\u003cimg src=\"demo/maze.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**life** — Conway's Game of Life; cells flash bright on birth, age through the palette, reset when the grid stagnates\n\n\u003cimg src=\"demo/life.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**clock** — current time in large braille digits, styled in the active theme, with the date below\n\n\u003cimg src=\"demo/clock.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**orrery** — a stylized solar system with a fixed sun, concentric orbit rings, and braille-rendered planets\n\n\u003cimg src=\"demo/orrery.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**starfield** — classic 3-D star warp; stars accelerate toward you from the centre, brightening and leaving trails as they approach\n\n\u003cimg src=\"demo/starfield.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**dvd** — the classic bouncing logo; changes palette color on each wall bounce and flashes bright on a corner hit\n\n\u003cimg src=\"demo/dvd.gif\" width=\"100%\" /\u003e\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Themes\n\nNine built-in themes matched to popular terminal colorschemes.\n\n`cosmic` · `nord` · `dracula` · `catppuccin` · `gruvbox` · `forest` · `wildberries` · `mono` · `rosepine`\n\n\n```bash\ndrift list themes    # preview all themes with color swatches\n```\n\n---\n\n## Installation\n\n### Option 1 — Homebrew (macOS and Linux)\n\n```bash\nbrew install phlx0/drift/drift\n```\n\n### Option 2 — AUR (Arch Linux)\n\n```bash\nyay -S drift-bin   # or: paru -S drift-bin\n```\n\n### Option 3 — Nix flake\n\n```bash\nnix run github:phlx0/drift\n```\n\nOr add to your configuration:\n\n```nix\ninputs.drift.url = \"github:phlx0/drift\";\n```\n\n### Option 4 — Pre-built binary (no Go required)\n\n1. Go to the [Releases](https://github.com/phlx0/drift/releases) page.\n2. Download the archive for your platform:\n\n   | OS | Chip | File |\n   |---|---|---|\n   | macOS | Apple Silicon (M1/M2/M3) | `drift_darwin_arm64.tar.gz` |\n   | macOS | Intel | `drift_darwin_amd64.tar.gz` |\n   | Linux | x86-64 | `drift_linux_amd64.tar.gz` |\n   | Linux | ARM64 | `drift_linux_arm64.tar.gz` |\n   | Windows | x86-64 | `drift_windows_amd64.zip` |\n\n3. Extract and move it somewhere on your `PATH`:\n\n   ```bash\n   tar -xzf drift_darwin_arm64.tar.gz\n   sudo mv drift /usr/local/bin/\n   drift version\n   ```\n\n### Option 5 — Go install\n\n```bash\ngo install github.com/phlx0/drift@latest\n```\n\nMake sure Go's bin directory is on your `PATH`:\n\n```bash\n# add to ~/.zshrc or ~/.bashrc\nexport PATH=\"$PATH:$(go env GOPATH)/bin\"\n```\n\n### Option 6 — Build from source\n\n```bash\ngit clone https://github.com/phlx0/drift\ncd drift\ngo install .\n```\n\nRequires **Go 1.23+**. No C compiler or CGO needed.\n\n---\n\n## Shell integration\n\nShell integration is what makes drift a real screensaver — your shell detects\nidleness and launches drift automatically. Press any key to return to your prompt.\n\n### Zsh\n\n```zsh\n# add to ~/.zshrc\nexport DRIFT_TIMEOUT=120   # seconds of inactivity (default: 120)\neval \"$(drift shell-init zsh)\"\n```\n\n### Bash\n\n```bash\n# add to ~/.bashrc\nexport DRIFT_TIMEOUT=120   # seconds of inactivity (default: 120)\neval \"$(drift shell-init bash)\"\n```\n\n### Fish\n\n```fish\n# add to ~/.config/fish/conf.d/drift.fish\nset -x DRIFT_TIMEOUT 120   # seconds of inactivity (default: 120)\ndrift shell-init fish | source\n```\n\n### Windows\n\nShell integration is not available on Windows. Run `drift` directly from any terminal (Windows Terminal, PowerShell, cmd) to start it immediately, or use `drift --showcase` to browse interactively. Press `esc` to exit.\n\n---\n\n## Usage\n\n```\ndrift                            start immediately (shell integration mode)\ndrift --scene waveform           lock to a specific scene\ndrift --theme catppuccin         override the color theme\ndrift --duration 30              cycle scenes every 30 seconds\ndrift --showcase                 browse all scenes and themes interactively\n\ndrift list scenes                list all available scenes\ndrift list themes                list themes with color swatches\ndrift shell-init zsh|bash|fish   print shell integration snippet\ndrift config                     show effective configuration\ndrift config --init              write default config to ~/.config/drift/config.toml\ndrift version                    print version info\n```\n\n| Flag | Default | Description |\n|---|---|---|\n| `--scene`, `-s` | cycle all | lock to a specific scene |\n| `--theme`, `-t` | `cosmic` | color theme |\n| `--fps` | `30` | target frame rate |\n| `--duration` | `60` | seconds per scene, `0` = no cycling |\n| `--showcase` | `false` | interactive browser: `↑↓`/`ws` scene · `←→`/`ad` theme · `esc` quit |\n\n---\n\n## Configuration\n\n```bash\ndrift config --init   # writes ~/.config/drift/config.toml\n```\n\n```toml\n[engine]\nfps              = 30\ncycle_seconds    = 60    # 0 = stay on one scene\nfade_seconds     = 0.3   # fade-to-black between scenes, 0 = instant cut\nscenes           = \"all\"\ntheme            = \"cosmic\"\nshuffle          = true\nhide_tmux_status = false\n\n[scene.constellation]\nstar_count      = 80\nconnect_radius  = 0.18   # connection threshold as a fraction of screen diagonal (0.0–1.0)\ntwinkle         = true   # animate star brightness; false = steady glow\nmax_connections = 4      # max lines drawn from each star\n\n[scene.rain]\ncharset = \"ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉ0123456789\"\ndensity = 0.4\nspeed   = 1.0\n\n[scene.particles]\ncount    = 120\ngravity  = 0.0   # downward acceleration in cells/s²; negative pulls upward\nfriction = 0.98  # velocity damping per frame (0.0 = instant stop, 1.0 = no damping)\n\n[scene.waveform]\nlayers    = 3    # number of overlapping sine waves (1–3)\namplitude = 0.70\nspeed     = 1.0\n\n[scene.orrery]\nbodies      = 8    # number of planets (4–8)\ntrail_decay = 2.4  # seconds for orbit trails to fade; lower = shorter trails\n\n[scene.pipes]\nheads         = 6\nturn_chance   = 0.15\nspeed         = 1.0\nreset_seconds = 45.0\n\n[scene.maze]\npause_seconds = 3.0\nfade_seconds  = 2.0\nspeed         = 1.0\n\n[scene.life]\ndensity       = 0.35\nspeed         = 1.0\nreset_seconds = 30.0\n\n[scene.clock]\nshow_date = true  # show date below the time\n\n[scene.starfield]\ncount = 200   # number of stars\nspeed = 1.0   # warp speed multiplier\n\n[scene.dvd]\nspeed = 1.0     # movement speed multiplier\nlabel = \"drift\" # text displayed inside the bouncing logo\n```\n\n### Custom themes\n\nDefine your own themes in `config.toml` under `[theme.\u003cname\u003e]`. Custom themes appear alongside built-ins in `drift list themes` and in showcase mode navigation.\n\n```toml\n[theme.terminal]\nbright  = \"#ffffff\"\npalette = [\"#ff5555\", \"#50fa7b\", \"#f1fa8c\", \"#bd93f9\"]\ndim     = [\"#3d0000\", \"#003d00\", \"#3d3d00\", \"#1e003d\"]\n```\n\n| Key | Description |\n|---|---|\n| `bright` | Near-white highlight color (`#RRGGBB`) |\n| `palette` | Accent colors — scenes index with `palette[i % len(palette)]` |\n| `dim` | Darker variants for trails and depth — must be the same length as `palette` |\n\nThen use it like any built-in: `drift --theme terminal`.\n\n---\n\n## Showcase mode\n\n`drift --showcase` runs drift continuously — nothing exits it except `esc`. Use it to browse scenes and themes or leave it running on a visible window.\n\n| Key | Action |\n|---|---|\n| `↑` / `w` | previous scene |\n| `↓` / `s` | next scene |\n| `←` / `a` | previous theme |\n| `→` / `d` | next theme |\n| `esc` / `q` / `ctrl+c` | quit |\n\nA status bar shows the current scene and theme for 3 seconds after each keypress, then fades out.\n\n---\n\n## Troubleshooting\n\n**Config changes have no effect**\n\nRun `drift config` to check whether your config file is being found:\n\n```\nConfig file: /Users/you/.config/drift/config.toml (not found — using defaults; run 'drift config --init' to create it)\n```\n\nIf the file is missing, create it with `drift config --init`. If it exists but changes still don't apply, check for a TOML syntax error — `drift config` will print the parse error if there is one.\n\n**drift doesn't activate automatically**\n\nMake sure the shell integration is sourced in your rc file and that `DRIFT_TIMEOUT` (or `TMOUT` in zsh) is set:\n\n```bash\nexport DRIFT_TIMEOUT=120\neval \"$(drift shell-init zsh)\"   # or bash / fish\n```\n\nThen open a new terminal session for it to take effect.\n\n---\n\n## Contributing\n\nNew scenes and themes are very welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the development guide.\n\n---\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=phlx0/drift\u0026type=Date)](https://star-history.com/#phlx0/drift\u0026Date)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nMIT License · made by [phlx0](https://github.com/phlx0)\n\n*press any key to resume*\n\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphlx0%2Fdrift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphlx0%2Fdrift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphlx0%2Fdrift/lists"}