From ea2cd7dacfdad7d853547cb150c156a4acfd811b Mon Sep 17 00:00:00 2001
From: dvs1
Date: Sat, 19 Oct 2024 16:00:24 +1000
Subject: Add users script for post JACK setup, like starting music stuff.
---
.aataaj_JACK.lua | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
aataaj.lua | 5 +++
2 files changed, 137 insertions(+)
create mode 100755 .aataaj_JACK.lua
diff --git a/.aataaj_JACK.lua b/.aataaj_JACK.lua
new file mode 100755
index 0000000..b8b32a2
--- /dev/null
+++ b/.aataaj_JACK.lua
@@ -0,0 +1,132 @@
+#!/usr/bin/env luajit
+
+-- An example users .aataaj_JACK.lua script that just starts qsynth.
+
+
+-- Most of this APT stuff was copied from apt-panopticon.
+local APT = {}
+
+APT.readCmd = function(cmd)
+ local result = {}
+ local output = io.popen(cmd)
+ if nil ~= output then
+ for l in output:lines() do
+ table.insert(result, l)
+ end
+ end
+ return result
+end
+
+
+APT.exe = function(c)
+ local exe = {status = 0, result = '', lines = {}, log = true, cmd = c .. ' ', command = c}
+
+ function exe:log()
+ self.log = true
+ return self
+ end
+ function exe:Nice(c)
+ if nil == c then
+ self.cmd = 'ionice -c3 nice -n 19 ' .. self.cmd
+ else
+ self.cmd = self.cmd .. 'ionice -c3 nice -n 19 ' .. c .. ' '
+ end
+ return self
+ end
+ function exe:timeout(c)
+ -- timeout returns a status of - command status if --preserve-status; "128+9" (actually 137) if --kill-after ends up being done; 124 if it had to TERM; command status if all went well.
+ -- --kill-after means "send KILL after TERM fails.
+ if nil == c then
+ self.cmd = 'timeout --kill-after=10.0 --foreground 42.0s ' .. self.cmd
+ else
+ self.cmd = 'timeout --kill-after=10.0 --foreground ' .. c .. ' ' .. self.cmd
+ end
+ return self
+ end
+ function exe:also(c)
+ if nil == c then c = '' else c = ' ' .. c end
+ self.cmd = self.cmd .. ';' .. c .. ' '
+ return self
+ end
+ function exe:And(c)
+ if nil == c then c = '' else c = ' ' .. c end
+ self.cmd = self.cmd .. '&&' .. c .. ' '
+ return self
+ end
+ function exe:Or(c)
+ if nil == c then c = '' end
+ self.cmd = self.cmd .. '|| ' .. c .. ' '
+ return self
+ end
+ function exe:noErr()
+ self.cmd = self.cmd .. '2>/dev/null '
+ return self
+ end
+ function exe:wait(w)
+ self.cmd = self.cmd .. '&& touch ' .. w .. ' '
+ return self
+ end
+ function exe:Do()
+ --[[ "The condition expression of a control structure can return any
+ value. Both false and nil are considered false. All values different
+ from nil and false are considered true (in particular, the number 0
+ and the empty string are also true)."
+ says the docs, I beg to differ.]]
+ if true == self.log then D(" executing - " .. self.cmd .. "
") end
+ --[[ Damn os.execute()
+ Lua 5.1 says it returns "a status code, which is system-dependent"
+ Lua 5.2 says it returns true/nil, "exit"/"signal", the status code.
+ I'm getting 7168 or 0. No idea what the fuck that is.
+ local ok, rslt, status = os.execute(s)
+ ]]
+ local f = APT.readCmd(self.cmd, 'r')
+ -- The last line will be the command's returned status, collect everything else in result.
+ self.status = '' -- Otherwise the result starts with 0.
+ self.result = '\n'
+ self.lines = f
+ for i,l in ipairs(f) do
+ self.result = self.result .. l .. "\n"
+ end
+ f = APT.readCmd('echo "$?"', 'r')
+ for i,l in ipairs(f) do
+ self.status = tonumber(l)
+ if (137 == self.status) or (124 == self.status) then
+ print("timeout killed " .. self.status .. ' ' .. self.command)
+ E("timeout killed " .. self.status .. ' ' .. self.command)
+ elseif (0 ~= self.status) then
+ print("status |" .. self.status .. '| ' .. self.command)
+ E("status |" .. self.status .. '| ' .. self.command)
+ end
+ end
+ return self
+ end
+ function exe:fork(host)
+ if nil ~= host then self.cmd = self.cmd .. '; r=$?; if [ $r -ge 124 ]; then echo "$r ' .. host .. ' failed forked command ' .. string.gsub(self.cmd, '"', "'") .. '"; fi' end
+ self.cmd = '{ ' .. self.cmd .. '; } &'
+ if true == self.log then D(" forking - " .. self.cmd .. "
") end
+ os.execute(self.cmd)
+ return self
+ end
+ return exe
+end
+
+APT.exists = function(c)
+ if 0 == APT.exe('which ' .. c):Do().status then return true end
+ return false
+end
+
+APT.killEmAll = function(all)
+ for i,l in ipairs(all) do
+ local c = 0
+ while 0 ~= tonumber(APT.exe("pgrep -u $USER -xc " .. l):Do().result) do
+ local s = 'TERM'
+ if c > 0 then s = 'KILL'; APT.exe("sleep " .. c):Do() end
+ print( "pkill -" .. s .. " -u $USER -x " .. l)
+ APT.exe("pkill -" .. s .. " -u $USER -x " .. l):Do()
+ c = c + 1
+ end
+ end
+end
+
+
+if APT.exists('qsynth') then APT.exe('qsynth'):fork() end
diff --git a/aataaj.lua b/aataaj.lua
index 5ba719b..5cc9423 100755
--- a/aataaj.lua
+++ b/aataaj.lua
@@ -567,4 +567,9 @@ elseif 'JACK' == args[1] then
APT.exe('sleep 4'):Do()
APT.killEmAll{"jack-plumbing"}
end
+
+ if APT.exists('~/.aataaj_JACK.lua') then
+ print('Running users aataaj_JACK.lua')
+ APT.exe('~/.aataaj_JACK.lua'):Do()
+ end
end
--
cgit v1.1