summaryrefslogtreecommitdiffstats
path: root/tests/old
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-10-30 15:15:04 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-10-30 15:15:04 +0100
commit43dac390967e2e85da0b3fcd84043a77cfaddfd0 (patch)
tree93f09b804bcded8b59db6f619e18ec4b6265b8c2 /tests/old
parenttreewide: Align files with the same files in the `nixos-server` repo (diff)
downloadnixos-config-43dac390967e2e85da0b3fcd84043a77cfaddfd0.zip
treewide: Align the rest of the files with the server repository
Diffstat (limited to 'tests/old')
-rw-r--r--tests/old/README.md109
-rw-r--r--tests/old/by-name/le/less/data/test.file1001
-rw-r--r--tests/old/by-name/le/less/data/test.file.license9
-rw-r--r--tests/old/by-name/le/less/test.desc50
-rw-r--r--tests/old/by-name/le/less/test.desc.license9
-rw-r--r--tests/old/by-name/le/less/test.nix30
-rw-r--r--tests/old/by-name/nv/nvim-checkhealth/test.desc10
-rw-r--r--tests/old/by-name/nv/nvim-checkhealth/test.desc.license9
-rw-r--r--tests/old/by-name/nv/nvim-checkhealth/test.nix55
-rw-r--r--tests/old/by-name/nv/nvim-neorg/data/index.norg16
-rw-r--r--tests/old/by-name/nv/nvim-neorg/data/index.norg.license9
-rw-r--r--tests/old/by-name/nv/nvim-neorg/data/reference.norg11
-rw-r--r--tests/old/by-name/nv/nvim-neorg/data/reference.norg.license9
-rw-r--r--tests/old/by-name/nv/nvim-neorg/test.desc73
-rw-r--r--tests/old/by-name/nv/nvim-neorg/test.desc.license9
-rw-r--r--tests/old/by-name/nv/nvim-neorg/test.nix55
-rw-r--r--tests/old/by-name/ya/yambar/test.desc5
-rw-r--r--tests/old/by-name/ya/yambar/test.desc.license9
-rw-r--r--tests/old/by-name/ya/yambar/test.nix33
-rw-r--r--tests/old/default.nix50
-rw-r--r--tests/old/infrastructure/clean.awk23
-rw-r--r--tests/old/infrastructure/default.nix177
-rw-r--r--tests/old/infrastructure/driver.sh176
-rw-r--r--tests/old/infrastructure/run.nix54
24 files changed, 1991 insertions, 0 deletions
diff --git a/tests/old/README.md b/tests/old/README.md
new file mode 100644
index 00000000..34dc9255
--- /dev/null
+++ b/tests/old/README.md
@@ -0,0 +1,109 @@
+<!--
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+-->
+
+# How to write a test
+
+Test are simple derivations, put into the `by-name` directory. As you
+often want to test configuration, the 'standard' nixos-vm-test function
+starts a vm with the specified configuration and lets you run a python
+test script.
+
+But, I've noticed, that most of my tests in this nixos-configuration are
+actually testing the home-manager config of a program. As such I've built
+a test infrastructure on top of the pre-existing nixos-vm-tests. It is
+further described in the `mkTest` section.
+
+## `mkTest`
+
+A standard application test would look somewhat like this:
+
+```nix
+{mkTest}:
+mkTest {
+ name = "my-tests";
+
+ # The configuration to add.
+ # In this case, the less config is being tested.
+ configuration = {
+ imports = [
+ ../../../../modules/by-name/le/less/module.nix
+ ];
+ config.soispha.programs.less.enable = true;
+ };
+
+ # Files that are provided at the test directory.
+ # In this case, the test dir would have a `./data/test.file`
+ # path pre-populated with the
+ # contents of the file at the lhs.
+ testData = {
+ "data/test.file" = ./data/test.file;
+ };
+
+ # The description of what to do in the test.
+ description = ./test.desc;
+
+ # A sha256 hashsum of the concatenated output of the program.
+ # This can be `null` to disable the checksum mechanism.
+ hash = "87901231393b51cdd45bbb4339a32db2894a3a5ab164cb5c7a8fa14721fdcba7";
+}
+```
+
+### The test description file
+
+All line starting with `#` or only containing white space are
+ignored. Additionally, all leading and trailing white space is stripped
+before evaluating.
+
+The general syntax is:
+
+```
+COMMAND ARGS
+```
+
+where `COMMAND` is one of the commands listed in [Commands](#commands)
+
+The `ARGS` are the verbatim content from the space after the `COMMAND`
+to the end of line character.
+
+You can run the description file, similarly as in the tests via the `run_test_description`
+package exported by the flake.
+
+#### Commands
+
+##### `Type`
+
+Send the `ARGS` to the application. This interprets `ARGS` as specified
+by the TMUX (1) man page on `send-keys`.
+
+#### `Sleep`
+
+Sleep for `ARGS` seconds.
+
+#### `Expect`
+
+Grep the currently visible screen for the regex `ARGS`. This regex
+must match.
+
+#### `ExpectNot`
+
+Does the same thing as [Expect](#expect), but enforces, that the
+regex does not match.
+
+#### `SetGolden`
+
+Set the golden file (the file used for the hash generation) to `ARGS`.
+`ARGS` must be a valid file path.
+
+#### `Exec`
+
+Executes the command (`ARGS`) and waits until it finishes.
+This will hang forever, when the command that does not exit.
diff --git a/tests/old/by-name/le/less/data/test.file b/tests/old/by-name/le/less/data/test.file
new file mode 100644
index 00000000..9e9f8931
--- /dev/null
+++ b/tests/old/by-name/le/less/data/test.file
@@ -0,0 +1,1001 @@
+Line number 0.
+Line number 1.
+Line number 2.
+Line number 3.
+Line number 4.
+Line number 5.
+Line number 6.
+Line number 7.
+Line number 8.
+Line number 9.
+Line number 10.
+Line number 11.
+Line number 12.
+Line number 13.
+Line number 14.
+Line number 15.
+Line number 16.
+Line number 17.
+Line number 18.
+Line number 19.
+Line number 20.
+Line number 21.
+Line number 22.
+Line number 23.
+Line number 24.
+Line number 25.
+Line number 26.
+Line number 27.
+Line number 28.
+Line number 29.
+Line number 30.
+Line number 31.
+Line number 32.
+Line number 33.
+Line number 34.
+Line number 35.
+Line number 36.
+Line number 37.
+Line number 38.
+Line number 39.
+Line number 40.
+Line number 41.
+Line number 42.
+Line number 43.
+Line number 44.
+Line number 45.
+Line number 46.
+Line number 47.
+Line number 48.
+Line number 49.
+Line number 50.
+Line number 51.
+Line number 52.
+Line number 53.
+Line number 54.
+Line number 55.
+Line number 56.
+Line number 57.
+Line number 58.
+Line number 59.
+Line number 60.
+Line number 61.
+Line number 62.
+Line number 63.
+Line number 64.
+Line number 65.
+Line number 66.
+Line number 67.
+Line number 68.
+Line number 69.
+Line number 70.
+Line number 71.
+Line number 72.
+Line number 73.
+Line number 74.
+Line number 75.
+Line number 76.
+Line number 77.
+Line number 78.
+Line number 79.
+Line number 80.
+Line number 81.
+Line number 82.
+Line number 83.
+Line number 84.
+Line number 85.
+Line number 86.
+Line number 87.
+Line number 88.
+Line number 89.
+Line number 90.
+Line number 91.
+Line number 92.
+Line number 93.
+Line number 94.
+Line number 95.
+Line number 96.
+Line number 97.
+Line number 98.
+Line number 99.
+Line number 100.
+Line number 101.
+Line number 102.
+Line number 103.
+Line number 104.
+Line number 105.
+Line number 106.
+Line number 107.
+Line number 108.
+Line number 109.
+Line number 110.
+Line number 111.
+Line number 112.
+Line number 113.
+Line number 114.
+Line number 115.
+Line number 116.
+Line number 117.
+Line number 118.
+Line number 119.
+Line number 120.
+Line number 121.
+Line number 122.
+Line number 123.
+Line number 124.
+Line number 125.
+Line number 126.
+Line number 127.
+Line number 128.
+Line number 129.
+Line number 130.
+Line number 131.
+Line number 132.
+Line number 133.
+Line number 134.
+Line number 135.
+Line number 136.
+Line number 137.
+Line number 138.
+Line number 139.
+Line number 140.
+Line number 141.
+Line number 142.
+Line number 143.
+Line number 144.
+Line number 145.
+Line number 146.
+Line number 147.
+Line number 148.
+Line number 149.
+Line number 150.
+Line number 151.
+Line number 152.
+Line number 153.
+Line number 154.
+Line number 155.
+Line number 156.
+Line number 157.
+Line number 158.
+Line number 159.
+Line number 160.
+Line number 161.
+Line number 162.
+Line number 163.
+Line number 164.
+Line number 165.
+Line number 166.
+Line number 167.
+Line number 168.
+Line number 169.
+Line number 170.
+Line number 171.
+Line number 172.
+Line number 173.
+Line number 174.
+Line number 175.
+Line number 176.
+Line number 177.
+Line number 178.
+Line number 179.
+Line number 180.
+Line number 181.
+Line number 182.
+Line number 183.
+Line number 184.
+Line number 185.
+Line number 186.
+Line number 187.
+Line number 188.
+Line number 189.
+Line number 190.
+Line number 191.
+Line number 192.
+Line number 193.
+Line number 194.
+Line number 195.
+Line number 196.
+Line number 197.
+Line number 198.
+Line number 199.
+Line number 200.
+Line number 201.
+Line number 202.
+Line number 203.
+Line number 204.
+Line number 205.
+Line number 206.
+Line number 207.
+Line number 208.
+Line number 209.
+Line number 210.
+Line number 211.
+Line number 212.
+Line number 213.
+Line number 214.
+Line number 215.
+Line number 216.
+Line number 217.
+Line number 218.
+Line number 219.
+Line number 220.
+Line number 221.
+Line number 222.
+Line number 223.
+Line number 224.
+Line number 225.
+Line number 226.
+Line number 227.
+Line number 228.
+Line number 229.
+Line number 230.
+Line number 231.
+Line number 232.
+Line number 233.
+Line number 234.
+Line number 235.
+Line number 236.
+Line number 237.
+Line number 238.
+Line number 239.
+Line number 240.
+Line number 241.
+Line number 242.
+Line number 243.
+Line number 244.
+Line number 245.
+Line number 246.
+Line number 247.
+Line number 248.
+Line number 249.
+Line number 250.
+Line number 251.
+Line number 252.
+Line number 253.
+Line number 254.
+Line number 255.
+Line number 256.
+Line number 257.
+Line number 258.
+Line number 259.
+Line number 260.
+Line number 261.
+Line number 262.
+Line number 263.
+Line number 264.
+Line number 265.
+Line number 266.
+Line number 267.
+Line number 268.
+Line number 269.
+Line number 270.
+Line number 271.
+Line number 272.
+Line number 273.
+Line number 274.
+Line number 275.
+Line number 276.
+Line number 277.
+Line number 278.
+Line number 279.
+Line number 280.
+Line number 281.
+Line number 282.
+Line number 283.
+Line number 284.
+Line number 285.
+Line number 286.
+Line number 287.
+Line number 288.
+Line number 289.
+Line number 290.
+Line number 291.
+Line number 292.
+Line number 293.
+Line number 294.
+Line number 295.
+Line number 296.
+Line number 297.
+Line number 298.
+Line number 299.
+Line number 300.
+Line number 301.
+Line number 302.
+Line number 303.
+Line number 304.
+Line number 305.
+Line number 306.
+Line number 307.
+Line number 308.
+Line number 309.
+Line number 310.
+Line number 311.
+Line number 312.
+Line number 313.
+Line number 314.
+Line number 315.
+Line number 316.
+Line number 317.
+Line number 318.
+Line number 319.
+Line number 320.
+Line number 321.
+Line number 322.
+Line number 323.
+Line number 324.
+Line number 325.
+Line number 326.
+Line number 327.
+Line number 328.
+Line number 329.
+Line number 330.
+Line number 331.
+Line number 332.
+Line number 333.
+Line number 334.
+Line number 335.
+Line number 336.
+Line number 337.
+Line number 338.
+Line number 339.
+Line number 340.
+Line number 341.
+Line number 342.
+Line number 343.
+Line number 344.
+Line number 345.
+Line number 346.
+Line number 347.
+Line number 348.
+Line number 349.
+Line number 350.
+Line number 351.
+Line number 352.
+Line number 353.
+Line number 354.
+Line number 355.
+Line number 356.
+Line number 357.
+Line number 358.
+Line number 359.
+Line number 360.
+Line number 361.
+Line number 362.
+Line number 363.
+Line number 364.
+Line number 365.
+Line number 366.
+Line number 367.
+Line number 368.
+Line number 369.
+Line number 370.
+Line number 371.
+Line number 372.
+Line number 373.
+Line number 374.
+Line number 375.
+Line number 376.
+Line number 377.
+Line number 378.
+Line number 379.
+Line number 380.
+Line number 381.
+Line number 382.
+Line number 383.
+Line number 384.
+Line number 385.
+Line number 386.
+Line number 387.
+Line number 388.
+Line number 389.
+Line number 390.
+Line number 391.
+Line number 392.
+Line number 393.
+Line number 394.
+Line number 395.
+Line number 396.
+Line number 397.
+Line number 398.
+Line number 399.
+Line number 400.
+Line number 401.
+Line number 402.
+Line number 403.
+Line number 404.
+Line number 405.
+Line number 406.
+Line number 407.
+Line number 408.
+Line number 409.
+Line number 410.
+Line number 411.
+Line number 412.
+Line number 413.
+Line number 414.
+Line number 415.
+Line number 416.
+Line number 417.
+Line number 418.
+Line number 419.
+Line number 420.
+Line number 421.
+Line number 422.
+Line number 423.
+Line number 424.
+Line number 425.
+Line number 426.
+Line number 427.
+Line number 428.
+Line number 429.
+Line number 430.
+Line number 431.
+Line number 432.
+Line number 433.
+Line number 434.
+Line number 435.
+Line number 436.
+Line number 437.
+Line number 438.
+Line number 439.
+Line number 440.
+Line number 441.
+Line number 442.
+Line number 443.
+Line number 444.
+Line number 445.
+Line number 446.
+Line number 447.
+Line number 448.
+Line number 449.
+Line number 450.
+Line number 451.
+Line number 452.
+Line number 453.
+Line number 454.
+Line number 455.
+Line number 456.
+Line number 457.
+Line number 458.
+Line number 459.
+Line number 460.
+Line number 461.
+Line number 462.
+Line number 463.
+Line number 464.
+Line number 465.
+Line number 466.
+Line number 467.
+Line number 468.
+Line number 469.
+Line number 470.
+Line number 471.
+Line number 472.
+Line number 473.
+Line number 474.
+Line number 475.
+Line number 476.
+Line number 477.
+Line number 478.
+Line number 479.
+Line number 480.
+Line number 481.
+Line number 482.
+Line number 483.
+Line number 484.
+Line number 485.
+Line number 486.
+Line number 487.
+Line number 488.
+Line number 489.
+Line number 490.
+Line number 491.
+Line number 492.
+Line number 493.
+Line number 494.
+Line number 495.
+Line number 496.
+Line number 497.
+Line number 498.
+Line number 499.
+Line number 500.
+Line number 501.
+Line number 502.
+Line number 503.
+Line number 504.
+Line number 505.
+Line number 506.
+Line number 507.
+Line number 508.
+Line number 509.
+Line number 510.
+Line number 511.
+Line number 512.
+Line number 513.
+Line number 514.
+Line number 515.
+Line number 516.
+Line number 517.
+Line number 518.
+Line number 519.
+Line number 520.
+Line number 521.
+Line number 522.
+Line number 523.
+Line number 524.
+Line number 525.
+Line number 526.
+Line number 527.
+Line number 528.
+Line number 529.
+Line number 530.
+Line number 531.
+Line number 532.
+Line number 533.
+Line number 534.
+Line number 535.
+Line number 536.
+Line number 537.
+Line number 538.
+Line number 539.
+Line number 540.
+Line number 541.
+Line number 542.
+Line number 543.
+Line number 544.
+Line number 545.
+Line number 546.
+Line number 547.
+Line number 548.
+Line number 549.
+Line number 550.
+Line number 551.
+Line number 552.
+Line number 553.
+Line number 554.
+Line number 555.
+Line number 556.
+Line number 557.
+Line number 558.
+Line number 559.
+Line number 560.
+Line number 561.
+Line number 562.
+Line number 563.
+Line number 564.
+Line number 565.
+Line number 566.
+Line number 567.
+Line number 568.
+Line number 569.
+Line number 570.
+Line number 571.
+Line number 572.
+Line number 573.
+Line number 574.
+Line number 575.
+Line number 576.
+Line number 577.
+Line number 578.
+Line number 579.
+Line number 580.
+Line number 581.
+Line number 582.
+Line number 583.
+Line number 584.
+Line number 585.
+Line number 586.
+Line number 587.
+Line number 588.
+Line number 589.
+Line number 590.
+Line number 591.
+Line number 592.
+Line number 593.
+Line number 594.
+Line number 595.
+Line number 596.
+Line number 597.
+Line number 598.
+Line number 599.
+Line number 600.
+Line number 601.
+Line number 602.
+Line number 603.
+Line number 604.
+Line number 605.
+Line number 606.
+Line number 607.
+Line number 608.
+Line number 609.
+Line number 610.
+Line number 611.
+Line number 612.
+Line number 613.
+Line number 614.
+Line number 615.
+Line number 616.
+Line number 617.
+Line number 618.
+Line number 619.
+Line number 620.
+Line number 621.
+Line number 622.
+Line number 623.
+Line number 624.
+Line number 625.
+Line number 626.
+Line number 627.
+Line number 628.
+Line number 629.
+Line number 630.
+Line number 631.
+Line number 632.
+Line number 633.
+Line number 634.
+Line number 635.
+Line number 636.
+Line number 637.
+Line number 638.
+Line number 639.
+Line number 640.
+Line number 641.
+Line number 642.
+Line number 643.
+Line number 644.
+Line number 645.
+Line number 646.
+Line number 647.
+Line number 648.
+Line number 649.
+Line number 650.
+Line number 651.
+Line number 652.
+Line number 653.
+Line number 654.
+Line number 655.
+Line number 656.
+Line number 657.
+Line number 658.
+Line number 659.
+Line number 660.
+Line number 661.
+Line number 662.
+Line number 663.
+Line number 664.
+Line number 665.
+Line number 666.
+Line number 667.
+Line number 668.
+Line number 669.
+Line number 670.
+Line number 671.
+Line number 672.
+Line number 673.
+Line number 674.
+Line number 675.
+Line number 676.
+Line number 677.
+Line number 678.
+Line number 679.
+Line number 680.
+Line number 681.
+Line number 682.
+Line number 683.
+Line number 684.
+Line number 685.
+Line number 686.
+Line number 687.
+Line number 688.
+Line number 689.
+Line number 690.
+Line number 691.
+Line number 692.
+Line number 693.
+Line number 694.
+Line number 695.
+Line number 696.
+Line number 697.
+Line number 698.
+Line number 699.
+Line number 700.
+Line number 701.
+Line number 702.
+Line number 703.
+Line number 704.
+Line number 705.
+Line number 706.
+Line number 707.
+Line number 708.
+Line number 709.
+Line number 710.
+Line number 711.
+Line number 712.
+Line number 713.
+Line number 714.
+Line number 715.
+Line number 716.
+Line number 717.
+Line number 718.
+Line number 719.
+Line number 720.
+Line number 721.
+Line number 722.
+Line number 723.
+Line number 724.
+Line number 725.
+Line number 726.
+Line number 727.
+Line number 728.
+Line number 729.
+Line number 730.
+Line number 731.
+Line number 732.
+Line number 733.
+Line number 734.
+Line number 735.
+Line number 736.
+Line number 737.
+Line number 738.
+Line number 739.
+Line number 740.
+Line number 741.
+Line number 742.
+Line number 743.
+Line number 744.
+Line number 745.
+Line number 746.
+Line number 747.
+Line number 748.
+Line number 749.
+Line number 750.
+Line number 751.
+Line number 752.
+Line number 753.
+Line number 754.
+Line number 755.
+Line number 756.
+Line number 757.
+Line number 758.
+Line number 759.
+Line number 760.
+Line number 761.
+Line number 762.
+Line number 763.
+Line number 764.
+Line number 765.
+Line number 766.
+Line number 767.
+Line number 768.
+Line number 769.
+Line number 770.
+Line number 771.
+Line number 772.
+Line number 773.
+Line number 774.
+Line number 775.
+Line number 776.
+Line number 777.
+Line number 778.
+Line number 779.
+Line number 780.
+Line number 781.
+Line number 782.
+Line number 783.
+Line number 784.
+Line number 785.
+Line number 786.
+Line number 787.
+Line number 788.
+Line number 789.
+Line number 790.
+Line number 791.
+Line number 792.
+Line number 793.
+Line number 794.
+Line number 795.
+Line number 796.
+Line number 797.
+Line number 798.
+Line number 799.
+Line number 800.
+Line number 801.
+Line number 802.
+Line number 803.
+Line number 804.
+Line number 805.
+Line number 806.
+Line number 807.
+Line number 808.
+Line number 809.
+Line number 810.
+Line number 811.
+Line number 812.
+Line number 813.
+Line number 814.
+Line number 815.
+Line number 816.
+Line number 817.
+Line number 818.
+Line number 819.
+Line number 820.
+Line number 821.
+Line number 822.
+Line number 823.
+Line number 824.
+Line number 825.
+Line number 826.
+Line number 827.
+Line number 828.
+Line number 829.
+Line number 830.
+Line number 831.
+Line number 832.
+Line number 833.
+Line number 834.
+Line number 835.
+Line number 836.
+Line number 837.
+Line number 838.
+Line number 839.
+Line number 840.
+Line number 841.
+Line number 842.
+Line number 843.
+Line number 844.
+Line number 845.
+Line number 846.
+Line number 847.
+Line number 848.
+Line number 849.
+Line number 850.
+Line number 851.
+Line number 852.
+Line number 853.
+Line number 854.
+Line number 855.
+Line number 856.
+Line number 857.
+Line number 858.
+Line number 859.
+Line number 860.
+Line number 861.
+Line number 862.
+Line number 863.
+Line number 864.
+Line number 865.
+Line number 866.
+Line number 867.
+Line number 868.
+Line number 869.
+Line number 870.
+Line number 871.
+Line number 872.
+Line number 873.
+Line number 874.
+Line number 875.
+Line number 876.
+Line number 877.
+Line number 878.
+Line number 879.
+Line number 880.
+Line number 881.
+Line number 882.
+Line number 883.
+Line number 884.
+Line number 885.
+Line number 886.
+Line number 887.
+Line number 888.
+Line number 889.
+Line number 890.
+Line number 891.
+Line number 892.
+Line number 893.
+Line number 894.
+Line number 895.
+Line number 896.
+Line number 897.
+Line number 898.
+Line number 899.
+Line number 900.
+Line number 901.
+Line number 902.
+Line number 903.
+Line number 904.
+Line number 905.
+Line number 906.
+Line number 907.
+Line number 908.
+Line number 909.
+Line number 910.
+Line number 911.
+Line number 912.
+Line number 913.
+Line number 914.
+Line number 915.
+Line number 916.
+Line number 917.
+Line number 918.
+Line number 919.
+Line number 920.
+Line number 921.
+Line number 922.
+Line number 923.
+Line number 924.
+Line number 925.
+Line number 926.
+Line number 927.
+Line number 928.
+Line number 929.
+Line number 930.
+Line number 931.
+Line number 932.
+Line number 933.
+Line number 934.
+Line number 935.
+Line number 936.
+Line number 937.
+Line number 938.
+Line number 939.
+Line number 940.
+Line number 941.
+Line number 942.
+Line number 943.
+Line number 944.
+Line number 945.
+Line number 946.
+Line number 947.
+Line number 948.
+Line number 949.
+Line number 950.
+Line number 951.
+Line number 952.
+Line number 953.
+Line number 954.
+Line number 955.
+Line number 956.
+Line number 957.
+Line number 958.
+Line number 959.
+Line number 960.
+Line number 961.
+Line number 962.
+Line number 963.
+Line number 964.
+Line number 965.
+Line number 966.
+Line number 967.
+Line number 968.
+Line number 969.
+Line number 970.
+Line number 971.
+Line number 972.
+Line number 973.
+Line number 974.
+Line number 975.
+Line number 976.
+Line number 977.
+Line number 978.
+Line number 979.
+Line number 980.
+Line number 981.
+Line number 982.
+Line number 983.
+Line number 984.
+Line number 985.
+Line number 986.
+Line number 987.
+Line number 988.
+Line number 989.
+Line number 990.
+Line number 991.
+Line number 992.
+Line number 993.
+Line number 994.
+Line number 995.
+Line number 996.
+Line number 997.
+Line number 998.
+Line number 999.
+Line number 1000.
diff --git a/tests/old/by-name/le/less/data/test.file.license b/tests/old/by-name/le/less/data/test.file.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/le/less/data/test.file.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/le/less/test.desc b/tests/old/by-name/le/less/test.desc
new file mode 100644
index 00000000..a0c49e7b
--- /dev/null
+++ b/tests/old/by-name/le/less/test.desc
@@ -0,0 +1,50 @@
+# This is a specification of what to do in the test script.
+# It is inspired by the syntax of vhs tapes.
+
+# Give everything time to start up
+Sleep 2
+
+Type less ./data/test.file
+Sleep 1
+Type Enter
+Sleep 2
+
+Type G
+Sleep 1
+Expect ^Line number 1000.$
+
+Type gg
+Sleep 1
+Expect ^Line number 1.$
+
+Type Space
+Sleep 1
+Expect ^Line number 23.$
+ExpectNot ^Line number 22.$
+ExpectNot ^Line number 46.$
+
+Type tt
+Sleep 1
+ExpectNot ^Line number 23.$
+ExpectNot ^Line number 24.$
+Expect ^Line number 25.$
+Expect ^Line number 47.$
+
+Type Gn
+Sleep 1
+Expect ^Line number 999.$
+ExpectNot ^Line number 1000.$
+
+# Type Up
+# Sleep 1
+# ExpectNot ^Line number 976.$
+# Expect ^Line number 999.$
+#
+# Type Down
+# Sleep 1
+# ExpectNot ^Line number 1000.$
+# Expect ^Line number 977.$
+
+Type Escape
+
+# vim: ft=tape
diff --git a/tests/old/by-name/le/less/test.desc.license b/tests/old/by-name/le/less/test.desc.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/le/less/test.desc.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/le/less/test.nix b/tests/old/by-name/le/less/test.nix
new file mode 100644
index 00000000..c9716ffc
--- /dev/null
+++ b/tests/old/by-name/le/less/test.nix
@@ -0,0 +1,30 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{mkTest, ...}:
+mkTest {
+ name = "less";
+
+ configuration = {
+ imports = [
+ ../../../../modules/by-name/le/less/module.nix
+ ];
+ config.soispha.programs.less.enable = true;
+ };
+
+ testData = {
+ "data/test.file" = ./data/test.file;
+ };
+
+ description = ./test.desc;
+
+ # FIXME: Currently the golden file is not reproducible. <2024-11-22>
+ hash = null;
+ # hash = "87901231393b51cdd45bbb4339a32db2894a3a5ab164cb5c7a8fa14721fdcba7";
+}
diff --git a/tests/old/by-name/nv/nvim-checkhealth/test.desc b/tests/old/by-name/nv/nvim-checkhealth/test.desc
new file mode 100644
index 00000000..169cf49f
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-checkhealth/test.desc
@@ -0,0 +1,10 @@
+# We open a `*.norg` file to run the norg ftplugin.
+Exec nvim test.norg --headless "+set nospell" "+checkhealth" "+w! health.log" +q +wa +qa
+
+# The `checkhealth` output is not reproducible.
+# Thus only output the warnings/errors.
+Exec batgrep --ignore-case 'warning|error' health.log > new_golden
+
+SetGolden new_golden
+
+# vim: ft=tape
diff --git a/tests/old/by-name/nv/nvim-checkhealth/test.desc.license b/tests/old/by-name/nv/nvim-checkhealth/test.desc.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-checkhealth/test.desc.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/nv/nvim-checkhealth/test.nix b/tests/old/by-name/nv/nvim-checkhealth/test.nix
new file mode 100644
index 00000000..cb04e758
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-checkhealth/test.nix
@@ -0,0 +1,55 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ mkTest,
+ extraModules,
+ pkgs,
+ ...
+}:
+mkTest {
+ name = "nvim-checkhealth";
+
+ configuration = {
+ imports = [
+ ../../../../modules/by-name/nv/nvim/module.nix
+ ../../../../modules/by-name/ni/nixpkgs/module.nix
+ ];
+ config = {
+ soispha = {
+ nixpkgs = {
+ enable = true;
+ systemName = "x86_64-linux";
+ };
+ programs.nvim = {
+ enable = true;
+ shell = pkgs.zsh;
+ };
+ };
+ home-manager.users.soispha = {
+ home.packages = [
+ pkgs.bat
+ pkgs.ripgrep
+ pkgs.bat-extras.batgrep
+ ];
+ imports = [
+ extraModules.nixvim.homeManagerModule
+ ];
+ };
+ };
+ };
+
+ testData = {};
+
+ description = ./test.desc;
+
+ # FIXME: This is not reproducible, but is also not checked via `Expect`s. As such this
+ # whole test is quite useless, but it might work some day. <2024-11-30>
+ hash = null;
+}
diff --git a/tests/old/by-name/nv/nvim-neorg/data/index.norg b/tests/old/by-name/nv/nvim-neorg/data/index.norg
new file mode 100644
index 00000000..4d643019
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/data/index.norg
@@ -0,0 +1,16 @@
+@document.meta
+title: index
+description:
+authors: soispha
+categories:
+created: 2023-08-29
+updated: 2023-08-29
+version: 1.1.1
+@end
+
+* First heading
+- {* Second heading}[Second]
+
+
+* Second heading
+-- {:./reference.norg:}[References]
diff --git a/tests/old/by-name/nv/nvim-neorg/data/index.norg.license b/tests/old/by-name/nv/nvim-neorg/data/index.norg.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/data/index.norg.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/nv/nvim-neorg/data/reference.norg b/tests/old/by-name/nv/nvim-neorg/data/reference.norg
new file mode 100644
index 00000000..b572a469
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/data/reference.norg
@@ -0,0 +1,11 @@
+@document.meta
+title: references
+description:
+authors: soispha
+categories:
+created: 2023-08-29
+updated: 2023-08-29
+version: 1.1.1
+@end
+
+* Some other content
diff --git a/tests/old/by-name/nv/nvim-neorg/data/reference.norg.license b/tests/old/by-name/nv/nvim-neorg/data/reference.norg.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/data/reference.norg.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/nv/nvim-neorg/test.desc b/tests/old/by-name/nv/nvim-neorg/test.desc
new file mode 100644
index 00000000..bd1e8f49
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/test.desc
@@ -0,0 +1,73 @@
+Type nvim
+Sleep 3
+Type Enter
+Sleep 9
+# Remove the spellfile download prompt
+Type C-c
+ExpectNot Warning: Cannot find word list
+Expect Nvim is open source and freely distributable
+
+Type :NeorgStart
+Sleep 1.5
+Type Enter
+Sleep 4
+
+Type :Neorg workspace general
+Sleep 1.5
+Type Enter
+Sleep 4
+
+
+Type 10t
+Sleep 0.5
+
+# Cursor is on the first heading
+Type iMARKER
+Sleep 0.5
+Type Escape
+Sleep 2
+Expect ^11\s*MARKER◉ First heading$
+
+# Now moves to the link to the second
+Type t
+Sleep 0.2
+Type $
+Sleep 0.2
+Type h
+Sleep 0.2
+Type Enter
+Sleep 0.5
+
+# Should be on the second
+Type iMARKER
+Sleep 0.5
+Type Escape
+Sleep 2
+Expect ^15\s*◉ MARKERSecond heading$
+
+# Moves to the references file
+Type t
+Sleep 0.2
+Type $
+Sleep 0.2
+Type h
+Sleep 0.2
+Type Enter
+Sleep 0.5
+
+# Skip another spell file prompt
+Type Enter
+Sleep 0.5
+
+
+Type 10t
+Sleep 1.0
+
+Expect ^11\s*◉ Some other content$
+
+Type :q!
+Sleep 0.5
+Type Enter
+Sleep 1
+
+# vim: ft=tape
diff --git a/tests/old/by-name/nv/nvim-neorg/test.desc.license b/tests/old/by-name/nv/nvim-neorg/test.desc.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/test.desc.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/nv/nvim-neorg/test.nix b/tests/old/by-name/nv/nvim-neorg/test.nix
new file mode 100644
index 00000000..9f160df5
--- /dev/null
+++ b/tests/old/by-name/nv/nvim-neorg/test.nix
@@ -0,0 +1,55 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ mkTest,
+ extraModules,
+ pkgs,
+ ...
+}:
+mkTest {
+ name = "nvim-neorg";
+
+ configuration = {
+ imports = [
+ ../../../../modules/by-name/nv/nvim/module.nix
+ ../../../../modules/by-name/ni/nixpkgs/module.nix
+ ];
+ config = {
+ soispha = {
+ nixpkgs = {
+ enable = true;
+ systemName = "x86_64-linux";
+ };
+ programs.nvim = {
+ enable = true;
+ shell = pkgs.zsh;
+ };
+ };
+ home-manager.users.soispha = {
+ imports = [
+ extraModules.nixvim.homeManagerModule
+ ];
+ };
+ };
+ };
+
+ alternateScreen = false;
+
+ testData = {
+ "/home/soispha/repos/notes/general/index.norg" = ./data/index.norg;
+ "/home/soispha/repos/notes/general/reference.norg" = ./data/reference.norg;
+ };
+
+ description = ./test.desc;
+
+ # The golden file is just full of nvim's terminal control sequences. There is no point
+ # in trying to check it.
+ hash = null;
+}
diff --git a/tests/old/by-name/ya/yambar/test.desc b/tests/old/by-name/ya/yambar/test.desc
new file mode 100644
index 00000000..067c201e
--- /dev/null
+++ b/tests/old/by-name/ya/yambar/test.desc
@@ -0,0 +1,5 @@
+Exec yambar --validate && echo "SUCCESS"
+
+Expect ^SUCCESS$
+
+# vim: ft=tape
diff --git a/tests/old/by-name/ya/yambar/test.desc.license b/tests/old/by-name/ya/yambar/test.desc.license
new file mode 100644
index 00000000..eae6a84c
--- /dev/null
+++ b/tests/old/by-name/ya/yambar/test.desc.license
@@ -0,0 +1,9 @@
+nixos-config - My current NixOS configuration
+
+Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+SPDX-License-Identifier: GPL-3.0-or-later
+
+This file is part of my nixos-config.
+
+You should have received a copy of the License along with this program.
+If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
diff --git a/tests/old/by-name/ya/yambar/test.nix b/tests/old/by-name/ya/yambar/test.nix
new file mode 100644
index 00000000..0e4d0033
--- /dev/null
+++ b/tests/old/by-name/ya/yambar/test.nix
@@ -0,0 +1,33 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{mkTest, ...}:
+mkTest {
+ name = "yambar";
+
+ configuration = {
+ imports = [
+ ../../../../modules/by-name/ya/yambar/module.nix
+ ../../../../modules/by-name/ni/nixpkgs/module.nix
+ ];
+ config.soispha = {
+ programs.yambar.enable = true;
+ nixpkgs = {
+ enable = true;
+ systemName = "x86_64-linux";
+ };
+ };
+ };
+
+ testData = {};
+
+ description = ./test.desc;
+
+ hash = "aa90e8898fa23c76299158415cb29db739165e94c252a447aff763ab24fbfc9c";
+}
diff --git a/tests/old/default.nix b/tests/old/default.nix
new file mode 100644
index 00000000..d13723b4
--- /dev/null
+++ b/tests/old/default.nix
@@ -0,0 +1,50 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ lib,
+ nixLib,
+ pkgs,
+ myPkgs,
+ nixpkgs_as_input,
+ sysLib,
+ extraModules,
+ nixpkgs_open_prs,
+ system,
+}: let
+ mkTest = import ./infrastructure {
+ inherit
+ pkgs
+ lib
+ nixos-lib
+ myPkgs
+ extraModules
+ sysLib
+ nixpkgs_open_prs
+ system
+ ;
+ };
+
+ nixos-lib = import (nixpkgs_as_input + "/nixos/lib") {};
+
+ tests = nixLib.mkByName {
+ baseDirectory = ./by-name;
+ fileName = "test.nix";
+ finalizeFunction = name: value:
+ import value {
+ inherit
+ mkTest
+ extraModules
+ pkgs
+ myPkgs
+ ;
+ };
+ };
+in
+ tests
diff --git a/tests/old/infrastructure/clean.awk b/tests/old/infrastructure/clean.awk
new file mode 100644
index 00000000..0362d38b
--- /dev/null
+++ b/tests/old/infrastructure/clean.awk
@@ -0,0 +1,23 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+{
+ # Shell like comments
+ gsub(/^#.*$/, "", $0)
+
+ # Strip leading and trailing white space
+ gsub(/^[[:blank:]]*/, "", $0)
+ gsub(/[[:blank:]]*$/, "", $0)
+
+ # Only accept the line, if it contains something
+ if (NF) {
+ print $0
+ }
+}
diff --git a/tests/old/infrastructure/default.nix b/tests/old/infrastructure/default.nix
new file mode 100644
index 00000000..cd21198c
--- /dev/null
+++ b/tests/old/infrastructure/default.nix
@@ -0,0 +1,177 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ pkgs,
+ myPkgs,
+ lib,
+ nixos-lib,
+ extraModules,
+ sysLib,
+ nixpkgs_open_prs,
+ system,
+}: {
+ name,
+ configuration,
+ description,
+ hash,
+ testData,
+ testShell ? pkgs.dash,
+ alternateScreen ? false,
+}:
+nixos-lib.runTest {
+ hostPkgs = pkgs; # the Nixpkgs package set used outside the VMs
+
+ inherit name;
+
+ node = {
+ specialArgs = {
+ inherit
+ myPkgs
+ sysLib
+ nixpkgs_open_prs
+ system
+ ;
+ };
+ # Use the nixpkgs as constructed by the `nixpkgs.*` options
+ pkgs = null;
+ };
+
+ nodes = {
+ machine = {config, ...}: {
+ imports =
+ [
+ extraModules.home-manager
+ ../../modules/by-name/us/users/module.nix
+ ]
+ ++ configuration.imports;
+
+ config = lib.modules.mkMerge [
+ {
+ soispha = {
+ users = {
+ enable = true;
+
+ # The password is 'test'.
+ hashedPassword = "$y$j9T$yYYUpE9OaxmEO8MaPI2jr0$WGpYYWaLySakI.Mwqz4sljGSOetAp4s5CIUa1VUU1l2";
+ };
+ };
+ home-manager.users.soispha.home.stateVersion = "24.11";
+ }
+ configuration.config
+ ];
+ };
+ };
+
+ testScript = {nodes, ...}: let
+ testDir = "${nodes.machine.home-manager.users.soispha.home.homeDirectory}/test";
+ goldenFile = "${testDir}/__test_golden";
+ logFile = "${testDir}/__test_log";
+ testTmux = lib.getExe pkgs.tmux;
+ in
+ /*
+ python
+ */
+ ''
+ start_all()
+
+ __TEST_TMUX="${testTmux}"
+
+ machine.succeed("sudo -u soispha ${pkgs.writeShellScript "mkTestEnvironment" ''
+ set -e
+
+ mkdir --parents "${testDir}"
+ cd "${testDir}"
+
+ ${
+ lib.strings.concatStringsSep "\n\n" (
+ builtins.attrValues
+ (builtins.mapAttrs
+ (name: value: ''
+ mkdir --parents "$(dirname '${name}')"
+ cp --recursive '${value}' '${name}'
+ '')
+ testData)
+ )
+ }
+ ''}")
+
+ machine.succeed("sudo -u soispha ${pkgs.writeShellScript "mkGoldenRecord" ''
+ set -e
+
+ # HACK: Prevent zsh from complaining about missing configuration.
+ # TODO: These tests should probably just run under bash. <2024-11-22>
+ touch ~soispha/.zshrc
+
+ cd "${testDir}"
+
+ __TEST_TMUX="${testTmux}"
+ __TEST_SHELL="${lib.getExe testShell}"
+ __TEST_TMUX_PANE="__TEST_TMUX_PANE"
+
+ __TEST_EVAL_USE_ALTERNATE_SCREEN="${
+ if alternateScreen
+ then "true"
+ else "false"
+ }"
+ __TEST_EVAL_AWK_CLEAN_FILE="${./clean.awk}"
+ __TEST_EVAL_LOG_FILE="${logFile}"
+ __TEST_EVAL_GOLDEN_FILE="$(mktemp)"
+ printf "%s" "${goldenFile}" >"$__TEST_EVAL_GOLDEN_FILE"
+
+ . ${./driver.sh}
+
+ "$__TEST_TMUX" new-session -d -s "$__TEST_TMUX_PANE" "$__TEST_SHELL"
+
+ # Warm up the shell in the tmux sesssion
+ "$__TEST_TMUX" send-keys -t "$__TEST_TMUX_PANE" "echo hi" "Enter" "clear" "Enter"
+ sleep 2
+
+ "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE" -o 'cat >>${goldenFile}'
+
+ __test_eval "${description}"
+
+ # Remove the pipe
+ "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE"
+
+ # Check if the golden file was changed.
+ if [ "$(cat "$__TEST_EVAL_GOLDEN_FILE")" != "${goldenFile}" ]; then
+ mv "$(cat "$__TEST_EVAL_GOLDEN_FILE")" "${goldenFile}"
+ fi
+
+ rm "$__TEST_EVAL_GOLDEN_FILE"
+ ''}")
+
+ machine.succeed("sudo -u soispha ${pkgs.writeShellScript "testHashOfGolden" (''
+ set -e
+
+ cd "${testDir}"
+ ''
+ + lib.optionalString (hash != null)
+ /*
+ bash
+ */
+ ''
+ golden_hash="$(sha256sum ${goldenFile} | awk '{print $1}')"
+
+ if [ "$golden_hash" != "${hash}" ]; then
+ echo "Hash mismatch."
+ echo "Expected '${hash}',"
+ echo "but got '$golden_hash'"
+ exit 1
+ else
+ echo "Hash was successfully checked."
+ fi
+ '')}")
+
+
+ machine.copy_from_vm("${goldenFile}", "golden")
+ machine.copy_from_vm("${logFile}", "log")
+ '';
+}
diff --git a/tests/old/infrastructure/driver.sh b/tests/old/infrastructure/driver.sh
new file mode 100644
index 00000000..a8b241d2
--- /dev/null
+++ b/tests/old/infrastructure/driver.sh
@@ -0,0 +1,176 @@
+#! /usr/bin/env bash
+
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+set -e
+
+msg() {
+ if [ "$#" -ne 0 ]; then
+ echo "$@" | tee --append "$__TEST_EVAL_LOG_FILE" >&2
+ else
+ cat | tee --append "$__TEST_EVAL_LOG_FILE" >&2
+ fi
+}
+
+# Use bash built-ins to trim a string
+# source: https://stackoverflow.com/a/3352015
+trim() {
+ local var="$*"
+ # remove leading whitespace characters
+ var="${var#"${var%%[![:space:]]*}"}"
+ # remove trailing whitespace characters
+ var="${var%"${var##*[![:space:]]}"}"
+ printf '%s' "$var"
+}
+
+# contains(string, substring)
+#
+# Returns 0 if the specified string contains the specified substring,
+# otherwise returns 1.
+contains() {
+ string="$1"
+ substring="$2"
+ if [ "${string#*"$substring"}" != "$string" ]; then
+ return 0 # $substring is in $string
+ else
+ return 1 # $substring is not in $string
+ fi
+}
+
+__test_wait_for_pid() {
+ local pre_pids_file="$1"
+
+ exec_pids="$(mktemp)"
+ ps -eo tty,pid | awk "--assign=tmuxTty=$tmux_tty" '{if ($1 == tmuxTty) {print $2}}' >"$exec_pids"
+
+ while read -r pid; do
+ sed --in-place "s/$pid//" "$exec_pids"
+ done <"$pre_pids_file"
+
+ gawk --include inplace '{if (NF) {print $0}}' "$exec_pids"
+
+ if [ "$(wc -l <"$exec_pids")" -eq 0 ]; then
+ # No further spawned processes left
+ return 0
+ else
+ # Some other program is still running
+ pid="$(tail -n 1 "$exec_pids")"
+ rm "$exec_pids"
+ name="$(trim "$(tr '\0' ' ' <"/proc/$pid/cmdline")")"
+
+ msg "Waiting until command ('$name') finishes (has pid: $pid).."
+
+ # This allows waiting for non-children of the current shell
+ # source: https://stackoverflow.com/a/76046235
+ tail --pid "$pid" --follow /dev/null &
+ wait $!
+
+ # Give the `testShell` some time, to process the next command from a chained command.
+ sleep 0.2
+ __test_wait_for_pid "$pre_pids_file"
+ fi
+}
+
+__test_eval() {
+ tmux="$__TEST_TMUX"
+ tpane="$__TEST_TMUX_PANE"
+ file="$1"
+
+ awk --file "$__TEST_EVAL_AWK_CLEAN_FILE" "$file" | while read -r cmd args; do
+ case "$cmd" in
+ "Type")
+ msg "Sending keys to application '$args'.."
+ "$tmux" send-keys -t "$tpane": "$args"
+ ;;
+ "Sleep")
+ msg "Sleeping for '$args' seconds.."
+ sleep "$args"
+ ;;
+ "Exec")
+ local pre_exec_pids
+ local tmux_tty
+
+ msg "Executing command '$args'.."
+ tmux_tty="$("$tmux" list-panes -t "$tpane" -F "#{pane_tty}" | sed 's|/dev/||')"
+
+ pre_exec_pids="$(mktemp)"
+ ps -eo tty,pid | awk "--assign=tmuxTty=$tmux_tty" '{if ($1 == tmuxTty) {print $2}}' >"$pre_exec_pids"
+
+ "$tmux" send-keys -t "$tpane": "$args" "Enter"
+ sleep 1
+
+ __test_wait_for_pid "$pre_exec_pids"
+
+ rm "$pre_exec_pids"
+ msg "Finished command '$args'."
+ ;;
+ "Expect" | "ExpectNot")
+ msg "Trying to match regex ('$args') for currently visible content.."
+
+ get_plane_text() {
+ alternate=""
+ [ "$__TEST_EVAL_USE_ALTERNATE_SCREEN" = "true" ] && alternate="-a"
+
+ "$tmux" capture-pane -t "$tpane" -p $alternate -S 0 -E -
+ }
+
+ matched=""
+ if get_plane_text | grep "$args"; then
+ matched=true
+ else
+ matched=false
+ fi
+
+ case "$cmd" in
+ "Expect")
+ if [ "$matched" = true ]; then
+ msg "Regex matched."
+ else
+ msg "Failed to find string, matched by regex '$args' on the screen"
+ msg current screen:
+ get_plane_text | msg
+
+ exit 1
+ fi
+ ;;
+ "ExpectNot")
+ if [ "$matched" = false ]; then
+ msg "Regex successfully not matched."
+ else
+ msg "Found to find string, matched by regex '$args' on the screen. But expected none"
+ msg current screen:
+ get_plane_text | msg
+
+ exit 1
+ fi
+ ;;
+ *)
+ msg "Entered unrechable code. This is a bug."
+ exit 1
+ ;;
+ esac
+ ;;
+ "SetGolden")
+ msg "Trying to set '$args' as golden file."
+ [ -f "$args" ] || {
+ msg "Argument is not a file!"
+ exit 1
+ }
+ printf "%s" "$args" >"$__TEST_EVAL_GOLDEN_FILE"
+ msg "Set golden file to: '$args'"
+ ;;
+ *)
+ msg "Unrecognized command: '$cmd'"
+ exit 1
+ ;;
+ esac
+ done
+}
diff --git a/tests/old/infrastructure/run.nix b/tests/old/infrastructure/run.nix
new file mode 100644
index 00000000..3148a2d9
--- /dev/null
+++ b/tests/old/infrastructure/run.nix
@@ -0,0 +1,54 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ pkgs,
+ lib,
+}:
+pkgs.writeShellScriptBin "run_test_description" ''
+ set -eu
+
+ [ "$#" -ne 1 ] && {
+ echo "Usage: $0 <Test description file>";
+ exit 2
+ }
+ description="$(realpath "$1")"
+
+ base="$(mktemp -d)"
+ cd "$base"
+
+ __TEST_TMUX="${lib.getExe pkgs.tmux}"
+ __TEST_SHELL="${lib.getExe pkgs.dash}"
+ __TEST_TMUX_PANE="__TEST_TMUX_PANE"
+
+ __TEST_EVAL_USE_ALTERNATE_SCREEN="false"
+ __TEST_EVAL_AWK_CLEAN_FILE="${./clean.awk}"
+ __TEST_EVAL_LOG_FILE="__test_log"
+ __TEST_EVAL_GOLDEN_FILE="$(mktemp)"
+ printf "%s" "__test_golden" >"$__TEST_EVAL_GOLDEN_FILE"
+
+ . ${./driver.sh}
+
+ echo "Setting up a session.."
+ if "$__TEST_TMUX" has-session -t "$__TEST_TMUX_PANE"; then
+ echo "Killing old '$__TEST_TMUX_PANE' session."
+ "$__TEST_TMUX" kill-session -t "$__TEST_TMUX_PANE"
+ fi
+ "$__TEST_TMUX" new-session -d -s "$__TEST_TMUX_PANE"
+
+ echo "Initializing pipe.."
+ "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE" -o 'cat >>./test.golden'
+
+ echo "Evaluating description.."
+ __test_eval "$description"
+
+ "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE"
+
+ echo "Base dir: $base"
+''