summaryrefslogtreecommitdiffstats
path: root/lass/2configs/xdg-open.nix
blob: 88ea7ba59aa8e899da76b0d61686a7f923fd3298 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
{ config, pkgs, lib, ... }: with import <stockholm/lib>; let

  xdg-open-wrapper = pkgs.writeDashBin "xdg-open" ''
    /run/wrappers/bin/sudo -u lass ${xdg-open} "$@"
  '';

  xdg-open = pkgs.writeBash "xdg-open" ''
    set -e
    FILE="$1"
    mime=

    case "$FILE" in
      http://*|https://*)
        mime=text/html
        ;;
      mailto:*)
        mime=special/mailaddress
        ;;
      magnet:*)
        mime=application/x-bittorrent
        ;;
      irc:*)
        mime=x-scheme-handler/irc
        ;;
      *)
        # it’s a file

        # strip possible protocol
        FILE=''${FILE#file://}
        mime=''$(file -E --brief --mime-type "$FILE") \
          || (echo "$mime" 1>&2; exit 1)
          # ^ echo the error message of file
        ;;
    esac

    case "$mime" in
      special/mailaddress)
        urxvtc --execute vim "$FILE" ;;
      ${optionalString (hasAttr "browser" config.lass) ''
      text/html)
        ${config.lass.browser.select}/bin/browser-select "$FILE" ;;
      text/xml)
        ${config.lass.browser.select}/bin/browser-select "$FILE" ;;
      ''}
      text/*)
        urxvtc --execute vim "$FILE" ;;
      image/*)
        sxiv "$FILE" ;;
      application/x-bittorrent)
        env DISPLAY=:0 transgui "$FILE" ;;
      application/pdf)
        zathura "$FILE" ;;
      inode/directory)
        sudo -u lass -i urxvtc --execute mc "$FILE" ;;
      *)
        # open dmenu and ask for program to open with
        $(dmenu_path | dmenu) "$FILE";;
    esac
  '';
in {
  environment.systemPackages = [ xdg-open-wrapper ];

  security.sudo.extraConfig = ''
    cr ALL=(lass) NOPASSWD: ${xdg-open} *
    ff ALL=(lass) NOPASSWD: ${xdg-open} *
  '';
}