change_color.sh
    
    Bourne-Again shell script, ASCII text executable
        
            1
            #!/usr/bin/env bash 
        
            2
            # shellcheck disable=SC1090 
        
            3
            #set -x 
        
            4
            set -ueo pipefail 
        
            5
             
        
            6
            SRC_PATH="$(readlink -f "$(dirname "$0")")" 
        
            7
             
        
            8
            darker() { 
        
            9
              "$SRC_PATH/scripts/darker.sh" "$@" 
        
            10
            } 
        
            11
            mix() { 
        
            12
              "$SRC_PATH/scripts/mix.sh" "$@" 
        
            13
            } 
        
            14
            is_dark() { 
        
            15
              hexinput="$(tr '[:lower:]' '[:upper:]' <<< "$1")" 
        
            16
              half_darker="$(darker "$hexinput" 88)" 
        
            17
              [[ "$half_darker" == "000000" ]] 
        
            18
            } 
        
            19
             
        
            20
             
        
            21
            print_usage() { 
        
            22
              echo "usage: $0 [-t TARGET_DIR] [-o OUTPUT_THEME_NAME] [-p PATH_LIST] PATH_TO_PRESET" 
        
            23
              echo "examples:" 
        
            24
              # shellcheck disable=SC2028 # This is meant to be usage text. 
        
            25
              echo "       $0 -o my-theme-name <(echo -e \"ROUNDNESS=0\\nBG=d8d8d8\\nFG=101010\\nHDR_BG=3c3c3c\\nHDR_FG=e6e6e6\\nSEL_BG=ad7fa8\\nMATERIA_VIEW=ffffff\\nMATERIA_SURFACE=f5f5f5\\nMATERIA_STYLE_COMPACT=True\\n\")" 
        
            26
              echo "       $0 -t ~/.themes ../colors/retro/twg" 
        
            27
              echo "       $0 --hidpi True ../colors/retro/clearlooks" 
        
            28
              exit 1 
        
            29
            } 
        
            30
             
        
            31
             
        
            32
            while [[ "$#" -gt 0 ]]; do 
        
            33
              case "$1" in 
        
            34
                -p|--path-list) 
        
            35
                  CUSTOM_PATHLIST="$2" 
        
            36
                  shift 
        
            37
                  ;; 
        
            38
                -t|--target) 
        
            39
                  TARGET_DIR="$2" 
        
            40
                  shift 
        
            41
                  ;; 
        
            42
                -o|--output) 
        
            43
                  OUTPUT_THEME_NAME="$2" 
        
            44
                  shift 
        
            45
                  ;; 
        
            46
                -d|--hidpi) 
        
            47
                  OPTION_GTK2_HIDPI="$2" 
        
            48
                  shift 
        
            49
                  ;; 
        
            50
                -i|--inkscape) 
        
            51
                  OPTION_FORCE_INKSCAPE="$2" 
        
            52
                  shift 
        
            53
                  ;; 
        
            54
                *) 
        
            55
                  if [[ "$1" == -* ]] || [[ "${THEME-}" ]]; then 
        
            56
                    echo "unknown option $1" 
        
            57
                    print_usage 
        
            58
                    exit 2 
        
            59
                  fi 
        
            60
                  THEME="$1" 
        
            61
                  ;; 
        
            62
              esac 
        
            63
              shift 
        
            64
            done 
        
            65
             
        
            66
            if [[ -z "${THEME:-}" ]]; then 
        
            67
              print_usage 
        
            68
            fi 
        
            69
             
        
            70
            PATHLIST=( 
        
            71
              './src/_theme-color.scss' 
        
            72
              './src/chrome' 
        
            73
              './src/cinnamon' 
        
            74
              './src/cinnamon/assets' 
        
            75
              './src/gnome-shell' 
        
            76
              './src/gtk-2.0/assets.svg' 
        
            77
              './src/gtk-2.0/assets-dark.svg' 
        
            78
              './src/gtk-2.0/gtkrc' 
        
            79
              './src/gtk-2.0/gtkrc-dark' 
        
            80
              './src/gtk-2.0/gtkrc-light' 
        
            81
              './src/gtk-3.0/assets.svg' 
        
            82
              './src/metacity-1' 
        
            83
              './src/unity' 
        
            84
              './src/xfwm4' 
        
            85
            ) 
        
            86
            if [[ -n "${CUSTOM_PATHLIST:-}" ]]; then 
        
            87
              IFS=', ' read -r -a PATHLIST <<< "${CUSTOM_PATHLIST:-}" 
        
            88
            fi 
        
            89
             
        
            90
            EXPORT_QT5CT=0 
        
            91
            for FILEPATH in "${PATHLIST[@]}"; do 
        
            92
              if [[ "$FILEPATH" == *qt5ct* ]]; then 
        
            93
                EXPORT_QT5CT=1 
        
            94
              fi 
        
            95
            done 
        
            96
             
        
            97
            OPTION_GTK2_HIDPI=$(tr '[:upper:]' '[:lower:]' <<< "${OPTION_GTK2_HIDPI-False}") 
        
            98
            OPTION_FORCE_INKSCAPE=$(tr '[:upper:]' '[:lower:]' <<< "${OPTION_FORCE_INKSCAPE-True}") 
        
            99
             
        
            100
             
        
            101
            if [[ "$THEME" == */* ]] || [[ "$THEME" == *.* ]]; then 
        
            102
              source "$THEME" 
        
            103
              THEME=$(basename "$THEME") 
        
            104
            else 
        
            105
              if [[ -f "$SRC_PATH/../colors/$THEME" ]]; then 
        
            106
                source "$SRC_PATH/../colors/$THEME" 
        
            107
              else 
        
            108
                echo "Theme '$THEME' not found" 
        
            109
                exit 1 
        
            110
              fi 
        
            111
            fi 
        
            112
            if [[ $(date +"%m%d") = "0401" ]] && grep -q "no-jokes" <<< "$*"; then 
        
            113
              echo -e "\\n\\nError patching uxtheme.dll\\n\\n" 
        
            114
              BG=C0C0C0 MATERIA_SURFACE=C0C0C0 FG=000000 MATERIA_PANEL_OPACITY=1 
        
            115
              HDR_BG=C0C0C0 HDR_FG=000000 SEL_BG=000080 MATERIA_VIEW=FFFFFF 
        
            116
            fi 
        
            117
             
        
            118
            # Migration: 
        
            119
            HDR_BG=${HDR_BG-$MENU_BG} 
        
            120
            HDR_FG=${HDR_FG-$MENU_FG} 
        
            121
            MATERIA_VIEW=${MATERIA_VIEW-$TXT_BG} 
        
            122
            MATERIA_SURFACE=${MATERIA_SURFACE-$BTN_BG} 
        
            123
            GNOME_SHELL_PANEL_OPACITY=${GNOME_SHELL_PANEL_OPACITY-0.6} 
        
            124
            MATERIA_PANEL_OPACITY=${MATERIA_PANEL_OPACITY-$GNOME_SHELL_PANEL_OPACITY} 
        
            125
             
        
            126
            MATERIA_STYLE_COMPACT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_STYLE_COMPACT-False}") 
        
            127
            MATERIA_COLOR_VARIANT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_COLOR_VARIANT:-}") 
        
            128
             
        
            129
            SPACING=${SPACING-3} 
        
            130
            ROUNDNESS=${ROUNDNESS-4} 
        
            131
            # shellcheck disable=SC2034 # will this be used in the future? 
        
            132
            ROUNDNESS_GTK2_HIDPI=$(( ROUNDNESS * 2 )) 
        
            133
            MATERIA_PANEL_OPACITY=${MATERIA_PANEL_OPACITY-0.6} 
        
            134
            MATERIA_SELECTION_OPACITY=${MATERIA_SELECTION_OPACITY-0.32} 
        
            135
             
        
            136
            INACTIVE_FG=$(mix "$FG" "$BG" 0.75) 
        
            137
            INACTIVE_MATERIA_VIEW=$(mix "$MATERIA_VIEW" "$BG" 0.60) 
        
            138
             
        
            139
            TERMINAL_COLOR4=${TERMINAL_COLOR4:-1E88E5} 
        
            140
            TERMINAL_COLOR5=${TERMINAL_COLOR5:-E040FB} 
        
            141
            TERMINAL_COLOR9=${TERMINAL_COLOR9:-DD2C00} 
        
            142
            TERMINAL_COLOR10=${TERMINAL_COLOR10:-00C853} 
        
            143
            TERMINAL_COLOR11=${TERMINAL_COLOR11:-FF6D00} 
        
            144
            TERMINAL_COLOR12=${TERMINAL_COLOR12:-66BB6A} 
        
            145
             
        
            146
            TARGET_DIR=${TARGET_DIR-$HOME/.themes} 
        
            147
            OUTPUT_THEME_NAME=${OUTPUT_THEME_NAME-oomox-$THEME} 
        
            148
            DEST_PATH="$TARGET_DIR/${OUTPUT_THEME_NAME/\//-}" 
        
            149
             
        
            150
            if [[ "$SRC_PATH" == "$DEST_PATH" ]]; then 
        
            151
              echo "can't do that" 
        
            152
              exit 1 
        
            153
            fi 
        
            154
             
        
            155
             
        
            156
            tempdir=$(mktemp -d) 
        
            157
            post_clean_up() { 
        
            158
              rm -r "$tempdir" || : 
        
            159
            } 
        
            160
            trap post_clean_up EXIT SIGHUP SIGINT SIGTERM 
        
            161
            cp -r "$SRC_PATH/"* "$tempdir/" 
        
            162
            cd "$tempdir" 
        
            163
             
        
            164
             
        
            165
            # autodetection which color variant to use 
        
            166
            if [[ -z "$MATERIA_COLOR_VARIANT" ]]; then 
        
            167
              if is_dark "$BG"; then 
        
            168
                echo "== Dark background color detected. Setting color variant to dark." 
        
            169
                MATERIA_COLOR_VARIANT="dark" 
        
            170
              elif is_dark "$HDR_BG"; then 
        
            171
                echo "== Dark headerbar background color detected. Setting color variant to default." 
        
            172
                MATERIA_COLOR_VARIANT="default" 
        
            173
              else 
        
            174
                echo "== Light background color detected. Setting color variant to light." 
        
            175
                MATERIA_COLOR_VARIANT="light" 
        
            176
              fi 
        
            177
            fi 
        
            178
             
        
            179
             
        
            180
            echo "== Converting theme into template..." 
        
            181
             
        
            182
            for FILEPATH in "${PATHLIST[@]}"; do 
        
            183
              if [[ "$MATERIA_COLOR_VARIANT"  != "dark" ]]; then 
        
            184
                find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \ 
        
            185
                  -e '/color-surface/{n;s/#ffffff/%MATERIA_SURFACE%/g}' \ 
        
            186
                  -e '/color-base/{n;s/#ffffff/%MATERIA_VIEW%/g}' \ 
        
            187
                  -e 's/#8ab4f8/%SEL_BG%/g' \ 
        
            188
                  -e 's/#1967d2/%SEL_BG%/g' \ 
        
            189
                  -e 's/#000000/%FG%/g' \ 
        
            190
                  -e 's/#212121/%FG%/g' \ 
        
            191
                  -e 's/#f9f9f9/%BG%/g' \ 
        
            192
                  -e 's/#ffffff/%MATERIA_SURFACE%/g' \ 
        
            193
                  -e 's/#ffffff/%MATERIA_VIEW%/g' \ 
        
            194
                  -e 's/#424242/%HDR_BG%/g' \ 
        
            195
                  -e 's/#303030/%HDR_BG2%/g' \ 
        
            196
                  -e 's/#ffffff/%HDR_FG%/g' \ 
        
            197
                  -e 's/#c1c1c1/%INACTIVE_FG%/g' \ 
        
            198
                  -e 's/#f0f0f0/%HDR_BG%/g' \ 
        
            199
                  -e 's/#ebebeb/%HDR_BG2%/g' \ 
        
            200
                  -e 's/#1d1d1d/%HDR_FG%/g' \ 
        
            201
                  -e 's/#565656/%INACTIVE_FG%/g' \ 
        
            202
                  -e 's/Materia/%OUTPUT_THEME_NAME%/g' \ 
        
            203
                  {} \; ; 
        
            204
              else 
        
            205
                find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \ 
        
            206
                  -e 's/#8ab4f8/%SEL_BG%/g' \ 
        
            207
                  -e 's/#ffffff/%FG%/g' \ 
        
            208
                  -e 's/#eeeeee/%FG%/g' \ 
        
            209
                  -e 's/#121212/%BG%/g' \ 
        
            210
                  -e 's/#2e2e2e/%MATERIA_SURFACE%/g' \ 
        
            211
                  -e 's/#1e1e1e/%MATERIA_VIEW%/g' \ 
        
            212
                  -e 's/#272727/%HDR_BG%/g' \ 
        
            213
                  -e 's/#1e1e1e/%HDR_BG2%/g' \ 
        
            214
                  -e 's/#e4e4e4/%HDR_FG%/g' \ 
        
            215
                  -e 's/#a7a7a7/%INACTIVE_FG%/g' \ 
        
            216
                  -e 's/Materia/%OUTPUT_THEME_NAME%/g' \ 
        
            217
                  {} \; ; 
        
            218
              fi 
        
            219
            done 
        
            220
             
        
            221
            #Not implemented yet: 
        
            222
                  #-e 's/%SPACING%/'"$SPACING"'/g' \ 
        
            223
             
        
            224
            # shellcheck disable=SC2016 
        
            225
            sed -i -e 's/^$corner-radius: .px/$corner-radius: '"$ROUNDNESS"'px/g' ./src/_theme.scss 
        
            226
             
        
            227
            if [[ "${DEBUG:-}" ]]; then 
        
            228
              echo "You can debug TEMP DIR: $tempdir, press [Enter] when finished"; read -r 
        
            229
            fi 
        
            230
             
        
            231
            mv ./src/_theme-color.template.scss ./src/_theme-color.scss 
        
            232
             
        
            233
            echo "== Filling the template with the new colorscheme..." 
        
            234
            for FILEPATH in "${PATHLIST[@]}"; do 
        
            235
              find "$FILEPATH" -type f -exec sed -i'' \ 
        
            236
                -e 's/%BG%/#'"$BG"'/g' \ 
        
            237
                -e 's/%BG2%/#'"$(darker $BG)"'/g' \ 
        
            238
                -e 's/%FG%/#'"$FG"'/g' \ 
        
            239
                -e 's/%SEL_BG%/#'"$SEL_BG"'/g' \ 
        
            240
                -e 's/%SEL_BG2%/#'"$(darker $SEL_BG -20)"'/g' \ 
        
            241
                -e 's/%MATERIA_VIEW%/#'"$MATERIA_VIEW"'/g' \ 
        
            242
                -e 's/%HDR_BG%/#'"$HDR_BG"'/g' \ 
        
            243
                -e 's/%HDR_BG2%/#'"$(darker $HDR_BG 10)"'/g' \ 
        
            244
                -e 's/%HDR_BG3%/#'"$(darker $HDR_BG 20)"'/g' \ 
        
            245
                -e 's/%HDR_FG%/#'"$HDR_FG"'/g' \ 
        
            246
                -e 's/%MATERIA_SURFACE%/#'"$MATERIA_SURFACE"'/g' \ 
        
            247
                -e 's/%SPACING%/'"$SPACING"'/g' \ 
        
            248
                -e 's/%INACTIVE_FG%/#'"$INACTIVE_FG"'/g' \ 
        
            249
                -e 's/%INACTIVE_MATERIA_VIEW%/#'"$INACTIVE_MATERIA_VIEW"'/g' \ 
        
            250
                -e 's/%TERMINAL_COLOR4%/#'"$TERMINAL_COLOR4"'/g' \ 
        
            251
                -e 's/%TERMINAL_COLOR5%/#'"$TERMINAL_COLOR5"'/g' \ 
        
            252
                -e 's/%TERMINAL_COLOR9%/#'"$TERMINAL_COLOR9"'/g' \ 
        
            253
                -e 's/%TERMINAL_COLOR10%/#'"$TERMINAL_COLOR10"'/g' \ 
        
            254
                -e 's/%TERMINAL_COLOR11%/#'"$TERMINAL_COLOR11"'/g' \ 
        
            255
                -e 's/%TERMINAL_COLOR12%/#'"$TERMINAL_COLOR12"'/g' \ 
        
            256
                -e 's/%MATERIA_SELECTION_OPACITY%/'"$MATERIA_SELECTION_OPACITY"'/g' \ 
        
            257
                -e 's/%MATERIA_PANEL_OPACITY%/'"$MATERIA_PANEL_OPACITY"'/g' \ 
        
            258
                -e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \ 
        
            259
                {} \; ; 
        
            260
            done 
        
            261
             
        
            262
            if [[ "$MATERIA_COLOR_VARIANT" == "default" ]]; then 
        
            263
              COLOR_VARIANT="default" 
        
            264
              COLOR_SUFFIX="" 
        
            265
            fi 
        
            266
            if [[ "$MATERIA_COLOR_VARIANT" == "light" ]]; then 
        
            267
              COLOR_VARIANT="light" 
        
            268
              COLOR_SUFFIX="-light" 
        
            269
            fi 
        
            270
            if [[ "$MATERIA_COLOR_VARIANT" == "dark" ]]; then 
        
            271
              COLOR_VARIANT="dark" 
        
            272
              COLOR_SUFFIX="-dark" 
        
            273
            fi 
        
            274
            if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then 
        
            275
              mv ./src/gtk-2.0/main.rc.hidpi ./src/gtk-2.0/main.rc 
        
            276
            fi 
        
            277
            if [[ "$EXPORT_QT5CT" = 1 ]]; then 
        
            278
              config_home=${XDG_CONFIG_HOME:-"$HOME/.config"} 
        
            279
              qt5ct_colors_dir="$config_home/qt5ct/colors/" 
        
            280
              test -d "$qt5ct_colors_dir" || mkdir -p "$qt5ct_colors_dir" 
        
            281
              mv ./src/qt5ct_palette.conf "$qt5ct_colors_dir/$OUTPUT_THEME_NAME.conf" 
        
            282
            fi 
        
            283
             
        
            284
            if [[ "$MATERIA_STYLE_COMPACT" == "true" ]]; then 
        
            285
              SIZE_VARIANT="compact" 
        
            286
              SIZE_SUFFIX="-compact" 
        
            287
            else 
        
            288
              SIZE_VARIANT="default" 
        
            289
              SIZE_SUFFIX="" 
        
            290
            fi 
        
            291
             
        
            292
            # NOTE we use the functions we already have in render-assets.sh 
        
            293
            echo "== Rendering GTK 2 assets..." 
        
            294
            if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then 
        
            295
              FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-light 
        
            296
            else 
        
            297
              FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-dark 
        
            298
            fi 
        
            299
             
        
            300
            echo "== Rendering GTK 3 assets..." 
        
            301
            FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" ./render-assets.sh gtk 
        
            302
             
        
            303
            meson _build -Dprefix="$tempdir" -Dcolors="$COLOR_VARIANT" -Dsizes="$SIZE_VARIANT" 
        
            304
            meson install -C _build 
        
            305
            GENERATED_PATH="$tempdir/share/themes/Materia$COLOR_SUFFIX$SIZE_SUFFIX" 
        
            306
            if [[ -d "$DEST_PATH" ]]; then 
        
            307
            	rm -r "$DEST_PATH" 
        
            308
            fi 
        
            309
            mv "$GENERATED_PATH" "$DEST_PATH" 
        
            310
             
        
            311
             
        
            312
            echo 
        
            313
            echo "== SUCCESS" 
        
            314
            echo "== The theme was installed to '$DEST_PATH'" 
        
            315
            exit 0 
        
            316