aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/modules/workstation/ui/i3/core/tools/i3-locker.nix
blob: 29052548860292556f0557104e72b412113576db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**    A utility script to lock the screen
 *
 *  This tool relies on i3lock, ./lock.png, fortune, and imagemagic to
 *  create a picture to fill all available screens
 */

{ pkgs, ... }:
with pkgs;
let
  lockIcon = "${i3lock-fancy}/share/i3lock-fancy/icons/lock.png";
  i3lock = "${i3lock}/bin/i3lock";
  mktemp = "${coreutils}/bin/mktemp";
  rm = "${coreutils}/bin/rm";
  fortuneBin = "${fortune}/bin/fortune";
  xrandrBin = "${xrandr}/bin/xrandr";
  convert = "${imagemagick}/bin/convert";
in
writeShellScript "libkookie-i3locker" ''
                 
  # Create a temp directory to work in
  TMPDIR=$(${mktemp} -d)
  BGIMAGE=$TMPDIR/lockbg.png
  FORTUNE=$(${fortuneBin} | sed -e 's/\t/    /g')
  TMPRES=$(${xrandrBin} | grep \* | cut -d' ' -f4 | sed ':a;N;$!ba;s/\n/ /g')
  RESOLUTION=$(`echo $TMP_RES | sed 's/ /\n/g'`)

  # Create a base image
  ${convert} -size 0x0 canvas:black $BGIMAGE
  
  for mon in "$(RESOLUTION[@])"
  do
    echo "Running for monitor $mon"
    TMPLOCK="$TMPDIR/tmplock.png"
    ${convert} -size "$mon" canvas:black -font Inconsolata -pointsize 18 \
               -fill white -gravity center -annotate +0+250 "$FORTUNE" \
               "${lockIcon}" -gravity center -composite "$TMPLOCK"
    
    ${convert} "$IMAGE" "$TMPLOCK" +append "$IMAGE"
    ${rm} "TMPLOCK"
  done

  # Lock the screen
  ${i3lock} -i "$IMAGE"

  # Remove all the temp images
  ${rm} -rf $TMPDIR
''