diff --git a/Makefile b/Makefile index 9e2454c..0b71683 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ SRC = draw.c speedwm.c main.c OBJ = ${SRC:.c=.o} ifdef USEIPC -all: options speedwm speedwm-msg +all: options speedwm speedwm-ipc else all: options speedwm endif @@ -31,13 +31,13 @@ speedwm: ${OBJ} ${CC} -o $@ ${OBJ} ${LDFLAGS} ifdef USEIPC -speedwm-msg: toggle/ipc-speedwm-msg.o +speedwm-ipc: toggle/ipc-speedwm-msg.o ${CC} -o $@ toggle/ipc-speedwm-msg.c ${LDFLAGS} ; rm -f ipc-speedwm-msg.o endif clean: rm -f speedwm *.o speedwm-${VERSION}.tar.gz - rm -f speedwm-msg + rm -f speedwm-ipc echo "Cleaned!" dist: clean @@ -48,7 +48,7 @@ dist: clean tar -cf speedwm-${VERSION}.tar speedwm-${VERSION} gzip speedwm-${VERSION}.tar rm -rf speedwm-${VERSION} speedwm - rm -rf speedwm-${VERSION} speedwm-msg + rm -rf speedwm-${VERSION} speedwm-ipc [ -f .speedwm/options.h_settings.patch ] && mv .speedwm/*.patch .. && mv .speedwm/*.def* ../docs/ && rm -rf .speedwm || : install_only_bin: all @@ -60,10 +60,10 @@ install_only_bin: all mkdir -p ${DESTDIR}${PREFIX}/share/speedwm mkdir -p ${DESTDIR}${PREFIX}/share/xsessions/ mkdir -p ${DESTDIR}${PREFIX}/share/pixmaps/ - [ -f speedwm-msg ] && cp -f speedwm-msg ${DESTDIR}${PREFIX}/bin || : - [ -f speedwm ] && cp -f speedwm ${DESTDIR}${PREFIX}/bin || : - [ -f speedwm-msg ] && chmod 755 ${DESTDIR}${PREFIX}/bin/speedwm-msg || : + [ -f speedwm-ipc ] && cp -f speedwm-ipc ${DESTDIR}${PREFIX}/bin || : + [ -f speedwm-ipc ] && chmod 755 ${DESTDIR}${PREFIX}/bin/speedwm-ipc || : [ -f speedwm.png ] && cp -f speedwm.png ${DESTDIR}${PREFIX}/share/pixmaps/speedwm.png || : + [ -f speedwm ] && cp -f speedwm ${DESTDIR}${PREFIX}/bin || : [ -f docs/entry.desktop ] && cp -f docs/entry.desktop ${DESTDIR}${PREFIX}/share/xsessions/speedwm.desktop || : chmod 755 ${DESTDIR}${PREFIX}/bin/speedwm rm -f *.o @@ -77,7 +77,6 @@ install_only_misc: [ -f docs/toggle.def.h ] || cp -f toggle.h docs/toggle.def.h || : [ -f docs/toggle.def.mk ] || cp -f toggle.mk docs/toggle.def.mk || : [ -f docs/keybinds.def.h ] || cp -f keybinds.h docs/keybinds.def.h || : - [ -f docs/actions.def.h ] || cp -f actions.h docs/actions.def.h || : [ -f docs/colors.def.h ] || cp -f colors.h docs/colors.def.h || : [ -f docs/colors.def.h ] || cp -f colors.h docs/colors.def.h || : [ -f docs/statusbar.def.h ] || cp -f statusbar.h docs/statusbar.def.h || : @@ -88,8 +87,6 @@ install_only_misc: cp -f docs/doc-* ${DESTDIR}${PREFIX}/share/speedwm/ cp -f docs/example.* ${DESTDIR}${PREFIX}/share/speedwm/ cp -f scripts/speedwm* ${DESTDIR}${PREFIX}/bin ; chmod +x ${DESTDIR}${PREFIX}/bin/speedwm* - chmod +x ./scripts/speedwm-compatcheck - ./scripts/speedwm-compatcheck make modules_install echo ${VERSION} > ${DESTDIR}${PREFIX}/share/speedwm/speedwm-version @@ -102,7 +99,7 @@ install: all mkdir -p ${DESTDIR}${PREFIX}/share/speedwm mkdir -p ${DESTDIR}${PREFIX}/share/xsessions/ mkdir -p ${DESTDIR}${PREFIX}/share/pixmaps/ - [ -f speedwm-msg ] && cp -f speedwm-msg ${DESTDIR}${PREFIX}/bin || : + [ -f speedwm-ipc ] && cp -f speedwm-ipc ${DESTDIR}${PREFIX}/bin || : [ -f speedwm ] && cp -f speedwm ${DESTDIR}${PREFIX}/bin || : [ -f docs/autostart.def.h ] || cp -f autostart.h docs/autostart.def.h || : [ -f docs/options.def.h ] || cp -f options.h docs/options.def.h || : @@ -112,21 +109,18 @@ install: all [ -f docs/toggle.def.h ] || cp -f toggle.h docs/toggle.def.h || : [ -f docs/toggle.def.mk ] || cp -f toggle.mk docs/toggle.def.mk || : [ -f docs/keybinds.def.h ] || cp -f keybinds.h docs/keybinds.def.h || : - [ -f docs/actions.def.h ] || cp -f actions.h docs/actions.def.h || : [ -f docs/colors.def.h ] || cp -f colors.h docs/colors.def.h || : [ -f docs/colors.def.h ] || cp -f colors.h docs/colors.def.h || : [ -f docs/statusbar.def.h ] || cp -f statusbar.h docs/statusbar.def.h || : [ -f docs/entry.desktop ] && cp -f docs/entry.desktop ${DESTDIR}${PREFIX}/share/xsessions/speedwm.desktop || : - [ -f speedwm-msg ] && chmod 755 ${DESTDIR}${PREFIX}/bin/speedwm-msg || : + [ -f speedwm-ipc ] && chmod 755 ${DESTDIR}${PREFIX}/bin/speedwm-ipc || : [ -f speedwm.png ] && cp -f speedwm.png ${DESTDIR}${PREFIX}/share/pixmaps/speedwm.png || : cp -f docs/keybinds ${DESTDIR}${PREFIX}/share/speedwm/keybinds cp -f docs/dependencies ${DESTDIR}${PREFIX}/share/speedwm/dependencies cp -f docs/doc-* ${DESTDIR}${PREFIX}/share/speedwm/ cp -f docs/example.* ${DESTDIR}${PREFIX}/share/speedwm/ cp -f scripts/speedwm* ${DESTDIR}${PREFIX}/bin ; chmod +x ${DESTDIR}${PREFIX}/bin/speedwm* - chmod +x ./scripts/speedwm-compatcheck chmod 755 ${DESTDIR}${PREFIX}/bin/speedwm - ./scripts/speedwm-compatcheck make modules_install [ -f ${DESTDIR}${PREFIX}/bin/speedwm ] && rm -f drw.o speedwm.o util.o speedwm speedwm-msg || : echo ${VERSION} > ${DESTDIR}${PREFIX}/share/speedwm/speedwm-version diff --git a/actions.h b/actions.h deleted file mode 100644 index 578c6df..0000000 --- a/actions.h +++ /dev/null @@ -1,91 +0,0 @@ -/* speedwm actions - * - * This header is for configuring the actions and classes keybinds and rules use. - * These should be set using the '#define' but if you prefer you can use a char as well. - * - * Example of a valid #define: #define MYAWESOMEKEYBIND "myawesomescript" - * In this example, myawesomescript is the command that will run and MYAWESOMEKEYBIND is the define itself. - * - * You can use this define in a keybind (see keybinds.h) or in a rule (see rules.h). - * - * For example if you wanted to change icecat to firefox: - * #define BROWSER "icecat" -> #define BROWSER "firefox" - * - * You do not need to edit 'keybinds.h' or 'rules.h' because that's where the values we defined are actually used. - * Once you're done with your edits, run 'make clean install' to install it. - */ - -/* Software options - * Note that any software named "speedwm-*" is bundled with this build and does not need to be replaced unless you want to. - */ - -/* Terminal */ -#define TERMINAL "st -e " /* Terminal to use */ -#define TERMINAL_CLASS "st" /* Terminal to use for rules */ - -/* Web browser */ -#define BROWSER "icecat" /* Web browser to use */ -#define BROWSER_CLASS "Navigator" /* Web browser to use for rules */ - -/* System monitor */ -#define SYSTEMSTAT "htop" /* System stat viewer to use */ - -/* RSS reader */ -#define RSS "newsboat" /* RSS reader to use */ - -/* Chat client */ -#define CHAT "tmux new-session -A -D -s weechat $(which --skip-alias weechat)" /* Chat client to use */ -#define CHAT2 "iron" /* Second chat client (such as an IM) to use */ - -/* Email client */ -#define EMAIL "aerc" /* Email client to use */ - -/* Text editor */ -#define EDITOR "nvim" /* Text editor to use */ - -/* Run actions */ -#define RUN "dmenu_run -l 0 -p 'Run:'" /* Run launcher */ -#define RUN_ALT "speedwm-applist" /* Alternative run launcher */ -#define RUN_DESKTOP "j4-dmenu-desktop --term=st --dmenu='dmenu -l 20 -p Open'" - -/* Custom layout */ -#define CUSTOM_HISTFILE ".config/speedwm-de/history" /* History file for the custom layout */ -#define RUN_CUSTOM_LAYOUT "dmenu -i -l 10 -p 'Enter an S expression >' <" /* Run launcher to use for the custom layout */ - -/* Screenshot actions */ -#define SCREENSHOT "speedwm-screenshotutil -s" /* How to take screenshots (Selection) */ -#define SCREENSHOT_FULL "speedwm-screenshotutil -f" /* How to take screenshots (Full screen) */ - -/* File manager */ -#define FILEMANAGER "vifmrun || vifm" /* File manager that will be used */ -#define FILEMANAGER_CLASS "vifmrun" /* File manager that will be used for rules */ - -/* Screen locker */ -#define LOCKER "slock" /* Screen locker that will be used */ - -/* Music actions */ -#define MUSIC "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" /* Music player to use */ -#define KILLMUSIC "pkill cmus" /* Command to run when killing the music player */ -#define NEXTMUSIC "cmus-remote --next" /* Command to run when skipping to the next track */ -#define PREVMUSIC "cmus-remote --prev" /* Command to run when moving back to the previous track */ -#define UPMUSIC "cmus-remote --volume +3000" /* Command to run when increasing music volume */ -#define DOWNMUSIC "cmus-remote --volume -3000" /* Command to run when decreasing music volume */ -#define PAUSEMUSIC "cmus-remote --pause" /* Command to run when pausing the track */ - -/* PDF reader */ -#define PDF_CLASS "Zathura" /* PDF reader to use for rules */ - -/* Audio options */ -#define MIXER "speedwm-audioctrl -runmixer" /* Audio mixer to use */ -#define VOL_DOWN "speedwm-audioctrl -lower" /* Command to run when decreasing volume */ -#define VOL_UP "speedwm-audioctrl -raise" /* Command to run when increasing volume */ -#define VOL_MUTE "speedwm-audioctrl -mute" /* Command to run when muting volume */ - -/* Managers */ -#define CLIPBOARD "xclip" /* Clipboard to use */ -#define COMPOSITOR "picom" /* Compositor to use */ -#define NETWORK "speedwm-netctrl" /* Network manager to use */ -#define KILLNETWORK "speedwm-netctrl disconnect" /* Command to run when disconnecting */ -#define BLUETOOTH "speedwm-btctrl" /* Bluetooth manager to use */ -#define NOTIFICATION "dunst" /* Notification daemon to use */ - diff --git a/autostart.h b/autostart.h index a677648..5c6b45a 100644 --- a/autostart.h +++ b/autostart.h @@ -12,21 +12,15 @@ *************************************************************/ static const char *autostart[] = { - - /* Run the defined clipboard manager */ - shell, "-c", CLIPBOARD "& > /tmp/clipboard-log", NULL, - /* Run the defined compositor */ - shell, "-c", COMPOSITOR "& > /tmp/compositor-log", NULL, - - /* Run the defined notification daemon */ - shell, "-c", NOTIFICATION "& > /tmp/notification-log", NULL, - - /* Run the defined status bar */ - shell, "-c", "pgrep -x speedwm_status || speedwm_status &", NULL, + /* Run the built in status bar */ + shell, "-c", "pgrep speedwm_status || speedwm_status &", NULL, /* Autostart script, if it exists */ - shell, "-c", "$HOME/.config/speedwm-de/autostart.sh", NULL, + shell, "-c", "$HOME/.config/speedwm/autostart.sh", NULL, + + /* Autostart second script, if it exists */ + shell, "-c", "speedwm-autostart", NULL, NULL }; diff --git a/docs/dependencies b/docs/dependencies index 549961d..1297738 100644 --- a/docs/dependencies +++ b/docs/dependencies @@ -11,42 +11,35 @@ - Very minimal C compiler that speedwm uses to speed up compile times. If you don't want this dependency, edit host.mk and set CC to 'cc' (or what you prefer). -- Features -- - These are necessary for certain features. By default speedwm will prevent an installation without them but you can bypass these if you want. - If you want to use an alternative, change it in options.h. + These are necessary for certain features. + If you want to use an alternative, change it in options.h and/or keybinds.h and mouse.h. + - dmenu - NOTE: dmenu is required for most scripts included with this build of speedwm. My build is required for proper Pywal support. - - If you do not have the password, grid and center patches, you must disable them in ~/.config/speedwm-de/global/config by setting two variables to false. - picom - - Optional but speedwm looks sort of ugly without it. - - xclip (Required for clipboard support by a few scripts, will start automatically) - - xwallpaper (Required to set wallpapers) - - xmodmap - - Required if you want the Alt+Tab to have proper keybinds. + - Optional but speedwm looks sort of ugly without a compositor. - xrdb (Install if you want .Xresources support) - - pywal (Install if you want pywal support. Requires swal aka the default way to set wallpapers) - - wmctrl (Needed for proper window management) - - slock (Required for screen locking) - - If you want to display a message, you need the text patch. - - If you have the background image patch, you can set the image to ~/.config/speedwm-de/swal/CurrentWallpaper. It is a symlink to the current wallpaper. - - maim (Required for built in 'speedwm-screenshotutil' script) + - pywal (Install if you want pywal support. Requires swal (the default way to set wallpapers) or a tool that supports the correct signal for instant reloading) - j4-dmenu-desktop - - Required for dmenu desktop entries. speedwm will not prevent installation without this because it doesn't provide much functionality. + - Required for dmenu desktop entries.. -- Software -- This build of speedwm comes with binds for software. These must be installed by default but you can change what software is required by editing 'options.h' and running 'make clean install'. You can also remove keybinds by editing 'keybinds.h' and running 'make clean install'. + + - speedwm-extras + - Important metapackage containing extra scripts that speedwm makes use of. (https://codeberg.org/speedie/speedwm-extras) - st (Terminal) - - GNU IceCat (Web browser) + - Firefox (Web browser) - htop (Status monitor) - newsboat (RSS reader) - zathura (PDF reader) - - alsa-utils (Required for audio controls) - cmus (Default music player) - neovim (Text editor) - aerc (Email client) - - maim (Screenshot tool, automatically copies to clipboard using xclip) - vifm (File manager) - slock (Lock screen) + And everything under 'Features'. diff --git a/docs/doc-02 b/docs/doc-02 index d11ee65..23c7e2a 100644 --- a/docs/doc-02 +++ b/docs/doc-02 @@ -7,5 +7,5 @@ You can see (Dependencies) for a list of all dependencies required to use this f - make clean install - If any warnings show up, fix it by installing the missing dependency. - If a .xinitrc is used, add 'speedwm_run' to the end. - - NOTE: Your .xinitrc should ONLY contain 'speedwm_run'. speedwm will automatically start everything else. If not, edit autostart.h and 'make clean install'. If a .xinitrc is not used then you don't need to worry. A .desktop file is automatically created when you run 'make clean install'. + - If you do not have a .xinitrc, you can add autostart commands to the file ~/.config/speedwm/autostart.sh or autostart-once.sh. speedwm-autostart in $PATH will also work. diff --git a/docs/doc-05 b/docs/doc-05 index a5d7a0d..13ac70c 100644 --- a/docs/doc-05 +++ b/docs/doc-05 @@ -13,16 +13,15 @@ Instead, config.h is split into different parts to make it easier to edit. Inste - statusbar.h for adding/removing statuscmd clicks. - ipc.h for adding/removing IPC commands. (If support is compiled in) - toggle.h for adding/removing features from getting compiled in. - - actions.h for changing classes/defines used by keybinds and rules. After you've edited one of the files, you need to run 'make clean install' to reinstall speedwm. Remember that you can change colors through your .Xresources file (see .Xresources and Pywal) meaning you do not need to recompile speedwm. -Another important detail you must keep in mind is that this build comes with a status bar simply named 'status'. +Another important detail you must keep in mind is that this build comes with a status bar simply named 'speedwm_status'. It can be found in the speedwm source code directory. It is just a shell script which adds stuff to your status bar. It will automatically be started when speedwm starts. You can edit the status bar simply by editing 'status' and running 'make clean install'. -You can also configure it by editing '~/.config/speedwm-de/status/config'. +You can also configure it by editing '~/.config/speedwm/statusrc'. If you want to change status bar, edit options.h and set 'static char status' to your status bar binary (must be in $PATH). Alternatively, you can also set it in .Xresources (See .Xresources and Pywal). diff --git a/docs/doc-06 b/docs/doc-06 index 38abd17..f77eaee 100644 --- a/docs/doc-06 +++ b/docs/doc-06 @@ -5,7 +5,7 @@ Colors can be reloaded on-the-fly using the built in wallpaper utility. In order Note that the 'xrdb' dependency is required for both pywal and .Xresources support. -Below is a list of all .Xresources values you can define. The .Xresources file should be placed in ~ or ~/.config by the user. However ~/.config/speedwm-de/speedwmrc should be created automatically, which can (and should most of the time) be used instead. +Below is a list of all .Xresources values you can define. The .Xresources file should be placed in ~ or ~/.config by the user. However ~/.config/speedwm/speedwmrc should be created automatically, which can (and should most of the time) be used instead. If it is not or you want it somewhere else, you can edit 'autostart.h' and 'make clean install'. diff --git a/docs/doc-08 b/docs/doc-08 index b3fb91f..9854a35 100644 --- a/docs/doc-08 +++ b/docs/doc-08 @@ -1,11 +1,13 @@ --- Switching run launcher -- -Some users may prefer to use a different run launcher than dmenu. -Previously all scripts bundled would only run dmenu from $PATH but you can now switch run launcher very easily. +-- Maintaining settings easily -- +speedwm is a personal fork of dwm and will therefore likely have keybinds and other options you may not like. - - Edit options.h and change RUN to your run launcher - - Add "export RUNLAUNCHER=" to your .rc +Because of this, I recommend that you use the patching system to manage your "custom" settings. speedwm has a patching system. It allows you to create a patch with your changes to most of the headers. -Run launchers must support dmenu arguments because otherwise scripts are going to be incompatible. -It must also support the additional '-g' argument that the dmenu grid patch provides unless you modify the scripts bundled. -Keep in mind that if you use a different run launcher, it may not support Pywal/.Xresources. +To create a patch, simply make clean install once and then the docs folder will contain backups of your source code. If you perform changes to any of these four files, run make patch to create patches against the backups in docs and your modified files. Then once you're updating, do make patch_remove, git pull, make patch_install, and make clean install and all your settings will be there. + +The only (obvious) problem with doing this is that eventually the backup files patches are being created against will be pretty old causing patches to no longer apply correctly. If this is the case you will need to create new patches and backups. + +If this seems like more effort than it is worth, maintaining your own fork is always an option. This allows you to perform any options you want yourself. This however doesn't allow you to grab any updates so this should be your second choice. + +Another option, if you use Gentoo, you can add my overlay and install speedwm using the 'savedconfig' USE flag. This USE flag will combine all the headers into one and will be placed in /etc/portage/savedconfig/x11-wm/speedwm-version. To use the settings, simply emerge speedwm again. diff --git a/docs/doc-09 b/docs/doc-09 index 9854a35..70e0738 100644 --- a/docs/doc-09 +++ b/docs/doc-09 @@ -1,13 +1,7 @@ --- Maintaining settings easily -- -speedwm is a personal fork of dwm and will therefore likely have keybinds and other options you may not like. +-- Additional note on autostart -- +If you wish to add autostart entries without recompiling, consider using $HOME/.config/speedwm/autostart.sh. This is a path added to autostart.h and you can fill it with anything you want. You can also use speedwm-autostart. This is a binary that will be executed if it is in $PATH. -Because of this, I recommend that you use the patching system to manage your "custom" settings. speedwm has a patching system. It allows you to create a patch with your changes to most of the headers. - -To create a patch, simply make clean install once and then the docs folder will contain backups of your source code. If you perform changes to any of these four files, run make patch to create patches against the backups in docs and your modified files. Then once you're updating, do make patch_remove, git pull, make patch_install, and make clean install and all your settings will be there. - -The only (obvious) problem with doing this is that eventually the backup files patches are being created against will be pretty old causing patches to no longer apply correctly. If this is the case you will need to create new patches and backups. - -If this seems like more effort than it is worth, maintaining your own fork is always an option. This allows you to perform any options you want yourself. This however doesn't allow you to grab any updates so this should be your second choice. - -Another option, if you use Gentoo, you can add my overlay and install speedwm using the 'savedconfig' USE flag. This USE flag will combine all the headers into one and will be placed in /etc/portage/savedconfig/x11-wm/speedwm-version. To use the settings, simply emerge speedwm again. +Do note that it will NOT just run once. It will run every time you restart and start speedwm (signals count as well). +To get around this, you may wrap stuff in a function in the script and have some way of checking if it has ran before. If it hasn't, call the function. +An alternative is to use the $HOME/.config/speedwm/autostart_once.sh path. This one is autostarted by speedwm_run and is therefore not hardcoded and not affected by speedwm restarting. Just like the previous autostart script, it does not exist so you need to create it. diff --git a/docs/doc-10 b/docs/doc-10 deleted file mode 100644 index 9221c1b..0000000 --- a/docs/doc-10 +++ /dev/null @@ -1,7 +0,0 @@ --- Additional note on autostart -- -If you wish to add autostart entries without recompiling, consider using $HOME/.config/speedwm-de/autostart.sh. This is a path added to autostart.h and you can fill it with anything you want. - -Do note that it will NOT just run once. It will run every time you restart and start speedwm (signals count as well). -To get around this, you may wrap stuff in a function in the script and have some way of checking if it has ran before. If it hasn't, call the function. - -An alternative is to use the $HOME/.config/speedwm-de/autostart_once.sh path. This one is autostarted by speedwm_run and is therefore not hardcoded and not affected by speedwm restarting. Just like the previous autostart script, it does not exist so you need to create it. diff --git a/docs/example.Xresources b/docs/example.Xresources index 477cf59..d2bc8ad 100644 --- a/docs/example.Xresources +++ b/docs/example.Xresources @@ -1,6 +1,6 @@ !! speedwm configuration file !! -!! This is the speedwm configuration file. It will be loaded on startup provided it is located in ~/.config/speedwm-de/speedwmrc. +!! This is the speedwm configuration file. It will be loaded on startup provided it is located in ~/.config/speedwm/speedwmrc. !! If it is not, you need to manually load it. !! !! To reload settings during runtime, run 'speedwm.run -r'. diff --git a/docs/keybinds b/docs/keybinds index 473fc9f..6ca717d 100644 --- a/docs/keybinds +++ b/docs/keybinds @@ -4,18 +4,16 @@ - Super+Shift+Enter - Opens a terminal - Super+Shift+Colon - Opens a dmenu prompt - - Super+Shift+s - Opens 'maim' to take a screenshot and copies it to the clipboard using 'xclip' + - Super+Shift+s - Opens 'maim' to take a screenshot and copies it to the clipboard using 'xclip' (requires speedwm-extras) - Super+Shift+f - Opens the defined file manager - Super+Shift+w - Opens the defined web browser - - Super+Shift+o - Opens the bundled dfmpeg dmenu script to record your screen. + - Super+Shift+o - Opens the speedwm-dfmpeg dmenu script to record your screen. (requires speedwm-extras) - Super+Shift+t - Opens the defined editor in your terminal - Super+Shift+m - Kills the defined music player - Super+Shift+a - Opens the defined mixer in your terminal - Super+Shift+m - Opens the defined music player - Super+Shift+x - Opens the defined system process viewer in your terminal - Super+Shift+c - Opens the defined chat client - - Super+Shift+i - Open a dmenu prompt and open the file the user picks in Zathura - - Super+Shift+p - Open a dmenu prompt and open the file the user picks in Vim - Super+Shift+d - Opens iron in the terminal if it is installed. - Super+Shift+u - Opens the defined RSS reader - Super+Shift+r - Opens the defined email client @@ -36,7 +34,7 @@ - Super+Equal - Remove the scratchpad - Super+Enter - Switch order of windows - Super+Colon - Open a list of desktop entries in dmenu - - Super+Tab - Switch between windows on the same tag. (Like Windows Alt+Tab) + - Super+Tab - Switch between windows on the same tag. (Microsoft Windows-like Alt+Tab) - Super+0 - Reset mfact - Super+r - Reset number of masters - Super+y - Make the current selected window sticky @@ -100,12 +98,11 @@ - Super+Control+Shift+7 - Move the focused window to tag 7 - Super+Control+Shift+8 - Move the focused window to tag 8 - Super+Control+Shift+9 - Move the focused window to tag 9 - - Super+Control+Shift+Esc - Open speedwm-utils + - Super+Control+Shift+Esc - Open speedwm-utils (requires speedwm-extras) - Super+Control+Shift+Arrow - Resize the window to the screen size. - Super+Control+Shift+s - Set a wallpaper - Super+Control+Shift+n - Connect to WLAN (Using iwd) - Super+Control+Shift+b - Connect to a Bluetooth device (Using bluez) - - Super+Control+Shift+f - Open up a list of speedwm config files in dmenu that you can edit. - Super+Control+Shift+q - Pauses your music - Super+Control+Shift+w - Decreases your music volume - Super+Control+Shift+e - Increase your music volume @@ -131,7 +128,7 @@ - Super+t & o - Toggle inactive fade - Super+t & b - Show all bar modules - Super+t & s - Make the current selected window sticky - - Super+c & w - Get the weather (Using wttr.in) + - Super+c & w - Get the weather (Using wttr.in) using speedwm-core (requires speedwm-extras) - Super+c & n - Switch to the next track - Super+c & p - Switch to the previous track - Super+g & t - Toggle gaps @@ -160,11 +157,11 @@ - Pause button - Pauses the current track - Stop button - Stops your defined music player - Browser button - Opens your defined web browser - - Power button - Ask if you wanna shut down, restart or lock your computer. + - Power button - Ask if you wanna shut down, restart or lock your computer. (requires speedwm-extras) - Email button - Open your defined email client - System button - Open your defined status viewer in a terminal - Music button - Open your defined music player - - WLAN button - Disconnect from WLAN + - WLAN button - Disconnect from WLAN (requires speedwm-extras) -- Mouse -- @@ -176,13 +173,13 @@ - Layout indicator (Middle click) - Switch to the next layout - Layout indicator (Right click) - Open a dmenu list of all layouts - Window title (Left click) - Hide/Show the window - - Window title (Right click) - Open speedwm-utils + - Window title (Right click) - Open speedwm-utils (requires speedwm-extras) - Focused window (Super+Alt+Left click) - Move the focused window around - Focused window (Super+Alt+Middle click) - Make the focused window floating - Focused window title (Middle click) - Rotate stack - Dragging (Super+Right click) - Increase/decrease size of each window (mfact) - Dragging (SuperControl+Right click) - Increase/decrease cfact - - Root window (Right click) - List .desktop entries and open them + - Root window (Right click) - List .desktop entries and open them (requires j4-dmenu-desktop) There are also keybinds for statuscmd, but you must implement it into your own status bar. See mouse.h for more information. diff --git a/draw.h b/draw.h index c82865a..13aa46a 100644 --- a/draw.h +++ b/draw.h @@ -40,7 +40,7 @@ void drw_resize(Drw *drw, unsigned int w, unsigned int h); void drw_free(Drw *drw); /* Fnt abstraction */ -Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount); +Fnt *drw_fontset_create(Drw* drw, const char *fontarray[], size_t fontcount); void drw_fontset_free(Fnt* set); unsigned int drw_fontset_getwidth(Drw *drw, const char *text); void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); diff --git a/keybinds.h b/keybinds.h index 7531f0b..2aded4c 100644 --- a/keybinds.h +++ b/keybinds.h @@ -22,6 +22,10 @@ * Once you're done with your edits, run 'make clean install'. */ +/* For terminal applications */ +#define TERMINAL "st -e " + + /* Modifier keys * Mod4Mask | Super (Windows/command) key * Mod1Mask | Alt key @@ -40,48 +44,46 @@ static Key keys[] = { /* modifier chain key key function argument */ /* Run keybinds */ - { MODIFIER1|SHIFT, -1, XK_semicolon, spawn, cmd( RUN ) }, - { MODIFIER1, -1, XK_semicolon, spawn, cmd( RUN_DESKTOP ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_semicolon, spawn, cmd( RUN_ALT ) }, + { MODIFIER1|SHIFT, -1, XK_semicolon, spawn, cmd( "dmenu_run -l 0 -p 'Run:'" ) }, + { MODIFIER1, -1, XK_semicolon, spawn, cmd( "j4-dmenu-desktop --term=st --dmenu='dmenu -l 20 -p Open:'" ) }, + { MODIFIER1|CONTROL|SHIFT, -1, XK_semicolon, spawn, cmd( "speedwm-applist" ) }, /* Application keybinds */ { MODIFIER1|SHIFT, -1, XK_Return, spawn, cmd( TERMINAL ) }, - { MODIFIER1|SHIFT, -1, XK_s, spawn, cmd( SCREENSHOT ) }, - { MODIFIER1|SHIFT, -1, XK_f, spawn, cmd( TERMINAL FILEMANAGER ) }, - { MODIFIER1|SHIFT, -1, XK_w, spawn, cmd( BROWSER ) }, + { MODIFIER1|SHIFT, -1, XK_s, spawn, cmd( "speedwm-screenshotutil -s" ) }, + { MODIFIER1|SHIFT, -1, XK_f, spawn, cmd( TERMINAL "vifmrun || vifm" ) }, + { MODIFIER1|SHIFT, -1, XK_w, spawn, cmd( "firefox" ) }, { MODIFIER1|SHIFT, -1, XK_o, spawn, cmd( "speedwm-dfmpeg" ) }, - { MODIFIER1|SHIFT, -1, XK_d, spawn, cmd( TERMINAL CHAT2 ) }, - { MODIFIER1|SHIFT, -1, XK_t, spawn, cmd( TERMINAL EDITOR ) }, - { MODIFIER1|SHIFT, -1, XK_a, spawn, cmd( TERMINAL MIXER ) }, - { MODIFIER1|SHIFT, -1, XK_m, spawn, cmd( TERMINAL MUSIC ) }, -#if USESWITCHER - { MODIFIER1, -1, XK_Tab, switcherstart, {0} }, -#endif + { MODIFIER1|SHIFT, -1, XK_d, spawn, cmd( TERMINAL "iron" ) }, + { MODIFIER1|SHIFT, -1, XK_t, spawn, cmd( TERMINAL "nvim" ) }, + { MODIFIER1|SHIFT, -1, XK_a, spawn, cmd( TERMINAL "speedwm-audioctrl -runmixer" ) }, + { MODIFIER1|SHIFT, -1, XK_m, spawn, cmd( TERMINAL "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" ) }, { MODIFIER1|SHIFT, -1, XK_Tab, spawn, cmd( "speedwm-winnav" ) }, - { MODIFIER1|SHIFT, -1, XK_x, spawn, cmd( TERMINAL SYSTEMSTAT ) }, - { MODIFIER1|SHIFT, -1, XK_c, spawn, cmd( TERMINAL CHAT ) }, + { MODIFIER1|SHIFT, -1, XK_x, spawn, cmd( TERMINAL "htop" ) }, + { MODIFIER1|SHIFT, -1, XK_c, spawn, cmd( TERMINAL "tmux new-session -A -D -s weechat $(which --skip-alias weechat)" ) }, { MODIFIER1|SHIFT, -1, XK_Escape, spawn, cmd( "speedwm-shutdown" ) }, - { MODIFIER1|SHIFT, -1, XK_u, spawn, cmd( TERMINAL RSS ) }, - { MODIFIER1|SHIFT, -1, XK_r, spawn, cmd( TERMINAL EMAIL ) }, + { MODIFIER1|SHIFT, -1, XK_u, spawn, cmd( TERMINAL "newsboat" ) }, + { MODIFIER1|SHIFT, -1, XK_r, spawn, cmd( TERMINAL "aerc" ) }, { MODIFIER1|CONTROL, -1, XK_Tab, spawn, cmd( "speedwm-utils layout" ) }, { MODIFIER1|CONTROL, -1, XK_h, spawn, cmd( TERMINAL "speedwm-help -2" ) }, - { MODIFIER1|CONTROL, -1, XK_s, spawn, cmd( SCREENSHOT_FULL ) }, - { MODIFIER1|CONTROL, -1, XK_m, spawn, cmd( KILLMUSIC ) }, - { MODIFIER1|CONTROL, -1, XK_q, spawn, cmd( VOL_MUTE ) }, - { MODIFIER1|CONTROL, -1, XK_w, spawn, cmd( VOL_DOWN ) }, - { MODIFIER1|CONTROL, -1, XK_e, spawn, cmd( VOL_UP ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_q, spawn, cmd( PAUSEMUSIC ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_w, spawn, cmd( DOWNMUSIC ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_e, spawn, cmd( UPMUSIC ) }, + { MODIFIER1|CONTROL, -1, XK_s, spawn, cmd( "speedwm-screenshotutil -f" ) }, + { MODIFIER1|CONTROL, -1, XK_m, spawn, cmd( "pkill cmus" ) }, + { MODIFIER1|CONTROL, -1, XK_q, spawn, cmd( "speedwm-audioctrl -mute" ) }, + { MODIFIER1|CONTROL, -1, XK_w, spawn, cmd( "speedwm-audioctrl -lower" ) }, + { MODIFIER1|CONTROL, -1, XK_e, spawn, cmd( "speedwm-audioctrl -raise" ) }, + { MODIFIER1|CONTROL|SHIFT, -1, XK_q, spawn, cmd( "cmus-remote --pause" ) }, + { MODIFIER1|CONTROL|SHIFT, -1, XK_w, spawn, cmd( "cmus-remote --volume -3000" ) }, + { MODIFIER1|CONTROL|SHIFT, -1, XK_e, spawn, cmd( "cmus-remote --volume +3000" ) }, { MODIFIER1|CONTROL|SHIFT, -1, XK_Escape, spawn, cmd( "speedwm-utils" ) }, { MODIFIER1|CONTROL|SHIFT, -1, XK_s, spawn, cmd( "speedwm-swal" ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_n, spawn, cmd( NETWORK ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_b, spawn, cmd( BLUETOOTH ) }, - { MODIFIER1|CONTROL|SHIFT, -1, XK_f, spawn, cmd( "speedwm_run -configure" ) }, + { MODIFIER1|CONTROL|SHIFT, -1, XK_n, spawn, cmd( "speedwm-netctrl" ) }, + { MODIFIER1|CONTROL|SHIFT, -1, XK_b, spawn, cmd( "speedwm-btctrl" ) }, { MODIFIER1|CONTROL|SHIFT, -1, XK_r, spawn, cmd( "speedwm_run -r" ) }, -#if USESYSTRAY + + /* System tray */ + #if USESYSTRAY { MODIFIER1, -1, XK_s, togglesystray, {0} }, -#endif + #endif /* Layout keybinds */ { MODIFIER1|CONTROL|SHIFT, -1, XK_a, cyclelayout, {.i = -1 } }, @@ -125,6 +127,9 @@ static Key keys[] = { { MODIFIER1|CONTROL|SHIFT, -1, XK_0, resetbarheight, {0} }, { MODIFIER1|CONTROL|SHIFT, -1, XK_equal, setbarheight, {.i = +1} }, { MODIFIER1|CONTROL|SHIFT, -1, XK_minus, setbarheight, {.i = -1} }, + #if USESWITCHER + { MODIFIER1, -1, XK_Tab, switcherstart, {0} }, + #endif /* Floating mode keybinds */ { MODIFIER1, -1, XK_w, moveresizeaspect, {.i = +24} }, @@ -169,8 +174,8 @@ static Key keys[] = { /* Chained keybinds */ { MODIFIER1, XK_c, XK_w, spawn, cmd( TERMINAL "speedwm-core -curl-weather" ) }, - { MODIFIER1, XK_c, XK_n, spawn, cmd( NEXTMUSIC ) }, - { MODIFIER1, XK_c, XK_p, spawn, cmd( PREVMUSIC ) }, + { MODIFIER1, XK_c, XK_n, spawn, cmd( "cmus-remote --next" ) }, + { MODIFIER1, XK_c, XK_p, spawn, cmd( "cmus-remote --prev" ) }, { MODIFIER1, XK_r, XK_s, spawn, cmd( "screenkey" ) }, { MODIFIER1, XK_r, XK_d, spawn, cmd( "pkill screenkey" ) }, { MODIFIER1, XK_t, XK_r, reorganizetags, {0} }, @@ -215,19 +220,19 @@ static Key keys[] = { /* Media buttons */ #if USEMEDIA - { 0, -1, XF86XK_AudioMute, spawn, cmd( VOL_MUTE ) }, - { 0, -1, XF86XK_AudioRaiseVolume, spawn, cmd( VOL_UP ) }, - { 0, -1, XF86XK_AudioLowerVolume, spawn, cmd( VOL_DOWN ) }, - { 0, -1, XF86XK_AudioPrev, spawn, cmd( PREVMUSIC ) }, - { 0, -1, XF86XK_AudioNext, spawn, cmd( NEXTMUSIC ) }, - { 0, -1, XF86XK_AudioStop, spawn, cmd( KILLMUSIC ) }, - { 0, -1, XF86XK_AudioPause, spawn, cmd( PAUSEMUSIC ) }, - { 0, -1, XF86XK_WWW, spawn, cmd( BROWSER ) }, + { 0, -1, XF86XK_AudioMute, spawn, cmd( "speedwm-audioctrl -mute" ) }, + { 0, -1, XF86XK_AudioRaiseVolume, spawn, cmd( "speedwm-audioctrl -raise" ) }, + { 0, -1, XF86XK_AudioLowerVolume, spawn, cmd( "speedwm-audioctrl -lower" ) }, + { 0, -1, XF86XK_AudioPrev, spawn, cmd( "cmus-remote --prev" ) }, + { 0, -1, XF86XK_AudioNext, spawn, cmd( "cmus-remote --next" ) }, + { 0, -1, XF86XK_AudioStop, spawn, cmd( "pkill cmus" ) }, + { 0, -1, XF86XK_AudioPause, spawn, cmd( "cmus-remote --pause" ) }, + { 0, -1, XF86XK_WWW, spawn, cmd( "firefox" ) }, { 0, -1, XF86XK_PowerOff, spawn, cmd( "speedwm-shutdown" ) }, - { 0, -1, XF86XK_Sleep, spawn, cmd( LOCKER ) }, - { 0, -1, XF86XK_Mail, spawn, cmd( TERMINAL EMAIL ) }, - { 0, -1, XF86XK_TaskPane, spawn, cmd( TERMINAL SYSTEMSTAT ) }, - { 0, -1, XF86XK_WLAN, spawn, cmd( KILLNETWORK ) }, - { 0, -1, XF86XK_Music, spawn, cmd( TERMINAL MUSIC ) }, + { 0, -1, XF86XK_Sleep, spawn, cmd( "slock" ) }, + { 0, -1, XF86XK_Mail, spawn, cmd( TERMINAL "aerc" ) }, + { 0, -1, XF86XK_TaskPane, spawn, cmd( TERMINAL "htop" ) }, + { 0, -1, XF86XK_WLAN, spawn, cmd( "speedwm-netctrl disconnect" ) }, + { 0, -1, XF86XK_Music, spawn, cmd( TERMINAL "tmux new-session -A -D -s cmus $(which --skip-alias cmus)" ) }, #endif }; diff --git a/layouts.c b/layouts.c index 23000ad..17a9935 100644 --- a/layouts.c +++ b/layouts.c @@ -1507,17 +1507,17 @@ void set_s_layout(const Arg *arg) char pathbuf[1024]; char *home = getenv("HOME"); if (home != NULL) { - snprintf(pathbuf, 1023, "%s/" CUSTOM_HISTFILE, home); + snprintf(pathbuf, 1023, "%s/", customhistfile, home); pathbuf[1023] = '\0'; /* make sure the history file exists */ - hf = fopen(CUSTOM_HISTFILE, "a"); fclose(hf); - system("sort " CUSTOM_HISTFILE " | uniq > " CUSTOM_HISTFILE "~"); - system("mv " CUSTOM_HISTFILE "~ " CUSTOM_HISTFILE); + hf = fopen(customhistfile, "a"); fclose(hf); + system("sort" customhistfile " | uniq > " customhistfile "~"); + system("mv " customhistfile "~ " customhistfile); - pp = popen(RUN_CUSTOM_LAYOUT CUSTOM_HISTFILE, "r"); + pp = popen(customprompt customhistfile, "r"); } else { - pp = popen(RUN_CUSTOM_LAYOUT, "r"); + pp = popen(customprompt, "r"); } @@ -1531,7 +1531,7 @@ void set_s_layout(const Arg *arg) if (buf[0] == '\0') return; - hf = fopen(CUSTOM_HISTFILE, "a"); + hf = fopen(customhistfile, "a"); fprintf(hf, "%s", buf); fclose(hf); diff --git a/modules/module_bat b/modules/module_bat index 54b6fce..211ba57 100755 --- a/modules/module_bat +++ b/modules/module_bat @@ -2,7 +2,7 @@ # battery module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" # argument 1 diff --git a/modules/module_date b/modules/module_date index baf2ae2..f268d4b 100755 --- a/modules/module_date +++ b/modules/module_date @@ -2,7 +2,7 @@ # date module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_dfmpeg b/modules/module_dfmpeg index a5f27e8..711db67 100755 --- a/modules/module_dfmpeg +++ b/modules/module_dfmpeg @@ -2,7 +2,7 @@ # dfmpeg module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_music b/modules/module_music index 6b4fb32..c7f9001 100755 --- a/modules/module_music +++ b/modules/module_music @@ -2,7 +2,7 @@ # music module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_net b/modules/module_net index 4349fd5..fdde027 100755 --- a/modules/module_net +++ b/modules/module_net @@ -2,7 +2,7 @@ # network module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_news b/modules/module_news index e245b3f..29ea17c 100755 --- a/modules/module_news +++ b/modules/module_news @@ -2,7 +2,7 @@ # news module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" # argument 1 diff --git a/modules/module_ram b/modules/module_ram index d5b9b47..b784cd0 100755 --- a/modules/module_ram +++ b/modules/module_ram @@ -2,7 +2,7 @@ # ram module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_temp b/modules/module_temp index 00573ae..5a70373 100755 --- a/modules/module_temp +++ b/modules/module_temp @@ -2,7 +2,7 @@ # cpu temp module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_time b/modules/module_time index 840708f..ec26079 100755 --- a/modules/module_time +++ b/modules/module_time @@ -2,7 +2,7 @@ # time module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_vol b/modules/module_vol index afbeb00..b8f8d66 100755 --- a/modules/module_vol +++ b/modules/module_vol @@ -2,7 +2,7 @@ # volume module for status/stellar # # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" ARG1="$1" diff --git a/modules/module_weather b/modules/module_weather index bbbcbd3..891c23c 100755 --- a/modules/module_weather +++ b/modules/module_weather @@ -2,7 +2,7 @@ # weather module for status/stellar # load config -. $HOME/.config/speedwm-de/status/config +. $HOME/.config/speedwm-de/statusrc BINDIR="$(dirname $(command -v speedwm_status))/" # argument 1 diff --git a/mouse.h b/mouse.h index 4f687e4..978d99e 100644 --- a/mouse.h +++ b/mouse.h @@ -33,7 +33,7 @@ static const Button buttons[] = { { ClkStatusText, 0, Button3, spawn, {.v = statuscmd } }, { ClkWinTitle, 0, Button1, togglewin, {0} }, { ClkWinTitle, 0, Button3, spawn, cmd( "speedwm-utils" ) }, - { ClkRootWin, 0, Button3, spawn, cmd( RUN_DESKTOP ) }, + { ClkRootWin, 0, Button3, spawn, cmd( "j4-dmenu-desktop --term=st --dmenu='dmenu -l 20 -p Open:'" ) }, { ClkTagBar, 0, Button1, view, {0} }, { ClkTagBar, 0, Button4, view, {0} }, { ClkTagBar, 0, Button5, view, {0} }, diff --git a/options.h b/options.h index b83f111..c21831d 100644 --- a/options.h +++ b/options.h @@ -3,6 +3,7 @@ * -- What is speedwm -- * * speedwm is a fork of suckless.org's dwm, a window manager for X. + * * Unlike the original 'dwm' window manager, speedwm tries to be minimal, just like dwm but also has functionality and aesthetics as a goal. * speedwm has a bigger codebase than suckless.org's dwm, however is still much more minimal than other tiling window managers such as i3-gaps while providing more features for the user. * @@ -17,7 +18,7 @@ * Otherwise you may maintain your own fork of speedwm if you prefer. * * In addition to this, if speedwm doesn't have a feature you want, there's nothing stopping you from adding it as it still follows the suckless philosophy somewhat. - * While there are VERY likely going to be patch conflicts, this is still dwm, just modified. + * While there are VERY likely going to be patch conflicts, this is still dwm, just modified. I suggest you take the time to learn the codebase for dwm as it can be applied to speedwm. * * Below is a configuration file. Read the instructions below for information about how to configure it. * @@ -29,16 +30,14 @@ * * -- What is this file for? -- * - * The header you are currently reading is for changing what software you want to use. An important thing to note is that because this build of speedwm auto-starts software such as your compositor, you may want to change this by changing '#define COMPOSITOR' for example. Same goes for other software. + * The header you are currently reading is for changing options for various features. * - * If you aren't aware of this, do not add anything to your .xinitrc if it is listed in autostart.h - * You can also autostart shell scripts using the $HOME/.config/speedwm-de/autostart.sh script. It is not there by default but if you want to use it, just create the file, chmod +x it and add your shell script to it. + * If you are a user of a display manager, you may not be able to use .xinitrc. Because of this you can autostart shell scripts using the $HOME/.config/speedwm/autostart.sh script. It is not there by default but if you want to use it, just create the file, chmod +x it and add your shell script to it. There is also the autostart-once.sh script in the same directory which is only started once. * * -- What are all the headers about? -- * * speedwm unlike dwm doesn't just have a single header, config.h but rather multiple. Below is a list of them * - * - If you were looking for the software options, they can be found here in actions.h * - If you were looking for colors, and other options, they can be found here in options.h * - If you were looking for the keybinds, they can be found in keybinds.h * - If you use another operating system such as OpenBSD, FreeBSD or Solaris (Not GNU/Linux), edit host.mk @@ -53,6 +52,7 @@ * The goal of this is to decrease the size of headers and make it easier to find what you want to find, because if I were to combine all of this into one big file, it would be really difficult to hack on it (see dwm-flexipatch for an example). * * Also note that: + * * speedwm.c = dwm.c * host.mk = config.mk * Rest of the headers = config.h/config.def.h @@ -62,16 +62,16 @@ * I do not recommend that you attempt to use the patch coreutil as it is not likely to patch successfully. * There are however a few speedwm specific patches available on my Codeberg (https://codeberg.org/speedie/patches). These were created when I removed a feature that I decided was not worth keeping in. * - * Alternatively, you can change some of these in ~/.config/speedwm-de/speedwmrc. + * Alternatively, you can change some of these in ~/.config/speedwm/speedwmrc. * * Do note that settings in speedwmrc will override the settings in all of the headers (as long as the file is valid). - * If you do not like this behavior, you may add "rm -f $HOME/.config/speedwm-de/speedwmrc" to autostart.sh which will make sure the speedwmrc options are not used. + * If you do not like this behavior, you may add "rm -f $HOME/.config/speedwm/speedwmrc" to autostart.sh which will make sure the speedwmrc options are not used. * ******************************************************/ /* Options * - * If xrdb is installed, you can simply edit ~/.config/speedwm-de/speedwmrc instead of recompiling. + * If xrdb is installed, you can simply edit ~/.config/speedwm/speedwmrc instead of recompiling. * Once you're done with your edits, run 'make clean install'. * * It should be noted that options in speedwmrc will override the options in here. This means if an option does nothing here, it's likely different in the config file. @@ -138,13 +138,8 @@ static char font1[] = { "NotoSans-Regular:size=8:antia static char font2[] = { "fontawesome:size=8:antialiasing=true" }; /* Second font */ static char font3[] = { "Noto Color Emoji:size=8:antialiasing=true" }; /* Third font */ -/* Extra fonts */ -static char *fonts[] = { "Noto Emoji:size=8:antialiasing=true", - "monospace:size=8:antialiasing=true", -}; - /* Status options */ -static char status[] = "status"; /* Status bar to use, stellar for stellar, dwmblocks for dwmblocks, slstatus for slstatus, etc. */ +static char status[] = "speedwm_status"; /* Status bar to use, stellar for stellar, dwmblocks for dwmblocks, slstatus for slstatus, etc. */ static char defaultstatus[] = ""; /* What to print when a status bar is not running */ /* Alternate bar @@ -245,6 +240,10 @@ static char deckformat[] = "[%d]"; /* Format of the deck co /* Dynamic Grid layout */ static int forcevsplit = 1; /* Force two clients to always split vertically in the dynamic grid layout */ +/* Custom layout */ +#define customhistfile ".config/speedwm/history" /* History file */ +#define customprompt "dmenu -i -l 10 -p 'Enter an S expression >' <" /* Run launcher to use for the custom layout */ + /* Resetting */ static int resetlayout = 1; /* Reset layout when there is only one client visible */ static int resetmfact = 1; /* Reset mfact when there is only one client visible */ diff --git a/rules.h b/rules.h index dba887d..9937d6e 100644 --- a/rules.h +++ b/rules.h @@ -8,22 +8,26 @@ * - isterminal: Whether or not the CLASS, INSTANCE or TITLE is a terminal or not (1/0) * - noswallow: Whether or not the CLASS, INSTANCE or TITLE gets swallowed by a terminal or not (1/0) * - ignoretransient: Whether or not to ignore transient windows for CLASS, INSTANCE or TITLE (1/0) + * - unmanaged: Whether or not to allow speedwm to manage the window (tile it, focus it, move it, etc.) * * For the rest, leave as they currently are and copy them for new rules. * Once you're done with your edits, run 'make clean install'. * ***************************************************************/ + +/* For terminal applications */ +#define TERMINAL_CLASS "st" + static const Rule rules[] = { /* class instance title tags mask isfloating ispermanent isterminal noswallow monitor unmanaged ignoretransient scratch key */ { TERMINAL_CLASS, NULL, NULL, 0, 0, 0, 1, 0, -1, 0, 0, 0 }, { TERMINAL_CLASS, NULL, "sxiv", 0, 0, 0, 0, 0, -1, 0, 0, 0 }, - { TERMINAL_CLASS, NULL, FILEMANAGER_CLASS, 0, 0, 0, 1, 0, -1, 0, 0, 0 }, - { PDF_CLASS, NULL, NULL, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, - { TERMINAL_CLASS, NULL, EDITOR, 0, 0, 0, 1, 1, -1, 0, 0, 0 }, - { TERMINAL_CLASS, NULL, MUSIC, 0, 0, 0, 0, 1, -1, 0, 0, 0 }, + { TERMINAL_CLASS, NULL, "Vifm", 0, 0, 0, 1, 0, -1, 0, 0, 0 }, + { "Zathura", NULL, NULL, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, + { TERMINAL_CLASS, NULL, "nvim", 0, 0, 0, 1, 1, -1, 0, 0, 0 }, + { TERMINAL_CLASS, NULL, "cmus", 0, 0, 0, 0, 1, -1, 0, 0, 0 }, { TERMINAL_CLASS, NULL, notitle, 0, 0, 0, 0, 1, -1, 0, 0, 0 }, - { TERMINAL_CLASS, NULL, MIXER, 0, 1, 0, 0, 1, -1, 0, 0, 0 }, - { BROWSER_CLASS, NULL, NULL, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, + { "Navigator", NULL, NULL, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, { "mpv", NULL, NULL, 0, 0, 0, 0, 0, -1, 0, 0, 0 }, { "tabbed", NULL, NULL, 0, 0, 0, 0, 1, -1, 0, 0, 0 }, { "trayer", NULL, NULL, 0, 1, 1, 0, 1, -1, 1, 0, 0 }, diff --git a/scripts/speedwm-applist b/scripts/speedwm-applist deleted file mode 100755 index 34e16dc..0000000 --- a/scripts/speedwm-applist +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/sh -# speedwm-applist -# list extra applications - -# rl -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu ;; -esac - -# assume we have grid as default -HAVE_GRID="true" - -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config - echo "Loaded configuration!" -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -# grid number is one -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -# grid argument -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -# create applist -MK_APPLIST() { - if [ -e "$HOME/.local/share/speedwm/applist" ]; then - USER_CMD="$(printf "$(cat $HOME/.local/share/speedwm/applist)\n------\nAdd command\nRemove command\nClear\n" | $RUNLAUNCHER -l 20 -p 'Run:' $GRIDARG $GRIDNUM)" - else - mkdir -p $HOME/.local/share/speedwm - echo "No commands added." > $HOME/.local/share/speedwm/applist - $0 && exit 0 - fi -} - -# remove commands -REMOVE_CMD() { - USER_CMD="$(printf "$(cat $HOME/.local/share/speedwm/applist)\n------\nAdd command\nRemove command\nClear\n" | $RUNLAUNCHER -l 20 -p 'Remove: ' $GRIDARG $GRIDNUM)" - - if [ "$(cat $HOME/.local/share/speedwm/applist | wc -l)" -lt "2" ]; then - rm -f $HOME/.local/share/speedwm/applist - else - grep -v "$USER_CMD" $HOME/.local/share/speedwm/applist | sed ':a;N;$!ba;s/\n//g' > /tmp/applist - mv /tmp/applist $HOME/.local/share/speedwm/applist - fi - - $0 && exit 0 -} - - -# clear commands -CLEAR_CMD() { - case "$(printf "Yes\nNo\n" | $RUNLAUNCHER -l 2 -p 'Are you sure?')" in - "Yes") rm -f $HOME/.local/share/speedwm/applist ;; - esac - - $0 && exit 0 -} - - -# add command -ADD_CMD() { - grep -q "No commands added" $HOME/.local/share/speedwm/applist && rm -f $HOME/.local/share/speedwm/applist - USER_I_ARG="$(printf "" | $RUNLAUNCHER -l 0 -p 'Enter a command:' $GRIDARG $GRIDNUM)" - printf "$USER_I_ARG\n" >> $HOME/.local/share/speedwm/applist - $0 && exit 0 -} - -MK_APPLIST - -# check user cmd -if [ "$USER_CMD" = "" ]; then - exit 0 -else - if [ "$USER_CMD" = "Add command" ]; then - ADD_CMD - else - if [ "$USER_CMD" = "Clear" ]; then - CLEAR_CMD - else - if [ "$USER_CMD" = "Remove command" ]; then - REMOVE_CMD - else - $USER_CMD - fi - fi - fi -fi diff --git a/scripts/speedwm-audioctrl b/scripts/speedwm-audioctrl deleted file mode 100755 index 2e44bf2..0000000 --- a/scripts/speedwm-audioctrl +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -# speedwm-audioctrl -# This simple shell script handles audio controls for speedwm. -# Run speedwm-audioctrl -help for more information! -# License: GPLv3. - -BINDIR="$(dirname $(command -v speedwm_status))/" - -MUTE() { - # Mute for pulseaudio/pipewire - if [ "$AUDIO" = "pulse" ]; then - if [ -e "${BINDIR}pactl" ]; then - pactl set-sink-mute 0 toggle - if [ -e "${BINDIR}notify-send" ]; then - if [ "$remute" = "" ]; then - notify-send "๏šฉ Toggled mute" - fi - fi - else - amixer set Master toggle - if [ -e "${BINDIR}notify-send" ]; then - if [ "$remute" = "" ]; then - notify-send "๏šฉ Toggled mute" - fi - fi - fi - fi -} - -RAISE() { - if [ "$AUDIO" = "pulse" ]; then - if [ -e "${BINDIR}pactl" ]; then - if [ "$(pactl get-sink-volume 0 | awk '{ print $5;exit }' | sed 's/%//g')" -gt "100" ]; then - pactl set-sink-volume 0 100% - else - pactl set-sink-volume 0 +10% - test ${BINDIR}notify-send && notify-send "๏€จ $(pactl get-sink-volume 0 | awk '{ print $5;exit }')" - fi - fi - else - if [ "$(amixer -c 0 get Master | tail -n 1 | sed -r "s/.*\[(.*)%\].*/\1/")" = "100" ]; then - a=$a - else - amixer -c 0 set Master 7%+ - ls ${BINDIR}notify-send && notify-send "๏€จ $(amixer -c 0 get Master | tail -n 1 | sed -r "s/.*\[(.*)%\].*/\1/")%" - fi - fi -} - -LOWER() { - if [ "$AUDIO" = "pulse" ]; then - if [ -e "${BINDIR}pactl" ]; then - if [ "$(pactl get-sink-volume 0 | awk '{ print $5;exit }' | sed 's/%//g')" != "0" ]; then - pactl set-sink-volume 0 -10% - test ${BINDIR}notify-send && notify-send "๏€จ $(pactl get-sink-volume 0 | awk '{ print $5;exit }')" - fi - - fi - else - if [ "$(amixer -c 0 get Master | tail -n 1 | sed -r "s/.*\[(.*)%\].*/\1/")" = "0" ]; then - a=$a - else - amixer -c 0 set Master 7%- - test ${BINDIR}notify-send && notify-send "๏€ง $(amixer -c 0 get Master | tail -n 1 | sed -r "s/.*\[(.*)%\].*/\1/")%" - fi - fi -} - -GETVOL() { - if [ "$AUDIO" = "pulse" ]; then - if [ -e "${BINDIR}pactl" ]; then - pactl get-sink-volume 0 | awk '{ print $5;exit }' - fi - else - echo "$(amixer -c 0 get Master | tail -n 1 | sed -r "s/.*\[(.*)%\].*/\1/")%" - fi -} - -GETMUTE() { - if [ "$AUDIO" = "pulse" ]; then - if [ -e "${BINDIR}pactl" ]; then - pactl get-sink-mute 0 | sed "s/Mute: //; s/no/Not muted/; s/yes/Muted/g" - fi - fi -} - -SWITCH() { - ls $HOME/.local/share/audioctrl-status || echo "0" > $HOME/.local/share/audioctrl-status - if [ "$(cat $HOME/.local/share/audioctrl-status)" = "0" ]; then - amixer -c 0 sset 'Auto-Mute Mode' Enabled ; echo "1" > $HOME/.local/share/audioctrl-status - if [ -e "${BINDIR}notify-send" ]; then - notify-send "๏€ฅ Switched to headphones." - fi - else - amixer -c 0 sset 'Auto-Mute Mode' Disabled ; echo "0" > $HOME/.local/share/audioctrl-status - if [ -e "${BINDIR}notify-send" ]; then - notify-send "๏€ฆ Switched to speakers." - fi - fi -} - -RUNMIXER() { - if [ "$AUDIO" = "pulse" ]; then - if [ -e "${BINDIR}pulsemixer" ]; then - pulsemixer - elif [ -e "${BINDIR}alsamixer" ]; then - alsamixer - fi - fi -} - -AUDIO=$2 -case "$2" in -"") AUDIO=alsa -if [ -e "${BINDIR}pulsemixer" ]; then - AUDIO=pulse -else - if [ -e "${BINDIR}pactl" ]; then - AUDIO=pulse - fi -fi -;; -esac - -# Update status -UPDATESTATUS() { - pkill -x status && status & -} - -case "$1" in -"-mute") MUTE && GETMUTE > /tmp/speedwm-audioctrl-mutestatus ;; -"-remute") remute=true ; MUTE && GETMUTE > /tmp/speedwm-audioctrl-mutestatus ; MUTE && GETMUTE > /tmp/speedwm-audioctrl-mutestatus ; remute="" ; exit 0 ;; -"-raise") RAISE ;; -"-lower") LOWER ;; -"-switch") SWITCH && exit 0 ;; -"-getvol") GETVOL && exit 0 ;; -"-getmute") GETMUTE > /tmp/speedwm-audioctrl-mutestatus && exit 0 ;; -"-getbackend") printf "$AUDIO\n" && exit 0 ;; -"-runmixer") RUNMIXER && exit 0 ;; -"-help") printf "speedwm-audioctrl\n-mute | Toggle mute\n-raise | Raise the volume by 7\n-lower | Lower the volume by 7\n-switch | Toggle output\n-getvol | Get current volume in percentage\n-getmute | Get mute status\n-getbackend | Get audio backend (ALSA, PulseAudio, etc.)\n-runmixer | Run the audio mixer detected on the system\n-remute | Mute and unmute.\n-help | Display this help screen\nNo arguments | Display this help screen\n"; exit 0 ;; -"") $0 -help && exit 0 ;; -esac - -#pgrep -x status && UPDATESTATUS -# no longer needed :) diff --git a/scripts/speedwm-btctrl b/scripts/speedwm-btctrl deleted file mode 100755 index 12476d3..0000000 --- a/scripts/speedwm-btctrl +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -# speedwm-btctrl -# Basic dmenu/other run launcher Bluetooth manager written for speedwm. -# Licensed under GNU GPLv3. - -# Check stuff -CHECK() { - case "$RUNLAUNCHER" in - "") RUNLAUNCHER=dmenu ;; - esac - - BINDIR="$(dirname $(command -v speedwm_status))/" -} - -HAVE_GRID="true" - -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -CHECK - -# Help -HELP() { - printf "\n1. Turn on your device\n2. Make sure the bluetooth service is running. If it is not, start it.\n3. Press the pair button on your device\n4. Select your device in the list of devices. If it does not show up, select 'Refresh'.\n5. Select 'Pair' and then optionally 'Trust' to save it in the list of devices.\n6. And finally, select 'Connect' to connect the device." | $RUNLAUNCHER -l 12 $GRIDARG $GRIDNUM -p 'How to use' - $0 && exit 0 -} - -# Enable bluetooth and scan for devices -ENABLE_BT() { - bluetoothctl power on > /dev/null && echo "Power: On" - bluetoothctl scan on & # Start scanning for devices - bluetoothctl devices | grep -q "No default controller" && printf "No Bluetooth controller was found.\n" && exit 1 - USEROPT_1="$(printf "$(bluetoothctl devices | cut -d\ -f3-)\n------\nRefresh\nHelp\nExit" | $RUNLAUNCHER -l 12 $GRIDARG $GRIDNUM -p "Select a device")" - - # Check what to do - case "$USEROPT_1" in - "") exit 0 ;; - "Refresh") ENABLE_BT ;; - "Exit") exit 0 ;; - "Help") HELP && $0 && exit 0 ;; - esac - - SELDEVICE_MAC="$(bluetoothctl devices | grep "$USEROPT_1$" | awk '{ print $2 }')" - echo "$SELDEVICE_MAC" - - # Check if a MAC was grabbed - case "$SELDEVICE_MAC" in - "") echo "Could not get MAC" && exit 1 ;; - esac -} - -ENABLE_BT - -# List options for the device -LIST_OPTIONS() { - USEROPT_2="$(echo -e "-- Options --\nConnect\nDisconnect\n-- Toggle --\nPair\nRemove\nTrust\nUntrust\n--\nExit\nHelp" | sed "s/-e //g" | $RUNLAUNCHER $GRIDARG $GRIDNUM -l 20 -p "What do you want to do with this device?" | awk '{ print $1 }')" -} - -LIST_OPTIONS - -# Trust device -TRUST() { - bluetoothctl trust $SELDEVICE_MAC -} - -# Pair device -PAIR() { - bluetoothctl pair $SELDEVICE_MAC -} - -# Remove device -REMOVE() { - bluetoothctl remove $SELDEVICE_MAC -} - -UNTRUST() { - bluetoothctl untrust $SELDEVICE_MAC -} - -# Connect -CONNECT() { - if [ -e "$/tmp/isconnected" ]; then - NOTIFY_ALREADY_CONNECTED && exit 0 - fi - - bluetoothctl connect $SELDEVICE_MAC - touch /tmp/isconnected -} - -# Disconnect -DISCONNECT() { - rm -f /tmp/isconnected - bluetoothctl disconnect $SELDEVICE_MAC -} - -# Notification when connecting -NOTIFY_CONNECT() { - notify-send "๏Š“ Connected to ${USEROPT_1}!" -} - -# Notification when disconnecting -NOTIFY_DISCONNECT() { - notify-send "๏Š“ Disconnected from ${USEROPT_1}!" -} - -# Notification when removing -NOTIFY_REMOVE() { - notify-send "๏Š“ Removed ${USEROPT_1}!" -} - -# Notification when already connected -NOTIFY_ALREADY_CONNECTED() { - notify-send "๏Š“ Device $USEROPT_1 is already connected!" -} - -# Perform actions as per user choice -PERFORM() { - case "$USEROPT_2" in - "Trust") TRUST && LIST_OPTIONS ;; - "Pair") PAIR && LIST_OPTIONS ;; - "Connect") CONNECT && NOTIFY_CONNECT && LIST_OPTIONS ;; - "Disconnect") DISCONNECT && NOTIFY_DISCONNECT && LIST_OPTIONS ;; - "Untrust") UNTRUST && LIST_OPTIONS ;; - "Remove") REMOVE && NOTIFY_REMOVE && LIST_OPTIONS ;; - "Exit") exit 0 ;; - "Help") HELP ;; - "") exit 0 ;; - esac -} - -PERFORM - -$0 && exit 0 diff --git a/scripts/speedwm-compatcheck b/scripts/speedwm-compatcheck deleted file mode 100755 index fdac269..0000000 --- a/scripts/speedwm-compatcheck +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# speedwm-compatcheck -# compatibility checker used by 'make' when compiling speedwm. - -BINDIR="$(dirname $(command -v speedwm_status))/" - -# Check if xrdb exists -if [ -e "${BINDIR}xrdb" ]; then - xrdb_exists=true -else - printf "Warning: ${BINDIR}xrdb was not found\n" -fi - -# Check if wmctrl exists -if [ -e "${BINDIR}wmctrl" ]; then - wmctrl_exists=true -else - printf "Warning: ${BINDIR}wmctrl was not found\n" -fi - -# Check if xwallpaper exists -if [ -e "${BINDIR}xwallpaper" ]; then - xwallpaper_exists=true -else - printf "Warning: ${BINDIR}xwallpaper was not found\n" -fi - -# Check if xmodmap exists -if [ -e "${BINDIR}xmodmap" ]; then - xmodmap_exists=true -else - printf "Warning: ${BINDIR}xmodmap was not found\n" -fi - -# Check if dmenu exists -command -v dmenu > /dev/null || printf "\nWARNING: dmenu was not found. This means running applications will potentially be very inconvenient. It also means most bundled scripts will NOT work unless modified to work with rofi. See help for more information" - -# Check if slock exists -command -v slock > /dev/null || printf "\nWARNING: slock was not found. This means the shutdown menu can't lock your screen." diff --git a/scripts/speedwm-core b/scripts/speedwm-core deleted file mode 100755 index bd043f3..0000000 --- a/scripts/speedwm-core +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh -# speedwm-core -# This script handles the updating and other things necessary for keybinds. - -BINDIR="$(dirname $(command -v speedwm_status))/" - -# update -UPDATE_SPEEDWM() { - FAIL_SOURCEDOESNOTEXIST() { - echo "The speedwm source code directory could not be located. This means an automatic update cannot be performed. Clone a new build (instructions on https://speedie.gq/speedwm) and update manually." - exit 1 - } - - FAIL_NOT_INSTALLED_USING_GIT() { - echo "Your build of speedwm was likely not installed through Git (maybe installed using a tarball?) so therefore the update cannot continue. Clone a new build (instructions on https://speedie.gq/speedwm) and update manually." - exit 1 - } - - FAIL_NO_AUTH() { - echo "Failed to authenticate." - exit 1 - } - - SOURCEDIR=$(cat /usr/share/speedwm/sourcedir) - test $SOURCEDIR || FAIL_SOURCEDOESNOTEXIST - - # Check if Git is available - if [ -e "${BINDIR}git" ]; then - echo "Git found!" - else - echo "Git was not found, therefore the speedwm update cannot continue." ; exit 1 - fi - - cd $SOURCEDIR - make patch - make patch_remove - git stash - git pull || FAIL_NOT_INSTALLED_USING_GIT - make patch_install - clear - - printf "speedwm requires root permissions briefly to run the following command:\nmake clean install\nEnter your password to allow this.\n" - su -c "make clean install" || FAIL_NO_AUTH - echo 'speedwm has been updated!' - - exit 0 -} - -OPT=$1 - -case "$OPT" in -"-curl-weather") clear ; curl -s wttr.in | head -n 38 | tail -n 37 && sleep 60 ;; -"-update-speedwm") UPDATE_SPEEDWM ;; -esac diff --git a/scripts/speedwm-debug b/scripts/speedwm-debug deleted file mode 100755 index aa52396..0000000 --- a/scripts/speedwm-debug +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -install_xephyr() { - echo "Xephyr not installed, please install it." - exit 1 -} - -command -v Xephyr > /dev/null || install_xephyr - -Xephyr -screen 1024x768 :80 & -sleep 1 - -export DISPLAY=:80 -speedwm_run -f -~/.config/speedwm/swal/swal_wm -killall Xephyr - diff --git a/scripts/speedwm-dfmpeg b/scripts/speedwm-dfmpeg deleted file mode 100755 index 124bbbd..0000000 --- a/scripts/speedwm-dfmpeg +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/sh -# speedwm-dfmpeg -# dmenu/other run launcher GUI for recording your screen with ffmpeg -# -# Licensed under MIT, written by speedie -# Modified version for speedwm (available https://speedie.gq/speedwm) -# https://speedie.gq/dmenu-scripts - -# speedwm specfic dotfile directory, probably don't change -DOTDIR=$HOME/.config/speedwm-de/dfmpeg -NOMKCONFIG=false # Do not create a config file if this is set to true - -# Set runlauncher -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu -esac - -# -s flag stops recording -case "$1" in -"-s") pkill -x ffmpeg ; rm /tmp/dfmpeg-recording ; STATUS=idle ; exit ;; -esac - -HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -# Write default configuration -defaultConfig() { - RESOLUTION="1920x1080" # The resolution to record in - AUDIO_DEVICE="alsa" # How to capture audio (alsa/pulseaudio) - FRAME_RATE="60" # Frame rate to capture in. - RECORD_DEVICE="x11grab" # Probably do not change. - OUTPUT_PATH="$HOME/Recordings" # Path where videos will be saved. - OUTPUT_FORMAT="mp4" # What format to use - OUTPUT_FILENAME="dfmpeg-output" # File name of the output. Probably don't need to change. - ENCODE=true # Encode or not (true/false) - ENCODE_CODEC=libx264 # Codec to encode in - ENCODE_PRESET=ultrafast # ffmpeg preset. Available options: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow - WH=":0.0" # Width and height, no need to change, defaults should work. - TERM="$TERMINAL" # Terminal to use when editing the configuration file. - EDITOR="vim" # Editor to edit the config file with - MEDIA_PLAYER="mpv" # Media player to play videos in -} - -defaultConfig - -USECONFIG() { - echo "Using $DOTDIR/config for configuration!" && . $DOTDIR/config -} - -MKCONFIG() { - if [ -e "$DOTDIR/config" ]; then - USECONFIG - else - if [ "$NOMKCONFIG" = "false" ]; then - mkdir -p $DOTDIR - printf "RESOLUTION=$RESOLUTION # The resolution to capture in" > $DOTDIR/config - printf "\nAUDIO_DEVICE=$AUDIO_DEVICE # How to capture audio (alsa/pulseaudio)" >> $DOTDIR/config - printf "\nFRAME_RATE=$FRAME_RATE # Frame rate to capture in." >> $DOTDIR/config - printf "\nOUTPUT_PATH=$OUTPUT_PATH # Directory where captures will be saved." >> $DOTDIR/config - printf "\nOUTPUT_FORMAT=$OUTPUT_FORMAT # What format to use" >> $DOTDIR/config - printf "\n#OUTPUT_FILENAME='filename'" >> $DOTDIR/config - printf "\n\nRECORD_DEVICE=$RECORD_DEVICE" >> $DOTDIR/config - printf "\nWH=$WH" >> $DOTDIR/config - printf "\nTERM=$TERMINAL # Terminal to use when editing the config file" >> $DOTDIR/config - printf "\nEDITOR=$EDITOR # Editor to edit the config file" >> $DOTDIR/config - printf "\nMEDIA_PLAYER=$MEDIA_PLAYER # Media player to play videos in" >> $DOTDIR/config - printf "\nENCODE=$ENCODE # Encode or not on 'Stop' (true/false)" >> $DOTDIR/config - printf "\nENCODE_CODEC=$ENCODE_CODEC # Codec to encode in (libx264 is default)" >> $DOTDIR/config - printf "\nENCODE_PRESET=$ENCODE_PRESET # ffmpeg preset. Available options: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow" >> $DOTDIR/config - fi - fi -} - -MKCONFIG - -OUTPUT_FILENAME="$OUTPUT_PATH/$OUTPUT_FILENAME.$OUTPUT_FORMAT" - -# Create the output path if it does not exist -if [ -e "$OUTPUT_PATH" ]; then - a=$a -else - mkdir -p $OUTPUT_PATH -fi - -# Check if we should encode the video or not. -if [ "$ENCODE" = "false" ]; then - startrec="ffmpeg -f $RECORD_DEVICE -s $RESOLUTION -i $WH -f $AUDIO_DEVICE -r $FRAME_RATE -i default $OUTPUT_FILENAME" - startrec_no_audio="ffmpeg -y -f $RECORD_DEVICE -s $RESOLUTION -r $FRAME_RATE -i $WH $OUTPUT_FILENAME" -else - startrec="ffmpeg -y -f x11grab -framerate $FRAME_RATE -s $RESOLUTION -i $WH -f $AUDIO_DEVICE -i default -r 30 -c:v $ENCODE_CODEC -crf 0 -preset ultrafast -c:a aac $OUTPUT_FILENAME" - startrec_no_audio="ffmpeg -y -f x11grab -framerate $FRAME_RATE -s $RESOLUTION -i $WH -r 30 -c:v $ENCODE_CODEC -crf 0 -preset ultrafast -c:a aac $OUTPUT_FILENAME" - touch /tmp/isencoding - echo $ENCODE_CODEC > /tmp/encoding-codec -fi - -# Call this function to encode a video manually. -# /tmp/rec.$OUTPUT_FORMAT must be the file. Consider copying it there and then copying it back. -encode() { - if [ "$ENCODE" = "true" ]; then - cp $(cat /tmp/outputfilename) /tmp/rec.$OUTPUT_FORMAT - ffmpeg -i /tmp/rec.$OUTPUT_FORMAT -c:v $ENCODE_CODEC -preset $ENCODE_PRESET -threads 0 -b:v -pass 1 -f $OUTPUT_FORMAT -qp 0 - cp /tmp/rec.$OUTPUT_FORMAT $(cat /tmp/outputfilename) - rm -f "/tmp/rec.$OUTPUT_FORMAT" - fi -} - -# Hardcoded version number -dfmpeg_ver="2022-08-06-r1" -about_screen="dfmpeg $dfmpeg_ver." - -# About screen text -about_screen_2="Licensed under MIT, written by speedie.gq and jornmann." -about_screen_3="Modified for https://speedie.gq/speedwm" -about_screen_4="https://speedie.gq/dmenu-scripts" - -# Conversion function -convert() { - # Convert mp4 to mp3 - mp42mp3() { - COPT=$(printf 'Enter a path\n------\nExit' | $RUNLAUNCHER -l 3 -p 'Convert which file?') - case "$COPT" in - "Enter a path") exit 0 ;; - "------") exit 0 ;; - "Exit") exit 0 ;; - "") exit 0 ;; - esac - - echo $COPT | grep ".mp4" && ffmpeg -i $COPT -vn $(echo $COPT | sed "s/.mp4/.mp3/g") - } - - case "$(printf '.mp4 to .mp3\n------\n..\nExit' | $RUNLAUNCHER -l 40 -p 'Convertion options')" in - ".mp4 to .mp3") mp42mp3 ;; - "Exit") exit 0 ;; - "------") exit 0 ;; - "..") $0 && exit 0 ;; - esac -} - -encodeopts() { - - case "$(printf 'Encode last recording\nEncode video\n------\n..\nExit' | $RUNLAUNCHER -l 40 -p 'Encoding options')" in - "Encode last recording") encode ; exit 0 ;; - "Encode video") echo "$(echo "" | $RUNLAUNCHER -l 1 $GRIDARG $GRIDNUM -p "What file do you want to encode?")" > /tmp/outputfilename && encode ; exit 0 ;; - "------") exit 0 ;; - "Exit") exit 0 ;; - "..") $0 && exit 0 ;; - "") exit 0 ;; - esac -} - -# More options -MORE_OPTIONS() { - case "$(printf 'Encode\nConvert\nConfigure\n------\n..\nExit' | $RUNLAUNCHER -l 40 -p 'More options')" in - "Encode last recording") encode ; exit 0 ;; - "Encode video") echo "$(echo "" | $RUNLAUNCHER -l 1 $GRIDARG $GRIDNUM -p "What file do you want to encode?")" > /tmp/outputfilename && encode ; exit 0 ;; - "Encode") encodeopts ; exit 0 ;; - "Configure") $TERM $EDITOR $DOTDIR/config ; exit 0 ;; - "Convert") convert ; exit 0 ;; - "") exit 0 ;; - "..") $0 && exit 0 ;; - "------") exit 0 ;; - esac -} - -case "$(printf 'Start\nStop\nStart without audio\nPlay last\n------\nMore options\nAbout\nExit' | $RUNLAUNCHER -l 40 -p 'Record your screen:')" in - "Exit") STATUS=idle && exit 0 ;; - "Start") touch /tmp/isaudio ; echo "$OUTPUT_FILENAME" > /tmp/outputfilename && STATUS=recording && touch /tmp/dfmpeg-recording - $startrec && exit 0 ;; - "Stop") pkill -x ffmpeg ; rm /tmp/dfmpeg-recording ; STATUS=idle ;; - "Start without audio") echo "$OUTPUT_FILENAME" > /tmp/outputfilename && STATUS=recording && touch /tmp/dfmpeg-recording - $startrec_no_audio && exit 0 ;; - "Play last") DFMPEG_STATUS=idle && $MEDIA_PLAYER $(cat /tmp/outputfilename) && exit 0 ;; - "More options") MORE_OPTIONS && exit 0 ;; - "") exit 0 ;; - "About") - echo $about_screen > /tmp/dfmpeg_about - echo $about_screen_2 >> /tmp/dfmpeg_about - echo $about_screen_3 >> /tmp/dfmpeg_about - echo $about_screen_4 >> /tmp/dfmpeg_about - cat /tmp/dfmpeg_about | $RUNLAUNCHER -l 40 $GRIDARG $GRIDNUM - ;; -esac - -exit 0 # This fixes a small bug. diff --git a/scripts/speedwm-help b/scripts/speedwm-help index cc6599d..b6853bd 100755 --- a/scripts/speedwm-help +++ b/scripts/speedwm-help @@ -50,8 +50,7 @@ ${DOCDIR}/${PREFIX}doc-06 \ ${DOCDIR}/${PREFIX}doc-07 \ ${DOCDIR}/${PREFIX}example.signal \ ${DOCDIR}/${PREFIX}doc-08 \ -${DOCDIR}/${PREFIX}doc-09 \ -${DOCDIR}/${PREFIX}doc-10 | grep -v "!!" > /tmp/${PREFIX}doc +${DOCDIR}/${PREFIX}doc-09 | grep -v "!!" > /tmp/${PREFIX}doc case "$ARG1" in "-w") tail -n $(expr $(cat /tmp/${PREFIX}doc | wc -l) "-" 1) /tmp/${PREFIX}doc > ../readme ;; @@ -74,8 +73,7 @@ case "$ARG1" in sed "s|-- .Xresources and Pywal --|## .Xresources and Pywal|g" | \ sed "s|-- Signals --|## Signals|g" | \ sed "s|-- Additional note on autostart --|## Additional note on autostart|g" | \ - sed "s|-- Maintaining settings easily --|## Maintaining settings easily|g" | \ - sed "s|-- Switching run launcher --|## Switching run launcher|g" > ../README.md ;; + sed "s|-- Maintaining settings easily --|## Maintaining settings easily|g" > ../README.md ;; "-whtml") tail -n $(expr $(cat /tmp/${PREFIX}doc | wc -l) "-" 1) /tmp/${PREFIX}doc | \ sed "s|-- speedwm --|# speedwm|g" | \ sed "s|-- What is speedwm? --|## What is speedwm?|g" | \ @@ -95,8 +93,7 @@ case "$ARG1" in sed "s|-- .Xresources and Pywal --|## .Xresources and Pywal|g" | \ sed "s|-- Signals --|## Signals|g" | \ sed "s|-- Maintaining settings easily --|## Maintaining settings easily|g" | \ - sed "s|-- Additional note on autostart --|## Additional note on autostart|g" | \ - sed "s|-- Switching run launcher --|## Switching run launcher|g" > ../README.md + sed "s|-- Additional note on autostart --|## Additional note on autostart|g" > ../README.md markdown ../README.md > ../readme.html || printf "\nmarkdown-to-html not found, install using:\nnpm install markdown-to-html -g\n" && exit 1 ;; "-whtml-wtemplate") test ../readme.html && cat ../docs/speedwm.html.template.1 ../readme.html ../docs/speedwm.html.template.2 >> ../speedwm.html && exit 0 printf "\nYou need to $0 -whtml first." ; exit 1 ;; diff --git a/scripts/speedwm-netctrl b/scripts/speedwm-netctrl deleted file mode 100755 index 6296063..0000000 --- a/scripts/speedwm-netctrl +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh -# speedwm-netctrl -# dmenu/other run launcher GUI for iwd -# Licensed under the GNU GPLv3 free software license. - -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu ;; -esac - -BINDIR="$(dirname $(command -v speedwm_status))/" - -command -v iwctl > /dev/null || exit 1 - -HAVE_GRID="true" -HAVE_PASSWORD="false" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config - grep -q HAVE_PASSWORD $HOME/.config/speedwm-de/global/config || printf "\nHAVE_PASSWORD=$HAVE_PASSWORD # Whether or not to use the Password argument if a script requests it. If you do not have the dmenu password patch, set this to false. Doing so will disable password prompts." >> $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config - printf "\nHAVE_PASSWORD=$HAVE_PASSWORD # Whether or not to use the Password argument if a script requests it. If you do not have the dmenu password patch, set this to false. Doing so will disable password prompts." >> $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -SHOW_PASSWORD="true" - -test ${BINDIR}iwctl || exit 0 - -if [ -e "$HOME/.config/speedwm-de/netctrl/config" ]; then - . $HOME/.config/speedwm-de/netctrl/config -else - mkdir -p $HOME/.config/speedwm-de/netctrl - printf "SHOW_PASSWORD=$SHOW_PASSWORD # Show password when entering it or not? Requires the 'password' dmenu patch. If you do not have it, you can get my build. You also need to enable it in $HOME/.config/speedwm-de/global/config. (true/false)" > $HOME/.config/speedwm-de/netctrl/config -fi - -if [ "$SHOW_PASSWORD" = "false" ]; then - if [ "$HAVE_PASSWORD" = "true" ]; then - PASS_ARG="-P" - fi -fi - -# Get the device used to connect. -getdevice() { - seldevice=$1 - if [ -e "$HOME/.local/share/seldevice" ]; then - seldevice=$(cat $HOME/.local/share/seldevice) - else - case "$1" in - "") devices="$(printf "\n$(ip link)" | awk '{ print $2 }' | awk 'NR%2==0' | sed "s/://g")" - seldevice=$(echo $devices | sed 's/ /\n/g' | $RUNLAUNCHER -p "What device do you want to connect with?" -l 10 $GRIDARG $GRIDNUM) && echo $seldevice > $HOME/.local/share/seldevice ;; - esac - fi - - case "$seldevice" in - "") exit 0 ;; - esac -} - -# connect to wifi -connectwifi() { - # if args aren't disconnect, scan for networks - # if it is disconnect, disconnect - if [ "$INARGS" != "disconnect" ]; then - iwctl station $seldevice scan - network="$(printf "$(iwctl station $seldevice get-networks | sed -n 6,20p | sed "s|>||g" | awk '{ print $1 }')\nDisconnect\n------\nExit" | sed "s| |No networks found|g" | $RUNLAUNCHER -l 10 $GRIDARG $GRIDNUM -p "Select a network to connect to" | sed "s|------||g" | sed "s|No networks found| |g")" - - case "$network" in - "") exit 0 ;; - "Disconnect") disconnect=true ;; - "Exit") exit 0 ;; - esac - else - disconnect=true - fi - - if [ "$disconnect" != "true" ]; then - iwctl station $seldevice get-networks | grep "$network" > /dev/null || exit 1 - - connect_pass() { - PASSPHRASE=$(printf "\n" | $RUNLAUNCHER -p "This network is protected. Enter the passphrase." -l 1 $GRIDARG $GRIDNUM $PASS_ARG) - case "$PASSPHRASE" in - "") exit 0 ;; - esac - - printf "$network\n" >> $HOME/.local/share/networks - - iwctl station $seldevice connect $network -P $PASSPHRASE || connect_pass - if [ -e "${BINDIR}notify-send" ]; then - notify-send "๏‡ซ Connected to $network!" - fi - exit 0 - } - - connect_no_pass() { - iwctl station $seldevice connect $network || exit 0 - if [ -e "${BINDIR}notify-send" ]; then - notify-send "๏‡ซ Connected to $network!" - fi - exit 0 - } - fi - - disconnect() { - iwctl station $seldevice disconnect - if [ -e "${BINDIR}notify-send" ]; then - notify-send "๏‡ซ Disconnected from the network!" - fi - exit 0 - } - - if [ "$disconnect" != "true" ]; then - grep $network $HOME/.local/share/networks && connect_no_pass && exit 0 - iwctl station $seldevice get-networks | grep psk && connect_pass && exit 0 - else - disconnect - fi -} - -export INARGS="$1" -getdevice && connectwifi -pgrep -x status > /dev/null && pkill status && status & diff --git a/scripts/speedwm-screenshotutil b/scripts/speedwm-screenshotutil deleted file mode 100755 index df24ed1..0000000 --- a/scripts/speedwm-screenshotutil +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -# speedwm-screenshotutil -# Built in screenshot utility for my build of speedwm -# Requires curl, maim and xclip. -# -# curl snippet by nezbednik, thank you! - -rm -f /tmp/screenshot* - -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu ;; -esac - -BINDIR="$(dirname $(command -v speedwm_status))/" - -HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -EXPORTDIR=$HOME/.config/speedwm-de/screenshotutil - -mkdir -p $EXPORTDIR - -# Config -SHOWCURSOR="true" # Show cursor or not (true/false) -DEFAULTSCREENSHOTPATH=$HOME/Screenshots # Default screenshot path -FORMAT="+%T_%D" # Screenshot format - -if [ -e "$EXPORTDIR/config" ]; then - . $EXPORTDIR/config -else - printf "SHOWCURSOR=$SHOWCURSOR # Show cursor or not (true/false)" > $EXPORTDIR/config - printf "\nDEFAULTSCREENSHOTPATH=$DEFAULTSCREENSHOTPATH # Where screenshots are saved\n" >> $EXPORTDIR/config - echo "FORMAT='$FORMAT' # Where screenshots are saved. : and / will be replaced with _ and nothing respectively." >> $EXPORTDIR/config -fi - -case "$SHOWCURSOR" in -"true") ARG2="" ;; -"false") ARG2=u ;; -esac - -# Help argument action -HELP() { - printf "speedwm-screenshotutil\n-t | Wait seconds and then take the screenshot." - printf "\n-f | Take a full screen screenshot instead of selecting manually." - printf "\n-s | Take a screenshot, allowing the user to select a section manually." - printf "\n-o | Select a file and allow the user to perform actions with it." - printf "\n-tf | Wait seconds and then take a full screen screenshot." - printf "\n-h | View this help screen" - printf "\nNo arguments will print this screen.\n" -} - -# Sleep argument (-t) -if [ "$1" = "-t" ]; then - sleep $2 && maim -s${ARG2}B > /tmp/screenshot-$DATE || exit 0 -fi - -# Open argument (-o) -if [ "$1" = "-o" ]; then - cat $2 > /tmp/screenshot-$DATE -fi - -# Sleep and full argument (-tf) -if [ "$1" = "-tf" ]; then - sleep $2 && maim -${ARG2}B > /tmp/screenshot-$DATE || exit 0 -elif [ "$1" = "-ft" ]; then - sleep $2 && maim -${ARG2}B > /tmp/screenshot-$DATE || exit 0 -fi - -# Full argument (-f) -if [ "$1" = "" ]; then - HELP ; exit 0 -else - if [ "$1" = "-f" ]; then - if [ -e "/tmp/screenshot-$DATE" ]; then - exists=true - else - maim -${ARG2}B > /tmp/screenshot-$DATE || exit 0 - fi - fi - - if [ "$1" = "-s" ]; then - if [ -e "/tmp/screenshot-$DATE" ]; then - exists=true - else - maim -s${ARG2}B > /tmp/screenshot-$DATE || exit 0 - fi - fi -fi - -# Help argument (-h) -if [ "$1" = "-h" ]; then - HELP ; exit 0 -fi - -# User action -if [ -e "/tmp/screenshot-$DATE" ]; then - U_INPUT="$(printf "Image\nURL\nSave" | $RUNLAUNCHER -l 3 -p "Copy to clipboard as an: ")" -else - exit 0 -fi - -# Send notification for URL -SENDNOTIF_URL() { - if [ -e "${BINDIR}notify-send" ]; then - notify-send "Screenshot copied to clipboard." - fi -} - -# Send notifcation for local image save -SENDNOTIF_SAVE() { - if [ -e "${BINDIR}notify-send" ]; then - notify-send "Screenshot saved to $SAVEDIR." - fi -} - -# Send notification for image copied to clipboard -SENDNOTIF_IMG() { - if [ -e "${BINDIR}notify-send" ]; then - notify-send "Screenshot copied to clipboard." - fi -} - -mkdir -p $DEFAULTSCREENSHOTPATH - -# Perform actions based on user input -case "$U_INPUT" in -"Image") cat /tmp/screenshot-$DATE | xclip -selection clipboard -t image/png && SENDNOTIF_IMG ;; -"URL") printf "\n" | xclip -selection clipboard && curl -s -F source=@"/tmp/screenshot-$DATE" -F "type=file" -F "action=upload" "https://imgbb.com/json" | sed "s/\\\\//g; s/\"/\\n/g" | grep -m 1 -A 2 url | tail -n 1 | xclip -selection clipboard && SENDNOTIF_URL ;; -"Save") SAVEDIR=$(printf "$DEFAULTSCREENSHOTPATH/screenshot-$(date "$FORMAT" | sed "s|:|-|g" | sed "s|/||g").png" | $RUNLAUNCHER -l 1 $GRIDARG $GRIDNUM -p "Where do you want to save it? (Including filename)") && cat /tmp/screenshot-$DATE > $SAVEDIR && SENDNOTIF_SAVE ;; -esac - -rm -f /tmp/screenshot* # Remove the screenshots diff --git a/scripts/speedwm-shutdown b/scripts/speedwm-shutdown deleted file mode 100755 index 922e521..0000000 --- a/scripts/speedwm-shutdown +++ /dev/null @@ -1,173 +0,0 @@ -#!/bin/sh -# speedwm-shutdwon -# This simple script uses $RUNLAUNCHER to ask the user what action they want to perform. -# -# NOTE: You must either permit nopass for poweroff and reboot commands for your user or simply enable nopass entirely!! - -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu ;; -esac - -case "$TERMINAL" in -"") TERMINAL=st ;; -esac - -HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -BINDIR="$(dirname $(command -v speedwm_status))/" - -EXPORTDIR=$HOME/.config/speedwm-de/powermenu -mkdir -p $EXPORTDIR - -command -v sudo > /dev/null && PERM=sudo -command -v doas > /dev/null && PERM=doas -command -v rootdo > /dev/null && PERM=rootdo - -case "$PERM" in -"") PERM=su ;; -esac - -COL_NORMAL_TEXT_NORMAL="#ffffff" -COL_NORMAL_TEXT_SELECTED="#ffffff" -COL_NORMAL_BACKGROUND_NORMAL="#333333" -COL_NORMAL_BACKGROUND_SELECTED="#222222" -COL_WARNING_TEXT_NORMAL="#ffffff" -COL_WARNING_TEXT_SELECTED="#000000" -COL_WARNING_BACKGROUND_NORMAL="#DC143C" -COL_WARNING_BACKGROUND_SELECTED="#8b0000" -USEDEFAULTCOLORS=false -LOCK_TEXT="" - -# Load config if available and override settings -if [ -e "$EXPORTDIR/config" ]; then - . $EXPORTDIR/config -else - printf "# Colors for the prompt. Replace the color values with 'dmenu' for regular default colors." > $EXPORTDIR/config - printf "\nCOL_NORMAL_TEXT_NORMAL=$COL_NORMAL_TEXT_NORMAL # Text color for not selected options (Regular prompt)" >> $EXPORTDIR/config - printf "\nCOL_NORMAL_TEXT_SELECTED=$COL_NORMAL_TEXT_SELECTED # Text color for selected option (Regular prompt)" >> $EXPORTDIR/config - printf "\nCOL_NORMAL_BACKGROUND_NORMAL=$COL_NORMAL_BACKGROUND_NORMAL # Background color for not selected options (Regular prompt)" >> $EXPORTDIR/config - printf "\nCOL_NORMAL_BACKGROUND_SELECTED=$COL_NORMAL_BACKGROUND_SELECTED # Background color for selected option (Regular prompt)" >> $EXPORTDIR/config - printf "\nCOL_WARNING_TEXT_NORMAL=$COL_WARNING_TEXT_NORMAL # Text color for not selected options (Warning prompt)" >> $EXPORTDIR/config - printf "\nCOL_WARNING_TEXT_SELECTED=$COL_WARNING_TEXT_SELECTED # Text color for selected option (Warning prompt)" >> $EXPORTDIR/config - printf "\nCOL_WARNING_BACKGROUND_NORMAL=$COL_WARNING_BACKGROUND_NORMAL # Background color for not selected options (Warning prompt)" >> $EXPORTDIR/config - printf "\nCOL_WARNING_BACKGROUND_SELECTED=$COL_WARNING_BACKGROUND_SELECTED # Background color for selected option (Warning prompt)" >> $EXPORTDIR/config - printf "\nPERM=$PERM # Root access tool (sudo, doas, etc.). Must support nopass for poweroff and reboot commands." >> $EXPORTDIR/config - printf "\nUSEDEFAULTCOLORS=$USEDEFAULTCOLORS # Use $RUNLAUNCHER colors instead of custom ones (true/false)" >> $EXPORTDIR/config - printf "\nLOCK_TEXT=$LOCK_TEXT # Text to display on the lock screen. Only works with slock and requires the message patch." >> $EXPORTDIR/config -fi - -case "$LOCK_TEXT" in -"") MESSAGEFLAG="" ;; -esac - -SBFLAG="-sb" -SFFLAG="-sf" -NBFLAG="-nb" -NFFLAG="-nf" - -if [ "$USEDEFAULTCOLORS" = "true" ]; then - SBFLAG="" - NBFLAG="" - SFFLAG="" - NFFLAG="" - COL_NORMAL_BACKGROUND_SELECTED="" - COL_NORMAL_BACKGROUND_NORMAL="" - COL_NORMAL_TEXT_SELECTED="" - COL_NORMAL_TEXT_NORMAL="" - COL_WARNING_BACKGROUND_NORMAL="" - COL_WARNING_TEXT_SELECTED="" - COL_WARNING_TEXT_NORMAL="" - COL_WARNING_BACKGROUND_SELECTED="" -fi - -# Standard Background -if [ "$COL_NORMAL_BACKGROUND_SELECTED" = "dmenu" ]; then - SBFLAG="" - COL_NORMAL_BACKGROUND_SELECTED="" -fi - -# Normal Background -if [ "$COL_NORMAL_BACKGROUND_NORMAL" = "dmenu" ]; then - NBFLAG="" - COL_NORMAL_BACKGROUND_NORMAL="" -fi - -# Standard Background -if [ "$COL_NORMAL_TEXT_SELECTED" = "dmenu" ]; then - SFFLAG="" - COL_NORMAL_TEXT_SELECTED="" -fi - -# Normal Text -if [ "$COL_NORMAL_TEXT_NORMAL" = "dmenu" ]; then - NFFLAG="" - COL_NORMAL_TEXT_NORMAL="" -fi - -# Standard Background -if [ "$COL_WARNING_BACKGROUND_SELECTED" = "dmenu" ]; then - SBFLAG="" - COL_WARNING_BACKGROUND_SELECTED="" -fi - -# Normal Background -if [ "$COL_WARNING_BACKGROUND_NORMAL" = "dmenu" ]; then - NBFLAG="" - COL_WARNING_BACKGROUND_NORMAL="" -fi -# Standard Background -if [ "$COL_WARNING_TEXT_SELECTED" = "dmenu" ]; then - SFFLAG="" - COL_WARNING_TEXT_SELECTED="" -fi - -# Normal Text -if [ "$COL_WARNING_TEXT_NORMAL" = "dmenu" ]; then - NFFLAG="" - COL_WARNING_TEXT_NORMAL="" -fi - -MOREOPTS() { - USER_OPT3=$(printf "Restart speedwm\nEnd task\nspeedwm command\nUpdate speedwm\n.." | $RUNLAUNCHER -l 4 $GRIDARG $GRIDNUM -p "What do you want to do?" $NBFLAG $COL_NORMAL_BACKGROUND_NORMAL $SBFLAG $COL_NORMAL_BACKGROUND_SELECTED $NFFLAG $COL_NORMAL_TEXT_NORMAL $SFFLAG $COL_NORMAL_TEXT_SELECTED) - - case "$USER_OPT3" in - "") exit 0 ;; - "Restart speedwm") speedwm_run -r && exit 0 ;; - "End task") ENDTASK=$(printf "\n" | $RUNLAUNCHER -l 1 -p "What task to end?" $NBFLAG $COL_NORMAL_BACKGROUND_NORMAL $SBFLAG $COL_NORMAL_BACKGROUND_SELECTED $NFFLAG $COL_NORMAL_TEXT_NORMAL $SFFLAG $COL_NORMAL_TEXT_SELECTED) && pkill $ENDTASK && exit 0 ;; - "speedwm command") speedwm-utils && exit 0 ;; - "Update speedwm") $TERMINAL -e speedwm-core -update-speedwm ; exit 0 ;; - "..") $0 && exit 0 ;; - esac -} - -USER_OPT1=$(printf "Shutdown\nReboot\nExit\nLock\nMore" | $RUNLAUNCHER -l 5 -p "What do you want to do?" $NBFLAG $COL_NORMAL_BACKGROUND_NORMAL $SBFLAG $COL_NORMAL_BACKGROUND_SELECTED $NFFLAG $COL_NORMAL_TEXT_NORMAL $SFFLAG $COL_NORMAL_TEXT_SELECTED) - -case "$USER_OPT1" in -"Shutdown") CMD="$PERM poweroff" ;; -"Reboot") CMD="$PERM reboot" ;; -"Exit") exit 0 ;; -"Lock") CMD="slock $MESSAGEFLAG '$LOCK_TEXT'" ;; -"More") MOREOPTS ;; -"") exit 0 ;; -esac - -USER_OPT2=$(printf "Yes\nNo" | $RUNLAUNCHER -l 2 -p "Are you sure?" $NBFLAG "$COL_WARNING_BACKGROUND_NORMAL" $SBFLAG "$COL_WARNING_BACKGROUND_SELECTED" $NFFLAG "$COL_WARNING_TEXT_NORMAL" $SFFLAG "$COL_WARNING_TEXT_SELECTED") -case "$USER_OPT2" in -"Yes") $CMD ;; -"No") exit 0 ;; -"") exit 0 ;; -esac diff --git a/scripts/speedwm-stellar b/scripts/speedwm-stellar index b617638..20053f3 100755 --- a/scripts/speedwm-stellar +++ b/scripts/speedwm-stellar @@ -13,17 +13,19 @@ # CONFIG # This is the configuration for the status bar # -# I highly recommend editing ~/.config/speedwm-de/status/config instead though +# I highly recommend editing ~/.config/speedwm/status/config instead though # All settings can be changed there. Otherwise, carefully edit the file and recompile speedwm! -if [ ! -e "$HOME/.config/speedwm-de/status/config" ]; then -cat < ~/.config/speedwm-de/status/config -# status configuration +if [ ! -e "$HOME/.config/speedwm/statusrc" ]; then +cat < ~/.config/speedwm/statusrc +# speedwm status configuration +# +# NOTE: Should be configured in /bin/sh compatible syntax. For best compatibility, I suggest that you only use POSIX compliant shell. No bash, no fish and no zsh. Of course if /bin/sh is Bash then you don't strictly NEED to keep it POSIX compliant. # General settings REFRESHDELAY=1 # How long delay in seconds between each reload (num) DATEBINDIR="/bin/" # Directory where your 'date' binary is. Default should be fine for most people -SETMETHOD="speedwm -s" # Method used to set the status bar +SETMETHOD="speedwm -s" # Method used to set the status bar. speedwm -s will set the status so only change this if you use this status bar with dwm or awesome. SEPARATOR="โฐ" # Separator to use. Alternative separators: "โฐ", "<", "|" COLORFG=true # Color foreground (true/false) COLORBG=false # Color background (true/false) @@ -122,10 +124,10 @@ ITEM11_SHOW_CHARGING_STATUS=true # Show 'Charging', 'Not charging' or 'Fully cha ITEM11_DISCHARGING_TEXT="Not charging" # Text when not charging (text) ITEM11_CHARGING_TEXT="Charging" # Text when charging (text) ITEM11_FULL_TEXT="Fully charged" # Text when fully charged (text) -EOF -. $HOME/.config/speedwm-de/status/config && echo "Created configuration file" +CONFIG +. $HOME/.config/speedwm/statusrc && echo "Created configuration file" else -. $HOME/.config/speedwm-de/status/config && echo "Loaded configuration file" +. $HOME/.config/speedwm/statusrc && echo "Loaded configuration file" fi ######################################################################### @@ -198,7 +200,7 @@ rm -f /tmp/itest rm -f /tmp/wstatus rm -f /tmp/iscelsius -mkdir -p $HOME/.config/speedwm-de/status +mkdir -p $HOME/.config/speedwm/status printf "Loaded $0 $VER\n---\n" diff --git a/scripts/speedwm-swal b/scripts/speedwm-swal deleted file mode 100755 index fb50642..0000000 --- a/scripts/speedwm-swal +++ /dev/null @@ -1,357 +0,0 @@ -#!/bin/sh -# speedwm-swal -# wallpaper utility written for speedwm. -# Licensed under the GNU GPLv3 free software license. - -ARGS="$@" -ARG1="$1" - -# Default configuration, should be fine for most users. -SWAL_DEFAULT_CONFIG() -{ - SWAL_WALLPAPERDIR=$HOME/Wallpapers - SWAL_OLDWALLPAPERDIR=$SWAL_WALLPAPERDIR - case "$RUNLAUNCHER" in - "") RUNLAUNCHER=dmenu ;; - esac - SWAL_OPT=xwallpaper - SWAL_BINDIR=$BINDIR # compatibility with old config files - SWAL_EXPORTDIR=$HOME/.config/speedwm-de/swal # Config directory - SWAL_IMAGE_VIEWER="sxiv -to" # Image viewer to use () - SWAL_ASK_WAL=false # Ask whether or not to use Pywal if possible (true/false) - SWAL_RANDOMIZE=false # Select a random wallpaper on login -} - -# By default, assume we have grid. -HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config - echo "Loaded configuration!" -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -# Grid number is one -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -# Grid argument -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - - -# Create the configuration -SWAL_MKCONFIG() { - mkdir -p $SWAL_EXPORTDIR - touch $SWAL_EXPORTDIR/config - SWAL_ASK_WAL_NEW=$SWAL_ASK_WAL - SWAL_WALLPAPERDIR_NEW=$SWAL_WALLPAPERDIR - - SWAL_CHANGE_WALLPAPERDIR() { - SWAL_WALLPAPERDIR_NEW=$(printf "Your wallpaper directory" | $RUNLAUNCHER $GRIDARG $GRIDNUM -p "Where are all your wallpapers stored?" -l 1) - } - - SWAL_CHANGE_ASK_WAL() { - command -v wal > /dev/null && SWAL_ASK_WAL_NEW=$(printf "Yes\nNo" | $RUNLAUNCHER $GRIDARG $GRIDNUM -p "Ask whether or not to use Pywal?" -l 2 | sed "s|No|false|g" | sed "s|Yes|true|g") - } - - SWAL_CHANGE_IMAGE_VIEWER() { - SWAL_IMAGE_VIEWER=$(printf "" | $RUNLAUNCHER $GRIDARG $GRIDNUM -p "What image viewer do you want to use for previews?" -l 1) - } - - SWAL_CHANGE_RANDOMIZE() { - SWAL_RANDOMIZE=$(printf "Yes\nNo" | $RUNLAUNCHER $GRIDARG $GRIDNUM -p "Pick a random wallpaper on login?" -l 2 | sed "s|No|false|g" | sed "s|Yes|true|g") - } - - USER_OPT_ACTION=$(printf "Wallpaper directory\nPywal\nImage Viewer\nRandomize\n------\nExit" | $RUNLAUNCHER $GRIDARG $GRIDNUM -l 10 -p "What setting do you want to change?") - - case "$USER_OPT_ACTION" in - "") $0 && exit 0 ;; - "Wallpaper directory") SWAL_CHANGE_WALLPAPERDIR && CHANGED=true ;; - "Pywal") SWAL_CHANGE_ASK_WAL && CHANGED=true ;; - "Image Viewer") SWAL_CHANGE_IMAGE_VIEWER && CHANGED=true ;; - "Randomize") SWAL_CHANGE_RANDOMIZE && CHANGED=true ;; - "Exit") exit 0 ;; - "------") $0 && exit 0 ;; - esac - - case "$CHANGED" in - "") $0 && exit 0 ;; - esac - - case "$SWAL_ASK_WAL_NEW" in - "true") ASKED=true ;; - "false") ASKED=true ;; - esac - - if [ "$ASKED" = "" ]; then - $0 && exit 0 - fi - - printf "SWAL_WALLPAPERDIR=$SWAL_WALLPAPERDIR_NEW" > $SWAL_EXPORTDIR/config - printf "\nRUNLAUNCHER=$RUNLAUNCHER" >> $SWAL_EXPORTDIR/config - printf "\nSWAL_OPT=$SWAL_OPT" >> $SWAL_EXPORTDIR/config - printf "\nSWAL_EXPORTDIR=$SWAL_EXPORTDIR" >> $SWAL_EXPORTDIR/config - printf "\nSWAL_IMAGE_VIEWER='$SWAL_IMAGE_VIEWER'" >> $SWAL_EXPORTDIR/config - printf "\nSWAL_ASK_WAL=$SWAL_ASK_WAL_NEW" >> $SWAL_EXPORTDIR/config - printf "\nSWAL_RANDOMIZE=$SWAL_RANDOMIZE" >> $SWAL_EXPORTDIR/config -} - -# Binary directory -BINDIR="$(dirname $(command -v speedwm_status))/" -SWAL_OLDWALLPAPERDIR=$SWAL_WALLPAPERDIR - -# Source things -SWAL_SOURCE() -{ - ls "$SWAL_EXPORTDIR/config" || SWAL_MKCONFIG - . "$SWAL_EXPORTDIR/config" || rm -f "$SWAL_EXPORTDIR/config" -} - -# Set image viewer if none is specified. -SWAL_CHECK() -{ - if [ "$SWAL_IMAGE_VIEWER" = "" ]; then - if [ -e "${BINDIR}feh" ]; then - SWAL_IMAGE_VIEWER=feh - elif [ -e "${BINDIR}sxiv" ]; then - SWAL_IMAGE_VIEWER=sxiv - fi - fi - - command -v xwallpaper > /dev/null || SWAL_DIE -} - -# Die -SWAL_DIE() -{ - SWAL_EXIT=1 && exit 1 -} - -# Print usage. -SWAL_USAGE() { - echo "To set a wallpaper, you must create a configuration. To do this, select 'Options' in the menu and set all the options to your liking." - echo "The image viewer must be set to an image viewer that supports printing the filename to stdout. If you use sxiv, set the image viewer to 'sxiv -o'." - echo "In the case of sxiv, This means you can press 'm' when previewing an image to select it and then set it." - echo "Once you've selected your image using the method you prefer, select how you want to set it." - echo "Then your pywal colors will reload, and the wallpaper will be set." - echo "For more information, see speedwm-help -a." -} - -# Select wallpaper -SWAL_SELWALLPAPER() -{ - if [ "$ARG1" = "" ]; then - SWAL_SELWALLPAPER="$(printf "$(ls "$SWAL_WALLPAPERDIR")\n------\n..\nPreview\nPrevious\nRandom\nFavorites\nAdd used wallpaper to favorites\nOptions\nHelp\nExit" | $RUNLAUNCHER $GRIDARG $GRIDNUM -l 100 -p "What wallpaper would you like to set?")" - fi -} - -# Set the type/check what was selected. -SWAL_SETTYPE() -{ - case "$ARG1" in - "--randomize") SWAL_SELWALLPAPER="Random" ;; - "--previous") SWAL_SELWALLPAPER="Previous" ;; - esac - - case "$SWAL_SELWALLPAPER" in - "Options") SWAL_MKCONFIG && $0 $@ && exit 0 ;; - "") $0 && exit 0 ;; - "Favorites") SWAL_SELWALLPAPER="$(printf "$(cat $SWAL_EXPORTDIR/favorites.filename)\n------\n..\nClear\n\nExit" | $RUNLAUNCHER $GRIDARG $GRIDNUM -l 100 -p "What wallpaper would you like to set?")" ; FAVORITES=true ;; - "Add used wallpaper to favorites") echo "$(readlink "$SWAL_EXPORTDIR/CurrentWallpaper")" >> $SWAL_EXPORTDIR/favorites ; echo "$(basename "$(readlink "$SWAL_EXPORTDIR/CurrentWallpaper")")" >> $SWAL_EXPORTDIR/favorites.filename && $0 && exit 0 ;; - "Preview") SWAL_PREVIEWIMG="$($SWAL_IMAGE_VIEWER "$SWAL_WALLPAPERDIR"/*)" ;; - "..") cd "$SWAL_WALLPAPERDIR/.." && SWAL_WALLPAPERDIR="$(pwd)" && SWAL_SELWALLPAPER && SET && exit 0 ;; - "Random") SWAL_FULL="$(find $SWAL_WALLPAPERDIR/* -type f | shuf -n 1)" ; SWAL_WALLPAPERDIR="$(dirname "$SWAL_FULL")" ; SWAL_SELWALLPAPER="$(basename "$SWAL_FULL")" ; SWAL_SELWAL=$SWAL_SELWALLPAPER ;; - "Previous") SWAL_PREVWAL=$(readlink $SWAL_EXPORTDIR/CurrentWallpaper_prev) ; SWAL_WALLPAPERDIR="$(dirname "$SWAL_PREVWAL")" ; SWAL_SELWALLPAPER="$(basename "$SWAL_PREVWAL")" ;; - "Exit") exit 0 ;; - "Help") SWAL_USAGE | $RUNLAUNCHER $GRIDARG $GRIDNUM -l 50 -p "How to use" && $0 && exit 0 ;; - "------") $0 && exit 0 ;; - esac - - # Favorites feature - if [ "$FAVORITES" = "true" ]; then - case "$SWAL_SELWALLPAPER" in - "") $0 && exit 0 ;; - "Clear") rm -f $SWAL_EXPORTDIR/favorites* ; $0 && exit 0 ;; - "Exit") exit 0 ;; - "..") $0 && exit 0 ;; - "------") $0 && exit 0 ;; - esac - SWAL_WALLPAPERDIR="$(dirname "$(cat "$SWAL_EXPORTDIR/favorites" | grep "$SWAL_SELWALLPAPER")")" - fi - - # If it's an actual image, use it as wallpaper - if [ "$SWAL_SELWALLPAPER" = "Preview" ]; then - if [ "$SWAL_PREVIEWIMG" = "" ]; then - $0 && exit 0 - else - SWAL_SELWALLPAPER="$SWAL_PREVIEWIMG" - SWAL_WALLPAPERDIR="" - fi - fi - - # Check if it's a directory - if [ -d "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" ]; then - cd "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" && SWAL_WALLPAPERDIR="$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" && SWAL_SELWALLPAPER && SET && exit 0 - fi - - # Fail if the wallpaper is not a proper wallpaper. - FAIL_NOT_REAL() { - command -v notify-send > /dev/null && notify-send "The selected wallpaper is not valid/does not exist." - $0 ; exit 1 - } - - ls "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" || FAIL_NOT_REAL - - # don't set type if using argument - if [ "$SWAL_ASK_TYPE" != "false" ]; then - if [ "$ARG1" = "" ]; then - SWAL_TYPE=$(printf "Center\nTile\nZoom\nStretch\n------\nExit" | $RUNLAUNCHER -p "How do you want to set the wallpaper?" $GRIDARG $GRIDNUM -l 7) - else - SWAL_TYPE="Stretch" - fi - fi - - case "$SWAL_TYPE" in - "Center") SWAL_TYPE=center ;; - "Tile") SWAL_TYPE=tile ;; - "Zoom") SWAL_TYPE=zoom ;; - "Stretch") SWAL_TYPE=stretch ;; - "Exit") exit 0 ;; - "------") $0 && exit 0 ;; - "") $0 && exit 0 ;; - esac - - # Set type to stretch, shouldn't matter as xwallpaper can determine if it makes sense. - if [ "$SWAL_ASK_TYPE" = "false" ]; then - SWAL_TYPE=stretch - fi - - # Set variables so that we can use them with xwallpaper directly. - SWAL_TYPE="--$SWAL_TYPE" - SWAL_WAL_STATUS="0" - - # Check whether or not to ask based on configuration file. - if [ "$ARG1" = "" ]; then - case "$SWAL_ASK_WAL" in - "true") command -v wal > /dev/null && SWAL_USE_WAL=$(printf "Yes\nNo" | $RUNLAUNCHER $GRIDARG $GRIDNUM -l 90 -p "Do you want to use Pywal?" -l 2) && SWAL_WAL_STATUS="1" ;; - "false") command -v wal > /dev/null && SWAL_USE_WAL="Yes" && SWAL_WAL_STATUS="1" ;; - esac - else - command -v wal > /dev/null && SWAL_USE_WAL="Yes" && SWAL_WAL_STATUS="1" - fi - - - # Don't perform pywal actions if not installed/used - if [ "$SWAL_WAL_STATUS" = "0" ]; then - SWAL_USE_WAL="No" - fi -} - -# Set the wallpaper. -SWAL_SETWALLPAPER() -{ - $SWAL_OPT $SWAL_TYPE "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" || FAIL_NOT_REAL -} - -# Export script to autostart on login -SWAL_EXPORT_SCRIPT() -{ - if [ "$SWAL_RANDOMIZE" = "false" ]; then - printf "#!/bin/sh\n$SWAL_OPT $SWAL_TYPE ""'$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER'""" > $SWAL_EXPORTDIR/swal_wm - if [ -e "$SWAL_EXPORTDIR/CurrentWallpaper" ]; then - rm -f $SWAL_EXPORTDIR/CurrentWallpaper_prev ; ln -s "$(readlink $SWAL_EXPORTDIR/CurrentWallpaper)" $SWAL_EXPORTDIR/CurrentWallpaper_prev - fi - - rm -f $SWAL_EXPORTDIR/CurrentWallpaper ; ln -s "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" $SWAL_EXPORTDIR/CurrentWallpaper - else - printf "#!/bin/sh" > $SWAL_EXPORTDIR/swal_wm - printf "\nSWAL_WALLPAPERDIR=""'$SWAL_OLDWALLPAPERDIR'""" >> $SWAL_EXPORTDIR/swal_wm - printf "\nSWAL_EXPORTDIR=""'$SWAL_EXPORTDIR'""" >> $SWAL_EXPORTDIR/swal_wm - printf '\nSWAL_SELWALLPAPER="$(find "$SWAL_WALLPAPERDIR"/* -type f | shuf -n 1)"' >> $SWAL_EXPORTDIR/swal_wm - printf "\n$SWAL_OPT $SWAL_TYPE " >> $SWAL_EXPORTDIR/swal_wm - printf '"$SWAL_SELWALLPAPER"' >> $SWAL_EXPORTDIR/swal_wm - printf "\nrm -f $SWAL_EXPORTDIR/CurrentWallpaper_prev" >> $SWAL_EXPORTDIR/swal_wm - printf '\nln -s "$(readlink $SWAL_EXPORTDIR/CurrentWallpaper)" ' >> $SWAL_EXPORTDIR/swal_wm - printf "$SWAL_EXPORTDIR/CurrentWallpaper_prev" >> $SWAL_EXPORTDIR/swal_wm - printf "\nrm -f $SWAL_EXPORTDIR/CurrentWallpaper" >> $SWAL_EXPORTDIR/swal_wm - printf '\nln -s "$SWAL_SELWALLPAPER" ' >> $SWAL_EXPORTDIR/swal_wm - printf "$SWAL_EXPORTDIR/CurrentWallpaper" >> $SWAL_EXPORTDIR/swal_wm - fi - - chmod +x $SWAL_EXPORTDIR/swal_wm -} - -# Export script to autostart on login for Pywal users -SWAL_EXPORT_SCRIPT_WAL() -{ - if [ "$SWAL_RANDOMIZE" = "false" ]; then - printf "#!/bin/sh\n$SWAL_OPT $SWAL_TYPE ""'$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER'""\nwal -qi ""'$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER'"" || rm -rf $HOME/.cache/wal ; xrdb -remove\nxrdb ~/.cache/wal/colors.Xresources" > $SWAL_EXPORTDIR/swal_wm - else - printf "#!/bin/sh" > $SWAL_EXPORTDIR/swal_wm - printf "\nSWAL_WALLPAPERDIR=""'$SWAL_OLDWALLPAPERDIR'""" >> $SWAL_EXPORTDIR/swal_wm - printf "\nSWAL_EXPORTDIR=""'$SWAL_EXPORTDIR'""" >> $SWAL_EXPORTDIR/swal_wm - printf '\nSWAL_SELWALLPAPER="$(find "$SWAL_WALLPAPERDIR"/* -type f | shuf -n 1)"' >> $SWAL_EXPORTDIR/swal_wm - printf "\n$SWAL_OPT $SWAL_TYPE " >> $SWAL_EXPORTDIR/swal_wm - printf '"$SWAL_SELWALLPAPER"' >> $SWAL_EXPORTDIR/swal_wm - printf '\nwal -nqi "$SWAL_SELWALLPAPER" || rm -rf $HOME/.cache/wal ; xrdb -remove\nxrdb $HOME/.cache/wal/colors.Xresources\nxrdb $HOME/.cache/wal/colors.Xresources' >> $SWAL_EXPORTDIR/swal_wm - printf "\nrm -f $SWAL_EXPORTDIR/CurrentWallpaper_prev" >> $SWAL_EXPORTDIR/swal_wm - printf '\nln -s "$(readlink $SWAL_EXPORTDIR/CurrentWallpaper)" ' >> $SWAL_EXPORTDIR/swal_wm - printf "$SWAL_EXPORTDIR/CurrentWallpaper_prev" >> $SWAL_EXPORTDIR/swal_wm - printf "\nrm -f $SWAL_EXPORTDIR/CurrentWallpaper" >> $SWAL_EXPORTDIR/swal_wm - printf '\nln -s "$SWAL_SELWALLPAPER" ' >> $SWAL_EXPORTDIR/swal_wm - printf "$SWAL_EXPORTDIR/CurrentWallpaper" >> $SWAL_EXPORTDIR/swal_wm - fi - - chmod +x $SWAL_EXPORTDIR/swal_wm - rm -rf $HOME/.cache/wal # Delete previous colors - wal -nqi "'$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER'" && xrdb ~/.cache/wal/colors.Xresources || xrdb -remove # Compatibility with my speedwm build - if [ -e "$SWAL_EXPORTDIR/CurrentWallpaper" ]; then - rm -f $SWAL_EXPORTDIR/CurrentWallpaper_prev ; ln -s "$(readlink $SWAL_EXPORTDIR/CurrentWallpaper)" $SWAL_EXPORTDIR/CurrentWallpaper_prev - fi - - rm -f $SWAL_EXPORTDIR/CurrentWallpaper ; ln -s "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" $SWAL_EXPORTDIR/CurrentWallpaper - - command -v wal > /dev/null && wal -nqi "$SWAL_WALLPAPERDIR/$SWAL_SELWALLPAPER" - command -v speedwm_run > /dev/null && speedwm_run -rnoloadcolors -} - -# Send notification -SWAL_SENDNOTIFICATION() { - if [ "$SWAL_SELWAL" = "" ]; then - command -v notify-send > /dev/null && notify-send "๏„ˆ $SWAL_SELWALLPAPER set as wallpaper in $(echo $SWAL_TYPE | sed "s|--||g") mode." - else - command -v notify-send > /dev/null && notify-send "๏„ˆ $SWAL_SELWAL set as wallpaper in $(echo $SWAL_TYPE | sed "s|--||g") mode." - fi - - exit 0 -} - -SWAL_DEFAULT_CONFIG -SWAL_SOURCE || SWAL_DIE -SWAL_CHECK || SWAL_DIE -SWAL_SELWALLPAPER || SWAL_DIE - -SET() { - SWAL_SETTYPE || SWAL_DIE - SWAL_SETWALLPAPER || SWAL_DIE - - # Pywal - case "$SWAL_USE_WAL" in - "Yes") SWAL_EXPORT_SCRIPT_WAL || SWAL_DIE ;; - "No") SWAL_EXPORT_SCRIPT || SWAL_DIE ;; - "") exit 0 ;; - esac - - rm -rf $HOME/.local/share/swal_wm - cp $SWAL_EXPORTDIR/swal_wm $HOME/.local/share/swal_wm - chmod +x $HOME/.local/share/swal_wm - SWAL_SENDNOTIFICATION -} - -SET - -$0 && exit 0 diff --git a/scripts/speedwm-utils b/scripts/speedwm-utils deleted file mode 100755 index 3157f24..0000000 --- a/scripts/speedwm-utils +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh -# speedwm-utils -# Because controlling speedwm using shell scripts is based. -# Licensed under GNU GPLv3. - -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu # Run launcher to use (dmenu, rofi, etc.) ;; -esac - -HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -VARS() { - BINDIR="$(dirname $(command -v speedwm_status))/" -} - -VARS - -GENERAL() { -GENERALOPTS=$(printf "mfact +\nmfact -\nToggle Sticky\nToggle Bar\nToggle Fullscreen\nReset Layout/mfact\nReorganize Tags" | $RUNLAUNCHER -l 20 -p 'What do you want to do?') -case "$GENERALOPTS" in -"mfact +") speedwm -s "#cmd:18" ;; -"mfact -") speedwm -s "#cmd:19" ;; -"Toggle Sticky") speedwm -s "#cmd:20" ;; -"Toggle Bar") speedwm -s "#cmd:21" ;; -"Toggle Fullscreen") speedwm -s "#cmd:22" ;; -"Reorganize Tags") speedwm -s "#cmd:25" ;; -"Reset Layout/mfact") speedwm -s "#cmd:59" ;; -esac -} - -OPT() { -MENUOPTS=$(printf "Layout\nReload .Xresources\nGeneral\nExit" | $RUNLAUNCHER -l 20 -p 'What do you want to do?') - -case "$MENUOPTS" in -"Layout") ${0} layout $2 && exit 0 ;; -"Reload .Xresources") ${0} reloadcolors && exit 0 ;; -"General") ${0} -general $2 && exit 0 ;; -"Exit") exit 0 ;; -esac -} - -HELP() { - printf "speedwm-utils - Control speedwm using your terminal or dmenu.\n" - printf "\nlayout Let the user select a speedwm layout" - printf "\nreloadcolors Reload .Xresources" - printf "\nexec Execute an fsignal signum" - printf "\nlist List all available signums" - printf "\n" -} - -L1="$(printf "L1: Tiling\n")" -L2="$(printf "L2: Floating\n")" -L3="$(printf "L3: Monocle\n")" -L4="$(printf "L4: Grid\n")" -L5="$(printf "L5: Deck\n")" -L6="$(printf "L6: Centered Master\n")" -L7="$(printf "L7: Centered Floating Master\n")" -L8="$(printf "L8: Dwindle\n")" -L9="$(printf "L9: Spiral\n")" -L10="$(printf "L10: Bottom Stack (Vertical)\n")" -L11="$(printf "L11: Bottom Stack (Horizontal)\n")" -L12="$(printf "L12: Grid (Horizontal)\n")" -L13="$(printf "L13: Dynamic Grid\n")" -L14="$(printf "L14: Custom\n")" - -case "$1" in -"layout") SEL_LAYOUT=$(printf "${L1}\n${L2}\n${L3}\n${L4}\n${L5}\n${L6}\n${L7}\n${L8}\n${L9}\n${L10}\n${L11}\n${L12}\n${L13}\n${L14}\nPrevious Layout\nNext Layout\nEnter S expression" | $RUNLAUNCHER -l 21 -p "Pick a layout: ") ;; -"reloadcolors") speedwm -s "#cmd:65" ;; -"list") sed 's|speedwm -s "#cmd:||g; s|"||g; s| - ||g; s@|@-@g' /usr/share/speedwm/example.signal | head -n "$(expr "$(cat /usr/share/speedwm/example.signal | wc -l)" - 1)" ;; -"-help") HELP ;; -"exec") - if [ "$2" = "" ]; then - exit 0 - else - speedwm -s "#cmd:$2" - fi ;; -"-h") HELP ;; -"-general") GENERAL ;; -"") OPT ;; -esac - -case "$SEL_LAYOUT" in -"Exit") exit 0 ;; -"Previous Layout") speedwm -s "#cmd:16" ;; -"Next Layout") speedwm -s "#cmd:17" ;; -"L1: Tiling") speedwm -s "#cmd:1" ;; -"L2: Floating") speedwm -s "#cmd:2" ;; -"L3: Monocle") speedwm -s "#cmd:3" ;; -"L4: Grid") speedwm -s "#cmd:4" ;; -"L5: Deck") speedwm -s "#cmd:5" ;; -"L6: Centered Master") speedwm -s "#cmd:6" ;; -"L7: Centered Floating Master") speedwm -s "#cmd:7" ;; -"L8: Dwindle") speedwm -s "#cmd:8" ;; -"L9: Spiral") speedwm -s "#cmd:9" ;; -"L10: Bottom Stack (Vertical)") speedwm -s "#cmd:10" ;; -"L11: Bottom Stack (Horizontal)") speedwm -s "#cmd:11" ;; -"L12: Grid (Horizontal)") speedwm -s "#cmd:12" ;; -"L13: Dynamic Grid") speedwm -s "#cmd:13" ;; -"L14: Custom") speedwm -s "#cmd:1" && speedwm -s "#cmd:17" ;; -"Enter S expression") speedwm -s "#cmd:15" ;; -esac diff --git a/scripts/speedwm-virtualkeyboard b/scripts/speedwm-virtualkeyboard deleted file mode 100755 index 21dd465..0000000 --- a/scripts/speedwm-virtualkeyboard +++ /dev/null @@ -1,2253 +0,0 @@ -#!/bin/sh -# speedwm-virtualkeyboard -# Licensed under GNU GPLv3 -# https://speedie.gq/speedwm - -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu ;; -esac - -HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -BINDIR="$(dirname $(command -v speedwm_status))/" - -EMOJILIST() -{ -printf "๐Ÿ™‚ Slightly smiling face -๐Ÿ˜€ Smiling face -๐Ÿ˜ƒ Smiling face with big eyes -๐Ÿ˜„ Smiling face with smiling eyes -๐Ÿ˜ Beaming face with smiling eyes -๐Ÿ˜… Smiling face with tears -๐Ÿ˜† Grinning face -๐Ÿคฃ Rolling on the floor laughing -๐Ÿ˜‚ Lauging with tears -๐Ÿ™ƒ Upside down face -๐Ÿ˜‰ Winking face -๐Ÿ˜Š Smiling face with smiling eyes -๐Ÿ˜‡ Smiling face with halo -๐Ÿ˜Ž Smiling face with sunglasses -๐Ÿค“ Nerdy face -๐Ÿง Face with monocle -๐Ÿฅณ Partying face -๐Ÿฅฐ Smiling face with hearts -๐Ÿ˜ Smiling face with heart eyes -๐Ÿคฉ Star-struck -๐Ÿ˜˜ Face blowing kiss -๐Ÿ˜— Kissing face -โ˜บ Smiling face -๐Ÿ˜š Kissing face with closed eyes -๐Ÿ˜™ Kissng face with smiling eyes -๐Ÿฅฒ Smiling face with tears -๐Ÿ˜‹ Yummy face -๐Ÿ˜› Face with tongue -๐Ÿ˜œ WInking face with tongue -๐Ÿคช Zanny face -๐Ÿ˜ Squinting face with tongue -๐Ÿค‘ Money face with money tongue -๐Ÿค— Hugs -๐Ÿคญ Face with hand in mouth -๐Ÿคซ Shushing face -๐Ÿค” Thinkin face -๐Ÿ˜ Neutral face -๐Ÿค Zipped mouth -๐Ÿคจ Face with raised eyebrow -๐Ÿ˜‘ Expressionless face -๐Ÿ˜ถ Face with no mouth -๐Ÿ˜ Smirking face -๐Ÿ˜’ Unamused face -๐Ÿ™„ Face with rolling eyes -๐Ÿ˜ฌ Grimacing face -๐Ÿ˜ฎ ๐Ÿ’จ Grimacing face -๐Ÿคฅ Lying face -๐Ÿ˜ช Sleepy face -๐Ÿ˜ด Sleeping face -๐Ÿ˜Œ Relieved face -๐Ÿ˜” Pensive face -๐Ÿคค Drooling face -๐Ÿ˜ท Face with mask -๐Ÿค’ Face with thermometer -๐Ÿค• Face with bandage -๐Ÿคข Nauseous face -๐Ÿคฎ Vomiting face -๐Ÿคง Sneezing face -๐Ÿฅต Hot face -๐Ÿฅถ Cold face -๐Ÿฅด Woozy face -๐Ÿ˜ต Face with crossed-out face -๐Ÿคฏ Face with exploding head -๐Ÿ˜• Confused face -๐Ÿ˜Ÿ Worried face -๐Ÿ™ Slightly frowning face -โ˜น Frowning face -๐Ÿ˜ฎ Face with open mouth -๐Ÿ˜ฏ Hushed face -๐Ÿ˜ฒ Astonished face -๐Ÿ˜ณ Flushed face -๐Ÿฅบ Begging face -๐Ÿ˜ฆ Frowning face with open mouth -๐Ÿ˜ง Angushed face -๐Ÿ˜จ Fearful face -๐Ÿ˜ฐ Anxious face with sweat -๐Ÿ˜ฅ Sad but relieved face -๐Ÿ˜ข Crying face -๐Ÿ˜ญ Loudly crying face -๐Ÿ˜ฑ Screaming face -๐Ÿ˜– Confounded face -๐Ÿ˜ฃ Persevering face -๐Ÿ˜ž Disapointed face -๐Ÿ˜“ Downcast face with sweat -๐Ÿ˜ฉ Weary face -๐Ÿ˜ซ Tired face -๐Ÿฅฑ Yawning face -๐Ÿ˜ค Face with steam -๐Ÿ˜ก Pouting face -๐Ÿ˜  Angry face -๐Ÿคฌ Face with symbols on mouth -๐Ÿ˜ˆ Smiling face with horns -๐Ÿ‘ฟ Angry face with horns -๐Ÿ’€ Skull -โ˜  Skull and cross-bone -๐Ÿ’ฉ Pile of poo -๐Ÿคก Clown -๐Ÿ‘น Ogre -๐Ÿ‘บ Goblin -๐Ÿ‘ป Ghost -๐Ÿ‘ฝ Alien -๐Ÿ‘พ Alien monster -๐Ÿค– Robot -๐Ÿ˜บ Grinnig cat -๐Ÿ˜ธ Grinning cat with smiling eyes -๐Ÿ˜น Grinning cat with tears -๐Ÿ˜ป Smiling cat with heart eyes -๐Ÿ˜ผ Cat with wry smile -๐Ÿ˜ฝ Kissing cat -๐Ÿ™€ Weary cat -๐Ÿ˜ฟ Crying cat -๐Ÿ˜พ Pouting cat -๐Ÿ™ˆ See no evil monkey -๐Ÿ™‰ Hear no evil monkey -๐Ÿ™Š Speak no evil monkey -๐Ÿ’‹ Kiss -๐Ÿ’Œ Love letter -๐Ÿ’˜ Heart with arrow -๐Ÿ’ HEart with ribbon -๐Ÿ’– Sparking heart -๐Ÿ’— Growing heart -๐Ÿ’“ Beating heart -๐Ÿ’ž Revolving heart -๐Ÿ’• Two hearts -๐Ÿ’Ÿ Heart decoration -โฃ Heart exclamation -๐Ÿ’” Broken heart -โค๏ธ ๐Ÿ”ฅ Heart on fire -โค๏ธ ๐Ÿฉน Mending heart -โค Red heart -๐Ÿงก Orange heart -๐Ÿ’› Yellow heart -๐Ÿ’š Green heart -๐Ÿ’™ Blue heart -๐Ÿ’œ Purple heart -๐ŸคŽ Brown heart -๐Ÿ–ค Black heart -๐Ÿค White heart -๐Ÿ’ฏ Hundred(correct) -๐Ÿ’ข Anger -๐Ÿ’ฅ collision -๐Ÿ’ซ Dizzy -๐Ÿ’ฆ Sweat droplets -๐Ÿ’จ Dashing away -๐Ÿ•ณ Hole -๐Ÿ’ฃ Bomb -๐Ÿ’ฌ Message baloon -๐Ÿ‘๏ธ ๐Ÿ—จ๏ธ Eye in speech bubble -๐Ÿ—จ Left speech bubble -๐Ÿ—ฏ Anger bubble -๐Ÿ’ญ Thought baloon -๐Ÿ’ค zzz -๐Ÿ‘‹ Waving hand -๐Ÿคš Raised back of hand -๐Ÿ– Hands with splayed finger -โœ‹ Raised hand -๐Ÿ–– Vulcan salute -๐Ÿ‘Œ Ok -๐ŸคŒ Pinched fingers -๐Ÿค Pinched hand -โœŒ Victory hand -๐Ÿคž Crossed fingers -๐ŸคŸ Love you -๐Ÿค˜ Horn sign -๐Ÿค™ Call me hand -๐Ÿ‘ˆ Index finger pointing left -๐Ÿ‘‰ Index finger pointing right -๐Ÿ‘† Index finger pointing up -๐Ÿ‘‡ Index finger pointing down -๐Ÿ–• Middle finger -โ˜ Forehand Index finger pointing up -๐Ÿซต Index finger pointing at viewer -๐Ÿ‘ Thumbs up -๐Ÿ‘Ž Thumbs down -โœŠ Raised fist -๐Ÿ‘Š Fist -๐Ÿค› Left facing fist -๐Ÿคœ Right facing fist -๐Ÿ‘ Clapping hands -๐Ÿ™Œ Raised hands -๐Ÿ‘ OPen hands -๐Ÿคฒ Palms together hands -๐Ÿค Handshake -๐Ÿ™ Praying hands -โœ Writing hands -๐Ÿ’… Nail polish -๐Ÿคณ Selfie hand -๐Ÿ’ช Flexed biceps -๐Ÿฆพ MEchanical arm -๐Ÿฆต Leg -๐Ÿฆฟ Mechanical leg -๐Ÿฆถ Foot -๐Ÿ‘‚ Ear -๐Ÿฆป Ear with earing aid -๐Ÿ‘ƒ Nose -๐Ÿง  Brain -๐Ÿ‘ฃ Footprint -๐Ÿซ€ MEchanical heart -๐Ÿซ Lungs -๐Ÿฆท Tooth -๐Ÿฆด Bone -๐Ÿ‘€ Eyes -๐Ÿ‘ Eye -๐Ÿ‘… Nose -๐Ÿ‘„ Mouth -๐Ÿง‘ Person -๐Ÿ‘ถ Baby -๐Ÿง’ Child -๐Ÿ‘ฆ Boy -๐Ÿ‘ง Girl -๐Ÿ‘ฑ Person with blonde hair -๐Ÿ‘จ Man -๐Ÿง” Bearded person -๐Ÿง” โ™‚โ€ Bearded man -๐Ÿง” โ™€โ€ Bearded woman -๐Ÿ‘จ ๐Ÿฆฐ MAn with red hair -๐Ÿ‘จ ๐Ÿฆฑ Man with curly hair -๐Ÿ‘จ ๐Ÿฆณ Man with white hair -๐Ÿ‘จ ๐Ÿฆฒ Bald man -๐Ÿ‘ฉ Woman -๐Ÿ‘ฉ ๐Ÿฆฐ Woman with red hair -๐Ÿ‘ฉ ๐Ÿฆฑ Woman with curly hair -๐Ÿ‘ฉ ๐Ÿฆณ Woman with white hair -๐Ÿ‘ฉ ๐Ÿฆฒ Bald woman -๐Ÿ‘ฑ โ™€โ€ Woman with blode hair -๐Ÿ‘ฑ โ™‚โ€ Man with blonde hair -๐Ÿง“ Old person -๐Ÿ‘ด Old man -๐Ÿ‘ต Old woman -๐Ÿ™ Person frowning -๐Ÿ™ โ™‚โ€ Man frowning -๐Ÿ™ โ™€โ€ Woman frowning -๐Ÿ™Ž Person pouting -๐Ÿ™Ž โ™‚โ€ Man pouting -๐Ÿ™Ž โ™€โ€ Woman pouting -๐Ÿ™… Person gesturing no -๐Ÿ™… โ™‚โ€ Man gesturing no -๐Ÿ™… โ™€โ€ Woman gesturing no -๐Ÿ™† Person stretching -๐Ÿ™† โ™‚โ€ Man stretching -๐Ÿ™† โ™€โ€ Woman stretching -๐Ÿ’ Person tipping hand -๐Ÿ’ โ™‚โ€ Man tipping hand -๐Ÿ’ โ™€โ€ Woman tipping hand -๐Ÿ™‹ Person rainsing hand -๐Ÿ™‹ โ™‚โ€ Man raising hand -๐Ÿ™‹ โ™€โ€ Woman raisning hand -๐Ÿง Deaf person -๐Ÿง โ™‚โ€ Deaf man -๐Ÿง โ™€โ€ Deaf woman -๐Ÿ™‡ Person bowing -๐Ÿ™‡ โ™‚โ€ Man bowing -๐Ÿ™‡ โ™€โ€ Woman bowing -๐Ÿคฆ Person facepalming -๐Ÿคฆ โ™‚โ€ Man facepalming -๐Ÿคฆ โ™€โ€ Woman facepalming -๐Ÿคท Person shrugging -๐Ÿคท โ™‚โ€ Man shrugging -๐Ÿคท โ™€โ€ Woman shrugging -๐Ÿง‘ โš•โ€ Health worker -๐Ÿ‘จ โš•โ€ Man health worker -๐Ÿ‘ฉ โš•โ€ Woman health worker -๐Ÿง‘ ๐ŸŽ“ Student -๐Ÿ‘จ ๐ŸŽ“ Man student -๐Ÿง‘ ๐Ÿซ Teacher -๐Ÿ‘จ ๐Ÿซ Man teacher -๐Ÿ‘ฉ ๐Ÿซ Woman teacher -๐Ÿง‘ โš–โ€ Judge -๐Ÿ‘จ โš–โ€ Man judge -๐Ÿ‘ฉ โš–โ€ Woman judge -๐Ÿง‘ ๐ŸŒพ Farmer -๐Ÿ‘จ ๐ŸŒพ Man farmer -๐Ÿ‘ฉ ๐ŸŒพ Woman farmer -๐Ÿง‘ ๐Ÿณ Cook -๐Ÿ‘จ ๐Ÿณ Man cook -๐Ÿ‘ฉ ๐Ÿณ Woman cook -๐Ÿง‘ ๐Ÿ”ง Mechanic -๐Ÿ‘จ ๐Ÿ”ง Man mechanic -๐Ÿ‘ฉ ๐Ÿ”ง Woman mechanic -๐Ÿง‘ ๐Ÿญ Factory worker -๐Ÿ‘จ ๐Ÿญ Man factory worker -๐Ÿ‘ฉ ๐Ÿญ Woman factory worker -๐Ÿง‘ ๐Ÿ’ผ Office worker -๐Ÿ‘จ ๐Ÿ’ผ Man office worker -๐Ÿ‘ฉ ๐Ÿ’ผ Woma office worker -๐Ÿง‘ ๐Ÿ”ฌ Scientist -๐Ÿ‘จ ๐Ÿ”ฌ Man scientist -๐Ÿ‘ฉ ๐Ÿ”ฌ Woman scientis -๐Ÿง‘ ๐Ÿ’ป Technologist -๐Ÿ‘จ ๐Ÿ’ป Man texhnologist -๐Ÿ‘ฉ ๐Ÿ’ป Woman technologist -๐Ÿง‘ ๐ŸŽค Singer -๐Ÿ‘จ ๐ŸŽค Man singer -๐Ÿ‘ฉ ๐ŸŽค Woman singer -๐Ÿง‘ ๐ŸŽจ Artist -๐Ÿ‘จ ๐ŸŽจ Man artist -๐Ÿ‘ฉ ๐ŸŽจ Woman artist -๐Ÿง‘ โœˆโ€ Pilot -๐Ÿ‘จ โœˆโ€ Man pilot -๐Ÿ‘ฉ โœˆโ€ Woman pilot -๐Ÿง‘ ๐Ÿš€ Astronaut -๐Ÿ‘จ ๐Ÿš€ Man astronaut -๐Ÿ‘ฉ ๐Ÿš€ Woman astronaut -๐Ÿง‘ ๐Ÿš’ Firefighter -๐Ÿ‘จ ๐Ÿš’ Man firefighter -๐Ÿ‘ฉ ๐Ÿš’ Woman firefighter -๐Ÿ‘ฎ Police -๐Ÿ‘ฎ โ™‚โ€ Policeman -๐Ÿ‘ฎ โ™€โ€ Policewoman -๐Ÿ•ต Detective -๐Ÿ•ต๏ธ โ™‚โ€ Man detective -๐Ÿ•ต๏ธ โ™€โ€ Woman detective -๐Ÿ’‚ Guard -๐Ÿ’‚ โ™‚โ€ Man guard -๐Ÿ’‚ โ™€โ€ Woman guard -๐Ÿฅท Ninja -๐Ÿ‘ท Construction worker -๐Ÿ‘ท โ™‚โ€ Man construction worker -๐Ÿ‘ท โ™€โ€ Woman construction worker -๐Ÿคด Prince -๐Ÿ‘ธ Princess -๐Ÿ‘ณ Person wearing turban -๐Ÿ‘ณ โ™‚โ€ Man wearing turban -๐Ÿ‘ณ โ™€โ€ Woman wearing turban -๐Ÿ‘ฒ Person with skullcap -๐Ÿง• Woman with headscaff -๐Ÿคต Person in tuxedo -๐Ÿคต โ™‚โ€ Man in tuxedo -๐Ÿคต โ™€โ€ Woman in tuxedo -๐Ÿ‘ฐ Person in veil -๐Ÿ‘ฐ โ™‚โ€ Man in veil -๐Ÿ‘ฐ โ™€โ€ Woman in veil -๐Ÿคฐ Pregnant woman -๐Ÿคฑ Breast-feeding -๐Ÿง‘ ๐Ÿผ Person feeding baby -๐Ÿ‘ฉ ๐Ÿผ WOman feeding baby -๐Ÿ‘จ ๐Ÿผ Man feeding baby -๐Ÿ‘ผ Baby angel -๐ŸŽ… Santa claus -๐Ÿคถ Mrs Claus -๐Ÿง‘ ๐ŸŽ„ Mx Claus -๐Ÿฆธ Superhero -๐Ÿฆธ โ™‚โ€ Man superhero -๐Ÿฆธ โ™€โ€ Woman superhero -๐Ÿฆน Supervillain -๐Ÿฆน โ™‚โ€ Man superhero -๐Ÿฆน โ™€โ€ Woman superhero -๐Ÿง™ Mage -๐Ÿง™ โ™‚โ€ Man mage -๐Ÿง™ โ™€โ€ Woman mage -๐Ÿงš Fairy -๐Ÿงš โ™‚โ€ Man fairy -๐Ÿงš โ™€โ€ Woman fairy -๐Ÿง› Vampire -๐Ÿง› โ™‚โ€ Man vampire -๐Ÿง› โ™€โ€ Woman vampire -๐Ÿงœ Merperson -๐Ÿงœ โ™‚โ€ Merman -๐Ÿงœ โ™€โ€ Mermaid -๐Ÿง Elf -๐Ÿง โ™‚โ€ Man elf -๐Ÿง โ™€โ€ Woman elf -๐Ÿงž Genie -๐Ÿงž โ™‚โ€ Man genie -๐Ÿงž โ™€โ€ Woman genie -๐ŸงŸ Zombie -๐ŸงŸ โ™‚โ€ Man zombie -๐ŸงŸ โ™€โ€ Woman zombie -๐Ÿ’† Person getting massage -๐Ÿ’† โ™‚โ€ Man getting massage -๐Ÿ’† โ™€โ€ Woman getting massage -๐Ÿ’‡ Person getting haircut -๐Ÿ’‡ โ™‚โ€ Man getting haircut -๐Ÿ’‡ โ™€โ€ Woman getting haircut -๐Ÿšถ Person walking -๐Ÿšถ โ™‚โ€ Man walking -๐Ÿšถ โ™€โ€ Woman walking -๐Ÿง Person standing -๐Ÿง โ™‚โ€ Man standing -๐Ÿง โ™€โ€ Woman standing -๐ŸงŽ Person kneeling -๐ŸงŽ โ™‚โ€ Man kneeling -๐ŸงŽ โ™€โ€ Woman kneeling -๐Ÿง‘ ๐Ÿฆฏ PErson with walking stick -๐Ÿ‘จ ๐Ÿฆฏ Man with walking stick -๐Ÿ‘ฉ ๐Ÿฆฏ Woman with walking stick -๐Ÿง‘ ๐Ÿฆผ Person in motorized wheelchair -๐Ÿ‘จ ๐Ÿฆผ Man in motorized wheelchair -๐Ÿ‘ฉ ๐Ÿฆผ Womain in motorized wheelchair -๐Ÿง‘ ๐Ÿฆฝ Person in manual wheelchair -๐Ÿ‘จ ๐Ÿฆฝ Man in manual wheelchair -๐Ÿ‘ฉ ๐Ÿฆฝ Womaan in motorized wheelchair -๐Ÿƒ Person sprinting -๐Ÿƒ โ™‚โ€ Man sprinting -๐Ÿƒ โ™€โ€ Woman sprinting -๐Ÿ’ƒ Woman dancing -๐Ÿ•บ Man dancing -๐Ÿ•ด Person in suit levitating -๐Ÿ‘ฏ People with bunny ears -๐Ÿ‘ฏ โ™‚โ€ Men with bunny ears -๐Ÿ‘ฏ โ™€โ€ Women in bunny ears -๐Ÿง– Person in steaming room -๐Ÿง– โ™‚โ€ Man in steaming room -๐Ÿง– โ™€โ€ Woman in steaming room -๐Ÿง— Person climbing -๐Ÿง— โ™‚โ€ Man climbing -๐Ÿง— โ™€โ€ Woman climbing -๐Ÿคบ Person fencing -๐Ÿ‡ Horse racing -โ›ท Skier -๐Ÿ‚ Snowball -๐ŸŒ Person playing golf -๐ŸŒ๏ธ โ™‚โ€ Man playing golf -๐ŸŒ๏ธ โ™€โ€ Woman playing golf -๐Ÿ„ Person surfing -๐Ÿ„ โ™‚โ€ Man surfing -๐Ÿ„ โ™€โ€ Woman surfing -๐Ÿšฃ Person rowing boat -๐Ÿšฃ โ™‚โ€ Man rowing boat -๐Ÿšฃ โ™€โ€ Woman rowing boat -๐ŸŠ Person swimming -๐ŸŠ โ™‚โ€ Man swimming -๐ŸŠ โ™€โ€ Woman swimming -โ›น Person bouncing ball -โ›น๏ธ โ™‚โ€ Man bouncing ball -โ›น๏ธ โ™€โ€ Woman bouncing ball -๐Ÿ‹ Person lifting weight -๐Ÿ‹๏ธ โ™‚โ€ Man lifting weight -๐Ÿ‹๏ธ โ™€โ€ Woman lifting weight -๐Ÿšด Person cycling -๐Ÿšด โ™‚โ€ Man cycling -๐Ÿšด โ™€โ€ Woman cycling -๐Ÿšต Person mountain biking -๐Ÿšต โ™‚โ€ Man mountain biking -๐Ÿšต โ™€โ€ Woman mountain biking -๐Ÿคธ Person catwheeling -๐Ÿคธ โ™‚โ€ Man catwheeling -๐Ÿคธ โ™€โ€ Woman catwheeling -๐Ÿคผ People wrestling -๐Ÿคผ โ™‚โ€ Men wrestling -๐Ÿคผ โ™€โ€ Women wrestling -๐Ÿคฝ Person playing water polo -๐Ÿคฝ โ™‚โ€ Man playing water polo -๐Ÿคฝ โ™€โ€ Woman playing water polo -๐Ÿคพ Person playing handball -๐Ÿคพ โ™‚โ€ Man playing handball -๐Ÿคพ โ™€โ€ Woman playing handball -๐Ÿคน Person juggling -๐Ÿคน โ™‚โ€ Man juggling -๐Ÿคน โ™€โ€ Woman juggling -๐Ÿง˜ Person lotus position -๐Ÿง˜ โ™‚โ€ Man in lotus position -๐Ÿง˜ โ™€โ€ Woman in lotus position -๐Ÿ›€ Person bathing -๐Ÿ›Œ Person in bed -๐Ÿ‘ช Family -๐Ÿ‘จ ๐Ÿ‘ฉโ€๐Ÿ‘ฆ Family: man, woman, and boy -๐Ÿ‘จ ๐Ÿ‘ฉโ€๐Ÿ‘ง Family: man, woman, and girl -๐Ÿ‘จ ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family: man, woman, boy, and girl -๐Ÿ‘จ ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family: man, woman, and two boys -๐Ÿ‘จ ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง Family: man, woman, and two girls -๐Ÿ‘จ ๐Ÿ‘จโ€๐Ÿ‘ฆ Family: two men and boy -๐Ÿ‘จ ๐Ÿ‘จโ€๐Ÿ‘ง Family: two men and girl -๐Ÿ‘จ ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family: two men, girl, and boy -๐Ÿ‘จ ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family: two men and two boys -๐Ÿ‘จ ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง Family: two men and two girls -๐Ÿ‘ฉ ๐Ÿ‘ฉโ€๐Ÿ‘ฆ Family: two women and boy -๐Ÿ‘ฉ ๐Ÿ‘ฉโ€๐Ÿ‘ง Family: two women and girl -๐Ÿ‘ฉ ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family: two women, girl, and boy -๐Ÿ‘ฉ ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family: two women and two boys -๐Ÿ‘ฉ ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง Family: two women and two girls -๐Ÿ‘จ ๐Ÿ‘ฆ Family: man and boy -๐Ÿ‘จ ๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family: man and two boys -๐Ÿ‘จ ๐Ÿ‘ง Family: man and girl -๐Ÿ‘จ ๐Ÿ‘งโ€๐Ÿ‘ฆ Family: man, girl and boy -๐Ÿ‘จ ๐Ÿ‘งโ€๐Ÿ‘ง Family: man and two girls -๐Ÿ‘ฉ ๐Ÿ‘ฆ Family: woman and boy -๐Ÿ‘ฉ ๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family: woman and two boys -๐Ÿ‘ฉ ๐Ÿ‘ง Family: woman and girl -๐Ÿ‘ฉ ๐Ÿ‘งโ€๐Ÿ‘ฆ Family: woman, girl, and boy -๐Ÿ‘ฉ ๐Ÿ‘งโ€๐Ÿ‘ง Family: woman and two girls -๐Ÿง‘ ๐Ÿคโ€๐Ÿง‘ People holding hands -๐Ÿ‘ญ Women holding hands -๐Ÿ‘ซ Woman and man holding hands -๐Ÿ‘ฌ Men holding hands -๐Ÿ’ Kiss -๐Ÿ‘ฉ โคโ€๐Ÿ’‹โ€๐Ÿ‘จ Woman and man kissing -๐Ÿ‘จ โคโ€๐Ÿ’‹โ€๐Ÿ‘จ Man and man kissing -๐Ÿ‘ฉ โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ Womand and woman kissing -๐Ÿ’‘ Couple with heart -๐Ÿ—ฃ Person speaking -๐Ÿ‘ค Bust in silhouhette -๐Ÿ‘ฅ Busts in silhouette -๐Ÿซ‚ People hugging -๐Ÿต Monkey face -๐Ÿ’ Monkey -๐Ÿฆ Gorilla -๐Ÿฆง Orangutan -๐Ÿถ Dog face -๐Ÿ• Dog -๐Ÿฆฎ Guide dog -๐Ÿ• ๐Ÿฆบ Service dog -๐Ÿฉ Poodle -๐Ÿบ Wolf -๐ŸฆŠ Fox -๐Ÿฆ Racoon -๐Ÿฑ Cat face -๐Ÿˆ Cat -๐Ÿˆ โฌ› Black cat -๐Ÿฆ Lion -๐Ÿฏ Tiger face -๐Ÿ… Tiger -๐Ÿ† Leopard -๐Ÿด Horse face -๐ŸŽ Horse -๐Ÿฆ„ Unicorn -๐Ÿฆ“ Zebra -๐ŸฆŒ Deer -๐Ÿฆฌ Bison -๐Ÿฎ Cow face -๐Ÿ„ Cow -๐Ÿ‚ Ox -๐Ÿƒ Water buffalo -๐Ÿท Pig face -๐Ÿ– Pig -๐Ÿ— Boar -๐Ÿฝ Pig nose -๐Ÿ Ram -๐Ÿ‘ Ewe -๐Ÿ Goat -๐Ÿช Camel -๐Ÿซ Two hump camel -๐Ÿฆ™ Ilama -๐Ÿฆ’ Giraffe -๐Ÿ˜ Elephant -๐Ÿฆฃ Mammoth -๐Ÿฆ Rhiniceros -๐Ÿฆ› Hippopotamus -๐Ÿญ Mouse face -๐Ÿ Mouse -๐Ÿ€ Rat -๐Ÿน Hamster -๐Ÿฐ Rabbit face -๐Ÿ‡ Rabbit -๐Ÿฟ Chipmunk -๐Ÿฆซ Beaver -๐Ÿฆ” Hedgehog -๐Ÿฆ‡ Bat -๐Ÿป Bear -๐Ÿป โ„๏ธ Polar bear -๐Ÿจ Koala -๐Ÿผ Panda -๐Ÿฆฅ Sloth -๐Ÿฆฆ Otter -๐Ÿฆจ Skunk -๐Ÿฆ˜ Kangaroo -๐Ÿฆก Badger -๐Ÿพ Paw prints -๐Ÿฆƒ Turkey -๐Ÿ” Chicken -๐Ÿ“ Rooster -๐Ÿฃ Hatching -๐Ÿค Baby chick -๐Ÿฅ Front-facing chick -๐Ÿฆ Bird -๐Ÿง Penguin -๐Ÿ•Š Dove -๐Ÿฆ… Eagle -๐Ÿฆ† Duck -๐Ÿฆข Swan -๐Ÿฆ‰ Owl -๐Ÿฆค Dodo -๐Ÿชถ Feather -๐Ÿฆฉ Flamingo -๐Ÿฆœ Peacock -๐Ÿธ Frog -๐ŸŠ Crocodile -๐Ÿข Turtle -๐ŸฆŽ Lizard -๐Ÿ Snake -๐Ÿฒ Dragon face -๐Ÿ‰ Dragon -๐Ÿฆ• Sauropod -๐Ÿฆ– Tyranosaurus -๐Ÿณ Spouting whale -๐Ÿ‹ Whale -๐Ÿฌ Dolphin -๐Ÿฆญ Seal -๐ŸŸ Fish -๐Ÿ  Tropical fish -๐Ÿก Blowfish -๐Ÿฆˆ Shark -๐Ÿ™ Octopus -๐Ÿš Spiral shell -๐ŸŒ Snail -๐Ÿฆ‹ Butterfly -๐Ÿ› Bug -๐Ÿœ Ant -๐Ÿ Honeybee -๐Ÿชฒ Beetle -๐Ÿž Lady Beetle -๐Ÿฆ— Cricket -๐Ÿชณ Cockroach -๐Ÿ•ท Spider -๐Ÿ•ธ Spider web -๐Ÿฆ‚ Scorpion -๐ŸฆŸ Mosquito -๐Ÿชฐ Fly -๐Ÿชฑ Worm -๐Ÿฆ  Microbe -๐Ÿ’ Bouquet -๐ŸŒธ Cherry blossom -๐Ÿ’ฎ White flower -๐Ÿต Rosette -๐ŸŒน Rose -๐Ÿฅ€ Wilted flower -๐ŸŒบ Hibiscus -๐ŸŒป Sunflower -๐ŸŒผ Blossom -๐ŸŒท Tulip -๐ŸŒฑ Seedling -๐Ÿชด Potted plant -๐ŸŒฒ Evergreen tree -๐ŸŒณ Deciduous plant -๐ŸŒด Palm tree -๐ŸŒต Cactus -๐ŸŒพ Sheaf of rice -๐ŸŒฟ Herb -โ˜˜ Shamrock -๐Ÿ€ Four leaf clover -๐Ÿ Maple leaf -๐Ÿ‚ Fallen leaf -๐Ÿƒ Leaf fluttering in wind -๐Ÿชด Empty nest -๐Ÿชด Nest with eggs -๐Ÿ‡ Grapes -๐Ÿˆ Melon -๐Ÿ‰ Water melon -๐ŸŠ Tangerine -๐Ÿ‹ Lime -๐ŸŒ Banana -๐Ÿ Pineapple -๐Ÿฅญ Mango -๐ŸŽ Red apple -๐Ÿ Green apple -๐Ÿ Pear -๐Ÿ‘ Peach -๐Ÿ’ Cherries -๐Ÿ“ Strawberries -๐Ÿซ Blueberries -๐Ÿฅ Kiwi fruit -๐Ÿ… Tomato -๐Ÿซ’ Olive -๐Ÿฅฅ Coconut -๐Ÿฅ‘ Avocado -๐Ÿ† Eggplant -๐Ÿฅ” Potato -๐Ÿฅ• Carrot -๐ŸŒฝ Corn -๐ŸŒถ Pepper -๐Ÿซ‘ Bell pepper -๐Ÿฅ’ Cucumber -๐Ÿฅฌ Leafy green -๐Ÿฅฆ Broccoli -๐Ÿง„ Garlic -๐Ÿง… Onion -๐Ÿ„ Mushroom -๐Ÿฅœ Peanuts -๐Ÿซ‘ Beans -๐ŸŒฐ Chestnut -๐Ÿž Bread -๐Ÿฅ Croissant -๐Ÿฅ– Baguette bread -๐Ÿซ“ Flat bread -๐Ÿฅจ Pretzel -๐Ÿฅฏ Bagel -๐Ÿฅž Pancake -๐Ÿง‡ Waffle -๐Ÿง€ Cheese wedge -๐Ÿ– Meat with bone -๐Ÿ— Poultry leg -๐Ÿฅฉ Cut of meat -๐Ÿฅ“ Bacon -๐Ÿ” Hamburger -๐ŸŸ French fries -๐Ÿ• Pizza -๐ŸŒญ Hot dog -๐Ÿฅช Sandwich -๐ŸŒฎ Taco -๐ŸŒฏ Burrito -๐Ÿซ” Tamale -๐Ÿฅ™ Stuffed flatbread -๐Ÿง† Falafel -๐Ÿฅš Egg -๐Ÿณ Cooking -๐Ÿฅ˜ Shallow pan of food -๐Ÿฒ Pot of food -๐Ÿซ• Fondue -๐Ÿฅฃ Bowl with food -๐Ÿฅ— Green salad -๐Ÿฟ Popcorn -๐Ÿงˆ Butter -๐Ÿง‚ Salt -๐Ÿฅซ Canned food -๐Ÿฑ Bento box -๐Ÿ˜ RIce cracker -๐Ÿ™ Rice ball -๐Ÿš Cooked rice -๐Ÿ› Curry rice -๐Ÿœ Steaming bowl -๐Ÿ Spaghetti -๐Ÿ  Roasted sweet potato -๐Ÿข Oden -๐Ÿฃ Sushi -๐Ÿค Fried shrimp -๐Ÿฅ Fish cake with swiri -๐Ÿฅฎ Moon cake -๐Ÿก Dango -๐ŸฅŸ Dumpling -๐Ÿฅ  Fortune cookie -๐Ÿฅก Take out box -๐Ÿฆ€ Crab -๐Ÿฆž Lobster -๐Ÿฆ Shrimp -๐Ÿฆ‘ Squid -๐Ÿฆช Oyster -๐Ÿจ Ice cream -๐Ÿง Shaved ice cream -๐Ÿฆ Soft ice cream -๐Ÿฉ Doughnut -๐Ÿช Cookie -๐ŸŽ‚ Birthday cake -๐Ÿฐ Short cake -๐Ÿง Cup cake -๐Ÿฅง Pie -๐Ÿซ Chocoloate -๐Ÿฌ Candy -๐Ÿญ Lollipop -๐Ÿฎ Custard -๐Ÿฏ Honey pot -๐Ÿผ Baby bottle -๐Ÿฅ› Glass of milk -โ˜• Hot beverage -๐Ÿซ– Teapot -๐Ÿต Teacup without handle -๐Ÿถ Sake -๐Ÿพ Bottle with poppin cork -๐Ÿท Wine glass -๐Ÿธ Cocktail glass -๐Ÿน Tropical drink -๐Ÿบ Beer mug -๐Ÿป Clinking beer mug -๐Ÿฅ‚ Clinking glasses -๐Ÿฅƒ Tumbler glass -๐Ÿฅค Cup with strawberry -๐Ÿง‹ Bubble tea -๐Ÿงƒ Beverage box -๐Ÿง‰ Mate -๐ŸงŠ Ice -๐Ÿฅข Chopsticks -๐Ÿฝ Fork and knife with plate -๐Ÿด Fork and knife -๐Ÿฅ„ Spoon -๐Ÿ”ช Kitchen knife -๐Ÿง‹ Jar -๐Ÿบ Amphora -๐ŸŒ Globe showing Africa and Europe -๐ŸŒŽ Globe showing Americas -๐ŸŒ Globe showing Asia and Australia -๐ŸŒ Globe with meridians -๐Ÿ—บ World map -๐Ÿงญ Compass -โ›ฐ Mountain -๐Ÿ” Snowcap mountain -๐ŸŒ‹ Volcanic mountain -๐Ÿ—ป Fuji mountain -๐Ÿ• Camping -๐Ÿ– Beach with umbrella -๐Ÿœ Desert -๐Ÿ Desertified island -๐Ÿž National park -๐ŸŸ Stadium -๐Ÿ› Classical building -๐Ÿ— Building construction -๐Ÿงฑ Brick -๐Ÿชจ Rock -๐Ÿชต Wood -๐Ÿ›– Hut -๐Ÿ˜ Houses -๐Ÿš Derelict house -๐Ÿ  House -๐Ÿก House with garden -๐Ÿข Office building -๐Ÿฃ Japanese office -๐Ÿค Post office -๐Ÿฅ Hospital -๐Ÿฆ Bank -๐Ÿจ Hotel -๐Ÿฉ Love hotel -๐Ÿช Convenience store -๐Ÿซ School -๐Ÿฌ Department -๐Ÿญ Factory -๐Ÿฏ Japanese castle -๐Ÿฐ Castle -๐Ÿ’’ Wedding house -๐Ÿ—ผ Tokyo tower -๐Ÿ—ฝ Statue of liberty -โ›ช Church -๐Ÿ•Œ Mosque -๐Ÿ›• Hindu temple -๐Ÿ• Synagogue -โ›ฉ Shinto shrine -๐Ÿ•‹ Kaaba -โ›ฒ Fountain -โ›บ Tent -๐ŸŒ Foggy -๐ŸŒƒ Night with starrs -๐Ÿ™ Citscape -๐ŸŒ… Sunrise -๐ŸŒ„ Sunrise over mountains -๐ŸŒ† Cityscape at dusk -๐ŸŒ‡ Sunset -๐ŸŒ‰ Bridge at night -โ™จ Hot springs -๐ŸŽ  Carousel horse -๐ŸŽก Ferris wheel -๐ŸŽข Roller coaster -๐Ÿ’ˆ Barber poll -๐ŸŽช Circus tent -๐Ÿš‚ Locomotive -๐Ÿšƒ Railway car -๐Ÿš„ High speed train -๐Ÿš… Bullet train -๐Ÿš† Train -๐Ÿš‡ Metro -๐Ÿšˆ Light rail -๐Ÿš‰ Station -๐ŸšŠ Tram -๐Ÿš Monorail -๐Ÿšž Mountain railway -๐Ÿš‹ Tram car -๐ŸšŒ us -๐Ÿš Oncoming bus -๐ŸšŽ Trolley bus -๐Ÿš Minibus -๐Ÿš‘ Ambulance -๐Ÿš’ Fire engine -๐Ÿš“ Police car -๐Ÿš” Oncoming police car -๐Ÿš• Taxi -๐Ÿš– Oncoming taxi -๐Ÿš— Automobile -๐Ÿš˜ Oncoming automobile -๐Ÿš™ Sport utility vehicle -๐Ÿ›ป Pickup truck -๐Ÿšš Delivery truck -๐Ÿš› Articulated lorry -๐Ÿšœ Tractor -๐ŸŽ Racing car -๐Ÿ Motorcycle -๐Ÿ›ต Scooter -๐Ÿฆฝ Manual wheelchair -๐Ÿฆผ Motorized wheelchair -โŒ› Hourglass done -โณ Hourglass starting -โŒš Watch -โฐ Alarm -โฑ Stopwatch -โฒ Timer clock -๐Ÿ•ฐ Mantelpiece clock -๐Ÿ•› Twelve -๐Ÿ•ง Twelve-thirty -๐Ÿ• One -๐Ÿ•œ One-thirty -๐Ÿ•‘ Two -๐Ÿ• Two-thirty -๐Ÿ•’ Three -๐Ÿ•ž Three-thirty -๐Ÿ•“ Four -๐Ÿ•Ÿ Four-thirty -๐Ÿ•” Five -๐Ÿ•  Five-thirty -๐Ÿ•• Six -๐Ÿ•ก Six-thirty -๐Ÿ•– Seven -๐Ÿ•ข Seven-thirty -๐Ÿ•— Eight -๐Ÿ•ฃ Eight-thirty -๐Ÿ•˜ Nine -๐Ÿ•ค Nine-thirty -๐Ÿ•™ Ten -๐Ÿ•ฅ Ten-thirty -๐Ÿ•š Eleven -๐Ÿ•ฆ Eleven-thirty -๐ŸŒ‘ New moon -๐ŸŒ’ Waxing crescent moon -๐ŸŒ“ First quarter moon -๐ŸŒ” Waxing gibbous moon -๐ŸŒ• Full moon -๐ŸŒ– Waning gibbous moon -๐ŸŒ— Last quarter moon -๐ŸŒ˜ Waning crescent moon -๐ŸŒ™ Crescent moon -๐ŸŒš New moon face -๐ŸŒ› First quarter moon face -๐ŸŒœ Last quartermoon face -๐ŸŒก Thermometer -โ˜€ Sun -๐ŸŒ Full moon face -๐ŸŒž Sun with face -๐Ÿช Ringed planet -โญ Star -๐ŸŒŸ Glowing star -๐ŸŒ  Shooting star -๐ŸŒŒ Milky way -โ˜ Cloud -โ›… Sun behind cloud -โ›ˆ Cloud with lighting and rain -๐ŸŒค Sun behind small cloud -๐ŸŒฅ Sun behind large cloud -๐ŸŒฆ Sun behind rain cloud -๐ŸŒง Cloud with rain -๐ŸŒจ Cloud with snow -๐ŸŒฉ Cloud with lighting -๐ŸŒช Tornado -๐ŸŒซ Fog -๐ŸŒฌ Wind face -๐ŸŒ€ Cyclone -๐ŸŒˆ Rainbow -๐ŸŒ‚ Closed umbrella -โ˜‚ Umbrella -โ˜” Umbrella with raindrops -โ›ฑ Umbrella on ground -โšก High voltage -โ„ Snowflake -โ˜ƒ Snowman -โ›„ Snowman without snow -โ˜„ Comet -๐Ÿ”ฅ Fire -๐Ÿ’ง Droplet -๐ŸŒŠ Water wave -๐ŸŽƒ Jack-o-lantern -๐ŸŽ„ Christmas tree -๐ŸŽ† Fireworks -๐ŸŽ‡ Sparkler -๐Ÿงจ Firecracker -โœจ Sparkles -๐ŸŽˆ Baloon -๐ŸŽ‰ Party popper -๐ŸŽŠ Confetti ball -๐ŸŽ‹ Tanabata tree -๐ŸŽ Pine decoration -๐ŸŽŽ Japanese dolls -๐ŸŽ Carp streamer -๐ŸŽ‘ Moon viewing ceremony -๐Ÿงง Red envelope -๐ŸŽ€ Ribbon -๐ŸŽ Wrapped gift -๐ŸŽ— Reminder ribbon -๐ŸŽŸ Admission ticket -๐ŸŽซ Ticket -๐ŸŽ– Military medal -๐Ÿ† Trophy -๐Ÿ… Sports medal -๐Ÿฅ‡ Gold medal - first position -๐Ÿฅˆ Silver medal - second position -๐Ÿฅ‰ Bronze medal - third position -โšฝ Soccer ball -โšพ Baseball -๐ŸฅŽ Softball -๐Ÿ€ BAsketball -๐Ÿ Volleyball -๐Ÿˆ American football -๐Ÿ‰ Rugby -๐ŸŽพ Tennis -๐Ÿฅ Flying disk -๐ŸŽณ Bowling -๐Ÿ Cricket -๐Ÿ‘ Field hockey -๐Ÿ’ Ice hockey -๐Ÿฅ Lacrose -๐Ÿ“ Ping pong -๐Ÿธ Badminton -๐ŸฅŠ Boxing glove -๐Ÿฅ‹ Martial arts uniform -๐Ÿฅ… Goal net -โ›ณ Flag in a hole -โ›ธ Ice skate -๐ŸŽฃ Fishing poll -๐Ÿคฟ Driving mask -๐ŸŽฝ Running shirt -๐ŸŽฟ Skis -๐Ÿ›ท Sled -๐ŸฅŒ Curling stone -๐ŸŽฏ Bullseye -๐Ÿช€ Yo-yo -๐Ÿช Kite -๐ŸŽฑ 8 ball -๐Ÿ”ฎ Crystal ball -๐Ÿช„ Magic wand -๐Ÿงฟ Nazar amulet -๐Ÿช„ Hamsa -๐ŸŽฎ Video game pad -๐Ÿ•น Joystick -๐ŸŽฐ Slot machine -๐ŸŽฒ Game die -๐Ÿงฉ Puxxle piece -๐Ÿงธ Teddy bear -๐Ÿช… Pinata -๐Ÿช† Mirror -๐Ÿช† Nesting doll -โ™  Spade suit -โ™ฅ Heart suit -โ™ฃ Club suit -โ™Ÿ Chess pawn -๐Ÿƒ Joker -๐Ÿ€„ Mahjong red dragon -๐ŸŽด Flower playing cards -๐ŸŽญ Performing arts -๐Ÿ–ผ Framed picture -๐ŸŽจ Artist pallete -๐Ÿงต Thread -๐Ÿชก Sewing needle with thred -๐Ÿงถ Yarn -๐Ÿชข Knot -๐Ÿ‘“ Glasses -๐Ÿ•ถ Sunglasses -๐Ÿฅฝ Googles -๐Ÿฅผ Lab coat -๐Ÿฆบ Safety vest -๐Ÿ‘” Necktie -๐Ÿ‘• T-shirt -๐Ÿ‘– Jeans -๐Ÿงฃ Scarf -๐Ÿงค Gloves -๐Ÿงฅ Coat -๐Ÿงฆ Socks -๐Ÿ‘— Dress -๐Ÿ‘˜ Kimono -๐Ÿฅป Sari -๐Ÿฉฑ One piece suit -๐Ÿฉฒ Briefs -๐Ÿฉณ Shorts -๐Ÿ‘™ Bikini -๐Ÿ‘š Woma -๐Ÿ‘› Purse -๐Ÿ‘œ Handbag -๐Ÿ‘ Clutch bag -๐Ÿ› Shopping bags -๐ŸŽ’ Backpack -๐Ÿฉด Thong sandals -๐Ÿ‘ž Ma -๐Ÿ‘Ÿ Running shoe -๐Ÿฅพ Hiking boot -๐Ÿฅฟ Flat shoe -๐Ÿ‘  High-heeled shoe -๐Ÿ‘ก Woma -๐Ÿฉฐ Ballet shoes -๐Ÿ‘ข Woma -๐Ÿ‘‘ Crown -๐Ÿ‘’ Woma -๐ŸŽฉ Top hat -๐ŸŽ“ Graduation cap -๐Ÿงข Billed cap -๐Ÿช– Military helmet -โ›‘ Rescuew worke -๐Ÿ“ฟ PRayer beads -๐Ÿ’„ Lipstick -๐Ÿ’ Ring -๐Ÿ’Ž Gemstone -๐Ÿ”‡ Muted speaker -๐Ÿ”ˆ Low volume speaker -๐Ÿ”‰ Mid volume speaker -๐Ÿ”Š High volume speaker -๐Ÿ“ข Loudspeaker -๐Ÿ“ฃ Megaphone -๐Ÿ“ฏ Postal horn -๐Ÿ”” Bell -๐Ÿ”• Bell with slash -๐ŸŽผ Musical score -๐ŸŽต Musical note -๐ŸŽถ Musical notes -๐ŸŽ™ Studio microphone -๐ŸŽš Level slider -๐ŸŽ› Control knobs -๐ŸŽค Microphone -๐ŸŽง Headphone -๐Ÿ“ป Radio -๐ŸŽท Saxophone -๐Ÿช— Accordion -๐ŸŽธ Guitar -๐ŸŽน Musical keyboard -๐ŸŽบ Trumpet -๐ŸŽป Violin -๐Ÿช• Banjo -๐Ÿฅ Drum -๐Ÿช˜ Long drum -๐Ÿ“ฑ Mobile phone -๐Ÿ“ฒ MObile phone with arrow -โ˜Ž Telephone -๐Ÿ“ž Telephone receiver -๐Ÿ“Ÿ Pager -๐Ÿ“  Fax machine -๐Ÿ”‹ Full battery -๐Ÿชซ Low battery -๐Ÿ”Œ Electric plug -๐Ÿ’ป Laptop -๐Ÿ–ฅ Desktop computer -๐Ÿ–จ Printer -โŒจ Keyboard -๐Ÿ–ฑ Mouse -๐Ÿ–ฒ Trackball -๐Ÿ’ฝ Computer disk -๐Ÿ’พ Floppy disk -๐Ÿ’ฟ Optical disk -๐Ÿ“€ DVD -๐Ÿงฎ Abacus -๐ŸŽฅ Movie camera -๐ŸŽž Film frames -๐Ÿ“ฝ Film Projector -๐ŸŽฌ Clapper board -๐Ÿ“บ Television -๐Ÿ“ท Camera -๐Ÿ“ธ Camera with flash -๐Ÿ“น Video camera -๐Ÿ“ผ Video cassete -๐Ÿ” Magnifying glass tilted left -๐Ÿ”Ž Magnifying glass tilted right -๐Ÿ•ฏ Candle -๐Ÿ’ก Light bulb -๐Ÿ”ฆ Flashlight -๐Ÿฎ Red pepper lantern -๐Ÿช” Diya lamp -๐Ÿ“” Notebook with decorative cover -๐Ÿ“• Closed notebook -๐Ÿ“– Opened notebook -๐Ÿ“— Green book -๐Ÿ“˜ Blue book -๐Ÿ“™ Orange book -๐Ÿ“š Orange books -๐Ÿ““ Notebook -๐Ÿ“’ Ledger -๐Ÿ“ƒ Page with curl -๐Ÿ“œ Scroll -๐Ÿ“„ Page facing up -๐Ÿ“ฐ Newspaper -๐Ÿ—ž Rolled-up newspaper -๐Ÿ“‘ Bookmark tabs -๐Ÿ”– Bookmark -๐Ÿท Label -๐Ÿ’ฐ Money bag -๐Ÿช™ Coin -๐Ÿ’ด Yen banknote -๐Ÿ’ต Dollar banknote -๐Ÿ’ถ Euro banknote -๐Ÿ’ท Pound banknote -๐Ÿ’ธ Money with wings -๐Ÿ’ณ Credit card -๐Ÿงพ Receipt -๐Ÿ’น Chart increase woth Yen -โœ‰ Envelope -๐Ÿ“ง e-mail -๐Ÿ“ฉ Envelope with arrow -๐Ÿ“ค Outbox tray -๐Ÿ“ฅ Inbox tray -๐Ÿ“ฆ Package -๐Ÿ“ซ Closed mailbox with raised flag -๐Ÿ“ช Closed mailbox with lowered flag -๐Ÿ“ฌ Open mailbox with raised flag -๐Ÿ“ญ Open mailbox with lowered flag -๐Ÿ“ฎ Postbox -๐Ÿ—ณ Ballot box with ballot -โœ Pencil -โœ’ Black nib -๐Ÿ–‹ Fountain pen -๐Ÿ–Š Pen -๐Ÿ–Œ Paintbrush -๐Ÿ– Crayon -๐Ÿ“ Memo -๐Ÿ’ผ Briefcase -๐Ÿ“ File folder -๐Ÿ“‚ Open the folder -๐Ÿ—‚ Card index dividers -๐Ÿ“… Calender -๐Ÿ“† Tear off calender -๐Ÿ“‡ Card index -๐Ÿ“ˆ Increasing chart -๐Ÿ“‰ Decreasing chart -๐Ÿ“Š Bar chart -๐Ÿ“‹ Clipboard -๐Ÿ“Œ Pushpin -๐Ÿ“ Round pushpin -๐Ÿ“Ž Paperclip -๐Ÿ–‡ Linked paperclips -๐Ÿ“ Straight ruler -๐Ÿ“ Triangular ruler -โœ‚ Scissors -๐Ÿ—ƒ Card file box -๐Ÿ—„ File cabinet -๐Ÿ—‘ Waste basket -๐Ÿ”’ Locked -๐Ÿ”“ Unlocked -๐Ÿ” Locked with pen -๐Ÿ” Locked with key -๐Ÿ”‘ Key -๐Ÿ— Old key -๐Ÿ”จ Hammer -๐Ÿช“ Axe -โ› Pick -โš’ Hammer and pick -๐Ÿ›  Hammer and wrench -๐Ÿ—ก Sword -โš” Crossed swords -๐Ÿ”ซ Water gun -๐Ÿชƒ Boomerang -๐Ÿน Bow and arrow -๐Ÿ›ก Shield -๐Ÿชš Carpentry saw -๐Ÿ”ง Wrench -๐Ÿช› Screwdriver -๐Ÿ”ฉ Bolt and nut -โš™ Wheel -๐Ÿ—œ Clamp -โš– Balance scale -๐Ÿฆฏ White cane -๐Ÿ”— Link -โ›“ Chains -๐Ÿช Hook -๐Ÿงฐ Toolbox -๐Ÿงฒ Magnet -๐Ÿชœ Ladder -โš— Alembic -๐Ÿงช Test tube -๐Ÿงซ Petri dish -๐Ÿงฌ DNA -๐Ÿ”ฌ Microscope -๐Ÿ”ญ Telescope -๐Ÿ“ก Satelite antenna -๐Ÿ’‰ Syringe -๐Ÿฉธ A droplet of blood -๐Ÿ’Š Pill -๐Ÿฉน Adhesive bandage -๐Ÿฉผ Clutch -๐Ÿฉบ Stethoscope -๐Ÿฉป X-ray -๐Ÿšช Door -๐Ÿ›— Elevator -๐Ÿชž Mirror -๐ŸชŸ Window -๐Ÿ› Bed -๐Ÿ›‹ Couch and lamp -๐Ÿช‘ Chair -๐Ÿšฝ Toilet -๐Ÿช  Plunger -๐Ÿšฟ Shower -๐Ÿ› Bathtub -๐Ÿชค Mouse trap -๐Ÿช’ Razor -๐Ÿงด Lotion bottle -๐Ÿงท Safety pin -๐Ÿงน Broom -๐Ÿงบ Basket -๐Ÿงป Roll of paper -๐Ÿชฃ Bucket -๐Ÿงผ Soap -๐Ÿซง Bubbles -๐Ÿชฅ Toothbrush -๐Ÿงฝ Sponge -๐Ÿงฏ Fire extinguisher -๐Ÿ›’ Shopping cart -๐Ÿšฌ Cigarette -โšฐ Casket -๐Ÿชฆ Headstone -โšฑ Funeral urn -๐Ÿ—ฟ Mole -๐Ÿชง Placard -๐Ÿชช ID Card -๐Ÿง ATM Sign -๐Ÿšฎ Litter in bin -๐Ÿšฐ Portable water -โ™ฟ Wheelchair symbol -๐Ÿšน Me -๐Ÿšบ Wome -๐Ÿšป Restroom symbol -๐Ÿšผ Baby symbol -๐Ÿšพ Water closet -๐Ÿ›‚ Passport control -๐Ÿ›‚ Customs -๐Ÿ›„ Baggage claim -๐Ÿ›… Left laugage -โš  Warning -๐Ÿšธ Children crossing -โ›” No entry -๐Ÿšซ Prohibited -๐Ÿšณ No bicycles -๐Ÿšญ No smoking -๐Ÿšฏ No littering -๐Ÿšฑ Non-portable water -๐Ÿšท No pedestrians -๐Ÿ“ต No mobile phones -๐Ÿ”ž No one under 18 -โ˜ข Radioactive -โ˜ฃ Biohazard -โฌ† Up Arrow -โ†— Up-right arrow -โžก Right arrow -โ†˜ Down-right arrow -โฌ‡ Down arrow -โ†™ Down-left arrow -โฌ… Left arrow -โ†– Up-left arrow -โ†• Up-down arrow -โ†” Left arrow -โ†ฉ Right arrow curving left -โ†ช Left arrow curving right -โคด Right arrow curving up -โคต Right arrow curving down -๐Ÿ”ƒ Clockwise vertical arrow -๐Ÿ”„ Counterclockwise arrows button -๐Ÿ”™ Back arrow -๐Ÿ”š End arrow -๐Ÿ”› On arrow -๐Ÿ”œ Soon arrow -๐Ÿ” Top arrow -๐Ÿ› Place of worship -โš› Atom symbol -๐Ÿ•‰ OM -โœก Star of David -โ˜ธ Wheel of Dharma -โ˜ฏ Yin yang -โœ Latin cross -โ˜ฆ ORthodox cross -โ˜ช Star and cresent moon -โ˜ฎ Peace -๐Ÿ•Ž Menorah -๐Ÿ”ฏ Six-pointed star -โ™ˆ Aries -โ™‰ Taurus -โ™Š Gemini -โ™‹ Cancer -โ™Œ Leo -โ™ Virgo -โ™Ž Libra -โ™ Scorpio -โ™ Sagittarius -โ™‘ Capricon -โ™’ Acquarius -โ™“ Pisces -โ›Ž Ophiucus -๐Ÿ”€ Shuffle tracks -๐Ÿ” Repeat all -๐Ÿ”‚ Repeat one -โ–ถ Play -โธ Pause -โฉ Fast-forward -โญ Next track -โฏ Play or pause -โ—€ Reverse -โช Fast-reverse -โฎ Previous track -๐Ÿ”ผ Upwards -โซ Fst-up -๐Ÿ”ฝ Downwards -โฌ Fast down -โน Stop -โบ Record -โ Eject -๐ŸŽฆ Cinema -๐Ÿ”… Dim -๐Ÿ”† Bright -๐Ÿ“ถ Network antenna bars -๐Ÿ“ณ Vibration mode -๐Ÿ“ด Mobile phone off -โ™€ Female -โ™‚ Male -โšง Transgender -โœ– Times -โž• Plus -โž– Minus -โž— Divide -๐ŸŸฐ Equals -โ™พ Infinity -โ€ผ Double exclamation -โ‰ Exclamation and question mark -โ“ Red question mark -โ” White question mark -โ— Red exclamation mark -โ• White exclamation mark -ใ€ฐ Wavy dash -๐Ÿ’ฑ Currency exchange -๐Ÿ’ฒ Heavy green dollar sign -โš• Medical symbol -โ™ป Recycling symbol -โšœ Fleur-de-lis -๐Ÿ”ฑ Trident -๐Ÿ“› Name badge -๐Ÿ”ฐ Japanese symbol for beginner -โญ• Hollow red circle -โœ… Green box with checkmark -โ˜‘ Blue box with checkmark -โœ” Checkmark -โŒ Crossmark -โŽ Green crossmark -โžฐ Curly loop -โžฟ Double curly loop -ใ€ฝ PArt alternation mark -โœณ Eight-spoked asterik -โœด Eight-pointed star -โ‡ Sparkle -ยฉ Copyright symbol -ยฎ Registered -โ„ข Trademark -*๏ธโƒฃ * Keyca -0๏ธโƒฃ 0 Keycap -1๏ธโƒฃ 1 Keycap -2๏ธโƒฃ 2 Keycap -3๏ธโƒฃ 3 Keycap -4๏ธโƒฃ 4 Keycap -5๏ธโƒฃ 5 Keycap -6๏ธโƒฃ 6 Keycap -7๏ธโƒฃ 7 Keycap -8๏ธโƒฃ 8 Keycap -9๏ธโƒฃ 9 Keycap -๐Ÿ”Ÿ 10 Keycap -๐Ÿ”  Input Latin uppercase -๐Ÿ”ก Input Latin lowercase -๐Ÿ”ข Input numbers -๐Ÿ”ฃ Input symbols -๐Ÿ”ค Input Latin letters -๐Ÿ…ฐ A blood type -๐Ÿ†Ž AB blood type -๐Ÿ…ฑ B blood type -๐Ÿ…พ O blood type -๐Ÿ†‘ CL button -๐Ÿ†’ Cool button -๐Ÿ†“ Free button -โ„น Info button -๐Ÿ†” ID button -โ“‚ Circled M -๐Ÿ†• New button -๐Ÿ†– NG button -๐Ÿ†— OK button -๐Ÿ…ฟ P button -๐Ÿ†˜ SOS button -๐Ÿ†™ UP! button -๐Ÿ†š VS Button -๐Ÿˆ Japanese here button -๐Ÿˆ‚ Japanese service charge button -๐Ÿˆท Japanese monthly amount button -๐Ÿˆถ Japanese not free of charge button -๐Ÿˆฏ Japanese reserved button -๐Ÿ‰ Japanese bargain button -๐Ÿˆน Japanese discount button -๐Ÿˆš Japanese free of charge button -๐Ÿˆฒ Japanese prohibited button -๐Ÿ‰‘ Japanese acceptable button -๐Ÿˆธ Japanese application button -๐Ÿˆด Japanese passing grade button -๐Ÿˆณ Japanese vacancy button -ใŠ— Japanese congratulations button -ใŠ™ Japanese secret button -๐Ÿˆบ Japanese open for business button -๐Ÿˆต Japanese no vacancy button -๐Ÿ”ด Red circle -๐ŸŸ  Orange circle -๐ŸŸก Yellow circle -๐ŸŸข Green circle -๐Ÿ”ต Blue circle -๐ŸŸฃ Purple circle -๐ŸŸค Brown circle -โšซ Black circle -โšช White circle -๐ŸŸฅ Red square -๐ŸŸง Orange square -๐ŸŸจ Yellow square -๐ŸŸฉ Green square -๐ŸŸฆ Blue square -๐ŸŸช Purple square -๐ŸŸซ Brown square -โฌ› Black square -โฌœ White square -๐Ÿ”ถ Large orange diamond -๐Ÿ”ท Large blue diamond -๐Ÿ”ธ Small orange diamond -๐Ÿ”น Small blue diamond -๐Ÿ”บ Red triangle pointed up -๐Ÿ”ป Red triangle pointed down -๐Ÿ’  Diamond with a dot -๐Ÿ”˜ Radio button -๐Ÿ”ณ White square button -๐Ÿ”ฒ Black square button -๐Ÿ Chequered flag -๐Ÿšฉ Triangular flag -๐ŸŽŒ Crossed flag -๐Ÿด Black flag -๐Ÿณ White flag -๐Ÿณ๏ธโ€๐ŸŒˆ Rainbow flag -๐Ÿณ๏ธโ€โšง๏ธ Transgender flag -๐Ÿดโ€โ˜ ๏ธ Pirate flag -๐Ÿ‡ฆ๐Ÿ‡จ Ascension Island flag -๐Ÿ‡ฆ๐Ÿ‡ฉ Andorra flag -๐Ÿ‡ฆ๐Ÿ‡ช UAE flag -๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan flag -๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua and Berbuda flag -๐Ÿ‡ฆ๐Ÿ‡ฎ Anguila flag -๐Ÿ‡ฆ๐Ÿ‡ฑ Albania flag -๐Ÿ‡ฆ๐Ÿ‡ฒ Armenia flag -๐Ÿ‡ฆ๐Ÿ‡ด Angola flag -๐Ÿ‡ฆ๐Ÿ‡ถ Antarctica flag -๐Ÿ‡ฆ๐Ÿ‡ท Argentina flag -๐Ÿ‡ฆ๐Ÿ‡ธ American Samoa flag -๐Ÿ‡ฆ๐Ÿ‡น Austria flag -๐Ÿ‡ฆ๐Ÿ‡บ Australia flag -๐Ÿ‡ฆ๐Ÿ‡ผ Aruba flag -๐Ÿ‡ฆ๐Ÿ‡ฝ ร…land Islands flag -๐Ÿ‡ฆ๐Ÿ‡ฟ Azerbaijan flag -๐Ÿ‡ง๐Ÿ‡ฆ Bosnia flag -๐Ÿ‡ง๐Ÿ‡ง Barbados flag -๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh flag -๐Ÿ‡ง๐Ÿ‡ช Belgium flag -๐Ÿ‡ง๐Ÿ‡ซ Burkina Faso flag -๐Ÿ‡ง๐Ÿ‡ฌ Bulgaria flag -๐Ÿ‡ง๐Ÿ‡ญ Bahrain flag -๐Ÿ‡ง๐Ÿ‡ฎ Burundi flag -๐Ÿ‡ง๐Ÿ‡ฏ Benin Republic flag -๐Ÿ‡ง๐Ÿ‡ฑ St. Barthรฉlemy -๐Ÿ‡ง๐Ÿ‡ฒ Bermuda flag -๐Ÿ‡ง๐Ÿ‡ณ Brunei flag -๐Ÿ‡ง๐Ÿ‡ด Bolivia flag -๐Ÿ‡ง๐Ÿ‡ถ Caribbean Netherlands flag -๐Ÿ‡ง๐Ÿ‡ท Brazil flag -๐Ÿ‡ง๐Ÿ‡ธ Bahamas flag -๐Ÿ‡ง๐Ÿ‡น Bhutan flag -๐Ÿ‡ง๐Ÿ‡ป Bouvet Island flag -๐Ÿ‡ง๐Ÿ‡ผ Botswana flag -๐Ÿ‡ง๐Ÿ‡พ Belarus flag -๐Ÿ‡ง๐Ÿ‡ฟ Belize flag -๐Ÿ‡จ๐Ÿ‡ฆ Canada flag -๐Ÿ‡จ๐Ÿ‡จ Cocos Islands flag -๐Ÿ‡จ๐Ÿ‡ฉ Congo DR flag -๐Ÿ‡จ๐Ÿ‡ซ CAR (Central African Republic) flag -๐Ÿ‡จ๐Ÿ‡ฌ Congo Brazzaville flag -๐Ÿ‡จ๐Ÿ‡ญ Switzerland flag -๐Ÿ‡จ๐Ÿ‡ฎ Cรดte dโ€™Ivoire flag -๐Ÿ‡จ๐Ÿ‡ฐ Cook Islands flag -๐Ÿ‡จ๐Ÿ‡ฑ Chile flag -๐Ÿ‡จ๐Ÿ‡ฒ Cameroun flag -๐Ÿ‡จ๐Ÿ‡ณ China flag -๐Ÿ‡จ๐Ÿ‡ด Columbia flag -๐Ÿ‡จ๐Ÿ‡ต Clipperton Island flag -๐Ÿ‡จ๐Ÿ‡ท Costa Rica flag -๐Ÿ‡จ๐Ÿ‡บ Cuba flag -๐Ÿ‡จ๐Ÿ‡ป Cape Verde Island flag -๐Ÿ‡จ๐Ÿ‡ผ Curaรงao flag -๐Ÿ‡จ๐Ÿ‡ฝ Christmas Island flag -๐Ÿ‡จ๐Ÿ‡พ Cyprus flag -๐Ÿ‡ฉ๐Ÿ‡ช Germany flag -๐Ÿ‡ฉ๐Ÿ‡ฌ Diego Garcia flag -๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti flag -๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark flag -๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica flag -๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic flag -๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria flag -๐Ÿ‡ช๐Ÿ‡ฆ Ceuta -๐Ÿ‡ช๐Ÿ‡จ Ecuador flag -๐Ÿ‡ช๐Ÿ‡ช Estonia -๐Ÿ‡ช๐Ÿ‡ฌ Egypt flag -๐Ÿ‡ช๐Ÿ‡ญ Western Sahara flag -๐Ÿ‡ช๐Ÿ‡ท Eritrea flag -๐Ÿ‡ช๐Ÿ‡ธ Spain flag -๐Ÿ‡ช๐Ÿ‡น Ethiopia flag -๐Ÿ‡ช๐Ÿ‡บ EU flag -๐Ÿ‡ซ๐Ÿ‡ฎ Finland flag -๐Ÿ‡ซ๐Ÿ‡ฏ Fiji flag -๐Ÿ‡ซ๐Ÿ‡ฐ Falkland Island flag -๐Ÿ‡ซ๐Ÿ‡ฒ Micronesia flag -๐Ÿ‡ซ๐Ÿ‡ด Faroe Island flag -๐Ÿ‡ซ๐Ÿ‡ท France flag -๐Ÿ‡ฌ๐Ÿ‡ฆ Gabon flag -๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom flag -๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada flag -๐Ÿ‡ฌ๐Ÿ‡ช Georgia flag -๐Ÿ‡ฌ๐Ÿ‡ซ French Guiana flag -๐Ÿ‡ฌ๐Ÿ‡ฌ Guernsey flag -๐Ÿ‡ฌ๐Ÿ‡ญ Ghana flag -๐Ÿ‡ฌ๐Ÿ‡ฎ Gibraltar flag -๐Ÿ‡ฌ๐Ÿ‡ฑ Greenland flag -๐Ÿ‡ฌ๐Ÿ‡ฒ Gambia flag -๐Ÿ‡ฌ๐Ÿ‡ณ Guinea flag -๐Ÿ‡ฌ๐Ÿ‡ต Guadeloupe flag -๐Ÿ‡ฌ๐Ÿ‡ถ Equitorial Guinea flag -๐Ÿ‡ฌ๐Ÿ‡ท Greece flag -๐Ÿ‡ฌ๐Ÿ‡ธ South Georgia -๐Ÿ‡ฌ๐Ÿ‡น Guatemala flag -๐Ÿ‡ฌ๐Ÿ‡บ Guam flag -๐Ÿ‡ฌ๐Ÿ‡ผ Guinea Bissau flag -๐Ÿ‡ฌ๐Ÿ‡พ Guyana flag -๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong flag -๐Ÿ‡ญ๐Ÿ‡ฒ Heard -๐Ÿ‡ญ๐Ÿ‡ณ Honduras flag -๐Ÿ‡ญ๐Ÿ‡ท Croatia flag -๐Ÿ‡ญ๐Ÿ‡น Haiti flag -๐Ÿ‡ญ๐Ÿ‡บ Hungary flag -๐Ÿ‡ฎ๐Ÿ‡จ Canary Islands flag -๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia flag -๐Ÿ‡ฎ๐Ÿ‡ช Island flag -๐Ÿ‡ฎ๐Ÿ‡ฑ Israel flag -๐Ÿ‡ฎ๐Ÿ‡ฒ Isle of Man flag -๐Ÿ‡ฎ๐Ÿ‡ณ India flag -๐Ÿ‡ฎ๐Ÿ‡ด British Indian Ocean Territory flag -๐Ÿ‡ฎ๐Ÿ‡ถ Iraq flag -๐Ÿ‡ฎ๐Ÿ‡ท Iran flag -๐Ÿ‡ฎ๐Ÿ‡ธ Iceland flag -๐Ÿ‡ฎ๐Ÿ‡น Italy flag -๐Ÿ‡ฏ๐Ÿ‡ช Jersey flag -๐Ÿ‡ฏ๐Ÿ‡ฒ Jamaica flag -๐Ÿ‡ฏ๐Ÿ‡ด Jordan flag -๐Ÿ‡ฏ๐Ÿ‡ต Japan flag -๐Ÿ‡ฐ๐Ÿ‡ช Kenya flag -๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyzstan flag -๐Ÿ‡ฐ๐Ÿ‡ญ Cambodia flag -๐Ÿ‡ฐ๐Ÿ‡ฎ Kiribati flag -๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros Island flag -๐Ÿ‡ฐ๐Ÿ‡ณ St. Kitts -๐Ÿ‡ฐ๐Ÿ‡ต North Korea flag -๐Ÿ‡ฐ๐Ÿ‡ท South Korea flag -๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait flag -๐Ÿ‡ฐ๐Ÿ‡พ Cayman Island flag -๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakhstan flag -๐Ÿ‡ฑ๐Ÿ‡ฆ Laos flag -๐Ÿ‡ฑ๐Ÿ‡ง Lebanon flag -๐Ÿ‡ฑ๐Ÿ‡จ St. Lucia flag -๐Ÿ‡ฑ๐Ÿ‡ฎ Liechtenstein flag -๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka flag -๐Ÿ‡ฑ๐Ÿ‡ท Liberia flag -๐Ÿ‡ฑ๐Ÿ‡ธ Lesotho flag -๐Ÿ‡ฑ๐Ÿ‡น LIthuania flag -๐Ÿ‡ฑ๐Ÿ‡ป Latvia flag -๐Ÿ‡ฑ๐Ÿ‡พ Libya flag -๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco flag -๐Ÿ‡ฒ๐Ÿ‡จ Monaco flag -๐Ÿ‡ฒ๐Ÿ‡ฉ Moldova flag -๐Ÿ‡ฒ๐Ÿ‡ช Montenegro flag -๐Ÿ‡ฒ๐Ÿ‡ฌ Montenegro flag -๐Ÿ‡ฒ๐Ÿ‡ญ Marshall Islands flag -๐Ÿ‡ฒ๐Ÿ‡ฐ North Macedonia flag -๐Ÿ‡ฒ๐Ÿ‡ฑ Mali flag -๐Ÿ‡ฒ๐Ÿ‡ฒ Myanmar flag -๐Ÿ‡ฒ๐Ÿ‡ณ Mongolia flag -๐Ÿ‡ฒ๐Ÿ‡ด Macao flag -๐Ÿ‡ฒ๐Ÿ‡ต Northern Mariana Islands flag -๐Ÿ‡ฒ๐Ÿ‡ถ Marthinique flag -๐Ÿ‡ฒ๐Ÿ‡ท Mauritania flag -๐Ÿ‡ฒ๐Ÿ‡ธ Montserrat flag -๐Ÿ‡ฒ๐Ÿ‡น Malta flag -๐Ÿ‡ฒ๐Ÿ‡บ Mauritius flag -๐Ÿ‡ฒ๐Ÿ‡ป Maldives flag -๐Ÿ‡ฒ๐Ÿ‡ผ Malawi flag -๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico flag -๐Ÿ‡ฒ๐Ÿ‡พ Malaysia flag -๐Ÿ‡ฒ๐Ÿ‡ฟ Mozambique flag -๐Ÿ‡ณ๐Ÿ‡ฆ Namibia flag -๐Ÿ‡ณ๐Ÿ‡จ New Caledonia flag -๐Ÿ‡ณ๐Ÿ‡ช Niger flag -๐Ÿ‡ณ๐Ÿ‡ซ Norfolk Island flag -๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria flag -๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua flag -๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands flag -๐Ÿ‡ณ๐Ÿ‡ด Norway flag -๐Ÿ‡ณ๐Ÿ‡ต Nepal flag -๐Ÿ‡ณ๐Ÿ‡ท Nauru flag -๐Ÿ‡ณ๐Ÿ‡บ Niue flag -๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand flag -๐Ÿ‡ด๐Ÿ‡ฒ Oman flag -๐Ÿ‡ต๐Ÿ‡ฆ Panama flag -๐Ÿ‡ต๐Ÿ‡ช Peru flag -๐Ÿ‡ต๐Ÿ‡ซ French Polynesia flag -๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea flag -๐Ÿ‡ต๐Ÿ‡ญ Philipines flag -๐Ÿ‡ต๐Ÿ‡ฐ Pakistan flag -๐Ÿ‡ต๐Ÿ‡ฑ Poland flag -๐Ÿ‡ต๐Ÿ‡ฒ St. Pierre -๐Ÿ‡ต๐Ÿ‡ณ Pitcairn Islands flag -๐Ÿ‡ต๐Ÿ‡ท Puerto Rico flag -๐Ÿ‡ต๐Ÿ‡ธ Palestinian Territories flag -๐Ÿ‡ต๐Ÿ‡น Portugal flag -๐Ÿ‡ต๐Ÿ‡ผ Palau flag -๐Ÿ‡ต๐Ÿ‡พ Paraguay flag -๐Ÿ‡ถ๐Ÿ‡ฆ Qatar flag -๐Ÿ‡ท๐Ÿ‡ช Rรฉunion flag -๐Ÿ‡ท๐Ÿ‡ธ Serbia flag -๐Ÿ‡ท๐Ÿ‡บ Russia flag -๐Ÿ‡ท๐Ÿ‡ผ Rwanda flag -๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia flag -๐Ÿ‡ธ๐Ÿ‡ง Solomon Islands -๐Ÿ‡ธ๐Ÿ‡จ Seychelles flag -๐Ÿ‡ธ๐Ÿ‡ฉ Sudan flag -๐Ÿ‡ธ๐Ÿ‡ช Sweeden flag -๐Ÿ‡ธ๐Ÿ‡ฌ Singapore flag -๐Ÿ‡ธ๐Ÿ‡ญ St. Helena flag -๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia flag -๐Ÿ‡ธ๐Ÿ‡ฏ Svalbard -๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia flag -๐Ÿ‡ธ๐Ÿ‡ฑ Sierra Leone flag -๐Ÿ‡ธ๐Ÿ‡ฒ San Marino flag -๐Ÿ‡ธ๐Ÿ‡ณ Senegal flag -๐Ÿ‡ธ๐Ÿ‡ด Somalia flag -๐Ÿ‡ธ๐Ÿ‡ท Suriname flag -๐Ÿ‡ธ๐Ÿ‡ธ South Sudan flag -๐Ÿ‡ธ๐Ÿ‡น Sรฃo Tomรฉ -๐Ÿ‡ธ๐Ÿ‡ป El Salvador flag -๐Ÿ‡ธ๐Ÿ‡ฝ Saint Maarten flag -๐Ÿ‡ธ๐Ÿ‡พ Syria flag -๐Ÿ‡ธ๐Ÿ‡ฟ Eswatini (Swaziland) flag -๐Ÿ‡น๐Ÿ‡ฆ Tristan da Cunha flag -๐Ÿ‡น๐Ÿ‡จ Turks -๐Ÿ‡น๐Ÿ‡ฉ Chad flag -๐Ÿ‡น๐Ÿ‡ซ French Southern Territories flag -๐Ÿ‡น๐Ÿ‡ฌ Togo flag -๐Ÿ‡น๐Ÿ‡ญ Thailand flag -๐Ÿ‡น๐Ÿ‡ฏ Tajikistan flag -๐Ÿ‡น๐Ÿ‡ฐ Tokelau flag -๐Ÿ‡น๐Ÿ‡ฑ Timor-Leste flag -๐Ÿ‡น๐Ÿ‡ฒ Turkmenistan flag -๐Ÿ‡น๐Ÿ‡ณ Tunisia flag -๐Ÿ‡น๐Ÿ‡ด Tonga flag -๐Ÿ‡น๐Ÿ‡ท Turkey flag -๐Ÿ‡น๐Ÿ‡น Trinidad and Tobago flag -๐Ÿ‡น๐Ÿ‡ป Tuvalu flag -๐Ÿ‡น๐Ÿ‡ผ Taiwan flag -๐Ÿ‡น๐Ÿ‡ฟ Tanzania flag -๐Ÿ‡บ๐Ÿ‡ฆ Ukraine flag -๐Ÿ‡บ๐Ÿ‡ฌ Uganda flag -๐Ÿ‡บ๐Ÿ‡ฒ US Outlying Islands flag -๐Ÿ‡บ๐Ÿ‡ณ United Nations (UN) flag -๐Ÿ‡บ๐Ÿ‡ธ United State flag -๐Ÿ‡บ๐Ÿ‡พ Uruguay flag -๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan flag -๐Ÿ‡ป๐Ÿ‡ฆ Vatical City flag -๐Ÿ‡ป๐Ÿ‡จ St. Vincent -๐Ÿ‡ป๐Ÿ‡ช Venezuela flag -๐Ÿ‡ป๐Ÿ‡ฌ British Virgin Islands flag -๐Ÿ‡ป๐Ÿ‡ฎ U.S. Virgin Islands -๐Ÿ‡ป๐Ÿ‡ฎ Vietnam flag -๐Ÿ‡ป๐Ÿ‡บ Vanuatu flag -๐Ÿ‡ผ๐Ÿ‡ซ Wallis -๐Ÿ‡ผ๐Ÿ‡ธ Samoa flag -๐Ÿ‡ฝ๐Ÿ‡ฐ Kosovo flag -๐Ÿ‡พ๐Ÿ‡ช Yemen flag -๐Ÿ‡พ๐Ÿ‡น Mayotte flag -๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa flag -๐Ÿ‡ฟ๐Ÿ‡ฒ Zambia flag -๐Ÿ‡ฟ๐Ÿ‡ผ Zimbabwe flag" -} - -SWEDISH_FINNISH_CHARACTERS_LIST() -{ -printf "รฅ -รค -รถ" -} - -SPANISH_CHARACTERS_LIST() -{ -printf "รก -รฉ -รญ -รณ -รบ -ยฟ -ยก -รผ -รฑ" -} - -CHINESE_CHARACTERS_LIST() -{ -printf "ๅฎ‰ ฤn -ๅง ba -ๅ…ซ bฤ -็ˆธ bฤ -็™พ bวŽi -ๅŒ— bฤ›i -ไธ bรน - bรบ -ๅคง dร  - dร i -ๅฒ› dวŽo -็š„ de - dรญ - dรฌ -ๅผŸ dรฌ -ๅœฐ dรฌ - de -ไธœ dลng -้ƒฝ dลu - dลซ -ๅฏน duรฌ -ๅคš duล -ๅ„ฟ รฉr -ไบŒ รจr -ๆ–น fฤng -ๆธฏ gวŽng -ๅ“ฅ gฤ“ -ไธช gรจ - ge -ๅ…ณ guฤn -่ดต guรฌ -ๅ›ฝ guรณ -่ฟ‡ guรฒ -ๆตท hวŽi -ๅฅฝ hวŽo - hร o -ๅพˆ hฤ›n -ไผš huรฌ - kuร i -ๅฎถ jiฤ -่ง jiร n -ๅซ jiร o -ๅง jiฤ› -ไบฌ jฤซng -ไน jiว” -ๅฏ kฤ› -่€ lวŽo -ๆŽ lว -้›ถ lรญng -ๅ…ญ liรน -ๅ— ma - mรก - mวŽ -ๅฆˆ mฤ -ไนˆ me - yฤo -ๆฒก mรฉi - mรฒ -็พŽ mฤ›i -ๅฆน mรจi -ไปฌ men -ๅ mรญng -ๆ˜Ž mรญng -ๅ“ช nวŽ -้‚ฃ nร  - nรจi -ๅ— nรกn -ไฝ  nว -ๆ‚จ nรญn -ๆœ‹ pรฉng -ไธƒ qฤซ -่ตท qว -ๅƒ qiฤn -ๅŽป qรน -ไบบ rรฉn -่ฎค rรจn -ๆ—ฅ rรฌ -ไธ‰ sฤn -ไธŠ shร ng -่ฐ shรฉi - shuรญ -ไป€ shรฉn - shรญ -็”Ÿ shฤ“ng -ๅธˆ shฤซ -ๅ shรญ -่ฏ† shรญ -ๆ˜ฏ shรฌ -ๅ›› sรฌ -ไป– tฤ -ๅฅน tฤ -ๅฐ tรกi -ๅคฉ tiฤn -ๆนพ wฤn -ไธ‡ wร n -็Ž‹ wรกng -ๆˆ‘ wว’ -ไบ” wว” -่ฅฟ xฤซ -ๆฏ xรญ -็ณป xรฌ - jรฌ -ๅ…ˆ xiฤn -้ฆ™ xiฤng -ๆƒณ xiวŽng -ๅฐ xiวŽo -่ฐข xiรจ -ๅง“ xรฌng -ไผ‘ xiลซ -ๅญฆ xuรฉ -ไนŸ yฤ› -ไธ€ yฤซ -ไบฟ yรฌ -่‹ฑ yฤซng -ๅ‹ yว’u -ๆœˆ yuรจ -ๅ† zร i -ๅผ  zhฤng -่ฟ™ zhรจ -ไธญ zhลng - zhรฒng -ๅญ— zรฌ" -} - -BAYBAIN_CHARACTERS_LIST() -{ -printf "แœ€ -แœ -แœ‚ -แœƒ -แœ„ -แœ… -แœ† -แœ‡ -แœˆ -แœ‰ -แœŠ -แœ‹ -แœŒ -แœ -แœŽ -แœ -แœ -แœ‘ -แœƒแœ’ -แœ„แœ’ -แœ…แœ’ -แœ†แœ’ -แœ‡แœ’ -แœˆแœ’ -แœ‰แœ’ -แœŠแœ’ -แœ‹แœ’ -แœŒแœ’ -แœแœ’ -แœŽแœ’ -แœแœ’ -แœแœ’ -แœ‘แœ’ -แœƒแœ“ -แœ„แœ“ -แœ…แœ“ -แœ†แœ“ -แœ‡แœ“ -แœˆแœ“ -แœ‰แœ“ -แœŠแœ“ -แœ‹แœ“ -แœŒแœ“ -แœแœ“ -แœŽแœ“ -แœแœ“ -แœแœ“ -แœ‘แœ“ -แœƒแœ” -แœ„แœ” -แœ…แœ” -แœ†แœ” -แœ‡แœ” -แœˆแœ” -แœ‰แœ” -แœŠแœ” -แœ‹แœ” -แœŒแœ” -แœแœ” -แœŽแœ” -แœแœ” -แœแœ” -แœ‘แœ” -แœถแœ’ -แœถแœ“ -แœถแœ” " -} - -ARABIC_CHARACTERS_LIST() -{ -printf "ุก hamza -ุง alef -ุข alef -ุฃ alef with hamza above -ุฅ alef with hamza below -ู‰ alef maksura -ุจ beh -ุฉ teh marbuta -ุช teh -ุซ theh -ุฌ jeem -ุญ hah -ุฎ khah -ุฏ dal -ุฐ thal -ุฑ reh -ุฒ zain -ุณ seen -ุด sheen -ุต sad -ุถ dad -ุท tah -ุธ zah -ุน ain -ุบ ghain -ู€ tatweel -ู feh -ู‚ qaf -ูƒ kaf -ู„ lam -ู… meem -ู† noon -ู‡ heh -ูˆ waw -ุค waw with hamza above -ูŠ yeh -ุฆ yeh with hamza above" -} - -JAPANESE_CHARACTERS_LIST() -{ -printf "ใ‚ a -ใ„ i -ใ† o -ใˆ e -ใŠ o -ใฏ ha -ใฒ hi -ใต fu -ใธ he -ใป ho -ใ‹ kka -ใ ki -ใ ko -ใ‘ ke -ใ“ ko -ใพ ma -ใฟ mi -ใ‚€ mu -ใ‚ me -ใ‚‚ mo -ใ• sa -ใ— shi -ใ™ su -ใ› se -ใ so -ใ‚„ ya -ใ‚† yu -ใ‚ˆ yo -ใŸ ta -ใก chi -ใค tsu -ใฆ te -ใจ to -ใ‚‰ ra -ใ‚Š ri -ใ‚‹ ru -ใ‚Œ re -ใ‚ ro -ใช na -ใซ ni -ใฌ nu -ใญ ne -ใฎ no -ใ‚ wa -ใ‚ wi -ใ‚“ n -ใ‚‘ we -ใ‚’ wo" -} - -ROMANIAN_CHARACTERS_LIST() -{ -printf "ฤƒ -รข -รฎ -ศ™ -ศ›" -} - -JAPANESECOPY() -{ - JAPANESE_LETTER_CHOICE="$(printf "$(JAPANESE_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ' | awk '{ print $1 }')" - printf "$JAPANESE_LETTER_CHOICE" | xclip -selection clipboard - if [ "$JAPANESE_LETTER_CHOICE" != "" ]; then - notify-send "$JAPANESE_LETTER_CHOICE copied to clipboard." - fi -} - -ARABICCOPY() -{ - ARABIC_LETTER_CHOICE="$(printf "$(ARABIC_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ' | awk '{ print $1 }')" - printf "$ARABIC_LETTER_CHOICE" | xclip -selection clipboard - if [ "$ARABIC_LETTER_CHOICE" != "" ]; then - notify-send "$ARABIC_LETTER_CHOICE copied to clipboard." - fi -} - -BAYBAINCOPY() -{ - BAYBAIN_LETTER_CHOICE="$(printf "$(BAYBAIN_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ')" - printf "$BAYBAIN_LETTER_CHOICE" | xclip -selection clipboard - if [ "$BAYBAIN_LETTER_CHOICE" != "" ]; then - notify-send "$BAYBAIN_LETTER_CHOICE copied to clipboard." - fi -} - -SPANISHCOPY() -{ - SPANISH_LETTER_CHOICE="$(printf "$(SPANISH_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ')" - printf "$SPANISH_LETTER_CHOICE" | xclip -selection clipboard - if [ "$SPANISH_LETTER_CHOICE" != "" ]; then - notify-send "$SPANISH_LETTER_CHOICE copied to clipboard." - fi -} - -CHINESECOPY() -{ - CHINESE_LETTER_CHOICE="$(printf "$(CHINESE_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ')" - printf "$CHINESE_LETTER_CHOICE" | awk '{ print $1 }' | xclip -selection clipboard - if [ "$CHINESE_LETTER_CHOICE" != "" ]; then - notify-send "$(printf "$CHINESE_LETTER_CHOICE" | awk '{ print $1 }') copied to clipboard." - fi -} - -SWEDISHFINNISHCOPY() -{ - SWEDISH_LETTER_CHOICE="$(printf "$(SWEDISH_FINNISH_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ')" - printf "$SWEDISH_LETTER_CHOICE" | xclip -selection clipboard - if [ "$SWEDISH_LETTER_CHOICE" != "" ]; then - notify-send "$SWEDISH_LETTER_CHOICE copied to clipboard." - fi -} - -ROMANIANCOPY() -{ - ROMANIAN_LETTER_CHOICE="$(printf "$(ROMANIAN_CHARACTERS_LIST)" | $RUNLAUNCHER -l 5 -p 'Pick a character: ')" - printf "$ROMANIAN_LETTER_CHOICE" | xclip -selection clipboard - if [ "$ROMANIAN_LETTER_CHOICE" != "" ]; then - notify-send "$ROMANIAN_LETTER_CHOICE copied to clipboard." - fi -} - -COPYPASTALIST() -{ - printf "I'd just like to interject for a moment. What you're referring to as Linux, is in fact, GNU/Linux, or as I've recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called Linux, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project. There really is a Linux, and these people are using it, but it is just a part of the system they use. Linux is the kernel: the program in the system that allocates the machine's resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called Linux distributions are really distributions of GNU/Linux. -No, Richard, it's 'Linux', not 'GNU/Linux'. The most important contributions that the FSF made to Linux were the creation of the GPL and the GCC compiler. Those are fine and inspired products. GCC is a monumental achievement and has earned you, RMS, and the Free Software Foundation countless kudos and much appreciation. Following are some reasons for you to mull over, including some already answered in your FAQ. One guy, Linus Torvalds, used GCC to make his operating system (yes, Linux is an OS -- more on this later). He named it 'Linux' with a little help from his friends. Why doesn't he call it GNU/Linux? Because he wrote it, with more help from his friends, not you. You named your stuff, I named my stuff -- including the software I wrote using GCC -- and Linus named his stuff. The proper name is Linux because Linus Torvalds says so. Linus has spoken. Accept his authority. To do otherwise is to become a nag. You don't want to be known as a nag, do you? (An operating system) != (a distribution). Linux is an operating system. By my definition, an operating system is that software which provides and limits access to hardware resources on a computer. That definition applies wherever you see Linux in use. However, Linux is usually distributed with a collection of utilities and applications to make it easily configurable as a desktop system, a server, a development box, or a graphics workstation, or whatever the user needs. In such a configuration, we have a Linux (based) distribution. Therein lies your strongest argument for the unwieldy title 'GNU/Linux' (when said bundled software is largely from the FSF). Go bug the distribution makers on that one. Take your beef to Red Hat, Mandrake, and Slackware. At least there you have an argument. Linux alone is an operating system that can be used in various applications without any GNU software whatsoever. Embedded applications come to mind as an obvious example. Next, even if we limit the GNU/Linux title to the GNU-based Linux distributions, we run into another obvious problem. XFree86 may well be more important to a particular Linux installation than the sum of all the GNU contributions. More properly, shouldn't the distribution be called XFree86/Linux? Or, at a minimum, XFree86/GNU/Linux? Of course, it would be rather arbitrary to draw the line there when many other fine contributions go unlisted. Yes, I know you've heard this one before. Get used to it. You'll keep hearing it until you can cleanly counter it. You seem to like the lines-of-code metric. There are many lines of GNU code in a typical Linux distribution. You seem to suggest that (more LOC) == (more important). However, I submit to you that raw LOC numbers do not directly correlate with importance. I would suggest that clock cycles spent on code is a better metric. For example, if my system spends 90% of its time executing XFree86 code, XFree86 is probably the single most important collection of code on my system. Even if I loaded ten times as many lines of useless bloatware on my system and I never excuted that bloatware, it certainly isn't more important code than XFree86. Obviously, this metric isn't perfect either, but LOC really, really sucks. Please refrain from using it ever again in supporting any argument. Last, I'd like to point out that we Linux and GNU users shouldn't be fighting among ourselves over naming other people's software. But what the heck, I'm in a bad mood now. I think I'm feeling sufficiently obnoxious to make the point that GCC is so very famous and, yes, so very useful only because Linux was developed. In a show of proper respect and gratitude, shouldn't you and everyone refer to GCC as 'the Linux compiler'? Or at least, 'Linux GCC'? Seriously, where would your masterpiece be without Linux? Languishing with the HURD? If there is a moral buried in this rant, maybe it is this: Be grateful for your abilities and your incredible success and your considerable fame. Continue to use that success and fame for good, not evil. Also, be especially grateful for Linux' huge contribution to that success. You, RMS, the Free Software Foundation, and GNU software have reached their current high profiles largely on the back of Linux. You have changed the world. Now, go forth and don't be a nag. Thanks for listening. -Stop using the term 'Open Source'. By supporting 'open source', you're not supporting software that respects the user's freedom. Instead you're supporting "fake" freedom. If that's what you actually support, please use the term 'Free software' or 'Libre software' instead. If you support 'open source' you're supporting companies Microsoft, Google, Apple and many more who don't care about your (free)dom but just the "collaborate" aspect of open source. They like open source because they get YOUR (as in people who write code for the project) work and your code and you get nothing in return. Open source is important but it's just part of freedom (specifically freedom 1 and 3). In addition to this, many people who are unaware of the free software movement/project think these big tech companies are nice people who care about their users when this is far from the truth. Open source does not guarantee the user's freedom. This is why tech companies support 'Open source' but not free software. Free software is evil to them because they want control, something free software doesn't and cannot allow. If you support 'open source' then you don't deserve anything except the evil you're responsible for. - " -} - -COPYPASTACOPY() -{ - COPYPASTASEL="$(printf "$(COPYPASTALIST)" | $RUNLAUNCHER -l 5 -p 'Pick a copypasta: ')" - printf "$COPYPASTASEL" | xclip -selection clipboard - if [ "$COPYPASTASEL" != "" ]; then - notify-send "$COPYPASTASEL copied to clipboard." - fi -} - -EMOJICOPY() -{ - EMOJISEL="$(printf "$(EMOJILIST)" | $RUNLAUNCHER -l 5 -p 'Pick an emoji: ' | awk '{ print $1 }')" - printf $EMOJISEL | xclip -selection clipboard - if [ "$EMOJISEL" != "" ]; then - notify-send "$EMOJISEL copied to clipboard." - fi -} - -DBOARD_CREDITS() -{ - printf "speedie - Wrote the script & Swedish characters\nemilyd - Helped out with some code\nLuke Smith - The idea\nLucss21a - Baybayin characters\nDamaj301Damaj - Arabic characters" -} - -DBOARD_ABOUT() -{ - printf "dboard 0.2\nModified for speedie.gq/speedwm\nReleased and licensed to you (the end user) under the GNU GPLv3 free software license.\nYou are using this software at your own risk." -} - -########################################################### - -case "$1" in -"-h") echo "speedwm-virtualkeyboard" -echo "-e | Open a list of emojis in $RUNLAUNCHER and copy the selected emoji to the clipboard." -echo "-c | Open a list of copypasta in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-se | Open a list of Swedish/Finnish letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-esp | Open a list of Spanish letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-jap | Open a list of Japanese letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-ch | Open a list of Chinese letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-bay | Open a list of Baybain letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-ar | Open a list of Arabic letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-ro | Open a list of Romanian letters in $RUNLAUNCHER and copy the selected one to the clipboard." -echo "-credits | View a list of people who made this nice little application possible." -echo "-about | View an about screen." -echo "-h | View this list of arguments." ; exit 0 ;; -"-e") ACTION=Emoji ;; -"-c") ACTION=Copypasta ;; -"-se") ACTION="Swedish/Finnish letters" ;; -"-esp") ACTION="Spanish letters" ;; -"-ch") ACTION="Chinese letters" ;; -"-jap") ACTION="Japanese letters" ;; -"-bay") ACTION="Baybain letters" ;; -"-ar") ACTION="Arabic letters" ;; -"-ro") ACTION="Romanian letters" ;; -"-credits") ACTION="Credits" ;; -"-about") ACTION="About" ;; -esac - -# Ask the user what they wanna do -if [ "$ACTION" = "" ]; then - ACTION=$(printf "Emoji\nCopypasta\nSwedish/Finnish letters\nSpanish letters\nChinese letters\nJapanese letters\nBaybain letters\nArabic letters\nRomanian letters\nCredits\nAbout\nExit" | $RUNLAUNCHER -p 'What would you like to copy?' -l 20) -fi - -if [ "$ACTION" = "Emoji" ]; then -EMOJICOPY -elif [ "$ACTION" = "Copypasta" ]; then -COPYPASTACOPY -elif [ "$ACTION" = "Swedish/Finnish letters" ]; then -SWEDISHFINNISHCOPY -elif [ "$ACTION" = "Spanish letters" ]; then -SPANISHCOPY -elif [ "$ACTION" = "Chinese letters" ]; then -CHINESECOPY -elif [ "$ACTION" = "Japanese letters" ]; then -JAPANESECOPY -elif [ "$ACTION" = "Baybain letters" ]; then -BAYBAINCOPY -elif [ "$ACTION" = "Arabic letters" ]; then -ARABICCOPY -elif [ "$ACTION" = "Romanian letters" ]; then -ROMANIANCOPY -elif [ "$ACTION" = "Credits" ]; then -CREDIT_SEL=$(printf "$(DBOARD_CREDITS)" | $RUNLAUNCHER -p 'dboard was created with the help of and by: ' -l 20 $GRIDARG $GRIDNUM) -case "$CREDIT_SEL" in -"speedie - Wrote the script & Swedish characters") $BROWSER 'https://speedie.gq' ;; -"emilyd - Helped out with some code") $BROWSER 'https://donut.gq' ;; -"Luke Smith - The idea") $BROWSER 'https://lukesmith.xyz' ;; -"Lucss21a - Baybayin characters") $BROWSER 'https://alexisgaming95.neocities.org' ;; -"Damaj301Damaj - Arabic characters") $BROWSER 'https://github.com/Damaj301damaj-lol' ;; -"Gabubu - Romanian characters") $BROWSER 'https://github.com/GabubuAvailable' ;; -esac -elif [ "$ACTION" = "Exit" ]; then -exit 0 -elif [ "$ACTION" = "About" ]; then -printf "$(DBOARD_ABOUT)" | $RUNLAUNCHER -p 'About dboard: ' -l 20 $GRIDARG $GRIDNUM -fi - -exit 0 diff --git a/scripts/speedwm-winnav b/scripts/speedwm-winnav deleted file mode 100755 index f99f170..0000000 --- a/scripts/speedwm-winnav +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -# speedwm-winnav -# Alt+tab navigation for speedwm -# -# This script is from the suckless.org website. -# I made the following changes to it: -# - POSIX compliant -# - Tab goes down, j/k to navigate -# - Removed class from $windows making it look nicer -# - Configuration file -# - dmenu center patch support -# - Other small improvements. - -RESTORE() { - if [ -e "${BINDIR}xmodmap" ]; then - xmodmap -e "keycode 23 = Tab" - xmodmap -e "keycode 116 = Down" - - # Vim - xmodmap -e "keycode 44 = j" - xmodmap -e "keycode 45 = k" - fi -} - -HAVE_GRID="true" - -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config -else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDNUM="1" -fi - -if [ "$HAVE_GRID" = "true" ]; then - GRIDARG="-g" -fi - -case "$RUNLAUNCHER" in -"") RUNLAUNCHER=dmenu ;; -esac - -BINDIR="$(dirname $(command -v speedwm_status))/" -DOTDIR=$HOME/.config/speedwm-de/winnav -POSITION="bottom" # top, bottom, center (your $RUNLAUNCHER must support center for this to work) - -mkdir -p $HOME/.config/speedwm-de/winnav - -# Create config if it does not exist. -if [ -e "$HOME/.config/speedwm-de/winnav/config" ]; then - . $HOME/.config/speedwm-de/winnav/config -else - printf "POSITION=$POSITION # top, bottom, center (Your installed $RUNLAUNCHER must support center (-c) for this to work)" > $HOME/.config/speedwm-de/winnav/config -fi - -# Set position based on config -case "$POSITION" in -"bottom") POSARG="-b" ;; -"top") POSARG="" ;; -"center") POSARG="-c" ;; -esac - -# Check if wmctrl is available -if [ -e "${BINDIR}wmctrl" ]; then - echo "wmctrl found" - - case "$(wmctrl -xl | wc -l)" in - "") echo "No clients found." ; exit 1 ;; - "1") echo "One client running, will not open menu." ; exit 0 ;; - esac -else - echo "wmctrl not found, exiting." && exit 1 -fi - -SET() { - if [ -e "${BINDIR}xmodmap" ]; then - xmodmap -e "keycode 23 = Down" - xmodmap -e "keycode 116 = Tab" - - # Vim - xmodmap -e "keycode 44 = Down" - xmodmap -e "keycode 45 = Up" - fi -} - -SET - -windows=$(wmctrl -xl | tr -s '[:blank:]' | cut -d ' ' -f 3-3,5- | sed 's/^[a-zA-Z0-9-]*\.//' | sort | uniq) -echo "Windows are:\n $windows\n============================" -windows_class=$(echo $windows | awk '{ print $1 }') -echo "Class is:\n $windows_class\n============================" - -# Add spaces to align the WM_NAMEs of the windows -max=$(echo "$windows" | awk '{cur=length($1); max=(cur>max?cur:max)} END{print max}') -echo "Max is:\n$max" - -windows=$(echo "$windows" | \ - awk -v max="$max" \ - '{cur=length($1); printf $1; \ - for(i=0; i < max - cur + 1; i++) printf " "; \ - $1 = ""; printf "%s\n", $0}') - - -target=$(printf "\n$windows" | cut -f 2- -d ' ' | sed 's/^ *//g' | $RUNLAUNCHER $POSARG -l 10 $GRIDARG $GRIDNUM -p "Which window?" | tr -s '[:blank:]' | sed "s/$class | //g") - -case "$target" in -"") RESTORE && exit 0 ;; -esac - -wmctrl -a "$target" && echo "Switched focus" - -# show hidden window -speedwm -s "#cmd:28" - -RESTORE diff --git a/scripts/speedwm_run b/scripts/speedwm_run index b29439b..853c08f 100755 --- a/scripts/speedwm_run +++ b/scripts/speedwm_run @@ -3,22 +3,19 @@ # External script which starts speedwm! # https://speedie.gq/speedwm for instructions and usage! -BINDIR="$(dirname $(command -v speedwm_status))/" ARGS=$1 # No second argument is supported -if [ "$2" = "" ]; then - ARGS2="" -else +if [ "$2" != "" ]; then echo "Unknown argument: $2" ; exit 1 fi HAVE_GRID="true" -if [ -e "$HOME/.config/speedwm-de/global/config" ]; then - . $HOME/.config/speedwm-de/global/config +if [ -e "$HOME/.config/speedwm/global/config" ]; then + . $HOME/.config/speedwm/global/config else - mkdir -p $HOME/.config/speedwm-de/global - printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm-de/global/config + mkdir -p $HOME/.config/speedwm/global + printf "HAVE_GRID=$HAVE_GRID # Whether or not to use the Grid argument. If you do not have the dmenu grid patch, set this to false. Doing so will disable grid." > $HOME/.config/speedwm/global/config fi if [ "$HAVE_GRID" = "true" ]; then @@ -39,11 +36,11 @@ fi # Load .Xresources if available XRESOURCES() { if [ -e "$HOME/.Xresources" ]; then - if [ -e "${BINDIR}xrdb" ]; then + if command -v xrdb > /dev/null; then xrdb $HOME/.Xresources fi elif [ -e "$HOME/.config/.Xresources" ]; then - if [ -e "${BINDIR}xrdb" ]; then + if command -v xrdb > /dev/null; then xrdb $HOME/.config/.Xresources fi fi @@ -51,13 +48,13 @@ XRESOURCES() { # Load speedwm config, create if it does not exist. LOADCONFIG() { - mkdir -p $HOME/.config/speedwm-de - if [ -e "${BINDIR}xrdb" ]; then + mkdir -p $HOME/.config/speedwm + if command -v xrdb > /dev/null; then if [ "$DONOTMKCONFIG" = "false" ]; then - if [ -e "$HOME/.config/speedwm-de/speedwmrc" ]; then - xrdb -merge -quiet $HOME/.config/speedwm-de/speedwmrc + if [ -e "$HOME/.config/speedwm/speedwmrc" ]; then + xrdb -merge -quiet $HOME/.config/speedwm/speedwmrc else - sed "s| - ||g; s|!@||g" /usr/share/speedwm/example.Xresources > $HOME/.config/speedwm-de/speedwmrc && echo "Wrote example configuration file" + sed "s| - ||g; s|!@||g" /usr/share/speedwm/example.Xresources > $HOME/.config/speedwm/speedwmrc && echo "Wrote example configuration file" fi fi @@ -69,7 +66,7 @@ LOADSWAL() { if [ "$DONOTLOADCONFIG" = "true" ]; then DONOTLOADCONFIG=true else - $HOME/.config/speedwm-de/swal/swal_wm > /dev/null + $HOME/.config/speedwm/swal/swal_wm > /dev/null echo "Loaded wallpaper and pywal colors" fi } @@ -87,8 +84,8 @@ LOADCOLS() { # Autostart AUTOSTART() { - if [ -e "$HOME/.config/speedwm-de/autostart_once.sh" ]; then - $HOME/.config/speedwm-de/autostart_once.sh + if [ -e "$HOME/.config/speedwm/autostart_once.sh" ]; then + $HOME/.config/speedwm/autostart_once.sh fi } @@ -99,7 +96,7 @@ RESET() { else speedwm -s "Loading" # To hide the ugly fsignal status speedwm -s "#cmd:27" # Send fsignal to restart speedwm - speedwm -s "Loading" # To hide the ugly fsignal status + speedwm -s "" # To hide the ugly fsignal status fi } @@ -115,48 +112,13 @@ CHECKEXISTINGWM() { # Start speedwm itself START_SPEEDWM() { - # Set starter if it's going to be used. - if [ -e "${BINDIR}sx" ]; then - starter="sx sh" - else - starter="startx" - fi - if [ "$ISSFLAG" = "" ]; then while true; do - speedwm > /tmp/speedwm-log + pgrep -x speedwm > /dev/null || speedwm > /tmp/speedwm-log done - else - $starter "speedwm_run -f > /tmp/speedwm-log-auto" fi } -# Config -CONFIGURE() { - test $HOME/.config/speedwm-de/speedwmrc && DOTFILE1="$HOME/.config/speedwm-de/speedwmrc" - test $HOME/.config/speedwm-de/dfmpeg/config && DOTFILE2="$HOME/.config/speedwm-de/dfmpeg/config" - test $HOME/.config/speedwm-de/powermenu/config && DOTFILE3="$HOME/.config/speedwm-de/powermenu/config" - test $HOME/.config/speedwm-de/screenshotutil/config && DOTFILE4="$HOME/.config/speedwm-de/screenshotutil/config" - test $HOME/.config/speedwm-de/status/config && DOTFILE5="$HOME/.config/speedwm-de/status/config" - test $HOME/.config/speedwm-de/swal/config && DOTFILE6="$HOME/.config/speedwm-de/swal/config" - test $HOME/.config/speedwm-de/winnav/config && DOTFILE7="$HOME/.config/speedwm-de/winnav/config" - test $HOME/.config/speedwm-de/global/config && DOTFILE8="$HOME/.config/speedwm-de/global/config" - - case "$TERMINAL" in - "") TERMINAL="st -e" - esac - - case "$EDITOR" in - "") EDITOR='vim' - esac - - case "$RUNLAUNCHER" in - "") RUNLAUNCHER=dmenu - esac - - $TERMINAL $EDITOR "$(printf "$DOTFILE1\n$DOTFILE2\n$DOTFILE3\n$DOTFILE4\n$DOTFILE5\n$DOTFILE6\n$DOTFILE7\n$DOTFILE8" | $RUNLAUNCHER -l 8 $GRIDARG $GRIDNUM -p "Edit which configuration?")" -} - # List of arguments HELP() { printf "speedwm\nNo arguments | Start speedwm using default options\n\ @@ -170,12 +132,12 @@ printf "speedwm\nNo arguments | Start speedwm using default options\n\ -unloadconfig | Unload the speedwm configuration\n\ -deleteconfig | Delete the speedwm configuration\n\ -rnoload | Restart speedwm without reloading colors\n\ --configure | Bring up a list of speedwm-de dotfiles in $RUNLAUNCHER and ask the user which one to open in \$EDITOR inside \$TERMINAL\n" +-configure | Bring up a list of speedwm dotfiles in $RUNLAUNCHER and ask the user which one to open in \$EDITOR inside \$TERMINAL\n" } # Unload speedwm configuration UNLOADCONFIG() { - if [ -e "${BINDIR}xrdb" ]; then + if command -v xrdb > /dev/null; then xrdb -remove speedwm* && echo "Unloaded configuration" else echo "Unable to unload configuration" ; exit 1 @@ -184,8 +146,8 @@ UNLOADCONFIG() { # Delete speedwm configuration DELETECONFIG() { - if [ -e "$HOME/.config/speedwm-de/speedwmrc" ]; then - rm -f $HOME/.config/speedwm-de/speedwmrc && echo "Deleted $HOME/.config/speedwm-de/speedwmrc." + if [ -e "$HOME/.config/speedwm/speedwmrc" ]; then + rm -f $HOME/.config/speedwm/speedwmrc && echo "Deleted $HOME/.config/speedwm/speedwmrc." else echo "Failed to delete configuration file." ; exit 1 fi @@ -194,7 +156,6 @@ DELETECONFIG() { case "$ARGS" in "") CHECKEXISTINGWM ; XRESOURCES ; AUTOSTART ; LOADSWAL ; LOADCONFIG ; RESET ; START_SPEEDWM ; exit 0 ;; "-s") ISSFLAG=true ; CHECKEXISTINGWM ; XRESOURCES ; AUTOSTART ; LOADSWAL ; LOADCONFIG ; RESET ; START_SPEEDWM ; exit 0 ;; -"-configure") CONFIGURE ; exit 0 ;; "-r") XRESOURCES ; LOADSWAL ; LOADCONFIG ; RESET ; echo "Restarted speedwm." ; exit 0 ;; "-rcolors") XRESOURCES ; LOADSWAL ; LOADCONFIG ; LOADCOLS ; echo "Restarted speedwm." ; exit 0 ;; "-rnoloadcolors") LOADCONFIG ; LOADCOLS ; echo "Restarted speedwm." ; exit 0 ;; diff --git a/scripts/speedwm_status b/scripts/speedwm_status index a3ff9ca..5315b6c 100755 --- a/scripts/speedwm_status +++ b/scripts/speedwm_status @@ -1,9 +1,11 @@ #!/bin/sh # speedwm_status -# status bar manager +# status bar manager for speedwm/stellar -STATUSBAR="speedwm-stellar" -IN_ARGS="$@" +STATUSBAR="speedwm-stellar" # should be stellar +IN_ARGS="$@" # arguments + +mkdir -p $HOME/.config/speedwm/ statusfunc() { pgrep -x $STATUSBAR || $STATUSBAR $IN_ARGS > /tmp/statusbar-log & diff --git a/speedwm.c b/speedwm.c index 22d85c3..5f66d17 100644 --- a/speedwm.c +++ b/speedwm.c @@ -439,6 +439,8 @@ static long getstate(Window w); static unsigned int getsystraywidth(); static Monitor *systraytomon(Monitor *m); static void resizebarwin(Monitor *m); + +/* systray */ #if USESYSTRAY static void removesystrayicon(Client *i); static void resizerequest(XEvent *e); @@ -451,6 +453,7 @@ static void togglesystray(); #else static int sendevent(Client *c, Atom proto); #endif + static int gettextprop(Window w, Atom atom, char *text, unsigned int size); static void grabbuttons(Client *c, int focused); static void hide(const Arg *arg); @@ -471,34 +474,6 @@ static void managealtbar(Window win, XWindowAttributes *wa); static void managetray(Window win, XWindowAttributes *wa); static void mappingnotify(XEvent *e); static void maprequest(XEvent *e); -#if LAYOUT_MONOCLE -static void monocle(Monitor *m); -#endif -#if LAYOUT_GRID -static void grid(Monitor *m); -#endif -#if LAYOUT_SPIRAL -static void spiral(Monitor *m); -#endif -#if LAYOUT_BSTACK -static void bstack(Monitor *m); -#endif -#if LAYOUT_BSTACKH -static void bstackhoriz(Monitor *m); -#endif -#if LAYOUT_HGRID -static void horizgrid(Monitor *m); -#endif -#if LAYOUT_DGRID -static void dynamicgrid(Monitor *m); -#endif -#if LAYOUT_CUSTOM -static void custom(Monitor *m); -static void set_s_layout(const Arg *arg); -#endif -#if LAYOUT_DWINDLE -static void dwindle(Monitor *m); -#endif static void motionnotify(XEvent *e); #if USEMOUSE static void movemouse(const Arg *arg); @@ -535,6 +510,7 @@ static void restack(Monitor *m); static void run(void); static void scantray(void); static void scan(void); + /* scratchpad functions */ static void scratchpad_hide(); static _Bool scratchpad_last_showed_is_killed(void); @@ -542,7 +518,7 @@ static void scratchpad_remove(); static void scratchpad_show(); static void scratchpad_show_client(Client *c); static void scratchpad_show_first(void); -/* */ + static void sendmon(Client *c, Monitor *m); static void setclientstate(Client *c, long state); static void setclienttagprop(Client *c); @@ -558,23 +534,29 @@ static void setlayout(const Arg *arg); #if USEMOUSE static void dragcfact(const Arg *arg); #endif -#if USEIPC -static void setlayoutsafe(const Arg *arg); -#endif static void setcfact(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); + +/* ipc */ #if USEIPC +static void setlayoutsafe(const Arg *arg); static void setupepoll(void); #endif + static void seturgent(Client *c, int urg); + +/* show/hide */ static void show(const Arg *arg); static void showall(const Arg *arg); static void hideall(const Arg *arg); static void showwin(Client *c); static void showhide(Client *c); + +/* tag previews */ #if USETAGPREVIEW static void showtagpreview(unsigned int i); +static void takepreview(void); #endif static void sigchld(int unused); #ifdef XINERAMA @@ -586,23 +568,46 @@ static void spawn(const Arg *arg); static void spawnbar(); static void unmanagealtbar(Window w); static void unmanagetray(Window w); -#if USETAGPREVIEW -static void takepreview(void); -#endif static void tagmon(const Arg *arg); + +/* layouts */ #if LAYOUT_TILE static void tile(Monitor *m); #endif #if LAYOUT_DECK static void deck(Monitor *m); #endif -#if LAYOUT_EMPTY -static void empty(Monitor *m); +#if LAYOUT_MONOCLE +static void monocle(Monitor *m); +#endif +#if LAYOUT_GRID +static void grid(Monitor *m); +#endif +#if LAYOUT_SPIRAL +static void spiral(Monitor *m); +#endif +#if LAYOUT_BSTACK +static void bstack(Monitor *m); +#endif +#if LAYOUT_BSTACKH +static void bstackhoriz(Monitor *m); +#endif +#if LAYOUT_HGRID +static void horizgrid(Monitor *m); +#endif +#if LAYOUT_DGRID +static void dynamicgrid(Monitor *m); +#endif +#if LAYOUT_CUSTOM +static void custom(Monitor *m); +static void set_s_layout(const Arg *arg); +#endif +#if LAYOUT_DWINDLE +static void dwindle(Monitor *m); #endif -static void togglebar(const Arg *arg); -static void togglefloating(const Arg *arg); /* bar items */ +static void togglebar(const Arg *arg); static void togglebartags(const Arg *arg); static void togglebaremptytags(const Arg *arg); static void togglebartitle(const Arg *arg); @@ -615,12 +620,14 @@ static void togglebaricon(const Arg *arg); static void togglebarsticky(const Arg *arg); static void resetbar(const Arg *arg); +/* misc toggles */ +static void togglefloating(const Arg *arg); static void toggleopacity(const Arg *arg); static void togglefullscr(const Arg *arg); static void setbarheight(const Arg *arg); static void resetbarheight(const Arg *arg); -/* todo: create standalone patch for these functions */ +/* barpadding */ static void setbarpaddingv(const Arg *arg); static void setbarpaddingh(const Arg *arg); static void setbarpadding(const Arg *arg); @@ -702,13 +709,16 @@ static const char notitle[] = ""; /* Title when none can be grabbed. */ #if USEMOUSE static const char *layoutcmd = "speedwm-utils layout"; #endif -static char stext[1024]; -static char rawstext[1024]; +static char stext[1024]; /* max character count */ +static char rawstext[1024]; /* max character count */ static int statusw; + +/* clickability */ #if USEMOUSE static int statuscmdn; static char lastbutton[] = "-"; #endif + static int screen; static int tw, sh; /* X display screen geometry width, height */ static int bh; /* bar geometry */ @@ -749,8 +759,8 @@ static Atom wmatom[WMLast], netatom[NetLast], motifatom; static int epoll_fd; static int dpy_fd; #endif -static int running = 1; -static int restart = 0; +static int running = 1; /* yes, we are in fact running */ +static int restart = 0; /* which means we are definitely not restarting */ static Cur *cursor[CurLast]; static Clr **scheme; static Clr **tagscheme; @@ -798,7 +808,6 @@ static const char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL }; #endif /* Configuration */ -#include "actions.h" /* include #defines */ #include "options.h" /* Include options */ /* Options */ @@ -841,7 +850,7 @@ static int systraypinningfailfirst = 1; #include "toggle/ipc-yajl.c" #endif -static char *fontarray[] = { font1, font2, font3, fonts }; /* All fonts */ +static char *fontarray[] = { font1, font2, font3 }; /* All fonts */ unsigned int tagw[LENGTH(tags)]; diff --git a/toggle/ipc-speedwm-msg.c b/toggle/ipc-speedwm-msg.c index 3e3f1e5..59b9699 100644 --- a/toggle/ipc-speedwm-msg.c +++ b/toggle/ipc-speedwm-msg.c @@ -11,11 +11,11 @@ #include #include -#define IPC_MAGIC "DWM-IPC" +#define IPC_MAGIC "SPEEDWM-IPC" // clang-format off -#define IPC_MAGIC_ARR { 'D', 'W', 'M', '-', 'I', 'P', 'C' } +#define IPC_MAGIC_ARR { 'S', 'P', 'E', 'E', 'D', 'W', 'M', '-', 'I', 'P', 'C' } // clang-format on -#define IPC_MAGIC_LEN 7 // Not including null char +#define IPC_MAGIC_LEN 11 // Not including null char #define IPC_EVENT_TAG_CHANGE "tag_change_event" #define IPC_EVENT_CLIENT_FOCUS_CHANGE "client_focus_change_event" @@ -53,7 +53,7 @@ typedef enum IPCMessageType { IPC_TYPE_GET_MONITORS = 1, IPC_TYPE_GET_TAGS = 2, IPC_TYPE_GET_LAYOUTS = 3, - IPC_TYPE_GET_DWM_CLIENT = 4, + IPC_TYPE_GET_SPEEDWM_CLIENT = 4, IPC_TYPE_SUBSCRIBE = 5, IPC_TYPE_EVENT = 6 } IPCMessageType; @@ -397,7 +397,7 @@ get_speedwm_client(Window win) yajl_gen_get_buf(gen, &msg, &msg_size); - send_message(IPC_TYPE_GET_DWM_CLIENT, msg_size, (uint8_t *)msg); + send_message(IPC_TYPE_GET_SPEEDWM_CLIENT, msg_size, (uint8_t *)msg); print_socket_reply(); diff --git a/toggle/ipc.c b/toggle/ipc.c index e306ba5..d59f059 100644 --- a/toggle/ipc.c +++ b/toggle/ipc.c @@ -94,7 +94,7 @@ ipc_recv_message(int fd, uint8_t *msg_type, uint32_t *reply_size, uint8_t **reply) { uint32_t read_bytes = 0; - const int32_t to_read = sizeof(dwm_ipc_header_t); + const int32_t to_read = sizeof(speedwm_ipc_header_t); char header[to_read]; char *walk = header; @@ -356,7 +356,7 @@ ipc_parse_run_command(char *msg, IPCParsedCommand *parsed_command) *argc = args_val->u.array.len; // If no arguments are specified, make a dummy argument to pass to the - // function. This is just the way dwm's void(Arg*) functions are setup. + // function. This is just the way speedwm's void(Arg*) functions are setup. if (*argc == 0) { *args = (Arg *)malloc(sizeof(Arg)); *arg_types = (ArgType *)malloc(sizeof(ArgType)); @@ -540,14 +540,14 @@ ipc_parse_subscribe(const char *msg, IPCSubscriptionAction *subscribe, } /** - * Parse an IPC_TYPE_GET_DWM_CLIENT message from a client. This function + * Parse an IPC_TYPE_GET_SPEEDWM_CLIENT message from a client. This function * extracts the window id from the message. * * Returns 0 if message was successfully parsed * Returns -1 otherwise */ static int -ipc_parse_get_dwm_client(const char *msg, Window *win) +ipc_parse_get_speedwm_client(const char *msg, Window *win) { char error_buffer[100]; @@ -585,7 +585,7 @@ ipc_parse_get_dwm_client(const char *msg, Window *win) * * NOTE: There is currently no check for argument validity beyond the number of * arguments given and types of arguments. There is also no way to check if the - * function succeeded based on dwm's void(const Arg*) function types. Pointer + * function succeeded based on speedwm's void(const Arg*) function types. Pointer * arguments can cause crashes if they are not validated in the function itself. * * Returns 0 if message was successfully parsed @@ -684,7 +684,7 @@ ipc_get_layouts(IPCClient *c, const Layout layouts[], const int layouts_len) } /** - * Called when an IPC_TYPE_GET_DWM_CLIENT message is received from a client. It + * Called when an IPC_TYPE_GET_SPEEDWM_CLIENT message is received from a client. It * prepares a JSON reply with the properties of the client with the specified * window XID. * @@ -693,11 +693,11 @@ ipc_get_layouts(IPCClient *c, const Layout layouts[], const int layouts_len) * Returns -1 if the message could not be parsed */ static int -ipc_get_dwm_client(IPCClient *ipc_client, const char *msg, const Monitor *mons) +ipc_get_speedwm_client(IPCClient *ipc_client, const char *msg, const Monitor *mons) { Window win; - if (ipc_parse_get_dwm_client(msg, &win) < 0) return -1; + if (ipc_parse_get_speedwm_client(msg, &win) < 0) return -1; // Find client with specified window XID for (const Monitor *m = mons; m; m = m->next) @@ -709,12 +709,12 @@ ipc_get_dwm_client(IPCClient *ipc_client, const char *msg, const Monitor *mons) dump_client(gen, c); ipc_reply_prepare_send_message(gen, ipc_client, - IPC_TYPE_GET_DWM_CLIENT); + IPC_TYPE_GET_SPEEDWM_CLIENT); return 0; } - ipc_prepare_reply_failure(ipc_client, IPC_TYPE_GET_DWM_CLIENT, + ipc_prepare_reply_failure(ipc_client, IPC_TYPE_GET_SPEEDWM_CLIENT, "Client with window id %d not found", win); return -1; } @@ -962,10 +962,10 @@ void ipc_prepare_send_message(IPCClient *c, const IPCMessageType msg_type, const uint32_t msg_size, const char *msg) { - dwm_ipc_header_t header = { + speedwm_ipc_header_t header = { .magic = IPC_MAGIC_ARR, .type = msg_type, .size = msg_size}; - uint32_t header_size = sizeof(dwm_ipc_header_t); + uint32_t header_size = sizeof(speedwm_ipc_header_t); uint32_t packet_size = header_size + msg_size; if (c->buffer == NULL) @@ -1170,8 +1170,8 @@ ipc_handle_client_epoll_event(struct epoll_event *ev, Monitor *mons, else if (msg_type == IPC_TYPE_RUN_COMMAND) { if (ipc_run_command(c, msg) < 0) return -1; ipc_send_events(mons, lastselmon, selmon); - } else if (msg_type == IPC_TYPE_GET_DWM_CLIENT) { - if (ipc_get_dwm_client(c, msg, mons) < 0) return -1; + } else if (msg_type == IPC_TYPE_GET_SPEEDWM_CLIENT) { + if (ipc_get_speedwm_client(c, msg, mons) < 0) return -1; } else if (msg_type == IPC_TYPE_SUBSCRIBE) { if (ipc_subscribe(c, msg) < 0) return -1; } else { diff --git a/toggle/ipc.h b/toggle/ipc.h index ba37190..b829cb6 100644 --- a/toggle/ipc.h +++ b/toggle/ipc.h @@ -8,9 +8,9 @@ #include "ipc-cli.h" // clang-format off -#define IPC_MAGIC "DWM-IPC" -#define IPC_MAGIC_ARR { 'D', 'W', 'M', '-', 'I', 'P', 'C'} -#define IPC_MAGIC_LEN 7 // Not including null char +#define IPC_MAGIC "SPEEDWM-IPC" +#define IPC_MAGIC_ARR { 'S', 'P', 'E', 'E', 'D', 'W', 'M', '-', 'I', 'P', 'C'} +#define IPC_MAGIC_LEN 11 // Not including null char #define IPCCOMMAND(FUNC, ARGC, TYPES) \ { #FUNC, {FUNC }, ARGC, (ArgType[ARGC])TYPES } @@ -21,7 +21,7 @@ typedef enum IPCMessageType { IPC_TYPE_GET_MONITORS = 1, IPC_TYPE_GET_TAGS = 2, IPC_TYPE_GET_LAYOUTS = 3, - IPC_TYPE_GET_DWM_CLIENT = 4, + IPC_TYPE_GET_SPEEDWM_CLIENT = 4, IPC_TYPE_SUBSCRIBE = 5, IPC_TYPE_EVENT = 6 } IPCMessageType; @@ -43,11 +43,11 @@ typedef enum IPCSubscriptionAction { /** * Every IPC packet starts with this structure */ -typedef struct dwm_ipc_header { +typedef struct speedwm_ipc_header { uint8_t magic[IPC_MAGIC_LEN]; uint32_t size; uint8_t type; -} __attribute((packed)) dwm_ipc_header_t; +} __attribute((packed)) speedwm_ipc_header_t; typedef enum ArgType { ARG_TYPE_NONE = 0, @@ -219,8 +219,8 @@ void ipc_tag_change_event(const int mon_num, TagState old_state, * when the client focus changes. * * @param mon_num The index of the monitor (Monitor.num property) - * @param old_client The old DWM client selection (Monitor.oldsel) - * @param new_client The new (now current) DWM client selection + * @param old_client The old SPEEDWM client selection (Monitor.oldsel) + * @param new_client The new (now current) SPEEDWM client selection */ void ipc_client_focus_change_event(const int mon_num, Client *old_client, Client *new_client); diff --git a/xresources.h b/xresources.h index 5b03a2a..8864c82 100644 --- a/xresources.h +++ b/xresources.h @@ -10,7 +10,6 @@ ResourcePref resources[] = { { "fonts.font1", STRING, &font1 }, { "fonts.font2", STRING, &font2 }, { "fonts.font3", STRING, &font3 }, - { "fonts.fonts", STRING, &fonts }, { "col.background", STRING, &col_background }, { "col.titlenorm", STRING, &col_titlenorm }, { "col.titlesel", STRING, &col_titlesel },