summaryrefslogtreecommitdiff
path: root/scripts/Scripts/setwall
blob: 2a99564ef90f5d0eeef37401491c83d6d0c07a9e (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
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/usr/bin/env bash

DEFPATH="$HOME/Pictures/defaultWall"
WALLFILE="$HOME/Pictures/wallconfig"
WALLLINK="$HOME/Pictures/current_wall"
BINNAME="setwall"

function unsetwalls() {
    echo unsetting $@
    for wall in $@; do
        sed -i.bak "/$wall/d" $WALLFILE
    done
}
function delete() {
    echo deleting wallfile
    rm $WALLFILE
}
function unsetall() {
    echo clearing wallfile
    echo -n > $WALLFILE
}

function setwalls() {
    for wall in $@; do
        if grep -q $wall "$WALLFILE"; then
            echo $wall already set
        else
            echo setting $wall
            echo $wall >> $WALLFILE
        fi
    done
}

function applywall() {
    set -x
    echo applying wallpaper $1
    rm $WALLLINK
    ln -s $(pwd)/$1 $WALLLINK
    if [ -z "${WAYLAND_DISPLAY}" ]; then
        feh --bg-fill $1
    else
        killall swaybg
        swaybg -m fill -i $1 &
    fi
}

function help() {
    echo "Wallpaper mangement script"
    echo
    echo "Syntax: ${BINNAME} OPTIONS"
    echo "options:"
    echo "  -A, --apply                     applies a random wallpaper"
    echo "  -S, --set FILES                 sets new wallpapers"
    echo "  -U, --unset [OPTIONS] [FILES]   unsets new wallpapers"
    echo "  -P, --preview FILE              temporarily sets a wallpaper"
    echo "  -h, --help                      this message"
    echo
    echo "unset options:"
    echo "  -a, --all                       clears wallconfig file"
    echo "  -d, --delete                    deleted wallconfig file"
}

function unknown() {
    echo "${BINNAME}: unknown option $1" 1>&2
    exit 1
}

if [[ $# -eq 0 ]]; then
    echo "${BINNAME}: no arguments given" 1>&2
    help
    exit 1
fi

mode="N"
pos=""

while [[ $# -gt 0 ]]; do
    keys="$1"
    # If $1 does is single - argument
    if [[ $1 == '-'* ]] && [[ ! $1 == '--'* ]] ; then
        # Remove first -
        keys=${keys#?}
        # Place space between each character
        keys=$(echo $keys | sed 's/./-& /g')
    fi

    for key in $keys; do
        case $mode in 
            U)
                case $key in
                    -a|--all)
                    unsetall
                    exit 0
                    ;;
                -d|--delete)
                    delete
                    exit 0
                    ;;
                '-'*|'--'*)
                    unknown $key
                    ;;
                *)
                    pos="$pos $key"
                    shift
                    ;;
                esac
                ;;
            S)
                pos="$pos $key"
                shift
                ;;
            *)
            case $key in
                -A|--apply)
                    applywall $(shuf -n 1 $WALLFILE)
                    exit 0
                    ;;
                -U|--unset)
                    mode="U"
                    shift
                    ;;
                -S|--set)
                    mode="S"
                    shift
                    ;;
                -P|--preview)
                    applywall $2
                    exit 0
                    ;;
                -h|--help)
                    help
                    shift
                    exit 0
                    ;;
                *)
                    unknown $key
                    ;;
            esac
            ;;
        esac
    done
done

case $mode in
    U)
        unsetwalls $pos
        ;;
    S)
        setwalls $pos
        ;;
esac