fennel: extract some common functions into a shareable module
This commit is contained in:
parent
c3bb33c9ce
commit
2de4d7a8f9
7 changed files with 60 additions and 21 deletions
|
@ -1,12 +1,5 @@
|
|||
(local inotify (require :inotify))
|
||||
|
||||
(fn merge [table1 table2]
|
||||
(collect [k v (pairs table2) &into table1]
|
||||
k v))
|
||||
|
||||
(fn split [sep string]
|
||||
(icollect [v (string.gmatch string (.. "([^" sep "]+)"))]
|
||||
v))
|
||||
(local { : merge : split : file-exists? : system } (require :anoia))
|
||||
|
||||
(fn parse-prefix [str]
|
||||
(fn parse-extra [s]
|
||||
|
@ -24,12 +17,6 @@
|
|||
;;(parse-prefix "2001:8b0:de3a:40dc::/64,7198,7198")
|
||||
;;(parse-prefix "2001:8b0:de3a:1001::/64,7198,7188,excluded=1/2,thi=10")
|
||||
|
||||
|
||||
(fn file-exists? [name]
|
||||
(match (io.open name :r)
|
||||
f (do (f:close) true)
|
||||
_ false))
|
||||
|
||||
(fn read-line [name]
|
||||
(with-open [f (assert (io.open name :r) (.. "can't open file " name))]
|
||||
(f:read "*l")))
|
||||
|
@ -80,9 +67,6 @@
|
|||
(table.insert deleted (parse-prefix prefix))))
|
||||
(values added deleted)))
|
||||
|
||||
;;(fn execute [s] (do (print s) true))
|
||||
(fn execute [s] (assert (os.execute s)))
|
||||
|
||||
(let [[state-directory lan-device] arg
|
||||
dir (watch-directory state-directory)]
|
||||
(var prefixes [])
|
||||
|
@ -92,10 +76,10 @@
|
|||
(let [new-prefixes (split " " (dir:read-line "/prefixes"))
|
||||
(added deleted) (changes prefixes new-prefixes)]
|
||||
(each [_ p (ipairs added)]
|
||||
(execute
|
||||
(system
|
||||
(.. "ip address add " p.prefix "::1/" p.len " dev " lan-device)))
|
||||
(each [_ p (ipairs deleted)]
|
||||
(execute
|
||||
(system
|
||||
(.. "ip address del " p.prefix "::1/" p.len " dev " lan-device)))
|
||||
(set prefixes new-prefixes)))
|
||||
(dir:wait-events)))
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{
|
||||
writeFennelScript
|
||||
, linotify
|
||||
, anoia
|
||||
}:
|
||||
writeFennelScript "acquire-delegated-prefix"
|
||||
[ linotify ]
|
||||
[ linotify anoia ]
|
||||
./acquire-delegated-prefix.fnl
|
||||
|
|
14
pkgs/anoia/README
Normal file
14
pkgs/anoia/README
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
In Terry Pratchett's Discworld novels, Anoi is a minor goddess of Things That Stick In Drawers
|
||||
|
||||
> Often, but not uniquely, a ladle, but sometimes a metal spatula or,
|
||||
> rarely, a mechanical egg-whisk that nobody in the house admits to
|
||||
> ever buying. The desperate mad rattling and cries of ‘How can it
|
||||
> close on the damn thing but not open with it? Who bought this? Do we
|
||||
> ever use it?’ is as praise unto Anoia. She also eats corkscrews.
|
||||
|
||||
This is a library of miscellaneous Fennel code used in Liminix that is
|
||||
shared between various scripts but doesn't really fit together. It is
|
||||
not a public stable interface - while any Liminix code is welcome to
|
||||
use it, it's suject to reshuffle, rearrangement, refactor or rejection
|
||||
without notice.
|
19
pkgs/anoia/default.nix
Normal file
19
pkgs/anoia/default.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
fennel
|
||||
, stdenv
|
||||
, lua
|
||||
}:
|
||||
let pname = "anoia";
|
||||
in stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
version = "0.1";
|
||||
src = ./.;
|
||||
nativeBuildInputs = [ fennel ];
|
||||
buildPhase = ''
|
||||
fennel --compile init.fnl > init.lua
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p "$out/share/lua/${lua.luaversion}/${pname}"
|
||||
cp *.lua "$out/share/lua/${lua.luaversion}/${pname}"
|
||||
'';
|
||||
}
|
16
pkgs/anoia/init.fnl
Normal file
16
pkgs/anoia/init.fnl
Normal file
|
@ -0,0 +1,16 @@
|
|||
(fn merge [table1 table2]
|
||||
(collect [k v (pairs table2) &into table1]
|
||||
k v))
|
||||
|
||||
(fn split [sep string]
|
||||
(icollect [v (string.gmatch string (.. "([^" sep "]+)"))]
|
||||
v))
|
||||
|
||||
(fn file-exists? [name]
|
||||
(match (io.open name :r)
|
||||
f (do (f:close) true)
|
||||
_ false))
|
||||
|
||||
(fn system [s] (assert (os.execute s)))
|
||||
|
||||
{ : merge : split : file-exists? : system }
|
|
@ -58,4 +58,5 @@
|
|||
odhcp-script = callPackage ./odhcp-script {};
|
||||
fennel = callPackage ./fennel {};
|
||||
fennelrepl = callPackage ./fennelrepl {};
|
||||
anoia = callPackage ./anoia {};
|
||||
}
|
||||
|
|
|
@ -6,7 +6,11 @@
|
|||
}:
|
||||
name : packages : source :
|
||||
let
|
||||
luapath = builtins.map (f: "${f}/share/lua/${lua.luaversion}/?.lua;") packages;
|
||||
luapath = builtins.map
|
||||
(f:
|
||||
"${f}/share/lua/${lua.luaversion}/?.lua;" +
|
||||
"${f}/share/lua/${lua.luaversion}/?/init.lua;")
|
||||
packages;
|
||||
luacpath = builtins.map (f: "${f}/lib/lua/${lua.luaversion}/?.so;") packages;
|
||||
in stdenv.mkDerivation {
|
||||
inherit name;
|
||||
|
|
Loading…
Reference in a new issue