saturnin-iam 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #!/bin/bash
  2. . $(ffoom path)
  3. ffoo import inigrep
  4. ffoo import pretty
  5. ffoo import sync
  6. ffoo import saturnin_common
  7. ffoo import saturnin_zleep
  8. #
  9. # self help
  10. #
  11. available_commands() {
  12. echo afk
  13. echo at
  14. echo back
  15. echo gone
  16. echo ooo
  17. echo wfh
  18. echo undocking
  19. echo zleeping
  20. }
  21. usage() {
  22. cmd_hint=$(
  23. available_commands \
  24. | head -c -1 \
  25. | tr '\n' '|'
  26. )
  27. mkusage "$cmd_hint"
  28. }
  29. #
  30. # querying
  31. #
  32. where_i_am() {
  33. #
  34. # what is my physical location?
  35. #
  36. if=$(inigrep -p iam.using.if)
  37. gwmac=$(arp | grep "^gateway\\>.*\\<$if\$" | tr ' ' '\n' | grep :)
  38. inigrep -p iam.seeing.gw.$gwmac || echo OUT
  39. }
  40. set_status() {
  41. #
  42. # set public status $1 by command in conf file
  43. #
  44. local what=$1
  45. saturnin_runhook say_$what
  46. saturnin_runhook log_$what
  47. }
  48. #
  49. # hooks
  50. #
  51. run_hook() {
  52. local name=$1
  53. local cmd=$2
  54. local arg=$3
  55. inigrep -p iam.hooking.$name.$cmd \
  56. | SATURNIN_IAM_CMD=$cmd \
  57. SATURNIN_IAM_ARG=$arg \
  58. bash
  59. }
  60. #
  61. # subcommand handlers
  62. #
  63. i_am_afk() {
  64. #
  65. # away from keyboard; blocks until i'm back again
  66. #
  67. mocp --pause
  68. set_status "afk"
  69. saturnin kb home # make sure to set lang to default before locking
  70. slock
  71. set_status "atk"
  72. }
  73. i_am_at() {
  74. #
  75. # Just say where I am
  76. #
  77. where_i_am
  78. }
  79. i_am_back() {
  80. #
  81. # returning to work (should be called by other subcommands)
  82. #
  83. set_status "back"
  84. klist -s || urxvt -e kinit
  85. }
  86. i_am_gone() {
  87. #
  88. # gone fishin'
  89. #
  90. kdestroy
  91. ssh-add -D
  92. set_status "gone"
  93. i_am_afk
  94. i_am_back
  95. }
  96. i_am_ooo() {
  97. #
  98. # too dangerous to implement
  99. #
  100. die "not implemented"
  101. }
  102. i_am_wfh() {
  103. #
  104. # too dangerous to implement
  105. #
  106. die "not implemented"
  107. }
  108. i_am_undocking() {
  109. #
  110. # i.e. hibernated
  111. #
  112. inigrep -p iam.undocking.like | bash -
  113. }
  114. i_am_zleeping() {
  115. #
  116. # i.e. hibernated
  117. #
  118. set_status "zleeping"
  119. zleep
  120. i_am_back
  121. }
  122. cmd=$1
  123. test -n "$cmd" || usage
  124. available_commands | grep -qse ^$1 || usage
  125. shift
  126. run_hook before $cmd $1
  127. i_am_$cmd $1
  128. run_hook after $cmd $1