1
1
mirror of https://github.com/nmattia/niv.git synced 2024-09-05 20:15:26 +03:00

Add SVG to README

This commit is contained in:
Nicolas Mattia 2019-04-14 14:49:13 +02:00
parent 7aa070d8b3
commit 9703f53e81
11 changed files with 230 additions and 13 deletions

View File

@ -41,8 +41,34 @@ jobs:
name: Nix build
command: ./script/test
- run:
name: "Update Node.js and npm (master only)"
command: |
if [ "$CIRCLE_BRANCH" == "master" ]; then
nix-env -f ./nix -iA nodejs-10_x
fi
- run:
name: "Install netlify-cli (master only)"
command: |
if [ "$CIRCLE_BRANCH" == "master" ]; then
npm install netlify-cli
fi
- run:
name: "Netlify deploy (master only)"
command: |
if [ "$CIRCLE_BRANCH" == "master" ]; then
echo "Deploying to production"
./node_modules/netlify-cli/bin/run deploy \
--dir=./site \
--message="$CIRCLE_SHA1" --prod
else
echo "Not deploying"
fi
workflows:
version: 2
build:
jobs:
- build-nix
- build-nix:
context: niv-netlify

View File

@ -1,10 +1,15 @@
# niv
[![CircleCI](https://circleci.com/gh/nmattia/niv.svg?style=svg)](https://circleci.com/gh/nmattia/niv)
[![Netlify Status](https://api.netlify.com/api/v1/badges/48532eaa-259f-4ca2-aadf-67f7c6b957fd/deploy-status)](https://app.netlify.com/sites/brave-meninsky-83f073/deploys)
Painless dependencies for [Nix] projects. Read more in the [use case
section](#use-cases) section below.
<p align="center">
<img src="https://niv.nmattia.com/niv.svg">
</p>
## Install
``` bash

View File

@ -1,10 +1,15 @@
# niv
[![CircleCI](https://circleci.com/gh/nmattia/niv.svg?style=svg)](https://circleci.com/gh/nmattia/niv)
[![Netlify Status](https://api.netlify.com/api/v1/badges/48532eaa-259f-4ca2-aadf-67f7c6b957fd/deploy-status)](https://app.netlify.com/sites/brave-meninsky-83f073/deploys)
Painless dependencies for [Nix] projects. Read more in the [use case
section](#use-cases) section below.
<p align="center">
<img src="https://niv.nmattia.com/niv.svg">
</p>
## Install
``` bash

View File

@ -209,8 +209,8 @@ completePackageSpec = execStateT $ do
(Just (Aeson.String owner), Just (Aeson.String repo)) -> do
liftIO (GH.executeRequest' $ GH.repositoryR (GH.N owner) (GH.N repo))
>>= \case
Left {} ->
liftIO $ warnCouldNotFetchGitHubRepo (T.unpack owner, T.unpack repo)
Left e ->
liftIO $ warnCouldNotFetchGitHubRepo e (T.unpack owner, T.unpack repo)
Right ghRepo -> do
-- Description
@ -669,8 +669,9 @@ initNixSourcesJsonContent = "{}"
-- Warn
-------------------------------------------------------------------------------
warnCouldNotFetchGitHubRepo :: (String, String) -> IO ()
warnCouldNotFetchGitHubRepo (owner, repo) = putStrLn $ unlines [ line1, line2 ]
warnCouldNotFetchGitHubRepo :: GH.Error -> (String, String) -> IO ()
warnCouldNotFetchGitHubRepo e (owner, repo) =
putStrLn $ unlines [ line1, line2, line3 ]
where
line1 = "WARNING: Could not read from GitHub repo: " <> owner <> "/" <> repo
line2 = [s|
@ -687,6 +688,7 @@ If not, try re-adding it:
Make sure the repository exists.
|]
line3 = unwords [ "(Error was:", show e, ")" ]
-------------------------------------------------------------------------------
-- Abort

View File

@ -1,10 +1,10 @@
{ pkgs ? import ./nix {} }:
with rec
{ niv-source = pkgs.lib.sourceByRegex ./.
{ files = pkgs.callPackage ./nix/files.nix {};
niv-source = files.sourceByRegex "niv" ./.
[ "^package.yaml$"
"^app.*$"
"^README.md$"
"^nix$"
"^nix.sources.nix$"
];
haskellPackages = pkgs.haskellPackages.override
@ -24,6 +24,7 @@ with rec
echo " > repl"
'';
};
};
rec
{ inherit niv-source niv-devshell;
@ -58,4 +59,52 @@ rec
diff ${./README.md} ${readme} && echo dummy > $out || err ;
'';
niv-svg-test = pkgs.runCommand "niv-svg-test" {}
''
err() {
echo
echo -e "\e[31mERR\e[0m: niv.svg out of date"
echo -e "please run \e[1m./script/gen\e[0m"
echo
exit 1
}
expected_hash=$(${pkgs.nix}/bin/nix-hash ${niv-svg-gen})
actual_hash=$(grep -oP 'id="\K[^"]+' ${./site/niv.svg} -m 1)
echo expected $expected_hash
echo actuall $actual_hash
[ $expected_hash == $actual_hash ] && echo dymmy > $out || err
'';
niv-svg-cmds = pkgs.writeScript "niv-svg-cmds"
''
#!${pkgs.stdenv.shell}
set -euo pipefail
echo '$ niv init'
niv init
echo '$ niv add stedolan/jq'
niv add stedolan/jq
'';
niv-svg-gen = pkgs.writeScript "niv-svg-gen"
''
#!${pkgs.stdenv.shell}
set -euo pipefail
export PATH=${haskellPackages.niv}/bin:${pkgs.nix}/bin:$PATH
hash=$(${pkgs.nix}/bin/nix-hash ''${BASH_SOURCE[0]})
pushd $(mktemp -d)
(tail -f /dev/null || true) | ${pkgs.termtosvg}/bin/termtosvg \
-g 82x26 -M 1500 -m 1500 -t window_frame \
-c '${niv-svg-cmds}' niv.svg
${pkgs.gnused}/bin/sed -i "0,/terminal/{s/terminal/$hash/}" niv.svg
niv_svg=$(realpath niv.svg)
popd
cp $niv_svg site/niv.svg
'';
}

View File

@ -1,12 +1,8 @@
{ sources ? import ./sources.nix }:
import sources.nixpkgs
{ overlays =
[
# Snack
(_: pkgs:
with
{ snack = pkgs.callPackage "${sources.snack}/nix/packages.nix" {}; };
{ inherit (snack) snack-exe snack-lib; }
[ (_: pkgs:
{ termtosvg = pkgs.callPackage ./termtosvg.nix {}; }
)
];
config = {};

60
nix/files.nix Normal file
View File

@ -0,0 +1,60 @@
{ lib
, writeText
, runCommand
}:
rec
{
# Lists all the (relative paths to the) files in the directory.
listFilesInDir = dir:
let
go = dir: dirName:
lib.lists.concatLists
(
lib.attrsets.mapAttrsToList
(path: ty:
if ty == "directory"
then
go "${dir}/${path}" "${dirName}${path}/"
else
[ "${dirName}${path}" ]
)
(builtins.readDir dir)
);
in go dir "";
# Like nixpkgs' sourceByRegex but doesn't depend on the directory name when
# computing the hash. Also doesn't require matching on the dir name to
# actually enter the dir.
sourceByRegex = name: src: regexes:
let
files = builtins.filter (x: x.keep) (map mk (listFilesInDir src));
mk = path:
let relPath = lib.removePrefix (toString src + "/") (toString path);
in
{ inherit relPath;
path = src + ("/" + path);
keep = lib.any (re: builtins.match re relPath != null) regexes;
};
files' = map (x: x.path) files;
paths' = map (x: x.relPath) files;
filesAbs = writeText "foo" (lib.concatStringsSep "\n" files');
filesRel = writeText "bar" (lib.concatStringsSep "\n" paths');
in
runCommand "source-${name}" {}
''
mkdir -p $out
paste ${filesAbs} ${filesRel} | while IFS="$(printf '\t')" read -r f1 f2
do
f="$out/$f2"
mkdir -p $(dirname $f)
echo $f1
echo $f2
echo $f
cp $f1 $f
done
'';
}

22
nix/termtosvg.nix Normal file
View File

@ -0,0 +1,22 @@
{ lib, python3Packages }:
python3Packages.buildPythonApplication rec {
pname = "termtosvg";
version = "0.8.0";
src = python3Packages.fetchPypi {
inherit pname version;
sha256 = "e3a0a7bd511028c96d242525df807a23e6f22e55b111a7ee861f294a86224b0c";
};
doCheck = false;
propagatedBuildInputs = with python3Packages; [ lxml pyte ];
meta = with lib; {
homepage = https://nbedos.github.io/termtosvg/;
description = "Record terminal sessions as SVG animations";
license = licenses.bsd3;
maintainers = with maintainers; [ ma27 ];
};
}

View File

@ -9,3 +9,4 @@ set -euo pipefail
echo "Updating README"
cat $(nix-build -A readme) > README.md
$(nix-build -A niv-svg-gen)

3
site/index.html Normal file
View File

@ -0,0 +1,3 @@
<h1>Niv</h1>
<img src="./niv.svg">
<a href="https://www.github.com/nmattia/niv">niv</a>

48
site/niv.svg Normal file
View File

@ -0,0 +1,48 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="106e890de9b7df935e0f4355a28a86e7" baseProfile="full" viewBox="0 0 703 523" width="703" version="1.1">
<defs>
<termtosvg:template_settings xmlns:termtosvg="https://github.com/nbedos/termtosvg">
<termtosvg:screen_geometry columns="82" rows="26"/>
</termtosvg:template_settings>
<style type="text/css" id="generated-style"><![CDATA[:root {
--animation-duration: 5500ms;
}
#screen {
font-family: 'DejaVu Sans Mono', monospace;
font-style: normal;
font-size: 14px;
}
text {
dominant-baseline: text-before-edge;
white-space: pre;
}]]></style>
<style type="text/css" id="user-style">
/* gjm8 color theme (source: https://terminal.sexy/) */
.foreground {fill: #f8f8f2}
.background {fill: #272822}
.color0 {fill: #272822}
.color1 {fill: #f92672}
.color2 {fill: #a6e22e}
.color3 {fill: #f4bf75}
.color4 {fill: #66d9ef}
.color5 {fill: #ae81ff}
.color6 {fill: #a1efe4}
.color7 {fill: #f8f8f2}
.color8 {fill: #75715e}
.color9 {fill: #fd971f}
.color10 {fill: #383830}
.color11 {fill: #49483e}
.color12 {fill: #a59f85}
.color13 {fill: #f5f4f1}
.color14 {fill: #cc6633}
.color15 {fill: #f9f8f5}
</style>
</defs>
<rect id="terminalui" class="background" width="100%" height="100%" ry="4.5826941"/>
<circle cx="24" cy="23" r="7" class="color1"/>
<circle cx="44" cy="23" r="7" class="color3"/>
<circle cx="64" cy="23" r="7" class="color2"/>
<svg id="screen" width="656" x="23" y="50" viewBox="0 0 656 442" preserveAspectRatio="xMidYMin meet">
<rect class="background" height="100%" width="100%" x="0" y="0"/><g display="none"><rect class="foreground" height="17" width="8" x="0" y="85"/><use y="85" xlink:href="#g1"/><animate attributeName="display" begin="0ms; anim_last.end" dur="1500ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="187"/><use y="187" xlink:href="#g1"/><animate attributeName="display" begin="1500ms; anim_last.end+1500ms" dur="1500ms" from="inline" to="inline"/></g><g display="none"><rect class="foreground" height="17" width="8" x="0" y="289"/><use y="289" xlink:href="#g1"/><animate attributeName="display" begin="3000ms; anim_last.end+3000ms" dur="1500ms" from="inline" to="inline"/></g><g display="none"><use y="0" xlink:href="#g2"/><use y="17" xlink:href="#g3"/><use y="34" xlink:href="#g4"/><use y="51" xlink:href="#g5"/><use y="68" xlink:href="#g6"/><animate attributeName="display" begin="0ms; anim_last.end" dur="5500ms" from="inline" to="inline"/></g><g display="none"><use y="85" xlink:href="#g7"/><use y="102" xlink:href="#g8"/><use y="119" xlink:href="#g9"/><use y="136" xlink:href="#g10"/><use y="153" xlink:href="#g11"/><use y="170" xlink:href="#g6"/><animate attributeName="display" begin="1500ms; anim_last.end+1500ms" dur="4000ms" from="inline" to="inline"/></g><g display="none"><use y="272" xlink:href="#g6"/><use y="187" xlink:href="#g7"/><use y="204" xlink:href="#g12"/><use y="221" xlink:href="#g13"/><use y="238" xlink:href="#g10"/><use y="255" xlink:href="#g14"/><animate attributeName="display" begin="3000ms; anim_last.end+3000ms" dur="2500ms" from="inline" to="inline"/></g><g display="none"><use y="289" xlink:href="#g7"/><use y="306" xlink:href="#g15"/><use y="323" xlink:href="#g16"/><use y="340" xlink:href="#g10"/><rect class="foreground" height="17" width="8" x="0" y="357"/><use y="357" xlink:href="#g1"/><animate attributeName="display" begin="4500ms; anim_last.end+4500ms" dur="1000ms" from="inline" to="inline" id="anim_last"/></g><defs><g id="g1"><text class="background" textLength="8" x="0"> </text></g><g id="g2"><text class="foreground" textLength="80" x="0">$ niv init</text></g><g id="g3"><text class="foreground" textLength="192" x="0">Creating nix/sources.nix</text></g><g id="g4"><text class="foreground" textLength="200" x="0">Creating nix/sources.json</text></g><g id="g5"><text class="foreground" textLength="152" x="0">Importing 'niv' ...</text></g><g id="g6"><text class="foreground" textLength="160" x="0">Reading sources file</text></g><g id="g7"><text class="foreground" textLength="96" x="0">unpacking...</text></g><g id="g8"><text class="foreground" textLength="656" x="0">path is '/nix/store/0m9fmmxbmvdqwpmryqb0gz27b768h6hd-7aa070d8b3f5a1399286c685a457c</text></g><g id="g9"><text class="foreground" textLength="152" x="0">622df616c68.tar.gz'</text></g><g id="g10"><text class="foreground" textLength="192" x="0">Writing new sources file</text></g><g id="g11"><text class="foreground" textLength="184" x="0">Importing 'nixpkgs' ...</text></g><g id="g12"><text class="foreground" textLength="656" x="0">path is '/nix/store/wbq0p56kd31j6zznjlaxahm8815gqcwk-46d3867a08a9206685e2b6a8e19f5</text></g><g id="g13"><text class="foreground" textLength="152" x="0">ad9f6ab4b39.tar.gz'</text></g><g id="g14"><text class="foreground" textLength="168" x="0">$ niv add stedolan/jq</text></g><g id="g15"><text class="foreground" textLength="656" x="0">path is '/nix/store/yjz2v8kfk2jkzc0w7lh43hfmcafpqs33-ad9fc9f559e78a764aac20f669f23</text></g><g id="g16"><text class="foreground" textLength="152" x="0">cdd020cd943.tar.gz'</text></g></defs></svg>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB