saturnin-iam 2.1KB

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