Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 1122 lines 35 kB view raw
1{ 2 lib, 3 fetchFromGitHub, 4 pkgs, 5 stdenv, 6 config, 7}: 8 9let 10 rtpPath = "share/tmux-plugins"; 11 12 addRtp = 13 path: rtpFilePath: attrs: derivation: 14 derivation 15 // { 16 rtp = "${derivation}/${path}/${rtpFilePath}"; 17 } 18 // { 19 overrideAttrs = f: mkTmuxPlugin (attrs // (if lib.isFunction f then f attrs else f)); 20 }; 21 22 mkTmuxPlugin = 23 a@{ 24 pluginName, 25 rtpFilePath ? (builtins.replaceStrings [ "-" ] [ "_" ] pluginName) + ".tmux", 26 namePrefix ? "tmuxplugin-", 27 src, 28 unpackPhase ? "", 29 configurePhase ? ":", 30 buildPhase ? ":", 31 addonInfo ? null, 32 preInstall ? "", 33 postInstall ? "", 34 path ? lib.getName pluginName, 35 ... 36 }: 37 if lib.hasAttr "dependencies" a then 38 throw "dependencies attribute is obselete. see NixOS/nixpkgs#118034" # added 2021-04-01 39 else 40 addRtp "${rtpPath}/${path}" rtpFilePath a ( 41 stdenv.mkDerivation ( 42 a 43 // { 44 pname = namePrefix + pluginName; 45 46 inherit 47 pluginName 48 unpackPhase 49 configurePhase 50 buildPhase 51 addonInfo 52 preInstall 53 postInstall 54 ; 55 56 installPhase = '' 57 runHook preInstall 58 59 target=$out/${rtpPath}/${path} 60 mkdir -p $out/${rtpPath} 61 cp -r . $target 62 if [ -n "$addonInfo" ]; then 63 echo "$addonInfo" > $target/addon-info.json 64 fi 65 66 runHook postInstall 67 ''; 68 } 69 ) 70 ); 71 72in 73{ 74 inherit mkTmuxPlugin; 75 76 battery = mkTmuxPlugin { 77 pluginName = "battery"; 78 version = "unstable-2019-07-04"; 79 src = fetchFromGitHub { 80 owner = "tmux-plugins"; 81 repo = "tmux-battery"; 82 rev = "f8b8e8451990365e0c98c38c184962e4f83b793b"; 83 hash = "sha256-NfKaM4dPt7YaxG7kHMNxf95Mz0hIEhxqlVi2Obr+Da4="; 84 }; 85 }; 86 87 better-mouse-mode = mkTmuxPlugin { 88 pluginName = "better-mouse-mode"; 89 version = "unstable-2021-08-02"; 90 src = fetchFromGitHub { 91 owner = "NHDaly"; 92 repo = "tmux-better-mouse-mode"; 93 rev = "aa59077c635ab21b251bd8cb4dc24c415e64a58e"; 94 hash = "sha256-nPNa3JvDgptGvy2vpo0WSZytyu7kFSEn/Jp/OGA0ZBg="; 95 }; 96 rtpFilePath = "scroll_copy_mode.tmux"; 97 meta = { 98 homepage = "https://github.com/NHDaly/tmux-better-mouse-mode"; 99 description = "Better mouse support for tmux"; 100 longDescription = '' 101 Features: 102 103 * Emulate mouse-support for full-screen programs like less that don't provide built in mouse support. 104 * Exit copy-mode and return to your prompt by scrolling back all the way down to the bottom. 105 * Adjust your scrolling speed. 106 ''; 107 license = lib.licenses.mit; 108 platforms = lib.platforms.unix; 109 maintainers = with lib.maintainers; [ chrispickard ]; 110 }; 111 }; 112 113 catppuccin = mkTmuxPlugin rec { 114 pluginName = "catppuccin"; 115 version = "2.1.3"; 116 src = fetchFromGitHub { 117 owner = "catppuccin"; 118 repo = "tmux"; 119 rev = "v${version}"; 120 hash = "sha256-Is0CQ1ZJMXIwpDjrI5MDNHJtq+R3jlNcd9NXQESUe2w="; 121 }; 122 postInstall = '' 123 sed -i -e 's|''${PLUGIN_DIR}/catppuccin-selected-theme.tmuxtheme|''${TMUX_TMPDIR}/catppuccin-selected-theme.tmuxtheme|g' $target/catppuccin.tmux 124 ''; 125 meta = with lib; { 126 homepage = "https://github.com/catppuccin/tmux"; 127 description = "Soothing pastel theme for Tmux"; 128 license = licenses.mit; 129 platforms = platforms.unix; 130 maintainers = with maintainers; [ jnsgruk ]; 131 }; 132 }; 133 134 continuum = mkTmuxPlugin { 135 pluginName = "continuum"; 136 version = "unstable-2022-01-25"; 137 src = fetchFromGitHub { 138 owner = "tmux-plugins"; 139 repo = "tmux-continuum"; 140 rev = "fc2f31d79537a5b349f55b74c8ca69abaac1ddbb"; 141 hash = "sha256-S1YuZHX4SnSVlMZKv/a87/qj0seRdaWyOXz5ONCVIRo="; 142 }; 143 meta = { 144 homepage = "https://github.com/tmux-plugins/tmux-continuum"; 145 description = "Continuous saving of tmux environment"; 146 longDescription = '' 147 Features: 148 * continuous saving of tmux environment 149 * automatic tmux start when computer/server is turned on 150 * automatic restore when tmux is started 151 152 Together, these features enable uninterrupted tmux usage. No matter the 153 computer or server restarts, if the machine is on, tmux will be there how 154 you left it off the last time it was used. 155 ''; 156 license = lib.licenses.mit; 157 platforms = lib.platforms.unix; 158 maintainers = with lib.maintainers; [ ronanmacf ]; 159 }; 160 }; 161 162 copy-toolkit = mkTmuxPlugin { 163 pluginName = "copy-toolkit"; 164 rtpFilePath = "copytk.tmux"; 165 version = "2021-12-20"; 166 src = fetchFromGitHub { 167 owner = "CrispyConductor"; 168 repo = "tmux-copy-toolkit"; 169 rev = "c80c2c068059fe04f840ea9f125c21b83cb6f81f"; 170 hash = "sha256-cLeOoJ+4MF8lSpwy5lkcPakvB3cpgey0RfLbVTwERNk="; 171 }; 172 postInstall = '' 173 sed -i -e 's|python3 |${pkgs.python3}/bin/python3 |g' $target/copytk.tmux 174 sed -i -e 's|python3|${pkgs.python3}/bin/python3|g;s|/bin/bash|${pkgs.bash}/bin/bash|g;s|/bin/cat|${pkgs.coreutils}/bin/cat|g' $target/copytk.py 175 ''; 176 meta = { 177 homepage = "https://github.com/CrispyConductor/tmux-copy-toolkit"; 178 description = "Various copy-mode tools"; 179 license = lib.licenses.mit; 180 platforms = lib.platforms.unix; 181 maintainers = with lib.maintainers; [ 182 deejayem 183 sedlund 184 ]; 185 }; 186 }; 187 188 copycat = mkTmuxPlugin { 189 pluginName = "copycat"; 190 version = "unstable-2020-01-09"; 191 src = fetchFromGitHub { 192 owner = "tmux-plugins"; 193 repo = "tmux-copycat"; 194 rev = "77ca3aab2aed8ede3e2b941079b1c92dd221cf5f"; 195 hash = "sha256-ugVk1zpKeUjOlDWi3LEkJPFsCqyZEivGzGWiqODnkK0="; 196 }; 197 }; 198 199 cpu = mkTmuxPlugin { 200 pluginName = "cpu"; 201 version = "unstable-2023-01-06"; 202 src = fetchFromGitHub { 203 owner = "tmux-plugins"; 204 repo = "tmux-cpu"; 205 rev = "98d787191bc3e8f19c3de54b96ba1caf61385861"; 206 hash = "sha256-ymmCI6VYvf94Ot7h2GAboTRBXPIREP+EB33+px5aaJk="; 207 }; 208 }; 209 210 ctrlw = mkTmuxPlugin rec { 211 pluginName = "ctrlw"; 212 version = "0.1.1"; 213 src = fetchFromGitHub { 214 owner = "eraserhd"; 215 repo = "tmux-ctrlw"; 216 rev = "v${version}"; 217 hash = "sha256-YYbPkGQmukIDD1fcYleioETFai/SOJni+aZ9Jh2+Zc8="; 218 }; 219 }; 220 221 dracula = mkTmuxPlugin rec { 222 pluginName = "dracula"; 223 version = "3.1.0"; 224 src = fetchFromGitHub { 225 owner = "dracula"; 226 repo = "tmux"; 227 tag = "v${version}"; 228 hash = "sha256-WNgCa8F618JQiHDM1YxHj7oR7w+7U6SU89K90RYIUh8="; 229 }; 230 meta = { 231 homepage = "https://draculatheme.com/tmux"; 232 downloadPage = "https://github.com/dracula/tmux"; 233 description = "Feature packed Dracula theme for tmux"; 234 changelog = "https://github.com/dracula/tmux/releases/tag/v${version}/CHANGELOG.md"; 235 license = lib.licenses.mit; 236 platforms = lib.platforms.unix; 237 maintainers = with lib.maintainers; [ ethancedwards8 ]; 238 }; 239 }; 240 241 dotbar = mkTmuxPlugin rec { 242 pluginName = "dotbar"; 243 version = "0.3.0"; 244 src = fetchFromGitHub { 245 owner = "vaaleyard"; 246 repo = "tmux-dotbar"; 247 tag = version; 248 hash = "sha256-n9k18pJnd5mnp9a7VsMBmEHDwo3j06K6/G6p7/DTyIY="; 249 }; 250 meta = { 251 homepage = "https://github.com/vaaleyard/tmux-dotbar"; 252 downloadPage = "https://github.com/vaaleyard/tmux-dotbar"; 253 description = "Simple and minimalist status bar for tmux"; 254 changelog = "https://github.com/vaaleyard/tmux-dotbar/releases/tag/${version}"; 255 license = lib.licenses.mit; 256 platforms = lib.platforms.unix; 257 maintainers = with lib.maintainers; [ FKouhai ]; 258 }; 259 }; 260 261 extrakto = mkTmuxPlugin { 262 pluginName = "extrakto"; 263 version = "0-unstable-2024-08-25"; 264 src = fetchFromGitHub { 265 owner = "laktak"; 266 repo = "extrakto"; 267 rev = "bf9e666f2a6a8172ebe99fff61b574ba740cffc2"; 268 hash = "sha256-kIhJKgo1BDTeFyAPa//f/TrhPfV9Rfk9y4qMhIpCydk="; 269 }; 270 nativeBuildInputs = [ pkgs.makeWrapper ]; 271 buildInputs = [ pkgs.python3 ]; 272 postInstall = '' 273 patchShebangs extrakto.py extrakto_plugin.py 274 275 wrapProgram $target/scripts/open.sh \ 276 --prefix PATH : ${ 277 with pkgs; 278 lib.makeBinPath [ 279 fzf 280 xclip 281 wl-clipboard 282 ] 283 } 284 ''; 285 meta = { 286 homepage = "https://github.com/laktak/extrakto"; 287 description = "Fuzzy find your text with fzf instead of selecting it by hand "; 288 license = lib.licenses.mit; 289 platforms = lib.platforms.unix; 290 maintainers = with lib.maintainers; [ 291 kidd 292 fnune 293 ]; 294 }; 295 }; 296 297 fingers = pkgs.callPackage ./tmux-fingers { 298 inherit mkTmuxPlugin; 299 }; 300 301 fpp = mkTmuxPlugin { 302 pluginName = "fpp"; 303 version = "unstable-2016-03-08"; 304 src = fetchFromGitHub { 305 owner = "tmux-plugins"; 306 repo = "tmux-fpp"; 307 rev = "ca125d5a9c80bb156ac114ac3f3d5951a795c80e"; 308 hash = "sha256-mhf1PPlo7AaAx7haRDgS+LYW7eFCOB6LPtHF76rRCa0="; 309 }; 310 postInstall = '' 311 sed -i -e 's|fpp |${pkgs.fpp}/bin/fpp |g' $target/fpp.tmux 312 ''; 313 }; 314 315 fuzzback = mkTmuxPlugin { 316 pluginName = "fuzzback"; 317 version = "unstable-2022-11-21"; 318 src = fetchFromGitHub { 319 owner = "roosta"; 320 repo = "tmux-fuzzback"; 321 rev = "bfd9cf0ef1c35488f0080f0c5ca4fddfdd7e18ec"; 322 hash = "sha256-w788xDBkfiLdUVv1oJi0YikFPqVk6LiN6PDfHu8on5E="; 323 }; 324 nativeBuildInputs = [ pkgs.makeWrapper ]; 325 postInstall = '' 326 for f in fuzzback.sh preview.sh supported.sh; do 327 chmod +x $target/scripts/$f 328 wrapProgram $target/scripts/$f \ 329 --prefix PATH : ${ 330 with pkgs; 331 lib.makeBinPath [ 332 coreutils 333 fzf 334 gawk 335 gnused 336 ] 337 } 338 done 339 ''; 340 meta = { 341 homepage = "https://github.com/roosta/tmux-fuzzback"; 342 description = "Fuzzy search for terminal scrollback"; 343 license = lib.licenses.mit; 344 platforms = lib.platforms.unix; 345 maintainers = with lib.maintainers; [ deejayem ]; 346 }; 347 }; 348 349 fzf-tmux-url = mkTmuxPlugin { 350 pluginName = "fzf-tmux-url"; 351 rtpFilePath = "fzf-url.tmux"; 352 version = "unstable-2024-04-14"; 353 src = fetchFromGitHub { 354 owner = "wfxr"; 355 repo = "tmux-fzf-url"; 356 rev = "28ed7ce3c73a328d8463d4f4aaa6ccb851e520fa"; 357 hash = "sha256-tl0SjG/CeolrN7OIHj6MgkB9lFmFgEuJevsSuwVs+78="; 358 }; 359 meta = with lib; { 360 homepage = "https://github.com/wfxr/tmux-fzf-url"; 361 description = "Quickly open urls on your terminal screen"; 362 license = licenses.mit; 363 platforms = platforms.unix; 364 }; 365 }; 366 367 gruvbox = mkTmuxPlugin { 368 pluginName = "gruvbox"; 369 rtpFilePath = "gruvbox-tpm.tmux"; 370 version = "unstable-2022-04-19"; 371 src = fetchFromGitHub { 372 owner = "egel"; 373 repo = "tmux-gruvbox"; 374 rev = "3f9e38d7243179730b419b5bfafb4e22b0a969ad"; 375 hash = "sha256-jvGCrV94vJroembKZLmvGO8NknV1Hbgz2IuNmc/BE9A="; 376 }; 377 }; 378 379 harpoon = mkTmuxPlugin { 380 pluginName = "harpoon"; 381 rtpFilePath = "harpoon.tmux"; 382 version = "0.4.0"; 383 src = fetchFromGitHub { 384 owner = "chaitanyabsprip"; 385 repo = "tmux-harpoon"; 386 rev = "v0.4.0"; 387 hash = "sha256-+IakWkPoQFhIQ4m/98NVYWe5tFKmtfKBnPXZcfU9iOk="; 388 }; 389 meta = { 390 homepage = "https://github.com/Chaitanyabsprip/tmux-harpoon"; 391 downloadPage = "https://github.com/Chaitanyabsprip/tmux-harpoon"; 392 description = "Tool to bookmark session supporting auto create for sessions"; 393 license = lib.licenses.mit; 394 platforms = lib.platforms.unix; 395 maintainers = with lib.maintainers; [ FKouhai ]; 396 }; 397 }; 398 399 jump = mkTmuxPlugin { 400 pluginName = "jump"; 401 version = "2020-06-26"; 402 rtpFilePath = "tmux-jump.tmux"; 403 src = fetchFromGitHub { 404 owner = "schasse"; 405 repo = "tmux-jump"; 406 rev = "416f613d3eaadbe1f6f9eda77c49430527ebaffb"; 407 hash = "sha256-XxdQtJPkTTCbaGUw4ebtzPQq+QuJOOSAjQKrp6Fvf/U="; 408 }; 409 postInstall = '' 410 sed -i -e 's|ruby|${pkgs.ruby}/bin/ruby|g' $target/scripts/tmux-jump.sh 411 ''; 412 meta = with lib; { 413 homepage = "https://github.com/schasse/tmux-jump"; 414 description = "Vimium/Easymotion like navigation for tmux"; 415 license = licenses.gpl3; 416 platforms = platforms.unix; 417 maintainers = with maintainers; [ arnarg ]; 418 }; 419 }; 420 421 kanagawa = mkTmuxPlugin rec { 422 pluginName = "kanagawa"; 423 version = "0-unstable-2025-02-10"; 424 src = fetchFromGitHub { 425 owner = "Nybkox"; 426 repo = "tmux-kanagawa"; 427 rev = "5440b9476627bf5f7f3526156a17ae0e3fd232dd"; 428 hash = "sha256-sFL9/PMdPJxN7tgpc4YbUHW4PkCXlKmY7a7gi7PLcn8="; 429 }; 430 meta = { 431 homepage = "https://github.com/Nybkox/tmux-kanagawa"; 432 downloadPage = "https://github.com/Nybkox/tmux-kanagawa"; 433 description = "Feature packed kanagawa theme for tmux"; 434 license = lib.licenses.mit; 435 platforms = lib.platforms.unix; 436 maintainers = with lib.maintainers; [ FKouhai ]; 437 }; 438 }; 439 440 logging = mkTmuxPlugin { 441 pluginName = "logging"; 442 version = "unstable-2019-04-19"; 443 src = fetchFromGitHub { 444 owner = "tmux-plugins"; 445 repo = "tmux-logging"; 446 rev = "b085ad423b5d59a2c8b8d71772352e7028b8e1d0"; 447 hash = "sha256-Wp4xY2nxv4jl/G7bjNokYk3TcbS9waLERBFSpT1XGlw="; 448 }; 449 }; 450 451 mode-indicator = mkTmuxPlugin rec { 452 pluginName = "mode-indicator"; 453 version = "unstable-2021-10-01"; 454 src = fetchFromGitHub { 455 owner = "MunifTanjim"; 456 repo = "tmux-mode-indicator"; 457 rev = "11520829210a34dc9c7e5be9dead152eaf3a4423"; 458 hash = "sha256-hlhBKC6UzkpUrCanJehs2FxK5SoYBoiGiioXdx6trC4="; 459 }; 460 meta = with lib; { 461 homepage = "https://github.com/MunifTanjim/tmux-mode-indicator"; 462 description = "Plugin that displays prompt indicating currently active Tmux mode"; 463 license = licenses.mit; 464 platforms = platforms.unix; 465 maintainers = with maintainers; [ aacebedo ]; 466 }; 467 }; 468 469 net-speed = mkTmuxPlugin { 470 pluginName = "net-speed"; 471 version = "unstable-2018-12-02"; 472 src = fetchFromGitHub { 473 owner = "tmux-plugins"; 474 repo = "tmux-net-speed"; 475 rev = "58abb615971cb617821e2e7e41c660334f55a92d"; 476 hash = "sha256-LFPcPDBiSvsOhOhlAScajr/Y/Uw2CPdl87qzD9szQKo="; 477 }; 478 }; 479 480 nord = mkTmuxPlugin { 481 pluginName = "nord"; 482 version = "0.3.0-unstable-2023-03-03"; 483 src = pkgs.fetchFromGitHub { 484 owner = "nordtheme"; 485 repo = "tmux"; 486 rev = "f7b6da07ab55fe32ee5f7d62da56d8e5ac691a92"; 487 hash = "sha256-mcmVYNWOUoQLiu4eM/EUudRg67Gcou13xuC6zv9aMKA="; 488 }; 489 meta = { 490 homepage = "https://www.nordtheme.com/ports/tmux"; 491 description = "Nord Tmux theme with plugin support"; 492 longDescription = '' 493 > An arctic, north-bluish clean and elegant tmux theme. 494 > Designed for a fluent and clear workflow with support for third-party plugins. 495 496 This plugin requires that tmux be used with a Nord terminal emulator 497 theme in order to work properly. 498 ''; 499 license = lib.licenses.mit; 500 maintainers = [ lib.maintainers.sigmasquadron ]; 501 }; 502 }; 503 504 maildir-counter = mkTmuxPlugin { 505 pluginName = "maildir-counter"; 506 version = "unstable-2016-11-25"; 507 src = fetchFromGitHub { 508 owner = "tmux-plugins"; 509 repo = "tmux-maildir-counter"; 510 rev = "9415f0207e71e37cbd870c9443426dbea6da78b9"; 511 hash = "sha256-RFdnF/ScOPoeVgGXWhQs28tS7CmsRA0DyFyutCPEmzc="; 512 }; 513 }; 514 515 online-status = mkTmuxPlugin { 516 pluginName = "online-status"; 517 version = "unstable-2018-11-30"; 518 src = fetchFromGitHub { 519 owner = "tmux-plugins"; 520 repo = "tmux-online-status"; 521 rev = "ea86704ced8a20f4a431116aa43f57edcf5a6312"; 522 hash = "sha256-OQW2WcNDVBMgX5IIlykn7f1wI8miXuqLQTlqsdHbw8M="; 523 }; 524 }; 525 526 open = mkTmuxPlugin { 527 pluginName = "open"; 528 version = "unstable-2019-12-02"; 529 src = fetchFromGitHub { 530 owner = "tmux-plugins"; 531 repo = "tmux-open"; 532 rev = "cedb4584908bd8458fadc8d3e64101d3cbb48d46"; 533 hash = "sha256-sFl+wkvQ498irwKWXXAT6/XBrziYLT+CvLCBV2HrQIM="; 534 }; 535 }; 536 537 onedark-theme = mkTmuxPlugin { 538 pluginName = "onedark-theme"; 539 rtpFilePath = "tmux-onedark-theme.tmux"; 540 version = "unstable-2020-06-07"; 541 src = fetchFromGitHub { 542 owner = "odedlaz"; 543 repo = "tmux-onedark-theme"; 544 rev = "3607ef889a47dd3b4b31f66cda7f36da6f81b85c"; 545 hash = "sha256-pQooiDEeB8NvBOQ1IKUgPSSQDK+hMTLMGuiKy6GWVKY="; 546 }; 547 }; 548 549 pain-control = mkTmuxPlugin { 550 pluginName = "pain-control"; 551 version = "unstable-2020-02-18"; 552 src = fetchFromGitHub { 553 owner = "tmux-plugins"; 554 repo = "tmux-pain-control"; 555 rev = "2db63de3b08fc64831d833240749133cecb67d92"; 556 hash = "sha256-84NJtxoz4KTVv+i3cde235WcHhRSBIkZjtobZIk16nA="; 557 }; 558 }; 559 560 pass = mkTmuxPlugin { 561 pluginName = "pass"; 562 version = "0-unstable-2025-02-20"; 563 rtpFilePath = "plugin.tmux"; 564 src = fetchFromGitHub { 565 owner = "rafi"; 566 repo = "tmux-pass"; 567 rev = "c853c8b5e31dea93d17551ef3e18be16c063e28e"; 568 hash = "sha256-fDAqQcr0SC9WrKbGgt7z03ex2ORZ7ChOzDGl6HFXMaA"; 569 }; 570 571 nativeBuildInputs = [ pkgs.makeWrapper ]; 572 postInstall = '' 573 rm $target/README.md 574 rm -r $target/test 575 576 wrapProgram $target/scripts/main.sh \ 577 --prefix PATH : ${ 578 with pkgs; 579 lib.makeBinPath ([ 580 findutils 581 fzf 582 gnugrep 583 gnused 584 ncurses 585 pkgs.pass 586 tmux 587 ]) 588 } 589 ''; 590 591 meta = { 592 description = "Password-store browser using fzf in tmux"; 593 homepage = "https://github.com/rafi/tmux-pass"; 594 license = lib.licenses.gpl3Only; 595 maintainers = [ lib.maintainers.ethancedwards8 ]; 596 }; 597 }; 598 599 plumb = mkTmuxPlugin rec { 600 pluginName = "plumb"; 601 version = "0.1.1"; 602 src = fetchFromGitHub { 603 owner = "eraserhd"; 604 repo = "tmux-plumb"; 605 rev = "v${version}"; 606 hash = "sha256-WcTyAeuGAF+Xsqeb3MtRtHDSXiUmTJNDQOkrQJsj07A="; 607 }; 608 postInstall = '' 609 sed -i -e 's,9 plumb,${pkgs.plan9port}/bin/9 plumb,' $target/scripts/plumb 610 ''; 611 }; 612 613 power-theme = mkTmuxPlugin { 614 pluginName = "power"; 615 rtpFilePath = "tmux-power.tmux"; 616 version = "unstable-2024-05-12"; 617 src = pkgs.fetchFromGitHub { 618 owner = "wfxr"; 619 repo = "tmux-power"; 620 rev = "16bbde801378a70512059541d104c5ae35be32b9"; 621 hash = "sha256-IyYQyIONMnVBwhhcI3anOPxKpv2TfI2KZgJ5o5JtZ8I="; 622 }; 623 meta = with lib; { 624 description = "Tmux powerline theme"; 625 homepage = "https://github.com/wfxr/tmux-power"; 626 license = licenses.mit; 627 platforms = platforms.unix; 628 }; 629 }; 630 631 prefix-highlight = mkTmuxPlugin { 632 pluginName = "prefix-highlight"; 633 version = "unstable-2021-03-30"; 634 src = fetchFromGitHub { 635 owner = "tmux-plugins"; 636 repo = "tmux-prefix-highlight"; 637 rev = "15acc6172300bc2eb13c81718dc53da6ae69de4f"; 638 hash = "sha256-9LWRV0Hw8MmDwn5hWl3DrBuYUqBjLCO02K9bbx11MyM="; 639 }; 640 }; 641 642 resurrect = mkTmuxPlugin { 643 pluginName = "resurrect"; 644 version = "unstable-2022-05-01"; 645 src = fetchFromGitHub { 646 owner = "tmux-plugins"; 647 repo = "tmux-resurrect"; 648 rev = "ca6468e2deef11efadfe3a62832ae67742505432"; 649 hash = "sha256-wl9/5XvFq+AjV8CwYgIZjPOE0/kIuEYBNQqNDidjNFo="; 650 fetchSubmodules = true; 651 }; 652 meta = { 653 homepage = "https://github.com/tmux-plugins/tmux-resurrect"; 654 description = "Restore tmux environment after system restart"; 655 longDescription = '' 656 This plugin goes to great lengths to save and restore all the details 657 from your tmux environment. Here's what's been taken care of: 658 659 * all sessions, windows, panes and their order 660 * current working directory for each pane 661 * exact pane layouts within windows (even when zoomed) 662 * active and alternative session 663 * active and alternative window for each session 664 * windows with focus 665 * active pane for each window 666 * "grouped sessions" (useful feature when using tmux with multiple monitors) 667 * programs running within a pane! More details in the restoring programs doc. 668 669 Optional: 670 * restoring vim and neovim sessions 671 * restoring pane contents 672 ''; 673 license = lib.licenses.mit; 674 platforms = lib.platforms.unix; 675 maintainers = with lib.maintainers; [ ronanmacf ]; 676 }; 677 }; 678 679 rose-pine = mkTmuxPlugin { 680 pluginName = "rose-pine"; 681 version = "unstable-2024-01-08"; 682 rtpFilePath = "rose-pine.tmux"; 683 src = fetchFromGitHub { 684 owner = "rose-pine"; 685 repo = "tmux"; 686 rev = "dd6d01338ac4afeb96542dcf24e4a7fe179b69e6"; 687 hash = "sha256-Tccb4VjdotOSw7flJV4N0H4557NxRhXiCecZBPU9ICQ="; 688 }; 689 meta = { 690 homepage = "https://github.com/rose-pine/tmux"; 691 description = "Rosé Pine theme for tmux"; 692 license = lib.licenses.mit; 693 }; 694 }; 695 696 sensible = mkTmuxPlugin { 697 pluginName = "sensible"; 698 version = "unstable-2022-08-14"; 699 src = fetchFromGitHub { 700 owner = "tmux-plugins"; 701 repo = "tmux-sensible"; 702 rev = "25cb91f42d020f675bb0a2ce3fbd3a5d96119efa"; 703 hash = "sha256-sw9g1Yzmv2fdZFLJSGhx1tatQ+TtjDYNZI5uny0+5Hg="; 704 }; 705 postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' 706 sed -e 's:reattach-to-user-namespace:${pkgs.reattach-to-user-namespace}/bin/reattach-to-user-namespace:g' -i $target/sensible.tmux 707 ''; 708 }; 709 710 session-wizard = mkTmuxPlugin rec { 711 pluginName = "session-wizard"; 712 rtpFilePath = "session-wizard.tmux"; 713 version = "1.4.0"; 714 src = pkgs.fetchFromGitHub { 715 owner = "27medkamal"; 716 repo = "tmux-session-wizard"; 717 rev = "V${version}"; 718 hash = "sha256-mLpZQSo8nildawsPxGwkcETNwlRq6O1pfy/VusMNMaw="; 719 }; 720 meta = with lib; { 721 homepage = "https://github.com/27medkamal/tmux-session-wizard"; 722 description = "Tmux plugin for creating and switching between sessions based on recently accessed directories"; 723 longDescription = '' 724 Session Wizard is using fzf and zoxide to do all the magic. Features: 725 * Creating a new session from a list of recently accessed directories 726 * Naming a session after a folder/project 727 * Switching sessions 728 * Viewing current or creating new sessions in one popup 729 ''; 730 license = licenses.mit; 731 platforms = platforms.unix; 732 maintainers = with maintainers; [ mandos ]; 733 }; 734 nativeBuildInputs = [ pkgs.makeWrapper ]; 735 postInstall = '' 736 for f in .gitignore Dockerfile flake.* scripts tests; do 737 rm -rf $target/$f 738 done 739 substituteInPlace $target/session-wizard.tmux --replace \$CURRENT_DIR $target 740 wrapProgram $target/bin/t \ 741 --prefix PATH : ${ 742 with pkgs; 743 lib.makeBinPath ([ 744 fzf 745 zoxide 746 coreutils 747 gnugrep 748 gnused 749 ]) 750 } 751 ''; 752 }; 753 754 sessionist = mkTmuxPlugin { 755 pluginName = "sessionist"; 756 version = "unstable-2017-12-03"; 757 src = fetchFromGitHub { 758 owner = "tmux-plugins"; 759 repo = "tmux-sessionist"; 760 rev = "09ec86be38eae98ffc27bd0dde605ed10ae0dc89"; 761 hash = "sha256-hFNrdbhmBUAyJ73RCG4RILzJ3LHIYiuNYGsqJGsVGAw="; 762 }; 763 }; 764 765 sidebar = mkTmuxPlugin { 766 pluginName = "sidebar"; 767 version = "unstable-2018-11-30"; 768 src = fetchFromGitHub { 769 owner = "tmux-plugins"; 770 repo = "tmux-sidebar"; 771 rev = "aacbdb45bc5ab69db448a72de4155d0b8dbac677"; 772 hash = "sha256-7MCouewjpTCMGmWMaTWWQevlR0LrLTBjXGumsNcH6a4="; 773 }; 774 }; 775 776 sysstat = mkTmuxPlugin { 777 pluginName = "sysstat"; 778 version = "unstable-2017-12-12"; 779 src = fetchFromGitHub { 780 owner = "samoshkin"; 781 repo = "tmux-plugin-sysstat"; 782 rev = "29e150f403151f2341f3abcb2b2487a5f011dd23"; 783 hash = "sha256-2EMSV6z9FZHq20dkPna0qELSVIOIAnOHpiCLbG7adQQ="; 784 }; 785 }; 786 787 tilish = mkTmuxPlugin { 788 pluginName = "tilish"; 789 version = "unstable-2023-09-20"; 790 src = fetchFromGitHub { 791 owner = "jabirali"; 792 repo = "tmux-tilish"; 793 rev = "22f7920837d827dc6cb31143ea916afa677c24c1"; 794 hash = "sha256-wP3c+p/DM6ve7GUhi0QEzggct7NS4XUa78sVQFSKrfo="; 795 }; 796 797 meta = with lib; { 798 homepage = "https://github.com/jabirali/tmux-tilish"; 799 description = "Plugin which makes tmux work and feel like i3wm"; 800 license = licenses.mit; 801 platforms = platforms.unix; 802 maintainers = with maintainers; [ arnarg ]; 803 }; 804 }; 805 806 tokyo-night-tmux = mkTmuxPlugin { 807 pluginName = "tokyo-night-tmux"; 808 rtpFilePath = "tokyo-night.tmux"; 809 version = "1.5.3"; 810 src = pkgs.fetchFromGitHub { 811 owner = "janoamaral"; 812 repo = "tokyo-night-tmux"; 813 rev = "d34f1487b4a644b13d8b2e9a2ee854ae62cc8d0e"; 814 hash = "sha256-3rMYYzzSS2jaAMLjcQoKreE0oo4VWF9dZgDtABCUOtY="; 815 }; 816 meta = with lib; { 817 homepage = "https://github.com/janoamaral/tokyo-night-tmux"; 818 description = "Clean, dark Tmux theme that celebrates the lights of Downtown Tokyo at night"; 819 license = licenses.mit; 820 platforms = platforms.unix; 821 maintainers = with maintainers; [ redyf ]; 822 }; 823 }; 824 825 tmux-colors-solarized = mkTmuxPlugin { 826 pluginName = "tmuxcolors"; 827 version = "unstable-2019-07-14"; 828 src = fetchFromGitHub { 829 owner = "seebi"; 830 repo = "tmux-colors-solarized"; 831 rev = "e5e7b4f1af37f8f3fc81ca17eadee5ae5d82cd09"; 832 hash = "sha256-nVA4fkmxf8he3lxG6P0sASvH6HlSt8dKGovEv5RAcdA="; 833 }; 834 }; 835 836 tmux-floax = mkTmuxPlugin { 837 pluginName = "tmux-floax"; 838 rtpFilePath = "floax.tmux"; 839 version = "0-unstable-2024-07-24"; 840 src = fetchFromGitHub { 841 owner = "omerxx"; 842 repo = "tmux-floax"; 843 rev = "46c0a6a8c3cf79b83d1b338f547acbbd1d306301"; 844 hash = "sha256-bALZfVWcoAzcTeWwkBHhi7TzUQJicOBTNdeJh3O/Bj8="; 845 }; 846 meta = { 847 description = "Floating pane for Tmux"; 848 homepage = "https://github.com/omerxx/tmux-floax"; 849 license = lib.licenses.gpl3Only; 850 maintainers = with lib.maintainers; [ redyf ]; 851 mainProgram = "tmux-floax"; 852 platforms = lib.platforms.all; 853 }; 854 }; 855 856 tmux-fzf = mkTmuxPlugin { 857 pluginName = "tmux-fzf"; 858 rtpFilePath = "main.tmux"; 859 version = "unstable-2023-10-24"; 860 src = fetchFromGitHub { 861 owner = "sainnhe"; 862 repo = "tmux-fzf"; 863 rev = "d62b6865c0e7c956ad1f0396823a6f34cf7452a7"; 864 hash = "sha256-hVkSQYvBXrkXbKc98V9hwwvFp6z7/mX1K4N3N9j4NN4="; 865 }; 866 postInstall = '' 867 find $target -type f -print0 | xargs -0 sed -i -e 's|fzf |${pkgs.fzf}/bin/fzf |g' 868 find $target -type f -print0 | xargs -0 sed -i -e 's|sed |${pkgs.gnused}/bin/sed |g' 869 find $target -type f -print0 | xargs -0 sed -i -e 's|tput |${pkgs.ncurses}/bin/tput |g' 870 ''; 871 meta = { 872 homepage = "https://github.com/sainnhe/tmux-fzf"; 873 description = "Use fzf to manage your tmux work environment! "; 874 longDescription = '' 875 Features: 876 * Manage sessions (attach, detach*, rename, kill*). 877 * Manage windows (switch, link, move, swap, rename, kill*). 878 * Manage panes (switch, break, join*, swap, layout, kill*, resize). 879 * Multiple selection (support for actions marked by *). 880 * Search commands and append to command prompt. 881 * Search key bindings and execute. 882 * User menu. 883 * Popup window support. 884 ''; 885 license = lib.licenses.mit; 886 platforms = lib.platforms.unix; 887 maintainers = with lib.maintainers; [ kyleondy ]; 888 }; 889 }; 890 891 tmux-powerline = mkTmuxPlugin { 892 pluginName = "powerline"; 893 version = "3.0.0"; 894 src = fetchFromGitHub { 895 owner = "erikw"; 896 repo = "tmux-powerline"; 897 rev = "2480e5531e0027e49a90eaf540f973e624443937"; 898 hash = "sha256-25uG7OI8OHkdZ3GrTxG1ETNeDtW1K+sHu2DfJtVHVbk="; 899 }; 900 rtpFilePath = "main.tmux"; 901 meta = { 902 homepage = "https://github.com/erikw/tmux-powerline"; 903 description = "Empowering your tmux (status bar) experience"; 904 longDescription = "A tmux plugin giving you a hackable status bar consisting of dynamic & beautiful looking powerline segments, written purely in bash."; 905 license = lib.licenses.bsd3; 906 platforms = lib.platforms.unix; 907 maintainers = with lib.maintainers; [ thomasjm ]; 908 }; 909 }; 910 911 tmux-sessionx = mkTmuxPlugin { 912 pluginName = "sessionx"; 913 version = "0-unstable-2024-09-22"; 914 src = fetchFromGitHub { 915 owner = "omerxx"; 916 repo = "tmux-sessionx"; 917 rev = "508359b8a6e2e242a9270292160624406be3bbca"; 918 hash = "sha256-nbzn3qxMGRzxFnLBVrjqGl09++9YOK4QrLoYiHUS9jY="; 919 }; 920 nativeBuildInputs = [ pkgs.makeWrapper ]; 921 postPatch = '' 922 substituteInPlace sessionx.tmux \ 923 --replace-fail "\$CURRENT_DIR/scripts/sessionx.sh" "$out/share/tmux-plugins/sessionx/scripts/sessionx.sh" 924 substituteInPlace scripts/sessionx.sh \ 925 --replace-fail "/tmux-sessionx/scripts/preview.sh" "$out/share/tmux-plugins/sessionx/scripts/preview.sh" 926 substituteInPlace scripts/sessionx.sh \ 927 --replace-fail "/tmux-sessionx/scripts/reload_sessions.sh" "$out/share/tmux-plugins/sessionx/scripts/reload_sessions.sh" 928 ''; 929 postInstall = '' 930 chmod +x $target/scripts/sessionx.sh 931 wrapProgram $target/scripts/sessionx.sh \ 932 --prefix PATH : ${ 933 with pkgs; 934 lib.makeBinPath [ 935 zoxide 936 fzf 937 gnugrep 938 gnused 939 coreutils 940 ] 941 } 942 chmod +x $target/scripts/preview.sh 943 wrapProgram $target/scripts/preview.sh \ 944 --prefix PATH : ${ 945 with pkgs; 946 lib.makeBinPath [ 947 coreutils 948 gnugrep 949 gnused 950 ] 951 } 952 chmod +x $target/scripts/reload_sessions.sh 953 wrapProgram $target/scripts/reload_sessions.sh \ 954 --prefix PATH : ${ 955 with pkgs; 956 lib.makeBinPath [ 957 coreutils 958 gnugrep 959 gnused 960 ] 961 } 962 ''; 963 meta = { 964 description = "Tmux session manager, with preview, fuzzy finding, and MORE"; 965 homepage = "https://github.com/omerxx/tmux-sessionx"; 966 license = lib.licenses.gpl3Only; 967 maintainers = with lib.maintainers; [ okwilkins ]; 968 platforms = lib.platforms.all; 969 }; 970 }; 971 972 tmux-thumbs = pkgs.callPackage ./tmux-thumbs { 973 inherit mkTmuxPlugin; 974 }; 975 976 t-smart-tmux-session-manager = mkTmuxPlugin rec { 977 pluginName = "t-smart-tmux-session-manager"; 978 version = "2.8.0"; 979 rtpFilePath = "t-smart-tmux-session-manager.tmux"; 980 src = pkgs.fetchFromGitHub { 981 owner = "joshmedeski"; 982 repo = "t-smart-tmux-session-manager"; 983 rev = "v${version}"; 984 hash = "sha256-EMDEEIWJ+XFOk0WsQPAwj9BFBVDNwFUCyd1ScceqKpc="; 985 }; 986 nativeBuildInputs = [ pkgs.makeWrapper ]; 987 postInstall = '' 988 wrapProgram $out/share/tmux-plugins/t-smart-tmux-session-manager/bin/t \ 989 --prefix PATH : ${ 990 with pkgs; 991 lib.makeBinPath ([ 992 pkgs.fzf 993 pkgs.zoxide 994 ]) 995 } 996 997 find $target -type f -print0 | xargs -0 sed -i -e 's|fzf |${pkgs.fzf}/bin/fzf |g' 998 find $target -type f -print0 | xargs -0 sed -i -e 's|zoxide |${pkgs.zoxide}/bin/zoxide |g' 999 ''; 1000 }; 1001 1002 urlview = mkTmuxPlugin { 1003 pluginName = "urlview"; 1004 version = "unstable-2016-01-06"; 1005 src = fetchFromGitHub { 1006 owner = "tmux-plugins"; 1007 repo = "tmux-urlview"; 1008 rev = "b84c876cffdd22990b4ab51247e795cbd7813d53"; 1009 hash = "sha256-1oEJDgHPIM6AEVlGcavRqP2YjPdmkxHHMiFYdgqW5Mo="; 1010 }; 1011 postInstall = '' 1012 sed -i -e '14,20{s|extract_url|${pkgs.extract_url}/bin/extract_url|g}' $target/urlview.tmux 1013 ''; 1014 }; 1015 1016 vim-tmux-focus-events = mkTmuxPlugin { 1017 pluginName = "vim-tmux-focus-events"; 1018 version = "unstable-2020-10-05"; 1019 src = fetchFromGitHub { 1020 owner = "tmux-plugins"; 1021 repo = "vim-tmux-focus-events"; 1022 rev = "a568192ca0de4ca0bd7b3cd0249aad491625c941"; 1023 hash = "sha256-ITZMu2q80deOf0zqgYJDDgWQHWhJEzZlK6lVFPY4FIw="; 1024 }; 1025 1026 meta = with lib; { 1027 homepage = "https://github.com/tmux-plugins/vim-tmux-focus-events"; 1028 description = "Makes FocusGained and FocusLost autocommand events work in vim when using tmux"; 1029 license = licenses.mit; 1030 platforms = platforms.unix; 1031 maintainers = with maintainers; [ ronanmacf ]; 1032 }; 1033 }; 1034 1035 vim-tmux-navigator = mkTmuxPlugin { 1036 pluginName = "vim-tmux-navigator"; 1037 rtpFilePath = "vim-tmux-navigator.tmux"; 1038 version = "unstable-2025-04-25"; 1039 src = fetchFromGitHub { 1040 owner = "christoomey"; 1041 repo = "vim-tmux-navigator"; 1042 rev = "33afa80db65113561dc53fa732b7f5e53d5ecfd0"; 1043 hash = "sha256-h3c5ki8N4kiNzbgjxHwLh625un6GqbLZv/4dPVW3vCI="; 1044 }; 1045 }; 1046 1047 weather = mkTmuxPlugin { 1048 pluginName = "weather"; 1049 rtpFilePath = "tmux-weather.tmux"; 1050 version = "unstable-2020-02-08"; 1051 src = fetchFromGitHub { 1052 owner = "xamut"; 1053 repo = "tmux-weather"; 1054 rev = "28a5fbe75bb25a408193d454304e28ddd75e9338"; 1055 hash = "sha256-of9E/npEsF1JVc9ttwrbC5WkIAwCNBJAgTfExfj79i4="; 1056 }; 1057 1058 meta = with lib; { 1059 homepage = "https://github.com/xamut/tmux-weather"; 1060 description = "Shows weather in the status line"; 1061 license = licenses.mit; 1062 platforms = platforms.unix; 1063 maintainers = with maintainers; [ jfvillablanca ]; 1064 }; 1065 }; 1066 1067 tmux-which-key = pkgs.callPackage ./tmux-which-key { 1068 inherit mkTmuxPlugin; 1069 }; 1070 1071 yank = mkTmuxPlugin { 1072 pluginName = "yank"; 1073 version = "unstable-2023-07-19"; 1074 src = fetchFromGitHub { 1075 owner = "tmux-plugins"; 1076 repo = "tmux-yank"; 1077 rev = "acfd36e4fcba99f8310a7dfb432111c242fe7392"; 1078 hash = "sha256-/5HPaoOx2U2d8lZZJo5dKmemu6hKgHJYq23hxkddXpA="; 1079 }; 1080 }; 1081 1082 tmux-nova = mkTmuxPlugin rec { 1083 pluginName = "tmux-nova"; 1084 rtpFilePath = "nova.tmux"; 1085 version = "1.2.0"; 1086 src = fetchFromGitHub { 1087 owner = "o0th"; 1088 repo = "tmux-nova"; 1089 rev = "v${version}"; 1090 hash = "sha256-0LIql8as2+OendEHVqR0F3pmQTxC1oqapwhxT+34lJo="; 1091 }; 1092 meta = with lib; { 1093 homepage = "https://github.com/o0th/tmux-nova"; 1094 description = "Tmux-nova theme"; 1095 license = licenses.mit; 1096 platforms = platforms.unix; 1097 maintainers = with maintainers; [ o0th ]; 1098 }; 1099 }; 1100 1101 tmux-toggle-popup = mkTmuxPlugin rec { 1102 pluginName = "tmux-toggle-popup"; 1103 rtpFilePath = "toggle-popup.tmux"; 1104 version = "0.4.2"; 1105 src = fetchFromGitHub { 1106 owner = "loichyan"; 1107 repo = "tmux-toggle-popup"; 1108 tag = "v${version}"; 1109 hash = "sha256-dlCUK+yrBkY0DnKoj/s9dJ6yITBMfWMgw3wnwzuxim4="; 1110 }; 1111 meta = with lib; { 1112 homepage = "https://github.com/loichyan/tmux-toggle-popup"; 1113 description = "Handy plugin to create toggleable popups"; 1114 license = licenses.mit; 1115 platforms = platforms.unix; 1116 maintainers = with maintainers; [ szaffarano ]; 1117 }; 1118 }; 1119} 1120// lib.optionalAttrs config.allowAliases { 1121 mkDerivation = throw "tmuxPlugins.mkDerivation is deprecated, use tmuxPlugins.mkTmuxPlugin instead"; # added 2021-03-14 1122}