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))
|
(local inotify (require :inotify))
|
||||||
|
(local { : merge : split : file-exists? : system } (require :anoia))
|
||||||
(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 parse-prefix [str]
|
(fn parse-prefix [str]
|
||||||
(fn parse-extra [s]
|
(fn parse-extra [s]
|
||||||
|
@ -24,12 +17,6 @@
|
||||||
;;(parse-prefix "2001:8b0:de3a:40dc::/64,7198,7198")
|
;;(parse-prefix "2001:8b0:de3a:40dc::/64,7198,7198")
|
||||||
;;(parse-prefix "2001:8b0:de3a:1001::/64,7198,7188,excluded=1/2,thi=10")
|
;;(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]
|
(fn read-line [name]
|
||||||
(with-open [f (assert (io.open name :r) (.. "can't open file " name))]
|
(with-open [f (assert (io.open name :r) (.. "can't open file " name))]
|
||||||
(f:read "*l")))
|
(f:read "*l")))
|
||||||
|
@ -80,9 +67,6 @@
|
||||||
(table.insert deleted (parse-prefix prefix))))
|
(table.insert deleted (parse-prefix prefix))))
|
||||||
(values added deleted)))
|
(values added deleted)))
|
||||||
|
|
||||||
;;(fn execute [s] (do (print s) true))
|
|
||||||
(fn execute [s] (assert (os.execute s)))
|
|
||||||
|
|
||||||
(let [[state-directory lan-device] arg
|
(let [[state-directory lan-device] arg
|
||||||
dir (watch-directory state-directory)]
|
dir (watch-directory state-directory)]
|
||||||
(var prefixes [])
|
(var prefixes [])
|
||||||
|
@ -92,10 +76,10 @@
|
||||||
(let [new-prefixes (split " " (dir:read-line "/prefixes"))
|
(let [new-prefixes (split " " (dir:read-line "/prefixes"))
|
||||||
(added deleted) (changes prefixes new-prefixes)]
|
(added deleted) (changes prefixes new-prefixes)]
|
||||||
(each [_ p (ipairs added)]
|
(each [_ p (ipairs added)]
|
||||||
(execute
|
(system
|
||||||
(.. "ip address add " p.prefix "::1/" p.len " dev " lan-device)))
|
(.. "ip address add " p.prefix "::1/" p.len " dev " lan-device)))
|
||||||
(each [_ p (ipairs deleted)]
|
(each [_ p (ipairs deleted)]
|
||||||
(execute
|
(system
|
||||||
(.. "ip address del " p.prefix "::1/" p.len " dev " lan-device)))
|
(.. "ip address del " p.prefix "::1/" p.len " dev " lan-device)))
|
||||||
(set prefixes new-prefixes)))
|
(set prefixes new-prefixes)))
|
||||||
(dir:wait-events)))
|
(dir:wait-events)))
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
{
|
{
|
||||||
writeFennelScript
|
writeFennelScript
|
||||||
, linotify
|
, linotify
|
||||||
|
, anoia
|
||||||
}:
|
}:
|
||||||
writeFennelScript "acquire-delegated-prefix"
|
writeFennelScript "acquire-delegated-prefix"
|
||||||
[ linotify ]
|
[ linotify anoia ]
|
||||||
./acquire-delegated-prefix.fnl
|
./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 {};
|
odhcp-script = callPackage ./odhcp-script {};
|
||||||
fennel = callPackage ./fennel {};
|
fennel = callPackage ./fennel {};
|
||||||
fennelrepl = callPackage ./fennelrepl {};
|
fennelrepl = callPackage ./fennelrepl {};
|
||||||
|
anoia = callPackage ./anoia {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,11 @@
|
||||||
}:
|
}:
|
||||||
name : packages : source :
|
name : packages : source :
|
||||||
let
|
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;
|
luacpath = builtins.map (f: "${f}/lib/lua/${lua.luaversion}/?.so;") packages;
|
||||||
in stdenv.mkDerivation {
|
in stdenv.mkDerivation {
|
||||||
inherit name;
|
inherit name;
|
||||||
|
|
Loading…
Reference in a new issue