Loading pkgs/by-name/na/nano-syntax-highlighting/package.nix 0 → 100644 +66 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, nix-update-script, runCommand, writeScriptBin, expect, nano, }: stdenv.mkDerivation (finalAttrs: rec { pname = "nano-syntax-highlighting"; version = "2025.07.01"; src = fetchFromGitHub { owner = "galenguyer"; repo = pname; tag = version; hash = "sha256-+ydaxjF0CzARxyJU9h1Iq2Yj5JgtAd59sf9yH+PyavY="; }; dontBuild = true; installPhase = '' mkdir -p $out/share install *.nanorc $out/share/ ''; passthru = { tests.noSyntaxError = let expectScript = writeScriptBin "${pname}-test-syntax.exp" (builtins.readFile ./test-syntax.exp); in (runCommand "${pname}-test-noSyntaxError" { nativeBuildInputs = [ expect nano ]; } '' set -euo pipefail # For each nanorc file and each syntax, execute text-syntax.exp for nanorcPath in ${finalAttrs.finalPackage}/share/*.nanorc; do nano --rcfile "$nanorcPath" --listsyntaxes \ | tail --lines +2 \ | xargs --max-args 1 expect -f ${expectScript}/bin/${pname}-test-syntax.exp "$nanorcPath" done; touch $out '' ); updateScript = nix-update-script { }; }; meta = { description = "Improved Nano Syntax Highlighting Files, fork of nanorc"; homepage = "https://github.com/galenguyer/nano-syntax-highlighting"; license = lib.licenses.gpl3Plus; maintainers = with lib.maintainers; [ ilai-deutel ]; platforms = lib.platforms.all; }; }) pkgs/by-name/na/nano-syntax-highlighting/test-syntax.exp 0 → 100755 +42 −0 Original line number Diff line number Diff line #! /usr/bin/env nix-shell #! nix-shell -p expect -p nano -i "expect -f" proc abort {error} { puts stderr "\n\n\033\[31m$error\033\[39m" exit 1 } if {$argc != 2} { abort [format "Usage: %s <nanorcPath> <syntaxName>" [file tail "$argv0"]] } lassign $argv nanorcPath syntaxName puts stderr "Testing $syntaxName ($nanorcPath)" set timeout 10 # Ensure nano generates ANSI colors so that we can detect errors set env(TERM) xterm-256color spawn nano --rcfile "$nanorcPath" --syntax "$syntaxName" # Send Ctrl-X (exit) send "\030" lassign [wait] _ _ osError exitCode if {$osError == -1} { abort "errno: $exitCode" } elseif {$exitCode != 0} { abort "nano exited with status $exitCode" } expect { # Check for errors printed to stderr after the nano buffer is closed # Example: "Error in /nix/store/.../nano.nanorc on line 26: Color 'normal' takes no prefix" -re {Error.*} { abort $expect_out(0,string) } # Check for Nano status bar errors (red background: \033[41m) # Example: "Unknown syntax name: Invalid" -re {\e\[41m[\s\[]*([^\e]*?)[\s\]]*\e} { abort $expect_out(1,string) } } Loading
pkgs/by-name/na/nano-syntax-highlighting/package.nix 0 → 100644 +66 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, nix-update-script, runCommand, writeScriptBin, expect, nano, }: stdenv.mkDerivation (finalAttrs: rec { pname = "nano-syntax-highlighting"; version = "2025.07.01"; src = fetchFromGitHub { owner = "galenguyer"; repo = pname; tag = version; hash = "sha256-+ydaxjF0CzARxyJU9h1Iq2Yj5JgtAd59sf9yH+PyavY="; }; dontBuild = true; installPhase = '' mkdir -p $out/share install *.nanorc $out/share/ ''; passthru = { tests.noSyntaxError = let expectScript = writeScriptBin "${pname}-test-syntax.exp" (builtins.readFile ./test-syntax.exp); in (runCommand "${pname}-test-noSyntaxError" { nativeBuildInputs = [ expect nano ]; } '' set -euo pipefail # For each nanorc file and each syntax, execute text-syntax.exp for nanorcPath in ${finalAttrs.finalPackage}/share/*.nanorc; do nano --rcfile "$nanorcPath" --listsyntaxes \ | tail --lines +2 \ | xargs --max-args 1 expect -f ${expectScript}/bin/${pname}-test-syntax.exp "$nanorcPath" done; touch $out '' ); updateScript = nix-update-script { }; }; meta = { description = "Improved Nano Syntax Highlighting Files, fork of nanorc"; homepage = "https://github.com/galenguyer/nano-syntax-highlighting"; license = lib.licenses.gpl3Plus; maintainers = with lib.maintainers; [ ilai-deutel ]; platforms = lib.platforms.all; }; })
pkgs/by-name/na/nano-syntax-highlighting/test-syntax.exp 0 → 100755 +42 −0 Original line number Diff line number Diff line #! /usr/bin/env nix-shell #! nix-shell -p expect -p nano -i "expect -f" proc abort {error} { puts stderr "\n\n\033\[31m$error\033\[39m" exit 1 } if {$argc != 2} { abort [format "Usage: %s <nanorcPath> <syntaxName>" [file tail "$argv0"]] } lassign $argv nanorcPath syntaxName puts stderr "Testing $syntaxName ($nanorcPath)" set timeout 10 # Ensure nano generates ANSI colors so that we can detect errors set env(TERM) xterm-256color spawn nano --rcfile "$nanorcPath" --syntax "$syntaxName" # Send Ctrl-X (exit) send "\030" lassign [wait] _ _ osError exitCode if {$osError == -1} { abort "errno: $exitCode" } elseif {$exitCode != 0} { abort "nano exited with status $exitCode" } expect { # Check for errors printed to stderr after the nano buffer is closed # Example: "Error in /nix/store/.../nano.nanorc on line 26: Color 'normal' takes no prefix" -re {Error.*} { abort $expect_out(0,string) } # Check for Nano status bar errors (red background: \033[41m) # Example: "Unknown syntax name: Invalid" -re {\e\[41m[\s\[]*([^\e]*?)[\s\]]*\e} { abort $expect_out(1,string) } }