Compare commits

...

2 Commits

Author SHA1 Message Date
Emery Hemingway bb773e10b9 Adjust to Syndicate API 2023-10-10 09:04:59 +01:00
Emery Hemingway c77c1cb8ac Add lockfile 2023-10-10 09:04:43 +01:00
9 changed files with 41 additions and 29 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
/.direnv
/nim.cfg

3
Tupfile Normal file
View File

@ -0,0 +1,3 @@
include_rules
: |> !nim_lk |> | ./<lock>
: lock.json |> !nim_cfg |> | ./<lock>

View File

@ -1,3 +1,3 @@
include ../syndicate-nim/depends.tup
NIM_FLAGS += --path:$(TUP_CWD)/../syndicate-nim/src
NIM_GROUPS += $(TUP_CWD)/../nimble/<nimsha2>
NIM_GROUPS += $(TUP_CWD)/<lock>

1
lock.json Normal file
View File

@ -0,0 +1 @@
{"depends":[{"method":"fetchzip","packages":["syndicate"],"path":"/nix/store/008s11kkqscfqxs6g29q77c38pnrlppi-source","ref":"20231005","rev":"552e51899c82c0c2f4f466382be7d8e22a1da689","sha256":"1j3k0zlh5z02adhfvb7rdqz8fjzc6gri4v3v1fgcv2h2b7vrf0dg","srcDir":"src","url":"https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/552e51899c82c0c2f4f466382be7d8e22a1da689.tar.gz"},{"method":"fetchzip","packages":["hashlib"],"path":"/nix/store/v03nzlpdgbfxd2zhcnkfbkq01d5kqxcl-source","rev":"84e0247555e4488594975900401baaf5bbbfb53","sha256":"1pfczsv8kl36qpv543f93d2y2vgz2acckssfap7l51s2x62m6qwx","srcDir":"","url":"https://github.com/khchen/hashlib/archive/84e0247555e4488594975900401baaf5bbbfb53.tar.gz"},{"method":"fetchzip","packages":["preserves"],"path":"/nix/store/vx6ihnickx7d5lwy69i8k7fsjicv33r3-source","ref":"20230914","rev":"c915accf7d2a36ca1f323e2f02e2df7375e815f1","sha256":"11rlcbs9mvk335ibkbj8fk9aslhmnlaiqhcsjpp5n04k447sr7nx","srcDir":"src","url":"https://git.syndicate-lang.org/ehmry/preserves-nim/archive/c915accf7d2a36ca1f323e2f02e2df7375e815f1.tar.gz"},{"method":"fetchzip","packages":["nimcrypto"],"path":"/nix/store/zyr8zwh7vaiycn1s4r8cxwc71f2k5l0h-source","ref":"traditional-api","rev":"602c5d20c69c76137201b5d41f788f72afb95aa8","sha256":"1dmdmgb6b9m5f8dyxk781nnd61dsk3hdxqks7idk9ncnpj9fng65","srcDir":"","url":"https://github.com/cheatfate/nimcrypto/archive/602c5d20c69c76137201b5d41f788f72afb95aa8.tar.gz"},{"method":"fetchzip","packages":["npeg"],"path":"/nix/store/ffkxmjmigfs7zhhiiqm0iw2c34smyciy-source","ref":"1.2.1","rev":"26d62fdc40feb84c6533956dc11d5ee9ea9b6c09","sha256":"0xpzifjkfp49w76qmaylan8q181bs45anmp46l4bwr3lkrr7bpwh","srcDir":"src","url":"https://github.com/zevv/npeg/archive/26d62fdc40feb84c6533956dc11d5ee9ea9b6c09.tar.gz"}]}

View File

@ -1,5 +1,7 @@
let
syndicate = builtins.getFlake "syndicate";
pkgs =
import <nixpkgs> { overlays = builtins.attrValues syndicate.overlays; };
in pkgs.nimPackages.xdg_open_ng
{ pkgs ? import <nixpkgs> { } }:
pkgs.nim2Packages.buildNimPackage {
name = "dummy";
nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = [ pkgs.pcre ];
}

View File

@ -2,10 +2,20 @@
# SPDX-License-Identifier: Unlicense
import std/[asyncdispatch, os, uri]
import preserves, syndicate, syndicate/capabilities
import preserves, syndicate, syndicate/relays, syndicate/capabilities
import ./protocol, ./common
proc publishUri(turn: var Turn; ds: Ref) =
proc unixSocketPath: Unix =
result.path = getEnv("SYNDICATE_SOCK")
if result.path == "":
result.path = getEnv("XDG_RUNTIME_DIR", "/run/user/1000") / "dataspace"
proc envStep: Assertion =
var s = getEnv("SYNDICATE_STEP")
if s != "": parsePreserves(s, Cap)
else: capabilities.mint().toPreserve(Cap)
proc publishUri(turn: var Turn; ds: Cap) =
for arg in commandLineParams():
if fileExists(arg):
message(turn, ds, Open(uri: protocol.Uri(
@ -14,14 +24,12 @@ proc publishUri(turn: var Turn; ds: Ref) =
message(turn, ds, initRecord("open", arg.parseUri.toPreserve))
stop(turn)
proc unixSocketPath: Unix =
result.path = getEnv("SYNDICATE_SOCK")
if result.path == "":
result.path = getEnv("XDG_RUNTIME_DIR", "/run/user/1000") / "dataspace"
proc main =
let step = envStep()
discard bootDataspace("open") do (root: Cap; turn: var Turn):
connect(turn, unixSocketPath(), step, publishUri)
discard bootDataspace("open") do (root: Ref; turn: var Turn):
let cap = mint().toPreserve(Ref)
connect(turn, unixSocketPath(), cap, publishUri)
for i in 0..4: poll(20)
# A hack to exit
for i in 0..4: poll(20)
# A hack to exit
main()

View File

@ -2,29 +2,29 @@
# SPDX-License-Identifier: Unlicense
import std/[re, tables, uri]
import preserves, syndicate, syndicate/patterns
import preserves, syndicate, syndicate/relays, syndicate/patterns
import ./protocol, ./common
# importing std/re doesn't actually link against PCRE
{.passC: staticExec("pkg-config --cflags libpcre").}
{.passL: staticExec("pkg-config --libs libpcre").}
type RegexAction = tuple[regex: Regex, entity: Ref, action: Assertion]
type RegexAction = tuple[regex: Regex, entity: Cap, action: Assertion]
proc rewrite(result: var Assertion; uri: string; regex: Regex) =
proc op(pr: var Assertion) =
proc rewrite(result: var Assertion; uri: string; regex: Regex) {.gcsafe.} =
proc op(pr: var Assertion) {.gcsafe.} =
if pr.isString:
pr.string = replacef(uri, regex, pr.string)
apply(result, op)
runActor("main") do (root: Ref; turn: var Turn):
runActor("main") do (root: Cap; turn: var Turn):
connectStdio(root, turn)
var handlers: Table[Handle, RegexAction]
during(turn, root, ?UriRunnerConfig) do (handlerspace: Ref, urispace: Ref):
let handlers = newTable[Handle, RegexAction]()
during(turn, root, ?UriRunnerConfig) do (handlerspace: Cap, urispace: Cap):
during(turn, handlerspace, dropType(ActionHandler)) do:
during(turn, handlerspace, ?ActionHandler) do (pat: string; entity: Ref; act: Assertion):
during(turn, handlerspace, ?ActionHandler) do (pat: string; entity: Cap; act: Assertion):
# `duringHandle` is a symbol exposed by the `during` macro
handlers[duringHandle] = (re(pat, {reIgnoreCase, reStudy}), entity, act,)
do:

View File

@ -1,6 +1,6 @@
# Package
version = "20230630"
version = "20231010"
author = "Emery"
description = "Syndicated open command"
license = "Unlicense"

View File

@ -1,5 +1,3 @@
<require-service <daemon uri_runner>>
; configure the daemon when it is built
; (this is an artifact of the author's build system)
? <built uri_runner ?path ?hash> [