├── .gitignore ├── src ├── icon.png ├── imgicon.sh ├── foldicon.sh ├── notificator └── info.plist ├── public ├── no_trim.webp ├── log_simple.webp ├── schema_trim.webp ├── trigger1_1.webp ├── trigger1_2.webp ├── trigger2_1.webp ├── universal1.webp ├── universal2.webp ├── alfred_buffer1.webp ├── alfred_buffer2.webp ├── big_sur_dark.webp ├── big_sur_light.webp ├── icon_dark_mode.webp ├── log_detailed.webp └── icon_light_mode.webp ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | **/.DS_Store 3 | src/prefs.plist -------------------------------------------------------------------------------- /src/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/src/icon.png -------------------------------------------------------------------------------- /public/no_trim.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/no_trim.webp -------------------------------------------------------------------------------- /public/log_simple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/log_simple.webp -------------------------------------------------------------------------------- /public/schema_trim.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/schema_trim.webp -------------------------------------------------------------------------------- /public/trigger1_1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/trigger1_1.webp -------------------------------------------------------------------------------- /public/trigger1_2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/trigger1_2.webp -------------------------------------------------------------------------------- /public/trigger2_1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/trigger2_1.webp -------------------------------------------------------------------------------- /public/universal1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/universal1.webp -------------------------------------------------------------------------------- /public/universal2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/universal2.webp -------------------------------------------------------------------------------- /public/alfred_buffer1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/alfred_buffer1.webp -------------------------------------------------------------------------------- /public/alfred_buffer2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/alfred_buffer2.webp -------------------------------------------------------------------------------- /public/big_sur_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/big_sur_dark.webp -------------------------------------------------------------------------------- /public/big_sur_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/big_sur_light.webp -------------------------------------------------------------------------------- /public/icon_dark_mode.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/icon_dark_mode.webp -------------------------------------------------------------------------------- /public/log_detailed.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/log_detailed.webp -------------------------------------------------------------------------------- /public/icon_light_mode.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BenjaminOddou/alfred-folderify/HEAD/public/icon_light_mode.webp -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023-present Benjamin Oddou 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/imgicon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | 3 | function handle_error { 4 | source ./notificator --title "🚨 Error" --message "An error occurred! Exiting script.." --sound "$sound" 5 | exit 1 6 | } 7 | 8 | trap "handle_error" ERR 9 | 10 | (source ./notificator --title "⏳ Please wait..." --message "The workflow is generating icons" --sound "$sound") & 11 | declare -A info_scheme 12 | info_scheme=([""]="Auto 🌓" ["--color-scheme dark"]="Dark 🌑" ["--color-scheme light"]="Light 🌕") 13 | echo "🎨 Color scheme : $(echo $info_scheme[$color_scheme])" 14 | declare -A info_bool 15 | info_bool=(["0"]="No 👎" ["1"]="Yes 👍") 16 | declare -A value_margins 17 | value_margins=(["0"]="--no-trim" ["1"]="") 18 | echo "✂️ Trim margins : $(echo $info_bool[$trim_margins])" 19 | declare -A value_output 20 | value_output=(["0"]="" ["1"]="--verbose") 21 | echo "📃 Detailed Logs : $(echo $info_bool[$verbose])" 22 | 23 | MASKS=(${(s/ /)_masks_list}) # split by tab 24 | PARAMS=$(awk '{$1=$1};NF' <<< "$folder_icon_style $color_scheme $value_margins[$trim_margins] $value_output[$verbose]") 25 | 26 | for MASK in "${MASKS[@]}"; do 27 | if [[ $MASK = *.png ]]; then 28 | echo "\nfolderify $PARAMS \"$MASK\"" 29 | 2>&1 eval "folderify $PARAMS \"$MASK\"" 30 | fi 31 | done 32 | 33 | if [[ $workflow_action = "_notif" ]];then 34 | source ./notificator --title "⌛ Finished" --message "Process completed. You can check the log file" --sound "$sound" 35 | fi -------------------------------------------------------------------------------- /src/foldicon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | 3 | function handle_error { 4 | source ./notificator --title "🚨 Error" --message "An error occurred! Exiting script.." --sound "$sound" 5 | exit 1 6 | } 7 | 8 | trap "handle_error" ERR 9 | 10 | (source ./notificator --title "⏳ Please wait..." --message "The workflow is generating icons" --sound "$sound") & 11 | declare -A info_scheme 12 | info_scheme=([""]="Auto 🌓" ["--color-scheme dark"]="Dark 🌑" ["--color-scheme light"]="Light 🌕") 13 | echo "🎨 Color scheme : $(echo $info_scheme[$color_scheme])" 14 | declare -A info_bool 15 | info_bool=(["0"]="No 👎" ["1"]="Yes 👍") 16 | declare -A value_margins 17 | value_margins=(["0"]="--no-trim" ["1"]="") 18 | echo "✂️ Trim margins : $(echo $info_bool[$trim_margins])" 19 | declare -A value_output 20 | value_output=(["0"]="" ["1"]="--verbose") 21 | echo "📃 Detailed Logs : $(echo $info_bool[$verbose])" 22 | 23 | FOLDERS=(${(s/ /)_folders_list}) # split by tab 24 | PARAMS=$(awk '{$1=$1};NF' <<< "$folder_icon_style $color_scheme $value_margins[$trim_margins] $value_output[$verbose]") 25 | 26 | for FOLDER in "${FOLDERS[@]}"; do 27 | if [[ -d "$FOLDER" ]]; then 28 | echo "\nfolderify $PARAMS \"$1\" \"$FOLDER\"" 29 | 2>&1 eval "folderify $PARAMS \"$1\" \"$FOLDER\"" 30 | fi 31 | done 32 | 33 | if [[ $workflow_action = "_notif" ]];then 34 | source ./notificator --title "⌛ Finished" --message "Process completed. You can check the log file" --sound "$sound" 35 | fi -------------------------------------------------------------------------------- /src/notificator: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | 3 | #################################################### 4 | ### Created by Vítor Galvão ### 5 | ### Find the latest version at: ### 6 | ### https://github.com/vitorgalvao/notificator ### 7 | #################################################### 8 | 9 | readonly program="$(basename "${0}")" 10 | 11 | # Helpers 12 | function show_notification { 13 | /usr/bin/open "${app}" --args "${notificator_message}" "${notificator_title}" "${notificator_subtitle}" "${notificator_sound}" 14 | } 15 | 16 | function make_icns { 17 | # Setup 18 | local -r file="${1}" 19 | local -r tmp_dir="$(/usr/bin/mktemp -d)" 20 | local -r icon="${tmp_dir}/icon.icns" 21 | local -r iconset="${tmp_dir}/icon.iconset" 22 | /bin/mkdir "${iconset}" 23 | 24 | # Create iconset 25 | for size in {16,32,64,128,256,512}; do 26 | /usr/bin/sips --resampleHeightWidth "${size}" "${size}" "${file}" --out "${iconset}/icon_${size}x${size}.png" &> /dev/null 27 | /usr/bin/sips --resampleHeightWidth "$((size * 2))" "$((size * 2))" "${file}" --out "${iconset}/icon_${size}x${size}@2x.png" &> /dev/null 28 | done 29 | 30 | # Convert to icns 31 | /usr/bin/iconutil --convert icns "${iconset}" --output "${icon}" 32 | 33 | # Clean up and return path to icns 34 | /bin/rm -rf "${iconset}" 35 | echo "${icon}" 36 | } 37 | 38 | function usage { 39 | echo " 40 | Trigger macOS notifications from Alfred, using the Workflow icon 41 | 42 | Usage: 43 | ${program} --message [options] 44 | 45 | Options: 46 | -m, --message Message text 47 | -t, --title Title text 48 | -s, --subtitle Subtitle text 49 | -p, --sound Sound name (from /System/Library/Sounds) 50 | -h, --help Show this help 51 | " | sed -E 's/^ {4}//' 52 | } 53 | 54 | # Options 55 | args=() 56 | while [[ "${1}" ]]; do 57 | case "${1}" in 58 | -h | --help) 59 | usage 60 | exit 0 61 | ;; 62 | -m | --message) 63 | readonly notificator_message="${2}" 64 | shift 65 | ;; 66 | -t | --title) 67 | readonly notificator_title="${2}" 68 | shift 69 | ;; 70 | -s | --subtitle) 71 | readonly notificator_subtitle="${2}" 72 | shift 73 | ;; 74 | -p | --sound) 75 | readonly notificator_sound="${2}" 76 | shift 77 | ;; 78 | --) 79 | shift 80 | args+=("${@}") 81 | break 82 | ;; 83 | -*) 84 | echo "Unrecognised option: ${1}" 85 | exit 1 86 | ;; 87 | *) 88 | args+=("${1}") 89 | ;; 90 | esac 91 | shift 92 | done 93 | set -- "${args[@]}" 94 | 95 | # Check for required arguments 96 | if [[ -z "${notificator_message}" ]]; then 97 | echo 'A message is mandatory! Aborting…' >&2 98 | exit 1 99 | fi 100 | 101 | readonly bundle_id="$(tr -cd '[:alnum:]._-' <<< "${alfred_workflow_bundleid}")" 102 | readonly name="$(tr -cd '[:alnum:]._- ' <<< "${alfred_workflow_name}")" 103 | readonly icon="${alfred_preferences}/workflows/${alfred_workflow_uid}/icon.png" 104 | readonly app="${alfred_workflow_cache}/Notificator for ${name}.app" 105 | readonly plist="${app}/Contents/Info.plist" 106 | 107 | # Exit early if Notificator exists and was modified fewer than 30 days ago 108 | if [[ -e "${app}" && -n "$(find "${app}" -depth 0 -mtime -30)" ]]; then 109 | show_notification 110 | exit 0 111 | fi 112 | 113 | # Pre-build checks 114 | if [[ -z "${bundle_id}" ]]; then 115 | echo "Workflow is missing the bundle identifier! Aborting…" >&2 116 | exit 1 117 | fi 118 | 119 | if [[ -z "${name}" ]]; then 120 | echo "Workflow is missing the name! Aborting…" >&2 121 | exit 1 122 | fi 123 | 124 | if [[ ! -f "${icon}" ]]; then 125 | echo "Workflow is missing the icon! Aborting…" >&2 126 | exit 1 127 | fi 128 | 129 | # Build Notificator 130 | readonly jxa_script=' 131 | // Build argv/argc in a way that can be used from the applet inside the app bundle 132 | ObjC.import("Foundation") 133 | const args = $.NSProcessInfo.processInfo.arguments 134 | const argv = [] 135 | const argc = args.count 136 | for (let i = 0; i < argc; i++) { argv.push(ObjC.unwrap(args.objectAtIndex(i))) } 137 | 138 | // Notification script 139 | const app = Application.currentApplication() 140 | app.includeStandardAdditions = true 141 | 142 | if (argv.length < 2) { // We use "2" because the script will always see at least one argument: the applet itself 143 | argv[1] = "Opening usage instructions…" 144 | argv[2] = "Notificator is a command-line app" 145 | argv[4] = "Funk" 146 | 147 | app.openLocation("https://github.com/vitorgalvao/notificator#usage") 148 | } 149 | 150 | const message = argv[1] 151 | const title = argv[2] 152 | const subtitle = argv[3] 153 | const sound = argv[4] 154 | 155 | const options = {} 156 | if (title) options.withTitle = title 157 | if (subtitle) options.subtitle = subtitle 158 | if (sound) options.soundName = sound 159 | 160 | app.displayNotification(message, options) 161 | ' 162 | 163 | [[ -d "${app}" ]] && rm -r "${app}" 164 | /bin/mkdir -p "${alfred_workflow_cache}" 165 | /usr/bin/osacompile -l JavaScript -o "${app}" -e "${jxa_script}" 2> /dev/null 166 | 167 | # Modify Notificator 168 | /usr/libexec/PlistBuddy -c "add :CFBundleIdentifier string ${bundle_id}.notificator" "${plist}" 169 | /usr/libexec/PlistBuddy -c 'add :LSUIElement string 1' "${plist}" 170 | mv "$(make_icns "${icon}")" "${app}/Contents/Resources/applet.icns" 171 | 172 | # Redo signature 173 | codesign --remove-signature "${app}" 174 | codesign --sign - "${app}" 175 | 176 | show_notification -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | logo-dark 2 | logo-light 3 | 4 | [![made with heart by Benjamin Oddou](https://img.shields.io/badge/made%20with%20%E2%99%A5%20by-benjamin%20oddou-3FAEFF.svg?style=flat)](https://github.com/BenjaminOddou) 5 | [![saythanks](https://img.shields.io/badge/say-thanks-0182E5.svg?style=flat)](https://saythanks.io/to/BenjaminOddou) 6 | 7 | Welcome to the Alfred Folderify repository: **An Alfred Workflow** ✨ 8 | 9 | ## ✅ Prerequisites 10 | 11 | * MacOS 12 | * Alfred 5. Note that the [Alfred Powerpack](https://www.alfredapp.com/powerpack/) is required to use workflows. 13 | 14 | ## ⬇️ Installation 15 | 16 | 1. [Download the workflow](https://github.com/BenjaminOddou/alfred-folderify/releases/latest) 17 | 2. Double click the `.alfredworkflow` file to install 18 | 19 | ## 🏎️ Folderify 20 | 21 | Under the hood, the icon generation is made with [folderify](https://github.com/lgarron/folderify) made by [Lucas Garron](https://github.com/lgarron). 22 | 23 | ## 🧰 Setup the workflow 24 | 25 | ### Install dependencies 26 | 27 | #### Open the Terminal of you Mac and run the following commands 28 | 29 | Install folderify (using [Homebrew](https://brew.sh)) : 30 | 31 | ```shell 32 | brew install folderify 33 | ``` 34 | 35 | > Note that you have [other installation options](https://github.com/lgarron/folderify#other-installation-options) for folderify 36 | 37 | ## 🧙‍♂️ Invoke the workflow 38 | 39 | There are 2 flows in this workflow : 40 | 41 | 1. The first one allows you to assign an generated icon to one or multiple folder(s). It can be triggered by writing `foldicon` keyword. 42 | 2. The second allows you to generate `mask.icns` and `mask.iconset` files from one or multiple mask(s). You can invoke this flow with the `imgicon` keyword. 43 | 44 | You can edit these triggers (flagged with a `🕹️` symbol) in the user configuration panel. 45 | 46 | ## 🤖 Usage of the workflow 47 | 48 | ### Setup variables 49 | 50 | 1. `📂 Data Folder`. Set the folder path that will host output logs generated by folderify. 51 | 52 | > Note that if you change the `Data folder` location after generating logs, you should probably move the file created along in the new folder. 53 | 54 | 2. `🎨 Color scheme` corresponds to the `--color-scheme COLOR_SCHEME` folderify argument and allows you to change the color of the icon folder (slight difference). 55 | 56 | `🌓 Auto` : will match current system settings. 57 | 58 | `🌑 Dark` : --color-scheme dark will force dark mode. 59 | 60 | ![big_sur_dark](public/big_sur_dark.webp) 61 | 62 | `🌕 Light` : --color-scheme light will force light mode. 63 | 64 | ![big_sur_light](public/big_sur_light.webp) 65 | 66 | 1. `✂️ Trim margins` corresponds to the `--no-trim` folderify argument. 67 | 68 | `Yes 👍` : checkbox is ticked, transparent margins are trimmed from all 4 sides. 69 | 70 | ![big_sur_dark](public/big_sur_dark.webp) 71 | 72 | `No 👎` : checkbox is unticked, --no-trim. Keeps transparent margins from the mask. 73 | 74 | ![no_trim](public/no_trim.webp) 75 | 76 | Here is a small schema to explain the principle : 77 | 78 | ![schema_trim](public/schema_trim.webp) 79 | 80 | 4. `📃 Detailed Logs` : corresponds to the `--verbose` folderify argument. 81 | 82 | `Yes 👍` : checkbox is ticked, --verbose, detailed output. 83 | 84 | ![log_detailed](public/log_detailed.webp) 85 | 86 | `No 👎` : checkbox is unticked, simple output. 87 | 88 | ![log_simple](public/log_simple.webp) 89 | 90 | 1. `🔫 Workflow action`. Open/Reveal in finder the log file, display a post notification or do nothing. 91 | 92 | 2. `🎷 Notification sound`. Set notification sound for this workflow. 93 | 94 | > As of version 1.4.0, this is no longer possible to generate old folder style (leopard / yosemite). You can still download v2 of folderify [here](https://pypi.org/project/folderify/). 95 | 96 | ### Modify icons folders 97 | 98 | > Use `foldicon` to trigger this flow. 99 | 100 | ![trigger1_1](public/trigger1_1.webp) 101 | 102 | Choose the mask that will be used for generating the new icon and press ⏎. 103 | 104 | ![trigger1_2](public/trigger1_2.webp) 105 | 106 | ### Reset icon folder 107 | 108 | To reset a folder’s icon, open its Get Info panel then click the icon and press ⌫. 109 | 110 | ### Generate icns and iconset files 111 | 112 | > Use `imgicon` to trigger this flow. 113 | 114 | ![trigger2_1](public/trigger2_1.webp) 115 | 116 | ### Alfred Buffer and Universal Actions 117 | 118 | For both flows, you can use the `Alfred Buffer` to select multiple folder(s) (flow 1) or mask(s) (flow 2). 119 | 120 | `Alfred Buffer` basic commands are : 121 | 122 | * ⌥↑ to add a file to the buffer from Alfred's results. 123 | * ⌥↓ to add a file and move to the next item in your list of results. 124 | * ⌥← to remove the last item from the buffer. 125 | * ⌥→ to action all items in the buffer. 126 | * ⌥⌫ to remove all items from the buffer. 127 | 128 | To know more on how to use `Alfred Buffer`, follow this [link](https://www.alfredapp.com/help/features/file-search/#file-buffer). 129 | 130 | > Note that `Alfred Buffer` is preferred compared to the `{query}`, meaning that if you select a folder/image (by clicking on it or by pressing enter ⏎) that is not included in the buffer, **it will not be compressed**. 131 | 132 | ![alfred_buffer1](public/alfred_buffer1.webp) 133 | 134 | ![alfred_buffer2](public/alfred_buffer2.webp) 135 | 136 | For both flows you can use the corresponding `Alfred Universal Actions` : 137 | 138 | 1. If you want to start the first flow, select one or multiple folders and select `Modify folder icon`. 139 | 140 | ![universal1](public/universal1.webp) 141 | 142 | 2. If you want to start the second flow, select one or multiple folders and select `Create folder icon from mask`. 143 | 144 | ![universal2](public/universal2.webp) 145 | 146 | ### Logs output 147 | 148 | Check the logs of the folderify command under the `📂 Data folder`. The log file contains the 3 parts : 149 | 1. Date and time of the workflow launch. 150 | 2. Workflow options. 151 | 3. Folderify command detailed. 152 | 4. Folderify output. 153 | 154 | > Note that each workflow run is separated by an horizontal rule. 155 | 156 | ![log_simple](public/log_simple.webp) 157 | 158 | ## ⚖️ License 159 | 160 | [MIT License](LICENSE) © Benjamin Oddou 161 | -------------------------------------------------------------------------------- /src/info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | bundleid 6 | com.benjamino.folderify 7 | connections 8 | 9 | 0034CFD2-C135-49CE-A092-3084365ACFAB 10 | 11 | 12 | destinationuid 13 | C6D82242-189B-4269-9BB5-9170EA9C21C2 14 | modifiers 15 | 0 16 | modifiersubtext 17 | 18 | vitoclose 19 | 20 | 21 | 22 | 026FB7C2-0015-43DC-B4C0-8D3B2A88BCF8 23 | 24 | 25 | destinationuid 26 | 74486CAF-13DD-421E-B52D-79BA07B691EB 27 | modifiers 28 | 0 29 | modifiersubtext 30 | 31 | vitoclose 32 | 33 | 34 | 35 | 0C91EEF8-20C4-421C-8194-668AA132FA74 36 | 37 | 38 | destinationuid 39 | 2A29B494-A73D-42C1-A35D-09901E0A39CC 40 | modifiers 41 | 0 42 | modifiersubtext 43 | 44 | vitoclose 45 | 46 | 47 | 48 | 1344D134-8F96-45A1-B1FF-0C8B12A57768 49 | 50 | 51 | destinationuid 52 | 845B2574-2C5F-4DD3-8407-DD9B017C7B2E 53 | modifiers 54 | 0 55 | modifiersubtext 56 | 57 | sourceoutputuid 58 | 40F21FC1-5AB6-4DD3-BBB7-CDD2D7B59B8F 59 | vitoclose 60 | 61 | 62 | 63 | destinationuid 64 | 74486CAF-13DD-421E-B52D-79BA07B691EB 65 | modifiers 66 | 0 67 | modifiersubtext 68 | 69 | vitoclose 70 | 71 | 72 | 73 | 13A89185-F404-441A-B8F7-8AC12156DF6E 74 | 75 | 76 | destinationuid 77 | F5B76F0B-083B-418E-A1F4-6D19C8A7E510 78 | modifiers 79 | 0 80 | modifiersubtext 81 | 82 | vitoclose 83 | 84 | 85 | 86 | 19E6E24A-594C-4C2F-9F70-6B97E70B4862 87 | 88 | 89 | destinationuid 90 | DD46D6F8-00CE-42B7-8F49-7DC79B48DAA3 91 | modifiers 92 | 0 93 | modifiersubtext 94 | 95 | vitoclose 96 | 97 | 98 | 99 | 25C55849-BA71-4A59-BE08-0FF9B2A3284B 100 | 101 | 102 | destinationuid 103 | 13A89185-F404-441A-B8F7-8AC12156DF6E 104 | modifiers 105 | 0 106 | modifiersubtext 107 | 108 | vitoclose 109 | 110 | 111 | 112 | 29E77443-10BE-470C-9525-A2801F010E13 113 | 114 | 115 | destinationuid 116 | 1344D134-8F96-45A1-B1FF-0C8B12A57768 117 | modifiers 118 | 0 119 | modifiersubtext 120 | 121 | vitoclose 122 | 123 | 124 | 125 | 2A29B494-A73D-42C1-A35D-09901E0A39CC 126 | 127 | 128 | destinationuid 129 | B0018DB6-21A5-4306-B25B-1A8B8CE5A1C1 130 | modifiers 131 | 0 132 | modifiersubtext 133 | 134 | vitoclose 135 | 136 | 137 | 138 | 52652AC5-44FF-4F2D-B998-3EFB7911C499 139 | 140 | 141 | destinationuid 142 | 29E77443-10BE-470C-9525-A2801F010E13 143 | modifiers 144 | 0 145 | modifiersubtext 146 | 147 | vitoclose 148 | 149 | 150 | 151 | 74486CAF-13DD-421E-B52D-79BA07B691EB 152 | 153 | 154 | destinationuid 155 | 25C55849-BA71-4A59-BE08-0FF9B2A3284B 156 | modifiers 157 | 0 158 | modifiersubtext 159 | 160 | vitoclose 161 | 162 | 163 | 164 | 845B2574-2C5F-4DD3-8407-DD9B017C7B2E 165 | 166 | 167 | destinationuid 168 | 25C55849-BA71-4A59-BE08-0FF9B2A3284B 169 | modifiers 170 | 0 171 | modifiersubtext 172 | 173 | vitoclose 174 | 175 | 176 | 177 | 89772932-A78F-46F6-9ADD-27507D8A5112 178 | 179 | 180 | destinationuid 181 | 0C91EEF8-20C4-421C-8194-668AA132FA74 182 | modifiers 183 | 0 184 | modifiersubtext 185 | 186 | vitoclose 187 | 188 | 189 | 190 | B0018DB6-21A5-4306-B25B-1A8B8CE5A1C1 191 | 192 | 193 | destinationuid 194 | C3775C3E-5C00-420F-BB9C-BD34B9A4AA9E 195 | modifiers 196 | 0 197 | modifiersubtext 198 | 199 | sourceoutputuid 200 | 40F21FC1-5AB6-4DD3-BBB7-CDD2D7B59B8F 201 | vitoclose 202 | 203 | 204 | 205 | destinationuid 206 | DD46D6F8-00CE-42B7-8F49-7DC79B48DAA3 207 | modifiers 208 | 0 209 | modifiersubtext 210 | 211 | vitoclose 212 | 213 | 214 | 215 | C3775C3E-5C00-420F-BB9C-BD34B9A4AA9E 216 | 217 | 218 | destinationuid 219 | 0034CFD2-C135-49CE-A092-3084365ACFAB 220 | modifiers 221 | 0 222 | modifiersubtext 223 | 224 | vitoclose 225 | 226 | 227 | 228 | C6D82242-189B-4269-9BB5-9170EA9C21C2 229 | 230 | 231 | destinationuid 232 | F609F008-1F69-466D-AC7B-B15523288B25 233 | modifiers 234 | 0 235 | modifiersubtext 236 | 237 | vitoclose 238 | 239 | 240 | 241 | DD46D6F8-00CE-42B7-8F49-7DC79B48DAA3 242 | 243 | 244 | destinationuid 245 | 0034CFD2-C135-49CE-A092-3084365ACFAB 246 | modifiers 247 | 0 248 | modifiersubtext 249 | 250 | vitoclose 251 | 252 | 253 | 254 | F5B76F0B-083B-418E-A1F4-6D19C8A7E510 255 | 256 | 257 | destinationuid 258 | FDAE9882-A31A-41D3-B139-B87DD370B22E 259 | modifiers 260 | 0 261 | modifiersubtext 262 | 263 | vitoclose 264 | 265 | 266 | 267 | F609F008-1F69-466D-AC7B-B15523288B25 268 | 269 | 270 | destinationuid 271 | FDAE9882-A31A-41D3-B139-B87DD370B22E 272 | modifiers 273 | 0 274 | modifiersubtext 275 | 276 | vitoclose 277 | 278 | 279 | 280 | FBAEAB4C-92D2-44B9-A2E6-335C83CAB744 281 | 282 | 283 | destinationuid 284 | 52652AC5-44FF-4F2D-B998-3EFB7911C499 285 | modifiers 286 | 0 287 | modifiersubtext 288 | 289 | vitoclose 290 | 291 | 292 | 293 | FDAE9882-A31A-41D3-B139-B87DD370B22E 294 | 295 | 296 | destinationuid 297 | 3EA3E5D1-D902-4884-A548-7CA8BD56F5B9 298 | modifiers 299 | 0 300 | modifiersubtext 301 | 302 | sourceoutputuid 303 | 858CBA9A-76BF-4F4E-AB3A-16789D3C48CF 304 | vitoclose 305 | 306 | 307 | 308 | destinationuid 309 | BCA150CD-967E-4FD0-A659-C8D490C1C95B 310 | modifiers 311 | 0 312 | modifiersubtext 313 | 314 | sourceoutputuid 315 | E483B0E6-5E1E-4F8E-BE08-F61FB4E857AB 316 | vitoclose 317 | 318 | 319 | 320 | 321 | createdby 322 | Benjamin Oddou 323 | description 324 | 📁 Generate pixel-perfect macOS folder icons 325 | disabled 326 | 327 | name 328 | Folderify 329 | objects 330 | 331 | 332 | config 333 | 334 | adduuid 335 | 336 | allowemptyfiles 337 | 338 | createintermediatefolders 339 | 340 | filename 341 | {var:data_folder}/logs_{var:trigger_1}.txt 342 | filetext 343 | {date:YYYY/MM/dd} 344 | {time:HH:mm:ss} 345 | {query} 346 | ______________________ 347 | ignoredynamicplaceholders 348 | 349 | relativepathmode 350 | 0 351 | type 352 | 3 353 | 354 | type 355 | alfred.workflow.output.writefile 356 | uid 357 | F609F008-1F69-466D-AC7B-B15523288B25 358 | version 359 | 1 360 | 361 | 362 | config 363 | 364 | concurrently 365 | 366 | escaping 367 | 102 368 | script 369 | ./foldicon.sh $1 370 | scriptargtype 371 | 1 372 | scriptfile 373 | 374 | type 375 | 5 376 | 377 | type 378 | alfred.workflow.action.script 379 | uid 380 | C6D82242-189B-4269-9BB5-9170EA9C21C2 381 | version 382 | 2 383 | 384 | 385 | config 386 | 387 | anchorfields 388 | 389 | argumenttrimmode 390 | 0 391 | argumenttype 392 | 0 393 | daterange 394 | 0 395 | fields 396 | 397 | 398 | field 399 | kMDItemDisplayName 400 | not 401 | 402 | split 403 | 404 | value 405 | {query} 406 | words 407 | 408 | 409 | 410 | field 411 | kMDItemAlternateNames 412 | not 413 | 414 | split 415 | 416 | value 417 | {query} 418 | words 419 | 420 | 421 | 422 | field 423 | kMDItemFinderComment 424 | not 425 | 426 | split 427 | 428 | value 429 | {query} 430 | words 431 | 432 | 433 | 434 | includesystem 435 | 436 | limit 437 | 0 438 | runningsubtext 439 | 440 | scopes 441 | 442 | sortmode 443 | 0 444 | subtext 445 | Start writing to find png files 446 | title 447 | Choose the mask to create the icon 448 | types 449 | 450 | public.png 451 | 452 | withspace 453 | 454 | 455 | type 456 | alfred.workflow.input.filefilter 457 | uid 458 | 0034CFD2-C135-49CE-A092-3084365ACFAB 459 | version 460 | 2 461 | 462 | 463 | config 464 | 465 | addfilestobuffer 466 | 467 | clearbuffer 468 | 469 | outputtype 470 | 0 471 | 472 | type 473 | alfred.workflow.action.buffer 474 | uid 475 | 2A29B494-A73D-42C1-A35D-09901E0A39CC 476 | version 477 | 1 478 | 479 | 480 | config 481 | 482 | anchorfields 483 | 484 | argumenttrimmode 485 | 0 486 | argumenttype 487 | 0 488 | daterange 489 | 0 490 | fields 491 | 492 | 493 | field 494 | kMDItemDisplayName 495 | not 496 | 497 | split 498 | 499 | value 500 | {query} 501 | words 502 | 503 | 504 | 505 | field 506 | kMDItemAlternateNames 507 | not 508 | 509 | split 510 | 511 | value 512 | {query} 513 | words 514 | 515 | 516 | 517 | field 518 | kMDItemFinderComment 519 | not 520 | 521 | split 522 | 523 | value 524 | {query} 525 | words 526 | 527 | 528 | 529 | includesystem 530 | 531 | keyword 532 | {var:trigger_1} 533 | limit 534 | 0 535 | runningsubtext 536 | 537 | scopes 538 | 539 | sortmode 540 | 0 541 | subtext 542 | Start writing to find folders 543 | title 544 | Choose folder(s) you want to modify the icon of 545 | types 546 | 547 | public.folder 548 | 549 | withspace 550 | 551 | 552 | type 553 | alfred.workflow.input.filefilter 554 | uid 555 | 89772932-A78F-46F6-9ADD-27507D8A5112 556 | version 557 | 2 558 | 559 | 560 | config 561 | 562 | argument 563 | 564 | passthroughargument 565 | 566 | variables 567 | 568 | _folders_list 569 | {var:_folder_no_buffer} 570 | 571 | 572 | type 573 | alfred.workflow.utility.argument 574 | uid 575 | C3775C3E-5C00-420F-BB9C-BD34B9A4AA9E 576 | version 577 | 1 578 | 579 | 580 | config 581 | 582 | conditions 583 | 584 | 585 | inputstring 586 | 587 | matchcasesensitive 588 | 589 | matchmode 590 | 0 591 | matchstring 592 | 593 | outputlabel 594 | 595 | uid 596 | 40F21FC1-5AB6-4DD3-BBB7-CDD2D7B59B8F 597 | 598 | 599 | elselabel 600 | else 601 | hideelse 602 | 603 | 604 | type 605 | alfred.workflow.utility.conditional 606 | uid 607 | B0018DB6-21A5-4306-B25B-1A8B8CE5A1C1 608 | version 609 | 1 610 | 611 | 612 | config 613 | 614 | argument 615 | 616 | passthroughargument 617 | 618 | variables 619 | 620 | _folder_no_buffer 621 | {query} 622 | 623 | 624 | type 625 | alfred.workflow.utility.argument 626 | uid 627 | 0C91EEF8-20C4-421C-8194-668AA132FA74 628 | version 629 | 1 630 | 631 | 632 | config 633 | 634 | openwith 635 | 636 | sourcefile 637 | {query} 638 | 639 | type 640 | alfred.workflow.action.openfile 641 | uid 642 | 3EA3E5D1-D902-4884-A548-7CA8BD56F5B9 643 | version 644 | 3 645 | 646 | 647 | config 648 | 649 | acceptsmulti 650 | 1 651 | filetypes 652 | 653 | public.folder 654 | 655 | name 656 | Modify folder icon 657 | 658 | type 659 | alfred.workflow.trigger.action 660 | uid 661 | 19E6E24A-594C-4C2F-9F70-6B97E70B4862 662 | version 663 | 1 664 | 665 | 666 | config 667 | 668 | conditions 669 | 670 | 671 | inputstring 672 | {var:workflow_action} 673 | matchcasesensitive 674 | 675 | matchmode 676 | 0 677 | matchstring 678 | _open 679 | outputlabel 680 | open 681 | uid 682 | 858CBA9A-76BF-4F4E-AB3A-16789D3C48CF 683 | 684 | 685 | inputstring 686 | {var:workflow_action} 687 | matchcasesensitive 688 | 689 | matchmode 690 | 0 691 | matchstring 692 | _reveal 693 | outputlabel 694 | reveal 695 | uid 696 | E483B0E6-5E1E-4F8E-BE08-F61FB4E857AB 697 | 698 | 699 | elselabel 700 | else 701 | hideelse 702 | 703 | 704 | type 705 | alfred.workflow.utility.conditional 706 | uid 707 | FDAE9882-A31A-41D3-B139-B87DD370B22E 708 | version 709 | 1 710 | 711 | 712 | config 713 | 714 | argument 715 | 716 | passthroughargument 717 | 718 | variables 719 | 720 | _folders_list 721 | {query} 722 | 723 | 724 | type 725 | alfred.workflow.utility.argument 726 | uid 727 | DD46D6F8-00CE-42B7-8F49-7DC79B48DAA3 728 | version 729 | 1 730 | 731 | 732 | config 733 | 734 | path 735 | {query} 736 | 737 | type 738 | alfred.workflow.action.revealfile 739 | uid 740 | BCA150CD-967E-4FD0-A659-C8D490C1C95B 741 | version 742 | 1 743 | 744 | 745 | config 746 | 747 | concurrently 748 | 749 | escaping 750 | 102 751 | script 752 | ./imgicon.sh 753 | scriptargtype 754 | 1 755 | scriptfile 756 | 757 | type 758 | 5 759 | 760 | type 761 | alfred.workflow.action.script 762 | uid 763 | 13A89185-F404-441A-B8F7-8AC12156DF6E 764 | version 765 | 2 766 | 767 | 768 | config 769 | 770 | adduuid 771 | 772 | allowemptyfiles 773 | 774 | createintermediatefolders 775 | 776 | filename 777 | {var:data_folder}/logs_{var:trigger_2}.txt 778 | filetext 779 | {date:YYYY/MM/dd} 780 | {time:HH:mm:ss} 781 | {query} 782 | ______________________ 783 | ignoredynamicplaceholders 784 | 785 | relativepathmode 786 | 0 787 | type 788 | 3 789 | 790 | type 791 | alfred.workflow.output.writefile 792 | uid 793 | F5B76F0B-083B-418E-A1F4-6D19C8A7E510 794 | version 795 | 1 796 | 797 | 798 | config 799 | 800 | addfilestobuffer 801 | 802 | clearbuffer 803 | 804 | outputtype 805 | 0 806 | 807 | type 808 | alfred.workflow.action.buffer 809 | uid 810 | 29E77443-10BE-470C-9525-A2801F010E13 811 | version 812 | 1 813 | 814 | 815 | config 816 | 817 | anchorfields 818 | 819 | argumenttrimmode 820 | 0 821 | argumenttype 822 | 0 823 | daterange 824 | 0 825 | fields 826 | 827 | 828 | field 829 | kMDItemDisplayName 830 | not 831 | 832 | split 833 | 834 | value 835 | {query} 836 | words 837 | 838 | 839 | 840 | field 841 | kMDItemAlternateNames 842 | not 843 | 844 | split 845 | 846 | value 847 | {query} 848 | words 849 | 850 | 851 | 852 | field 853 | kMDItemFinderComment 854 | not 855 | 856 | split 857 | 858 | value 859 | {query} 860 | words 861 | 862 | 863 | 864 | includesystem 865 | 866 | keyword 867 | {var:trigger_2} 868 | limit 869 | 0 870 | runningsubtext 871 | 872 | scopes 873 | 874 | sortmode 875 | 0 876 | subtext 877 | Start writing to find png files 878 | title 879 | Choose mask(s) to create icon(s) 880 | types 881 | 882 | public.png 883 | 884 | withspace 885 | 886 | 887 | type 888 | alfred.workflow.input.filefilter 889 | uid 890 | FBAEAB4C-92D2-44B9-A2E6-335C83CAB744 891 | version 892 | 2 893 | 894 | 895 | type 896 | alfred.workflow.utility.junction 897 | uid 898 | 25C55849-BA71-4A59-BE08-0FF9B2A3284B 899 | version 900 | 1 901 | 902 | 903 | config 904 | 905 | argument 906 | 907 | passthroughargument 908 | 909 | variables 910 | 911 | _masks_list 912 | {var:_mask_no_buffer} 913 | 914 | 915 | type 916 | alfred.workflow.utility.argument 917 | uid 918 | 845B2574-2C5F-4DD3-8407-DD9B017C7B2E 919 | version 920 | 1 921 | 922 | 923 | config 924 | 925 | conditions 926 | 927 | 928 | inputstring 929 | 930 | matchcasesensitive 931 | 932 | matchmode 933 | 0 934 | matchstring 935 | 936 | outputlabel 937 | 938 | uid 939 | 40F21FC1-5AB6-4DD3-BBB7-CDD2D7B59B8F 940 | 941 | 942 | elselabel 943 | else 944 | hideelse 945 | 946 | 947 | type 948 | alfred.workflow.utility.conditional 949 | uid 950 | 1344D134-8F96-45A1-B1FF-0C8B12A57768 951 | version 952 | 1 953 | 954 | 955 | config 956 | 957 | argument 958 | 959 | passthroughargument 960 | 961 | variables 962 | 963 | _mask_no_buffer 964 | {query} 965 | 966 | 967 | type 968 | alfred.workflow.utility.argument 969 | uid 970 | 52652AC5-44FF-4F2D-B998-3EFB7911C499 971 | version 972 | 1 973 | 974 | 975 | config 976 | 977 | acceptsmulti 978 | 1 979 | filetypes 980 | 981 | public.png 982 | 983 | name 984 | Create folder icon from mask 985 | 986 | type 987 | alfred.workflow.trigger.action 988 | uid 989 | 026FB7C2-0015-43DC-B4C0-8D3B2A88BCF8 990 | version 991 | 1 992 | 993 | 994 | config 995 | 996 | argument 997 | 998 | passthroughargument 999 | 1000 | variables 1001 | 1002 | _masks_list 1003 | {query} 1004 | 1005 | 1006 | type 1007 | alfred.workflow.utility.argument 1008 | uid 1009 | 74486CAF-13DD-421E-B52D-79BA07B691EB 1010 | version 1011 | 1 1012 | 1013 | 1014 | readme 1015 | # 🎩 Alfred Folderify 1016 | 1017 | ✨ *Generate pixel-perfect macOS folder icons* ✨ 1018 | 1019 | ## 🏎️ Folderify 1020 | 1021 | Under the hood, the icon generation is made with [folderify](https://github.com/lgarron/folderify) made by [Lucas Garron](https://github.com/lgarron). 1022 | 1023 | ## 🧰 Setup the workflow 1024 | 1025 | Install folderify (using [Homebrew](https://brew.sh)) : 1026 | 1027 | `brew install folderify` 1028 | 1029 | Note that you have [other installation options](https://github.com/lgarron/folderify#other-installation-options) for folderify 1030 | 1031 | ## 🧙‍♂️ Invoke the workflow 1032 | 1033 | There are 2 flows in this workflow : 1034 | 1035 | 1. The first one allows you to assign an generated icon to one or multiple folder(s). It can be triggered by writing `foldicon` keyword. 1036 | 2. The second allows you to generate `mask.icns` and `mask.iconset` files from one or multiple mask(s). You can invoke this flow with the `imgicon` keyword. 1037 | 1038 | You can edit these triggers (flagged with a `🕹️` symbol) in the user configuration panel. 1039 | 1040 | ## 🤖 Usage of the workflow 1041 | 1042 | Go to the dedicated [GitHub repository](https://github.com/BenjaminOddou/alfred-folderify) page to check the documentation 1043 | 1044 | ### Reset icon folder 1045 | 1046 | To reset a folder’s icon, open its Get Info panel then click the icon and press ⌫. 1047 | 1048 | © Benjamin Oddou 1049 | uidata 1050 | 1051 | 0034CFD2-C135-49CE-A092-3084365ACFAB 1052 | 1053 | xpos 1054 | 725 1055 | ypos 1056 | 90 1057 | 1058 | 026FB7C2-0015-43DC-B4C0-8D3B2A88BCF8 1059 | 1060 | xpos 1061 | 55 1062 | ypos 1063 | 500 1064 | 1065 | 0C91EEF8-20C4-421C-8194-668AA132FA74 1066 | 1067 | xpos 1068 | 235 1069 | ypos 1070 | 135 1071 | 1072 | 1344D134-8F96-45A1-B1FF-0C8B12A57768 1073 | 1074 | xpos 1075 | 485 1076 | ypos 1077 | 400 1078 | 1079 | 13A89185-F404-441A-B8F7-8AC12156DF6E 1080 | 1081 | colorindex 1082 | 11 1083 | xpos 1084 | 930 1085 | ypos 1086 | 365 1087 | 1088 | 19E6E24A-594C-4C2F-9F70-6B97E70B4862 1089 | 1090 | xpos 1091 | 55 1092 | ypos 1093 | 230 1094 | 1095 | 25C55849-BA71-4A59-BE08-0FF9B2A3284B 1096 | 1097 | xpos 1098 | 720 1099 | ypos 1100 | 395 1101 | 1102 | 29E77443-10BE-470C-9525-A2801F010E13 1103 | 1104 | xpos 1105 | 315 1106 | ypos 1107 | 380 1108 | 1109 | 2A29B494-A73D-42C1-A35D-09901E0A39CC 1110 | 1111 | xpos 1112 | 315 1113 | ypos 1114 | 105 1115 | 1116 | 3EA3E5D1-D902-4884-A548-7CA8BD56F5B9 1117 | 1118 | xpos 1119 | 1450 1120 | ypos 1121 | 160 1122 | 1123 | 52652AC5-44FF-4F2D-B998-3EFB7911C499 1124 | 1125 | xpos 1126 | 235 1127 | ypos 1128 | 410 1129 | 1130 | 74486CAF-13DD-421E-B52D-79BA07B691EB 1131 | 1132 | xpos 1133 | 600 1134 | ypos 1135 | 530 1136 | 1137 | 845B2574-2C5F-4DD3-8407-DD9B017C7B2E 1138 | 1139 | xpos 1140 | 600 1141 | ypos 1142 | 395 1143 | 1144 | 89772932-A78F-46F6-9ADD-27507D8A5112 1145 | 1146 | xpos 1147 | 55 1148 | ypos 1149 | 105 1150 | 1151 | B0018DB6-21A5-4306-B25B-1A8B8CE5A1C1 1152 | 1153 | xpos 1154 | 485 1155 | ypos 1156 | 125 1157 | 1158 | BCA150CD-967E-4FD0-A659-C8D490C1C95B 1159 | 1160 | xpos 1161 | 1450 1162 | ypos 1163 | 280 1164 | 1165 | C3775C3E-5C00-420F-BB9C-BD34B9A4AA9E 1166 | 1167 | xpos 1168 | 600 1169 | ypos 1170 | 120 1171 | 1172 | C6D82242-189B-4269-9BB5-9170EA9C21C2 1173 | 1174 | colorindex 1175 | 11 1176 | xpos 1177 | 930 1178 | ypos 1179 | 90 1180 | 1181 | DD46D6F8-00CE-42B7-8F49-7DC79B48DAA3 1182 | 1183 | xpos 1184 | 600 1185 | ypos 1186 | 260 1187 | 1188 | F5B76F0B-083B-418E-A1F4-6D19C8A7E510 1189 | 1190 | xpos 1191 | 1125 1192 | ypos 1193 | 365 1194 | 1195 | F609F008-1F69-466D-AC7B-B15523288B25 1196 | 1197 | xpos 1198 | 1125 1199 | ypos 1200 | 90 1201 | 1202 | FBAEAB4C-92D2-44B9-A2E6-335C83CAB744 1203 | 1204 | xpos 1205 | 55 1206 | ypos 1207 | 380 1208 | 1209 | FDAE9882-A31A-41D3-B139-B87DD370B22E 1210 | 1211 | xpos 1212 | 1320 1213 | ypos 1214 | 240 1215 | 1216 | 1217 | userconfigurationconfig 1218 | 1219 | 1220 | config 1221 | 1222 | default 1223 | ~/Library/Application Support/Alfred/Workflow Data/com.benjamino.folderify 1224 | filtermode 1225 | 1 1226 | placeholder 1227 | 1228 | required 1229 | 1230 | 1231 | description 1232 | the folder that holds all the generated log files. 1233 | label 1234 | 📂 Data folder 1235 | type 1236 | filepicker 1237 | variable 1238 | data_folder 1239 | 1240 | 1241 | config 1242 | 1243 | default 1244 | foldicon 1245 | placeholder 1246 | 1247 | required 1248 | 1249 | trim 1250 | 1251 | 1252 | description 1253 | keyword that launches the first flow. 1254 | label 1255 | 🕹️ Trigger 1 1256 | type 1257 | textfield 1258 | variable 1259 | trigger_1 1260 | 1261 | 1262 | config 1263 | 1264 | default 1265 | imgicon 1266 | placeholder 1267 | 1268 | required 1269 | 1270 | trim 1271 | 1272 | 1273 | description 1274 | keyword that launches the second flow. 1275 | label 1276 | 🕹️ Trigger 2 1277 | type 1278 | textfield 1279 | variable 1280 | trigger_2 1281 | 1282 | 1283 | config 1284 | 1285 | default 1286 | 1287 | pairs 1288 | 1289 | 1290 | Auto 🌓 1291 | 1292 | 1293 | 1294 | Dark 🌑 1295 | --color-scheme dark 1296 | 1297 | 1298 | Light 🌕 1299 | --color-scheme light 1300 | 1301 | 1302 | 1303 | description 1304 | set the folder icon color scheme. By default, it uses your system's current light/dark mode. 1305 | label 1306 | 🎨 Color scheme 1307 | type 1308 | popupbutton 1309 | variable 1310 | color_scheme 1311 | 1312 | 1313 | config 1314 | 1315 | default 1316 | 1317 | required 1318 | 1319 | text 1320 | 1321 | 1322 | description 1323 | if unticked, margins won't be trimmed. 1324 | label 1325 | ✂️ Trim margins 1326 | type 1327 | checkbox 1328 | variable 1329 | trim_margins 1330 | 1331 | 1332 | config 1333 | 1334 | default 1335 | 1336 | required 1337 | 1338 | text 1339 | 1340 | 1341 | description 1342 | control whether you prefer detailed logs or not. 1343 | label 1344 | 📃 Detailed Logs 1345 | type 1346 | checkbox 1347 | variable 1348 | verbose 1349 | 1350 | 1351 | config 1352 | 1353 | default 1354 | _open 1355 | pairs 1356 | 1357 | 1358 | Open log file 🟢 1359 | _open 1360 | 1361 | 1362 | Reveal log file in finder 🔵 1363 | _reveal 1364 | 1365 | 1366 | Display a notification 🟡 1367 | _notif 1368 | 1369 | 1370 | Do nothing 🔴 1371 | 1372 | 1373 | 1374 | 1375 | description 1376 | choose output action. 1377 | label 1378 | 🔫 Workflow action 1379 | type 1380 | popupbutton 1381 | variable 1382 | workflow_action 1383 | 1384 | 1385 | config 1386 | 1387 | default 1388 | Submarine 1389 | pairs 1390 | 1391 | 1392 | Mute 🔕 1393 | 1394 | 1395 | 1396 | Submarine 🤿 1397 | Submarine 1398 | 1399 | 1400 | Pop 🎉 1401 | Pop 1402 | 1403 | 1404 | Ping ✨ 1405 | Ping 1406 | 1407 | 1408 | Purr 🐯 1409 | Purr 1410 | 1411 | 1412 | Hero ⚔️ 1413 | Hero 1414 | 1415 | 1416 | Funk 🕺 1417 | Funk 1418 | 1419 | 1420 | Basso 🎧 1421 | Basso 1422 | 1423 | 1424 | Sosumi 📻 1425 | Sosumi 1426 | 1427 | 1428 | Glass 🍸 1429 | Glass 1430 | 1431 | 1432 | Blow 💨 1433 | Blow 1434 | 1435 | 1436 | Bottle 🍼 1437 | Bottle 1438 | 1439 | 1440 | Frog 🐸 1441 | Frog 1442 | 1443 | 1444 | Tink 🛎️ 1445 | Tink 1446 | 1447 | 1448 | Morse ♨️ 1449 | Morse 1450 | 1451 | 1452 | Classic 😃 1453 | default 1454 | 1455 | 1456 | 1457 | description 1458 | workflow notification sound. 1459 | label 1460 | 🎷 Notification sound 1461 | type 1462 | popupbutton 1463 | variable 1464 | sound 1465 | 1466 | 1467 | version 1468 | 1.4.1 1469 | webaddress 1470 | https://github.com/BenjaminOddou/alfred-folderify 1471 | 1472 | 1473 | --------------------------------------------------------------------------------