aboutsummaryrefslogtreecommitdiffstats
path: root/src/bash_completion/firejail.bash_completion.in
blob: 4829f1fdebbc49fdbad74eb2312d763728cfdf3f (plain) (blame)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# bash completion for firejail                            -*- shell-script -*-
#********************************************************************
# Script based on completions/configure script in bash-completion package in
# Debian. The original package is release under GPL v2 license, the webpage is
# http://bash-completion.alioth.debian.org
#*******************************************************************

__interfaces() {
    cut -f 1 -d ':' /proc/net/dev | tail -n +3 | grep -v lo | xargs
}

_profiles() {
    if [[ -d "$1" ]] ; then
        ls -1 $1/*.profile 2>/dev/null | sed -E 's;^.*\/;;g'
    fi
}
_all_profiles() {
    local sys_profiles=$(_profiles _SYSCONFDIR_/firejail)
    local user_profiles=$(_profiles $HOME/.config/firejail)
    COMPREPLY=($(compgen -W "${sys_profiles} ${user_profiles}" -- "$cur"))
}


_firejail()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        --help|--version|-debug-caps|--debug-syscalls|--debug-syscalls32|--list|--tree|--top|--join|--shutdown)
            return 0
            ;;
        --profile)
            _all_profiles
            return 0
            ;;
        --hosts-file)
            _filedir
            return 0
            ;;
        --chroot)
            _filedir -d
            return 0
            ;;
        --landlock.read)
            _filedir
            return 0
            ;;
        --landlock.write)
            _filedir
            return 0
            ;;
        --landlock.special)
            _filedir
            return 0
            ;;
        --landlock.execute)
            _filedir
            return 0
            ;;
        --tmpfs)
            _filedir
            return 0
            ;;
        --blacklist)
            _filedir
            return 0
            ;;
        --noblacklist)
            _filedir
            return 0
            ;;
        --whitelist)
            _filedir
            return 0
            ;;
        --nowhitelist)
            _filedir
            return 0
            ;;
       --read-only)
            _filedir
            return 0
            ;;
       --read-write)
            _filedir
            return 0
            ;;
        --bind)
            _filedir
            return 0
            ;;
        --private)
            _filedir
            return 0
            ;;
        --netfilter)
            _filedir
            return 0
            ;;
        --shell)
            _filedir
            return 0
            ;;
        --net)
            comps=$(__interfaces)
            COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
            return 0
            ;;
    esac

    $split && return 0

    # if $COMP_CONFIGURE_HINTS is not null, then completions of the form
    # --option=SETTING will include 'SETTING' as a contextual hint
    [[ "$cur" != -* ]] && _command && return 0

    if [[ -n $COMP_CONFIGURE_HINTS ]]; then
        COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
            awk '/^  --[A-Za-z]/ { print $1; \
            if ($2 ~ /--[A-Za-z]/) print $2 }' | sed -e 's/[[,].*//g' )" \
            -- "$cur" ) )
        [[ $COMPREPLY == *=* ]] && compopt -o nospace
    else
        COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
        [[ $COMPREPLY == *= ]] && compopt -o nospace
    fi

} &&
complete -F _firejail firejail