{"_id":"@aymanbagabas/drift","_rev":"9-87a0f70a2a1a4c1a715110cef1f277d3","name":"@aymanbagabas/drift","dist-tags":{"latest":"0.0.9"},"versions":{"0.0.0":{"name":"@aymanbagabas/drift","version":"0.0.0","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.0","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"29b9a6e986c0f981a71027891cf434303c5f8f85","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.0.tgz","fileCount":3,"integrity":"sha512-kJdthDGcdLwLTQglf+Qukz35lxRe0PYZ45fs+tZvff8x8JJ/XcpsasVPrV3cOEH128oF0Y5bJWMSQvhmKcNeUA==","signatures":[{"sig":"MEQCIA9Ts4vU3EKlPYtUbKOgJpQenqC9UwGSmigetZxq+YZvAiBWNcZN6okGQk6uGu3BGnGrFJ2rmYuZl8Iz2UCQk9y/nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3181},"engines":{"node":">=18"},"gitHead":"f89ad74748af6f3cebbb7899ddad29295306052f","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"11.12.1","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.0_1786042131527_0.9340930276569108","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aymanbagabas/drift","version":"0.0.2","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.2","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"665aee37c1bb1d59bfba8fdc8c282f5f9bac525b","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.2.tgz","fileCount":3,"integrity":"sha512-parb6zO1bMOEX3a/Fs+DZE8+H0+ZrAnjmTpRARfcjz5znxGW4NJPG1kezKG8L1OExBORmhz+iE1svt2I2yGSDg==","signatures":[{"sig":"MEUCIF+NiKC82eTfG9f9oilwtLl/M8g/8Cz8XqKQ4w3dsSoCAiEAmDbp5iclAXdLIp+ouKDYubtxexj3e03EEgRdVCjTjL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3181},"engines":{"node":">=18"},"gitHead":"1cad2a8a87445ee29d2d8718df4153d154b6d392","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"11.12.1","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.2_1786045048965_0.13669181690200416","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aymanbagabas/drift","version":"0.0.3","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.3","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"556086d5d3a33ad8f1ed343501f00a25d7ece800","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.3.tgz","fileCount":4,"integrity":"sha512-oyvgX7f8skT8ySEbo38UdjI/haYujFVe/DO78OKYXdpQy2dmIjCBUudGDGeVYo/qvj/BvJing2166beTPmQmSA==","signatures":[{"sig":"MEUCIC9i+FLyLcjpa40qqK+1R0bpSUFZfihVCViQWnJoKErPAiEAi2IJj7EzFMD0jRyJ7RbxlqnexAu0m2s8H/3EUDyId1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11393},"engines":{"node":">=18"},"gitHead":"2830e05aebc8bec1c314abdf39d293e30df54df7","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"11.12.1","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.3_1786052197266_0.7841596966102551","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@aymanbagabas/drift","version":"0.0.4","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.4","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"0a43bc9d46960bb24deab4a9db2875d29a797de9","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.4.tgz","fileCount":4,"integrity":"sha512-Fpmt9pl9Da2A9e82vFLxkzI7VRncwr3FDF5IshGV3Hi9aJe+STTLUi8YEbexB2vQiejlybg/def6pShI57QQWg==","signatures":[{"sig":"MEUCIQCftdd2TK+NvmxUtgIl/C938ebFNEqUv9Mo6Z6iPEds5AIgaTtx3iJjf8S2sKP5v5HzUO0sMvivyhoOZ06aqC71Ofc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11779},"engines":{"node":">=18"},"gitHead":"5782a0e85e61d06cea69542b1747c831c22038bc","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"11.12.1","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.4_1786116785755_0.9521411599396661","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@aymanbagabas/drift","version":"0.0.5","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.5","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"715def70e2b4f35198ebd6edeb500f86644653c0","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.5.tgz","fileCount":4,"integrity":"sha512-daTPRrnFnS3Dr+hKKbGhBKHtc/FDdwLVcUxsYd62Ywhq9pCMJBZSJpo2DgvoCk06qriOOquFNBHvwIhMSgBXKw==","signatures":[{"sig":"MEQCID01v9lwxUmHHnO3Am+Pr0ZEKhGhs2JsHpQg0Fkt16ddAiBqN/uzZiHGthuoKwXNf1NHTmdXEaQsnnU65yVQyyWSZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aymanbagabas%2fdrift@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12568},"engines":{"node":">=18"},"gitHead":"b5d75a4741ecdbf9cf1a684779aea0650b22dbe0","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9e2cf24-96e3-489e-82ea-615d4edef8ef"}},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"12.0.2","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.5_1786415769471_0.2916352845000265","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@aymanbagabas/drift","version":"0.0.6","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.6","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"d35d4f52e5701bb04add00e5ac8ec84ce006b0bd","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.6.tgz","fileCount":4,"integrity":"sha512-clTWTwSwwU2IRLo51+44hoqTwcf/mEWRUS0xRO9QyjuSkoNYBoY+lBFkIB1euDj4fHLT3ypyXjvgJXDXHTbqvA==","signatures":[{"sig":"MEUCIQCc4IYS3xYwDalmkH88UJ8swbxBJdE7lWlH0HmkIkCIvgIgJcF3/7QKHAZ4V1oDLy9cXDWuQwfRMNvQKMh4n5f58u0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aymanbagabas%2fdrift@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12969},"engines":{"node":">=18"},"gitHead":"149568d9dad04f5112fde9cbead566ea6064a40a","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9e2cf24-96e3-489e-82ea-615d4edef8ef"}},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"12.0.2","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.6_1786984048833_0.23505970462335024","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@aymanbagabas/drift","version":"0.0.7","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.7","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"8fec4c647c6c3bd07f642094028bb4e8a9186dfd","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.7.tgz","fileCount":4,"integrity":"sha512-IYnY7OT1+gvkl6pJ/sMfnI49X0P+tXM9j8oPgnHdVH+xNgiM4Il4LqCFdMqy12EHE0dSKzjKHPrpPwQEloTNjw==","signatures":[{"sig":"MEYCIQC7CMLijJ8Asd1uyBeCiLRzKjcBZ7s98FSj3BwSYEE4OAIhANBetJba9GRlfwTzn+8jl5eZEjo696qYXZi4YE5yBvul","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aymanbagabas%2fdrift@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12969},"engines":{"node":">=18"},"gitHead":"09a675ec3f067cfff1a77f788b568ac5ab3a6ffd","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9e2cf24-96e3-489e-82ea-615d4edef8ef"}},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"12.0.2","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.7_1787266049407_0.8693084802873261","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@aymanbagabas/drift","version":"0.0.8","keywords":["git","diff","pager","tui","terminal"],"license":"MIT","_id":"@aymanbagabas/drift@0.0.8","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"homepage":"https://github.com/aymanbagabas/drift#readme","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"os":["darwin","linux","win32"],"bin":{"drift":"bin/drift.js"},"cpu":["x64","arm64"],"dist":{"shasum":"bab779b219e8d6d5f303ba65dcbf75cf06469b93","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.8.tgz","fileCount":4,"integrity":"sha512-tlieBCORhvQl+WrBPlCw6Si2tDZdrcgQzpkB+hUHdrxrraTQxjeXaf/1Kh5GlMlgopF5a1/53N0JGG8p6Svg+A==","signatures":[{"sig":"MEQCIHizF4MX8ORgXVKeOdxP57Pt2UTJ5d/79A4h0UyDa/LTAiBJ7L4zaPUgp40nxigikYXwqSuxFklTReoHXs8xfw/Hgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aymanbagabas%2fdrift@0.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12969},"engines":{"node":">=18"},"gitHead":"e2530c539a31315e9f89aefe6076643290add5b3","scripts":{"postinstall":"node install.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9e2cf24-96e3-489e-82ea-615d4edef8ef"}},"repository":{"url":"git+https://github.com/aymanbagabas/drift.git","type":"git"},"_npmVersion":"12.0.2","description":"A standalone git diff pager for the terminal.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/drift_0.0.8_1787266636725_0.9497314819920695","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@aymanbagabas/drift","version":"0.0.9","description":"A standalone git diff pager for the terminal.","bin":{"drift":"bin/drift.js"},"scripts":{"postinstall":"node install.js"},"engines":{"node":">=18"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"keywords":["git","diff","pager","tui","terminal"],"repository":{"type":"git","url":"git+https://github.com/aymanbagabas/drift.git"},"homepage":"https://github.com/aymanbagabas/drift#readme","license":"MIT","gitHead":"b00ffc6ad241a95360a0975ebb8e76d621c6cd4d","_id":"@aymanbagabas/drift@0.0.9","bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-M7nYc/iq1337wOpvARJ3ot5sC/o10eCz5xXJJOGOGw410gKbg5OobP33B96f4iEEWX6vu6PymUlSoLPWETmhNQ==","shasum":"4a4af11e44d67a455b06640e7768c31a2ea9a87c","tarball":"https://registry.npmjs.org/@aymanbagabas/drift/-/drift-0.0.9.tgz","fileCount":4,"unpackedSize":14062,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aymanbagabas%2fdrift@0.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGaDWnQaEjc+EQcQ3/IeR//1PjaxnLgoqEn/23+JOE4yAiEA6iekxpu9qfgP69xTJjftp9TbZH+nYzQ/2NDO0zo3L10="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9e2cf24-96e3-489e-82ea-615d4edef8ef"}},"directories":{},"maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/drift_0.0.9_1789130921633_0.6518963977511425"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-06T18:48:51.388Z","modified":"2026-09-11T12:48:42.361Z","0.0.0":"2026-08-06T18:48:51.677Z","0.0.2":"2026-08-06T19:37:29.099Z","0.0.3":"2026-08-06T21:36:37.401Z","0.0.4":"2026-08-07T15:33:05.883Z","0.0.5":"2026-08-11T02:36:09.591Z","0.0.6":"2026-08-17T16:27:28.969Z","0.0.7":"2026-08-20T22:47:29.561Z","0.0.8":"2026-08-20T22:57:16.867Z","0.0.9":"2026-09-11T12:48:41.757Z"},"bugs":{"url":"https://github.com/aymanbagabas/drift/issues"},"license":"MIT","homepage":"https://github.com/aymanbagabas/drift#readme","keywords":["git","diff","pager","tui","terminal"],"repository":{"type":"git","url":"git+https://github.com/aymanbagabas/drift.git"},"description":"A standalone git diff pager for the terminal.","maintainers":[{"name":"aymanbagabas","email":"ayman.bagabas@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"demo/mascot.svg\" alt=\"drift\" width=\"180\">\n</p>\n\n<h1 align=\"center\">drift</h1>\n\n<p align=\"center\">\n  <a href=\"https://crates.io/crates/drift-diff\"><img src=\"https://img.shields.io/crates/v/drift-diff.svg\" alt=\"Crates.io\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"></a>\n</p>\n\n<p align=\"center\">\nA git diff pager that actually wants to be looked at.\n</p>\n\n<p align=\"center\">\n  <picture>\n    <source srcset=\"https://github.com/aymanbagabas/drift/blob/main/demo/drift.gif?raw=true\" type=\"image/gif\">\n    <source srcset=\"https://raw.githubusercontent.com/aymanbagabas/drift/main/demo/drift.gif\" type=\"image/gif\">\n    <img width=\"900\" alt=\"drift in action\" src=\"demo/drift.gif\">\n  </picture>\n</p>\n\n`drift` takes the diff you already know and drops it into a real terminal UI:\nsyntax highlighting, word-level change emphasis, split or unified views, a\nfile-list modal and a live sidebar you can click and drag to resize,\njump-to-hunk, in-file search, open-in-`$EDITOR`, and a live mode that repaints\nthe moment your index or branch moves. Point it at a commit, your staging area,\nor your working tree, or just pipe a diff into it like any other pager.\n\nNo config needed to start. Themes, colors, and keys are all yours to bend later.\n\n## Install\n\n### Homebrew (macOS, Linux)\n\n```sh\nbrew install aymanbagabas/tap/drift\n```\n\n### Scoop (Windows)\n\n```sh\nscoop bucket add aymanbagabas https://github.com/aymanbagabas/scoop-bucket\nscoop install drift\n```\n\n### Cargo\n\n```sh\ncargo install drift-diff\n```\n\nOr grab the prebuilt binary from the GitHub release instead of compiling:\n\n```sh\ncargo binstall drift-diff\n```\n\n### npm\n\n```sh\nnpm install -g @aymanbagabas/drift\n```\n\n### Debian / Ubuntu\n\n```sh\necho 'deb [trusted=yes] https://repo.aymanbagabas.com/apt/ /' | sudo tee /etc/apt/sources.list.d/aymanbagabas.list\nsudo apt update && sudo apt install drift\n```\n\n### Fedora / RHEL\n\n```sh\necho '[aymanbagabas]\nname=Ayman Bagabas\nbaseurl=https://repo.aymanbagabas.com/yum/\nenabled=1\ngpgcheck=0' | sudo tee /etc/yum.repos.d/aymanbagabas.repo\nsudo yum install drift\n```\n\n### Arch Linux (AUR)\n\n```sh\nyay -S drift-diff-bin\n```\n\n### Nix (NUR)\n\nFrom the [Nix User Repositories](https://github.com/nix-community/NUR), install\n`nur.repos.aymanbagabas.drift`. Or run it ad-hoc without configuring NUR:\n\n```sh\nnix-shell -p '(import (fetchTarball \"https://github.com/aymanbagabas/nur/archive/master.tar.gz\") {}).drift'\n```\n\n### Prebuilt binaries\n\nGrab an archive for your platform from the\n[latest release](https://github.com/aymanbagabas/drift/releases/latest) and put\nthe `drift` binary on your `PATH`.\n\nEvery method installs a `drift` binary.\n\n## Use it\n\n```sh\ndrift                     # working tree vs HEAD\ndrift -A                  # ...and untracked files too\ndrift --staged            # what's staged (alias: --cached)\ndrift HEAD~3              # a single commit\ndrift main..feature       # a range\ndrift -w                  # watch the repo and refresh on every change\ngit diff | drift          # pager mode: read a diff from stdin\n```\n\n> [!TIP]\n> Pair it with an AI agent. Leave `drift -w` open in a split while an agent (Copilot, Claude, etc.) works, every edit lands on screen instantly. Press <kbd>F</kbd> to freeze the view when you want to read, and again to resume.\n\nMake it your default git diff pager:\n\n```sh\ngit config --global pager.diff drift\n```\n\ndrift defaults to the `ansi` theme — your terminal's own colors, with syntax\nhighlighting off. Pick a theme to turn it on, globally via git config:\n\n```sh\ngit config --global drift.theme onedark   # onelight, dracula, nord, gruvbox-dark, ...\n```\n\nSome flags worth knowing:\n\n| Flag | What it does |\n|------|--------------|\n| `-w`, `--watch` | Refresh when the git index or refs change |\n| `-A`, `--all` | Also show untracked files (working-tree view only) |\n| `-C`, `--directory DIR` | Run as if started in `DIR` (worktrees, bare repos) |\n| `-c`, `--config FILE` | Use a specific config file |\n| `--no-syntax` | Turn off syntax highlighting for this run |\n| `--no-commit-meta` | Collapse the commit metadata to just the commit line |\n| `--wrap` / `--no-wrap` | Wrap long lines instead of scrolling horizontally |\n| `-U`, `--context N` | Lines of context around each change |\n| `--ignore-whitespace` | Ignore whitespace-only changes |\n| `--diff-algorithm ALGO` | `myers`, `minimal`, `patience`, or `histogram` |\n| `-- PATHSPEC...` | Limit to paths, e.g. `drift -- src/ docs/` |\n\n## Keys\n\n| Key | Action |\n|-----|--------|\n| `j` `k` / `↑` `↓` | Move the cursor |\n| `h` `l` / `←` `→` | Scroll horizontally (for lines wider than the view) |\n| `0` `$` | Scroll to line start / end |\n| `d` `u` / `^d` `^u` | Half page down / up |\n| `space` `f` `^f` / `b` `^b` | Full page down / up |\n| `e` `y` / `^e` `^y` | Scroll one line down / up |\n| `g` `G` | Top / bottom |\n| `H` `M` `L` | Cursor to screen top / middle / bottom |\n| `{` `}` | Previous / next hunk |\n| `[` `]` / `tab` `⇧tab` | Previous / next file |\n| `/` | Search the current file (regex, smart-case) |\n| `n` `N` | Next / previous match |\n| `s` | Toggle split view |\n| `w` | Toggle line wrapping (long lines wrap instead of scrolling horizontally) |\n| `S` | File stats modal |\n| `B` | Toggle the file sidebar |\n| `F` | Toggle watch mode (follow changes, like `less`) |\n| `a` | Toggle untracked files (worktree view) |\n| `V` | Start / cancel a line selection; any motion key extends it |\n| `c` | Copy the selection, or the cursor line when nothing is selected |\n| `C` | Copy the whole current file |\n| `enter` | On a hunk header, expand folded context; on the commit line, expand / collapse the commit metadata |\n| `o` | Open the current file in `$EDITOR` |\n| `r` | Refresh |\n| `?` | Toggle the help footer |\n| `q` | Quit |\n\n## Mouse\n\ndrift is fully mouse-driven too:\n\n- Click a file in the sidebar to jump straight to it in the diff.\n- Click a file in the file modal to select it; the modal stays open until you\n  click outside it (or press `enter`).\n- Drag the sidebar's divider to resize it, live.\n- In split view, drag the divider between the two panes to rebalance them.\n- Click the `? help` badge in the status bar to toggle the help footer.\n- Double-click the commit line to expand or collapse the commit metadata; on a\n  hunk header, double-click expands the folded context.\n- Drag across the diff to select text; it lands on your system clipboard (over\n  SSH too, via OSC 52). In split view the selection stays within one pane, so\n  you copy just the old or just the new side.\n- Scroll wheel moves the page through the diff (the cursor stays put until it\n  reaches an edge). Scroll the wheel left/right to pan wide lines horizontally.\n\n## Themes\n\nSet `theme = \"...\"` in your config, or `git config drift.theme ...`. The default\nis **`ansi`** — your terminal's own 16 colors, with syntax highlighting and\nword-diff emphasis left off. Any other built-in theme turns highlighting on:\n\n- `onedark`, `onelight`\n- `dracula`\n- `gruvbox-dark`, `gruvbox-light`\n- `nord`\n- `solarized-dark`, `solarized-light`\n- `catppuccin-mocha`, `catppuccin-latte`\n- `tokyonight`\n- `monokai`\n- `ansi` — the default: borrows your terminal's own 16 colors so drift matches\n  whatever palette you already run. It leaves code text and word-diff emphasis\n  alone, since 16 colors are too few to layer cleanly over diff colors.\n\nA handful of [syntect](https://github.com/trishume/syntect) theme names also\nwork, but only the seven that ship in syntect's default set — `InspiredGitHub`,\n`Solarized (dark)`, `Solarized (light)`, `base16-eighties.dark`,\n`base16-mocha.dark`, `base16-ocean.dark`, and `base16-ocean.light`. They color\nthe code but won't repaint the UI chrome to match, and (Solarized aside) the\nbuilt-ins above already cover them with matching chrome. Any other theme name —\na custom `.tmTheme`, or a syntect theme not in that set — silently falls back to\n`onedark`.\n\nThe `themes/` directory has a full, commented config for every built-in theme.\nCopy one and go:\n\n```sh\nmkdir -p ~/.config/drift\ncp themes/dracula.toml ~/.config/drift/config.toml\n```\n\n## Config\n\ndrift looks for a config file, in order, at:\n\n- `$XDG_CONFIG_HOME/drift/config.{toml,yaml,yml,json}`\n- `~/.config/drift/config.{toml,yaml,yml,json}`\n- `~/.drift.toml`\n\nTOML, YAML, and JSON all work. The top-level knobs:\n\n```toml\ntheme         = \"onedark\"   # any built-in or syntect theme name\nsyntax        = true        # highlight diff content\nintraline     = true        # word-level change emphasis\nline-numbers  = true        # old/new line-number gutter\ncommit-meta   = true        # expand author/date/message; the commit line always shows for a single commit\nwrap          = false       # wrap long lines instead of scrolling horizontally (toggle with w)\nwrap-symbol   = \"↪\"         # symbol shown at the start of each wrapped continuation line\nexpand-symbol = \"›\"         # gutter symbol on the collapsed commit line (expand to show metadata)\ncollapse-symbol = \"⌄\"       # gutter symbol on the expanded commit line (collapse to hide metadata)\ncontext-symbol = \"⋯\"        # gutter symbol on a hunk header (reveal more context)\ntab-width     = 4\neditor        = \"\"          # falls back to $VISUAL, then $EDITOR, then vi\nsidebar       = \"auto\"      # \"auto\" (opens at width >= 150), \"always\", or \"never\"\nsidebar-width = 30          # sidebar columns; drag its divider to resize live\nsidebar-side  = \"left\"      # \"left\" or \"right\"\n```\n\nColors come in two layers. `[colors]` is a named palette; `[styles]` maps UI\ncomponents to a `fg bg attrs...` spec resolved against that palette. Every color\ntoken accepts a palette name, a literal `#rrggbb`, a 0-255 index, an ANSI color\nname, or `default`/`none`/`-` for the terminal's own color. See any file in\n`themes/` for the full set with comments.\n\n### From git config\n\nAnything you can set in a config file, you can set in git config under the\n`drift` section, which is handy for per-repo overrides. Colors and styles go in\n`colors` and `styles` subsections. Git forbids `_` in a key, so a field like\n`add_emph` becomes `add-emph`:\n\n```sh\ngit config drift.theme nord\ngit config drift.line-numbers false\ngit config drift.colors.add '#00ff00'\ngit config drift.colors.add-emph '#003300'\ngit config drift.styles.statusbar 'foreground surface bold'\n```\n\nOr in `~/.gitconfig` directly:\n\n```ini\n[drift]\n    theme = nord\n    line-numbers = false\n[drift \"colors\"]\n    add = \"#00ff00\"\n    add-emph = \"#003300\"\n[drift \"styles\"]\n    statusbar = \"foreground surface bold\"\n```\n\nFor the full list of every setting, color, component style, and flag, see\n[CONFIG.md](CONFIG.md).\n\n## Built with\n\ndrift's terminal UI is powered by [uncurses](https://github.com/aymanbagabas/uncurses), and its multi-channel releases are cut with [GoReleaser](https://goreleaser.com).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}