Compare commits

...

230 commits

Author SHA1 Message Date
Alexis Jhon Gaspar 147333b3f4 Update README.md 2024-07-09 17:32:04 +08:00
Alexis Jhon Gaspar ee9607e72c Fixed tabb argument handling (again) + help function + new bugs 2024-07-09 16:56:31 +08:00
Alexis Jhon Gaspar 48f0ec8cbd Remove binary blobs 2024-07-09 14:12:38 +08:00
Alexis Jhon Gaspar ae614ece1f Fix st icons + tabb auto-reparenting logic 2024-07-09 14:11:52 +08:00
Alexis Jhon Gaspar 5dac0577b5 Fixed tabb argument handling 2024-07-08 15:52:41 +08:00
Alexis Jhon Gaspar b20a42b7db Fixed patches 2024-07-08 14:35:43 +08:00
Alexis Jhon Gaspar e9fa102625 Update submodules 2024-07-08 14:21:01 +08:00
Alexis Jhon Gaspar ab0de64412 Update submodules 2024-07-08 14:18:43 +08:00
Alexis Jhon Gaspar 5de5ece675 Huge codebase update 2024-07-08 14:13:30 +08:00
Alexis Jhon Gaspar 813717224b Add tabbed patches not included in upstream 2023-11-01 23:07:38 +08:00
Alexis Jhon Gaspar 57a05555f3 Split up statusbutton into seperate patches 2023-11-01 22:29:00 +08:00
Alexis Jhon Gaspar 8a215d997e Fix tabbed color scheme 2023-10-27 21:44:02 +08:00
Alexis Jhon Gaspar ef83e1a910 Update colors 2023-10-26 23:37:00 +08:00
Alexis Jhon Gaspar 2ce28696ff Update screenshots (except login) 2023-10-26 23:31:31 +08:00
Alexis Jhon Gaspar e3d67700c6 Fix colors 2023-10-26 23:21:44 +08:00
Alexis Jhon Gaspar 8697f54d86 Fix colors 2023-10-26 23:20:33 +08:00
Alexis Jhon Gaspar d670ff15ad Modularize reparent logic 2023-10-26 23:19:45 +08:00
Alexis Jhon Gaspar b4de31eec5 Add more into the tabbed software list 2023-10-26 23:13:28 +08:00
Alexis Jhon Gaspar 7c18f117aa Add cli-vis config 2023-10-26 22:54:01 +08:00
Alexis Jhon Gaspar 9729fdbe8a Add cli-vis config 2023-10-26 22:53:45 +08:00
Alexis Jhon Gaspar 4f15ebfd6b Add cli-vis config 2023-10-26 22:53:12 +08:00
Alexis Jhon Gaspar 8a65611cfc Organize the script directory, and add README.md in the script directory as well. 2023-10-26 20:40:10 +08:00
Alexis Jhon Gaspar 03ca7e88f3 Add stacked tabbed 2023-10-26 19:12:00 +08:00
Alexis Jhon Gaspar b42ada56e3 Fix keymaps 2023-10-25 23:24:52 +08:00
Alexis Jhon Gaspar e95e8c4003 Remove hidetabs patch to reflect tabb 2023-10-25 23:10:44 +08:00
Alexis Jhon Gaspar d022bee3b1 Add functionality to reparent new windows on a new tabbed session 2023-10-25 22:01:32 +08:00
Alexis Jhon Gaspar 2a62566d1b Fix tabb keymap 2023-10-25 20:18:14 +08:00
Alexis Jhon Gaspar 8f871f1ef2 Fix keybinds 2023-10-24 23:52:19 +08:00
Alexis Jhon Gaspar a08ccf9925 Initial version of tabb uploaded 2023-10-24 23:49:19 +08:00
Alexis Jhon Gaspar a778c45572 Fix tabbed keybind 2023-10-23 00:05:46 +08:00
Alexis Jhon Gaspar f0961ca7f4 Replace MODKEY to Windows Key to avoid st keybind conflicts 2023-10-22 19:51:06 +08:00
Alexis Jhon Gaspar 35d4430e49 Spmenu fixes 2023-10-21 23:43:17 +08:00
Alexis Jhon Gaspar 1d653c1a9f Bug fixing AttachWin, also replace dmenu with spmenu 2023-10-21 23:19:12 +08:00
Alexis Jhon Gaspar 992db0b655 Add programs to tabbed program list 2023-10-21 23:16:19 +08:00
Alexis Jhon Gaspar 99caf259ec Fix dmenu args in tabbed 2023-10-21 23:04:23 +08:00
Alexis Jhon Gaspar 70d0580085 Bug fixed tabbed launching in floating mode 2023-10-21 22:52:32 +08:00
Alexis Jhon Gaspar 92ae6b9827 Bug fixed ATTACHALL bug 2023-10-21 22:48:39 +08:00
Alexis Jhon Gaspar 683b21e083 Bug fixing dwm and tabbed 2023-10-21 00:45:13 +08:00
Alexis Jhon Gaspar eb003cf9d2 Bug fixing dwm and tabbed 2023-10-21 00:44:05 +08:00
Alexis Jhon Gaspar 8b1bdd7ee1 Bug fixing dwm and tabbed 2023-10-21 00:42:29 +08:00
Alexis Jhon Gaspar 8201cfb525 Bug fixing 2023-10-21 00:18:19 +08:00
Alexis Jhon Gaspar 3b382f669e Fix tabbed windows funct in dwm 2023-10-21 00:01:28 +08:00
Alexis Jhon Gaspar 69e3fa26e3 Fix tabbed windows funct 2023-10-20 23:51:45 +08:00
Alexis Jhon Gaspar 8965ff83b1 Add functionality from tabbed-hjk 2023-10-20 23:30:48 +08:00
Alexis Jhon Gaspar 6a6bbc8230 Fix st 2023-10-20 22:30:59 +08:00
Alexis Jhon Gaspar 45aee16df4 Improvements for dmenu, such as patches and Xresources entries 2023-10-20 22:27:30 +08:00
Alexis Jhon Gaspar 0c466fc050 Improvements on st and dwm 2023-10-20 00:01:03 +08:00
Alexis Jhon Gaspar 27790fc26d Improve slock 2023-10-19 23:40:16 +08:00
Alexis Jhon Gaspar 05f2e6ccb0 Add QoL patches for slock 2023-10-19 23:19:20 +08:00
Alexis Jhon Gaspar f9145f309a Add QoL patches for slock 2023-10-19 23:18:09 +08:00
Alexis Jhon Gaspar fff5460462 Add QoL patches 2023-10-19 23:14:00 +08:00
Alexis Jhon Gaspar f1ed23538e Add basic oxocarbon inspired colorscheme 2023-10-18 23:41:39 +08:00
Alexis Jhon Gaspar ec06b62753 Slight fix for detecting haishoku 2023-10-17 22:34:03 +08:00
Alexis Jhon Gaspar 1098085f69 Update startdwm to reflect this change 2023-10-17 22:23:02 +08:00
Alexis Jhon Gaspar 9df588da16 Major improvements for adelle-theme
This implements new changes:
- Bug fixing an issue with setting only the wallpaper, leaving the
  original colors
- Adding backend parsing support (with the ability to check backend
  availability
2023-10-17 22:17:58 +08:00
Alexis Jhon Gaspar 04c3c63e53 Bug fixing the themer script 2023-10-16 21:11:32 +08:00
Alexis Jhon Gaspar c5eb92e9bc Fix wal reloading colorscheme 2023-10-15 23:26:16 +08:00
Alexis Jhon Gaspar 200675a686 Fix adelle-theme 2023-10-15 23:05:02 +08:00
Alexis Jhon Gaspar 1fb1e159ce Fix handling 2023-10-15 21:36:59 +08:00
Alexis Jhon Gaspar 16934ae9f5 Add dmenu patches 2023-10-15 21:14:47 +08:00
Alexis Jhon Gaspar e5766faad0 AAdd st patches 2023-10-15 21:14:14 +08:00
Alexis Jhon Gaspar 313e4a5c76 AAdd st patches 2023-10-15 21:13:30 +08:00
Alexis Jhon Gaspar 81fc79056d Improve handling 2023-10-15 20:09:36 +08:00
Alexis Jhon Gaspar 9a27acf74f Removed scripts/www.gnu.org/licenses/gpl-3.0.txt 2023-10-15 19:19:08 +08:00
Alexis Jhon Gaspar 46beba4a6c Add Adelle Theme Switcher script 2023-10-15 19:18:30 +08:00
Alexis Jhon Gaspar a2df1a2bc8 Fix login panel 2023-10-15 16:22:18 +08:00
Alexis Jhon Gaspar 26784b1461 Update screenshots 2023-10-14 23:59:18 +08:00
Alexis Jhon Gaspar ee1d27415e Messing around theming 2023-10-14 23:50:45 +08:00
Alexis Jhon Gaspar ff54495894 Add Fn keybinds for playerctl 2023-10-14 21:41:51 +08:00
Alexis Jhon Gaspar cb9247a848 Add Fn keybinds for playerctl 2023-10-14 21:31:08 +08:00
Alexis Jhon Gaspar 8fa7ee4bab Add Fn keybinds 2023-10-14 21:27:33 +08:00
Alexis Jhon Gaspar 47e9e5fd5b Fix delkeys 2023-10-14 19:31:09 +08:00
Alexis Jhon Gaspar 90e78528d8 Fix copyurl keybind conflict 2023-10-14 19:24:31 +08:00
Alexis Jhon Gaspar d679610075 Improve st urls 2023-10-14 19:15:23 +08:00
Alexis Jhon Gaspar 5cbd5be8d2 Improve st urls 2023-10-14 19:12:52 +08:00
Alexis Jhon Gaspar 4abbc5bc35 Improve st 2023-10-14 19:09:02 +08:00
Alexis Jhon Gaspar 13feb1fa5a Add newsboat keybinds and config 2023-10-13 21:38:43 +08:00
Alexis Jhon Gaspar a56d640731 Add broot config 2023-10-13 21:19:31 +08:00
Alexis Jhon Gaspar 4f6ef749f5 Update README.md 2023-10-13 21:13:40 +08:00
Alexis Jhon Gaspar 890e645df0 Fix st fullscreen 2023-10-13 21:08:40 +08:00
Alexis Jhon Gaspar bc3f746183 Replace xplr with broot 2023-10-13 20:58:19 +08:00
Alexis Jhon Gaspar 6ccb6ebb0d Fix login message 2023-10-13 20:34:30 +08:00
Alexis Jhon Gaspar 4dd1bf7c76 Update slim panel (with colors) 2023-10-13 20:04:44 +08:00
Alexis Jhon Gaspar cf18334e14 Update slim panel 2023-10-13 20:00:58 +08:00
Alexis Jhon Gaspar 1288b340eb Update slim panel 2023-10-13 20:00:39 +08:00
Alexis Jhon Gaspar 05ab60e41a Update README 2023-10-12 23:17:48 +08:00
Alexis Jhon Gaspar e1207e1d0d Added slim-fork to the repo
- This introduces a minimalist display manager for the suckless-utils suite
- Added crudely written scripts for reloaading slim's theme via pywal,
  meaning no on-the-fly reloading using keybinds as nost people wouldn't
have their sudo passwordless
- This is based on slim-fork 1.4.0 version.
2023-10-12 23:08:23 +08:00
Alexis Jhon Gaspar 9bee2d9c57 Added history clear dunst to keybind 2023-10-12 21:11:50 +08:00
Alexis Jhon Gaspar 7d64d37eed Fixed shmenu not cloning 2023-10-11 23:57:53 +08:00
Alexis Jhon Gaspar 4e00ca5ccd remove submodules 2023-10-11 23:56:00 +08:00
Alexis Jhon Gaspar 6dec13bbfd remove submodules 2023-10-11 23:55:09 +08:00
Alexis Jhon Gaspar 06cd217f66 remove submodules 2023-10-11 23:55:05 +08:00
Alexis Jhon Gaspar 5248330ca4 remove submodules 2023-10-11 23:52:09 +08:00
Alexis Jhon Gaspar 51e40cf368 Fix desktop entry 2023-10-11 23:21:58 +08:00
Alexis Jhon Gaspar 4f02a6dcae Fix nsxiv on spmenu 2023-10-11 23:10:27 +08:00
Alexis Jhon Gaspar bf6eb24ace Fix nsxiv on spmenu 2023-10-11 23:07:35 +08:00
Alexis Jhon Gaspar dc0d877bab Add nsxiv to dwm keybind 2023-10-11 22:41:51 +08:00
Alexis Jhon Gaspar 9fb08d63c8 Add nsxiv to dwm keybind 2023-10-11 22:40:50 +08:00
Alexis Jhon Gaspar 64ca56669a Add nsxiv 2023-10-11 22:37:10 +08:00
Alexis Jhon Gaspar e3318e3487 added xplr to keybinds 2023-10-10 23:38:04 +08:00
Alexis Jhon Gaspar 31d0377189 Added pywal cava capability 2023-10-09 20:06:10 +08:00
Alexis Jhon Gaspar 3305ec91f3 Adjusted width 2023-10-09 19:45:34 +08:00
Alexis Jhon Gaspar 11c519860e Added eww reload and dunst reload in keybind 2023-10-08 18:32:08 +08:00
Alexis Jhon Gaspar 9b897a8d6d Added eww reload and dunst reload in keybind 2023-10-08 18:29:29 +08:00
Alexis Jhon Gaspar 51d41bfaaa Fixed color scheme 2023-10-08 18:25:11 +08:00
Alexis Jhon Gaspar ba27040fd3 Fixed color scheme 2023-10-08 18:21:46 +08:00
Alexis Jhon Gaspar 07566e4d62 Update dunst config 2023-10-08 16:44:11 +08:00
Alexis Jhon Gaspar 0966c37442 Fixed config directory structure 2023-10-08 16:16:35 +08:00
Alexis Jhon Gaspar e01b2fa449 Fixed scratchpad color 2023-10-07 23:12:43 +08:00
Alexis Jhon Gaspar b6d5f2a68f Fixed flexwintitle width + scratchpad color 2023-10-07 23:07:07 +08:00
Alexis Jhon Gaspar 9b00592565 Added deck horizontal layout 2023-10-07 22:46:36 +08:00
Alexis Jhon Gaspar d8074c9a2d Replace awesomebar with flexwintitles 2023-10-07 22:14:48 +08:00
Alexis Jhon Gaspar 93c83df2b2 Replace awesomebar with flexwintitles 2023-10-07 22:01:20 +08:00
Alexis Jhon Gaspar a99c0b68b4 Added anti-alias 2023-10-07 19:32:27 +08:00
Alexis Jhon Gaspar 6dfff6ae78 Adjusted bar height 2023-10-07 19:29:11 +08:00
Alexis Jhon Gaspar 88e5f6e91d Add bar borders 2023-10-07 19:19:48 +08:00
Alexis Jhon Gaspar e5fb30335f Add screenshots 2023-10-07 18:57:15 +08:00
Alexis Jhon Gaspar 9abe510f11 Add screenshots 2023-10-07 18:54:56 +08:00
Alexis Jhon Gaspar 1dd97eb564 Switch back to renamed_scratchpads 2023-10-07 18:42:04 +08:00
Alexis Jhon Gaspar e20e501cc0 Switch back to scratchpads 2023-10-07 18:40:26 +08:00
Alexis Jhon Gaspar f25ed4dca6 Added few more patches for dwm 2023-10-07 18:01:43 +08:00
Alexis Jhon Gaspar 112f91f78c Added inplacerotate 2023-10-05 20:05:09 +08:00
Alexis Jhon Gaspar 58f2b044ee Added QoL patches 2023-10-05 19:35:14 +08:00
Alexis Jhon Gaspar 06559a3720 Use renamed-scratchpads instead 2023-10-05 18:30:52 +08:00
Alexis Jhon Gaspar 657f47d1d9 Sync dwm-flexipatch from bakkeby/master 2023-10-05 18:24:29 +08:00
Alexis Jhon Gaspar 69b29a8dc4 Modify layout icons to use Nerd Font instead 2023-10-05 18:18:52 +08:00
Alexis Jhon Gaspar 9fb4bf1de9 Fixed mouse scroll to tag switching 2023-10-03 23:18:55 +08:00
Alexis Jhon Gaspar afc3a2986b Added mouse scroll to tag switching 2023-10-03 23:17:42 +08:00
Alexis Jhon Gaspar 2ff88b8588 Fix systray padding 2023-10-03 22:53:43 +08:00
Alexis Jhon Gaspar e689329651 Fix systray padding 2023-10-03 22:50:49 +08:00
Alexis Jhon Gaspar e3d1016995 Enhance nametag charlimit 2023-10-03 22:43:38 +08:00
Alexis Jhon Gaspar a6da49e003 Changed dmenu to spmenu for nametag 2023-10-03 22:42:54 +08:00
Alexis Jhon Gaspar 9657842f61 Update screenshots, added neofetch config 2023-10-03 22:32:10 +08:00
Alexis Jhon Gaspar 7a2b3534af Update screenshots, added neofetch config 2023-10-03 22:31:52 +08:00
Alexis Jhon Gaspar fa2f8b14e1 Placed power menu above, and added simple window controls 2023-10-03 22:18:53 +08:00
Alexis Jhon Gaspar 9af7c54826 Add eww toggling 2023-10-03 19:25:14 +08:00
Alexis Jhon Gaspar 8eaacc23bd Sync dmenu-flexipatch from upstream 2023-10-03 19:17:39 +08:00
Alexis Jhon Gaspar d619bdf356 Floating window fix for firefox dialogs 2023-10-02 22:55:36 +08:00
Alexis Jhon Gaspar 63086c04ca Nametag patch 2023-10-02 22:41:14 +08:00
Alexis Jhon Gaspar bb70892994 Change gimp rule 2023-10-02 22:17:47 +08:00
Alexis Jhon Gaspar 27c9723a79 Added swaptags 2023-10-02 22:11:21 +08:00
Alexis Jhon Gaspar 9b79885a85 Update screenshots 2023-10-02 21:35:52 +08:00
Alexis Jhon Gaspar 4902c3e64f general qol 2023-10-02 21:28:07 +08:00
Alexis Jhon Gaspar 33f3e064f1 Testing rounded corners 2023-10-02 21:19:58 +08:00
Alexis Jhon Gaspar 0192e5d3b5 Testing rounded corners 2023-10-02 21:19:18 +08:00
Alexis Jhon Gaspar 2513185592 Testing rounded corners 2023-10-02 21:17:39 +08:00
Alexis Jhon Gaspar 0ad37e87fb Renmoved moveresize 2023-10-02 21:17:15 +08:00
Alexis Jhon Gaspar c4c8fe059d Added moveresize, killunsel 2023-10-02 21:16:16 +08:00
Alexis Jhon Gaspar 0f57808f53 Added taggrid, added 1 tag too 2023-10-02 21:12:57 +08:00
Alexis Jhon Gaspar d04b888fe8 Added mousebinds for dmenu and jgmenu 2023-10-02 19:10:28 +08:00
Alexis Jhon Gaspar 0d7fc424cf Added aspectresize patch 2023-10-02 18:48:41 +08:00
Alexis Jhon Gaspar fd31f4da70 Updated dwm-flexipatch to commit 8191c07 & ddb2e83
This is for fiixing focusonclick for hover related patches.

- 8191c07: focusonclick: not skipping motionnotify events as to avoid
  interferring with tagpreview and other on hover patches
- ddb2e83: tagpreview: adding compatibility with powerline tags and taglabels
2023-10-02 18:36:52 +08:00
Alexis Jhon Gaspar b68fc4c64f Replace push with movestack 2023-10-02 00:09:52 +08:00
Alexis Jhon Gaspar 46464893f8 Add placemouse and push 2023-10-02 00:04:33 +08:00
Alexis Jhon Gaspar e8f689f7fc Add placemouse and push 2023-10-01 23:58:40 +08:00
Alexis Jhon Gaspar 95089d5d13 Add swallowing to scratchpad 2023-10-01 23:52:05 +08:00
Alexis Jhon Gaspar 75fd738a88 Fix window swallowing for Xmessage 2023-10-01 23:42:38 +08:00
Alexis Jhon Gaspar 00a868e2fe Fix window swallowing for dialog 2023-10-01 23:37:50 +08:00
Alexis Jhon Gaspar a6cf80e754 Fix window swallowing for dialog 2023-10-01 23:35:51 +08:00
Alexis Jhon Gaspar 180dc064f3 Fix window swallowing for dialog 2023-10-01 23:35:17 +08:00
Alexis Jhon Gaspar 9e1f663a38 Fix window swallowing 2023-10-01 23:32:44 +08:00
Alexis Jhon Gaspar e0dea795d9 Added new patches, as well as fixing swallow 2023-10-01 23:23:13 +08:00
Alexis Jhon Gaspar a54c50201a Fixed tags, also padding is adjusted 2023-10-01 23:05:07 +08:00
Alexis Jhon Gaspar 146d90c9cc remove tar file 2023-10-01 21:24:02 +08:00
Alexis Jhon Gaspar 2334e4219d Fixed tag_previews not working
This commit fixes tag_previews not functioning by changing 2 things:

1. Disabling focusonclick patch (possible conflict with tag_previews
   despite bakkeby said during a Discord discussion, action is taken
immediately as well to fix the conflict.
2. Adding hover functionality to taglabels.

For now, focusing windows relies on mouse hover, not click. Unless if a
fix was provided, this would be normal dwm functionality.
2023-10-01 21:16:47 +08:00
Alexis Jhon Gaspar 3e790f67f4 Update screenshots 2023-09-30 23:02:13 +08:00
Alexis Jhon Gaspar 4b9ea5afff Added restartsig 2023-09-30 22:38:30 +08:00
Alexis Jhon Gaspar 005fbf0f4a Update Kill X funct 2023-09-30 22:31:02 +08:00
Alexis Jhon Gaspar dc4a5461ab Added restart dwm function to the shutdown script and made startup sounds mandatory 2023-09-30 21:57:09 +08:00
Alexis Jhon Gaspar c96a8addad Integrated shifttags and shiftview 2023-09-30 20:46:28 +08:00
Alexis Jhon Gaspar cba1b1e5aa Improve restart handling, adding autostart 2023-09-30 13:19:57 +08:00
Alexis Jhon Gaspar 86bd4ec5db Fix those useless context menus 2023-09-29 23:40:20 +08:00
Alexis Jhon Gaspar 1b342f0c30 Add useless context menus 2023-09-29 23:36:16 +08:00
Alexis Jhon Gaspar ede5c41582 Fixed jgmenu script not working due to incorrect commands 2023-09-29 22:53:40 +08:00
Alexis Jhon Gaspar a182a7c08a Fixed jgmenu script not working due to incorrect commands 2023-09-29 22:52:06 +08:00
Alexis Jhon Gaspar 84c403c9c1 Replacing layoutmenu baackend with jgmenu
- Included jgmenu configs
- Replaced spmenu with jgmenu for the script backend
- SeamlessRestart integrated in dwm
- xmenu backend still available, though it is redundant (due to dwmc)
2023-09-29 22:25:56 +08:00
Alexis Jhon Gaspar ec53f34089 Fix shmenu_run 2023-09-28 21:18:16 +08:00
Alexis Jhon Gaspar ebadb8de62 Add shmenu 2023-09-28 21:14:13 +08:00
Alexis Jhon Gaspar 364186e5f0 Fix shutdown 2023-09-28 20:45:55 +08:00
Alexis Jhon Gaspar 6cd1cfa3e7 Fix restart 2023-09-28 20:42:30 +08:00
Alexis Jhon Gaspar e5579fbe55 Shutdown script updated to allow nonroot access 2023-09-28 20:40:53 +08:00
Alexis Jhon Gaspar 18ff5c566b Shutdown script now on bottom 2023-09-28 20:36:27 +08:00
Alexis Jhon Gaspar 9be2076344 Shutdown script now on bottom 2023-09-28 20:30:51 +08:00
Alexis Jhon Gaspar 53e62e8a80 Layoutmenu for spmenu fix & shutdown menu placement 2023-09-28 20:29:26 +08:00
Alexis Jhon Gaspar da3a9f56b7 Fix layoutmenu 2023-09-28 20:20:36 +08:00
Alexis Jhon Gaspar 7f782d4243 Fix layoutmenu 2023-09-28 20:20:07 +08:00
Alexis Jhon Gaspar d17525d97b Change eww config 2023-09-27 20:15:21 +08:00
Alexis Jhon Gaspar 839870f3fa Update screenshot 2023-09-26 23:07:40 +08:00
Alexis Jhon Gaspar 27ca96854b Update screenshots, readme and eww config 2023-09-26 23:03:51 +08:00
Alexis Jhon Gaspar 80bb3844e6 Eww work + continued debugging for layoutmenu
- Added eww config
- Added a new statusbutton (non-working for now)
2023-09-26 22:47:00 +08:00
Alexis Jhon Gaspar fd8c72b9cb Initial eww work 2023-09-24 20:04:31 +08:00
Alexis Jhon Gaspar 13c77f1169 Initial eww work 2023-09-24 20:03:56 +08:00
Alexis Jhon Gaspar a16273174c Updated README.md 2023-09-24 19:34:39 +08:00
Alexis Jhon Gaspar 899a8b0791 Added (non-working) layoutmenu patch, ipc and dwmc, updated configs 2023-09-24 19:32:23 +08:00
Alexis Jhon Gaspar 25a8aa8bfd Fix fulllscreen 2023-09-23 23:01:10 +08:00
Alexis Jhon Gaspar dd3ef35a4e Fix keybind conflict 2023-09-23 22:53:52 +08:00
Alexis Jhon Gaspar 13f8fd8bfa Fix keybind conflict in st 2023-09-23 22:24:35 +08:00
Alexis Jhon Gaspar c5cde6e1fc Fix keybind conflict 2023-09-23 22:19:32 +08:00
Alexis Jhon Gaspar c8f59969c9 Adjust trunctation charlimit 2023-09-23 21:15:43 +08:00
Alexis Jhon Gaspar bb34217d59 Improved bottom statusbar
- Removed the useless placeholder
- Added more status buttons
- (During debugging) replaced Polybar with tint2, couldn't make it work
2023-09-23 20:53:15 +08:00
Alexis Jhon Gaspar a4593859c2 Replace screenshot as people decided to rally up 2023-09-23 12:03:28 +08:00
Alexis Jhon Gaspar b00e01d02f Replace screenshot as people decided to rally up 2023-09-23 11:59:38 +08:00
Alexis Jhon Gaspar f8acbaafec Updated dwm-flexipatch to commit 3e97a1d & more
- The commit changes the Makefile, per vanilla dwm upstream, as well as fixing conflicts with
  unmanaged and systray
- Change screenshots in the readme to reflect current status
- Adding new layouts
2023-09-23 10:48:48 +08:00
Alexis Jhon Gaspar 9263e65c27 Fix truncation on sb-music 2023-09-23 00:04:10 +08:00
Alexis Jhon Gaspar 79e1c58f93 Fix truncation on sb-music 2023-09-22 23:58:13 +08:00
Alexis Jhon Gaspar f33ee985e0 Fix truncation on sb-music 2023-09-22 23:48:22 +08:00
Alexis Jhon Gaspar 46cf2482fe Add truncation to sb-music 2023-09-22 23:43:28 +08:00
Alexis Jhon Gaspar 92dc97db10 Fix forecast 2023-09-22 21:34:04 +08:00
Alexis Jhon Gaspar 299cbb7f28 Fix music not updating 2023-09-22 21:25:55 +08:00
Alexis Jhon Gaspar 0757890525 Fix ncmpcpp keybind 2023-09-22 20:40:24 +08:00
Alexis Jhon Gaspar 9b9bee926b Add ncmpcpp support 2023-09-22 20:36:52 +08:00
Alexis Jhon Gaspar 33325cb475 Fix sb-music to reduce clutter 2023-09-22 20:32:39 +08:00
Alexis Jhon Gaspar 2151f02b91 Added sb-music by default 2023-09-22 20:24:39 +08:00
Alexis Jhon Gaspar 878e6b322e Add new scripts 2023-09-22 19:28:15 +08:00
Alexis Jhon Gaspar 57f140e400 Add nm-applet to startdwm 2023-09-19 22:08:34 +08:00
Alexis Jhon Gaspar 740dd33505 Add riodraw 2023-09-19 20:00:12 +08:00
Alexis Jhon Gaspar 7c3b91ea52 Fix hotkey 2023-09-19 19:39:55 +08:00
Alexis Jhon Gaspar b91e26bb11 Fix browser hotkey 2023-09-19 19:31:05 +08:00
Alexis Jhon Gaspar d7be91503d Mouse scrolling for dwmblocks 2023-09-19 18:27:59 +08:00
Alexis Jhon Gaspar b37edcb094 Add message to extrastatus, pretty barebones 2023-09-18 19:40:52 +08:00
Alexis Jhon Gaspar d477fba524 Add user fetching script 2023-09-18 19:13:46 +08:00
Alexis Jhon Gaspar d962800e93 Fix statusbar 2023-09-18 19:06:23 +08:00
Alexis Jhon Gaspar 11ed18bc11 Fix slock ghosting 2023-09-18 18:42:23 +08:00
Alexis Jhon Gaspar bceca6350d Update README 2023-09-17 20:29:31 +08:00
Alexis Jhon Gaspar e958cd125f Update ReADME, add new screenshots 2023-09-17 20:07:45 +08:00
Alexis Jhon Gaspar 66fcd5c583 New stuff, finalizing things, fixing bugs 2023-09-17 20:00:51 +08:00
Alexis Jhon Gaspar 066ba2fedb Lots of changes, battling with how should xrdb would be implemented 2023-09-15 21:55:56 +08:00
Alexis Jhon Gaspar c88995eb55 Replace st with st-flexipatch 2023-09-15 20:33:48 +08:00
Alexis Jhon Gaspar 68ffff9392 Parity with main 2023-09-15 19:40:08 +08:00
Alexis Jhon Gaspar ad849dea6d Initial dwm-flexipatch work 2023-09-14 22:27:51 +08:00
809 changed files with 76130 additions and 14378 deletions

9
.gitmodules vendored
View file

@ -16,3 +16,12 @@
[submodule "sfm"] [submodule "sfm"]
path = sfm path = sfm
url = https://github.com/afify/sfm.git url = https://github.com/afify/sfm.git
[submodule "dvtm"]
path = dvtm
url = https://github.com/martanne/dvtm.git
[submodule "abduco"]
path = abduco
url = https://github.com/martanne/abduco.git
[submodule "shmenu"]
path = shmenu
url = https://github.com/Crestwave/shmenu.git

178
README.md
View file

@ -1,18 +1,94 @@
# Suckless Utilities version 6.3 # Suckless Utilities version 6.5
## About ## About
These are my builds of suckless software such as dwm and st. These are my builds of suckless software such as dwm and st, based on the work for flexipatch by bakkeby. This aims for much more streamlined configuration and patching than 6.3 (which becomes more complicated over time and whenever more patches are integrated).
It's simple to compile these things.
This was designed to save me some sanity in maintaining it as well as easily integrating requested patches, whenever it drops from the flexipatch upstream. This should be easy to hack and build, and should be as fast as the previous versions of my build.
## Included software
### X11
- dwm
- dmenu
- st
- slstatus
- tabbed
- sfm
- spmenu
- dwmblocks-async
- slock
- nsxiv
- slim
### Terminal
- dvtm
- abduco
- shmenu
### Applications by default
- firefox (browser)
- sfm/broot (file manager)
- ncmpcpp (mpd client/music player)
- dunst (notification daemon)
- jgmenu (floating stdin/stdout menu utility)
- spmenu (dmenu alternative)
- newsboat (rss/atom feed reader)
## Unique feaatures/patches
### dwm
- Power menu functionality
- Up to 3 dock buttons
- Primitive window controls
### tabbed
- Ability to tab windows (from `tabbed-hjc`)
- Ability to co-operate with `tabb` (on the `scripts` folder)
## Notes ## Notes
Additionals are spmenu configs made by myself, as well as scripts for `spmenu_run`. If you prefer dmenu, it still exists, and could be launched via `Win/Super/Cmd+Alt+S`, while `Win/Super/Cmd+S` would launch `spmenu_run -d` by default (only with .desktop entries, while `Win/Super/Cmd+Shift+S` would launch `spmenu_run` in a similar fashion to dmenu. ### slim notes
To reload the preset theme (located in `/usr/share/themes/slim/suckless`), then run `.cache/wal/slim-reload` **after** running pywal. The script must also be ran as sudo.
This is, if you wanted a display manager added. The scripts also works a workaround unless if slim could handle loading themes from other dirs.
### eww notes
The weather widget is pretty barebones as of now. Report bugs if found.
### Configuration notes
The bare essentials of my dotfiles are located in the `config` directory. This includes `spmenu`, `picom`, `ncmpcppp`, `neofetch`, `broot`, `newsboat`, and `wal`.
Newsboat config also include preset urls.
### Compatibility notes
For those who want the old version, check out `oldmain`. I don't plan on maintaining it myself since the flexipatch base means much more flexibility over codebase updates as well as new patches.
Note that there are some programs that is included here, mainly for compatibility or choice reasons. While slstatus is pretty barebones compared to dwmblocks-async, it is included on the repo if one decides not to have statuscmd, for example. This aims to be also compatible with already existing setups.
For the shutdown menu script (located in `scripts/shutdown`), `/usr/libexec/ssh/gnome-ssh-askpass` was set by default for asking password for killing X. Either change it to a more preferred ssh-askpass program or make sudo passwordless.
### Keybind notes
In the documentation for this suite, <kbd>Mod4Key</kbd> would be defined as <kbd>⊞ Win</kbd>/<kbd>⌘ Cmd</kbd>/<kbd>❖ Super</kbd>, depending on whichever keyboard do you use.
In most cases, you probably have only <kbd>⊞ Win</kbd>, but I added <kbd>⌘ Cmd</kbd> and <kbd>❖ Super</kbd> for Mac and advanced Linux/Unix users, respectively.
If one uses ChromeOS, <kbd>⊞ Win</kbd> equals to the <kbd>🔍 Search</kbd> key. But I don't know who uses X11 window managers inside ChromeOS.
For new to dwm, <kbd>MODKEY</kbd> or <kbd>Mod1Mask</kbd> is the <kbd>Alt</kbd> key.
### spmenu notes
Additionals are spmenu configs made by myself, as well as scripts for `spmenu_run`. If you prefer dmenu, it still exists, and could be launched via <kbd>⊞ Win</kbd>/<kbd>⌘ Cmd</kbd>/<kbd>❖ Super</kbd>+<kbd>Alt</kbd>+<kbd>S</kbd>, while <kbd>⊞ Win</kbd>/<kbd>⌘ Cmd</kbd>/<kbd>❖ Super</kbd>+<kbd>S</kbd> would launch `spmenu_run -d` by default (only with .desktop entries, while <kbd>⊞ Win</kbd>/<kbd>⌘ Cmd</kbd>/<kbd>❖ Super</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> would launch `spmenu_run` in a similar fashion to dmenu.
Some user scripts are also included, which has it's own set of dependencies. For example, `clipmenu-spmenu` needs `xsel` and `clipnotify`. These are optional, however. Some user scripts are also included, which has it's own set of dependencies. For example, `clipmenu-spmenu` needs `xsel` and `clipnotify`. These are optional, however.
``` ```
clipmenu-spmenu dependencies: clipmenu-spmenu dependencies:
- xsel - xsel
- clipnotify (included on the folder) - clipnotify
screenshot-spmenu dependencies: screenshot-spmenu dependencies:
- curl - curl
@ -25,22 +101,35 @@ screenshot-spmenu dependencies:
wallpaper-spmenu dependencies: wallpaper-spmenu dependencies:
- xwallpaper - xwallpaper
``` ```
## Building
1. Install necessary tools and libraries Additionally, spmenu will not work on macOS, so use `dmenu` instead.
## Building
### Prerequisites
``` ```
Linux/Unix users: Linux/Unix users:
- xorg (including drivers of course) - xorg (including drivers of course)
- base-devel (or build-essential/s) - base-devel (or build-essential/s)
- libX11(-devel or -dev) - libX11(-devel or -dev)
- libXft(-devel or -dev) - libXft(-devel or -dev)
- libXcb(-devel or -dev)
- libXrender(-devel or -dev)
- libXinerama(-devel or -dev) - libXinerama(-devel or -dev)
- freetype(-devel or -dev) - freetype(-devel or -dev)
- fontconfig(-devel or -dev) - fontconfig(-devel or -dev)
- Nerd Fonts (for slstatus) - Nerd Fonts (Hack as default, can be changed manually)
- imlibs2(-devel or -dev) - imlibs2(-devel or -dev)
- picom (for transparency) - picom (for transparency)
- feh (optional) - feh (optional)
- pywal (for colors/wallpaper)
- slop (for riodraw)
- yajl (for ipc)
- eww (optional)
- jgmenu
- libexif(-devel or -dev) (for nsxiv)
- jq (for handling eww notifications)
- pamixer
- xcb-util(-devel or -dev)
Termux users: Termux users:
- xorg - xorg
@ -64,58 +153,95 @@ For spmenu:
- libconfig(-devel or -dev) - libconfig(-devel or -dev)
- OpenSSL or libssl(-devel or -dev) - OpenSSL or libssl(-devel or -dev)
- meson - meson
To make the tabbed windows functionality to work:
- cut
- xargs
- grep
- pstree
- sed
- wmctrl
- xdotool
- xprop
- xwininfo
Refer to patches.def.h and config.mk for additional patch-related requirements.
``` ```
### Compiling the whole thing
1. Install necessary tools and libraries
2. Clone this repository (`git clone --recurse-submodules`) 2. Clone this repository (`git clone --recurse-submodules`)
3. Change directory to what suckless software do you want to use 3. Change directory to what suckless software do you want to use
4. Remove the `config.h` file, to make sure all patches are applied correctly 4. Remove the `config.h`, and `patches.h` files, to make sure all patches are applied correctly
5. Copy `make clean install` and paste it on your terminal 5. Copy `make clean install` (or `make install-all` for nsxiv) and paste it on your terminal
6. Building the spmenu submodule included in this repo (by speedie) would strictly use meson as it's build system. 6. Building the spmenu submodule included in this repo (by speedie) would strictly use meson as it's build system.
1. For that, `cd` to the spmenu folder. 1. For that, `cd` to the spmenu folder.
2. Initialize setup via `meson setup build`. Pass `-Dwayland-=false` for disabling Wayland support. 2. Initialize setup via `meson setup build`. Pass `-Dwayland-=false` for disabling Wayland support.
3. Run `ninja -C build` for building the binaries. 3. Run `ninja -C build` for building the binaries.
4. Install via `meson install -C build`, and it'll prompt you if you would like to use sudo if not run as root. 4. Install via `meson install -C build`, and it'll prompt you if you would like to use sudo if not run as root.
7. Insert dwm, slstatus and/or st inside your `.xinitrc` using your favorite text editor (usually located in `/home/<username>/.xinitrc`) 7. Insert dwm, slstatus and/or st inside your `.xinitrc` using your favorite text editor (usually located in `$HOME/.xinitrc`)
8. Start it and done! - Additionally, a script called `startdwm` located in `desktop` could be installed in `/usr/local/bin` which could be used to launch dwm on display managers, such as GDM or SDDM.
- `startdwm` could be also used as the xinitrc script by putting it under $HOME and renaming it to `.xinitrc`.
8. Install the `dwmblocks` scripts (in `scripts/dwmblocks`) to your `$PATH`.
9. Install eww, and put the config inside `config/eww` to `$HOME/.config`. Put the scripts inside `scripts/eww` inside `$PATH`.
- (Recommended) Make a hard link of `.cache/wal/colors.scss` to `.config/eww/colors.scss`.
10. Set up slim (optional)
1. If you wanted to, all you have to do is setup the makefiles by making a `build` folder.
2. Generate makefiles via `cmake`. Make sure the `PREFIX` variable is set on `/usr`
3. Run `make` and `make install`.
4. Set up the systemd service included, tweak if necessary (same applies with other inits but would have to deal with manual config)
11. Put `$HOME/.local/bin` in `$PATH` to seperate scripts and compiled applications, as well as to reduce clutter.
12. Start it and done!
## Current bugs
- ~~Taskbar not working properly~~ (fixed in commit [e9015f2](https://github.com/Lucas-mother3/suckless-utils/commit/e9015f2d2a09ef66f1c9e188b277c89d23635195) & [7085f9](https://github.com/Lucas-mother3/suckless-utils/commit/7085f97d80fc203d6f54d0209af07007c0347880)). Thanks, [Speedie](https://speedie.gq)!
- ~~Unhiding a hidden window (using the show/hide function) and if it's the only program running, crashes dwm~~
- ~~Alt-tab crashes dwm altogther (idk man)~~
## Future plans ## Future plans
- [ ] Rebase the dwm build to dwm-flexipatch (maybe under a new branch with a VM debug environment?) - [x] Rebase the dwm build to dwm-flexipatch (maybe under a new branch with a VM debug environment?)
- [ ] Integrate barmodules if the dwm-flexipatch rewrite did happen - [x] Integrate barmodules if the dwm-flexipatch rewrite did happen
- [ ] Version jump from 6.3 -> 6.4 - [x] Version jump from 6.3 -> 6.4
- [x] Codebase update from 6.4 -> 6.5
- [ ] Potentially making this project into a desktop environment, when I feel it's ready to do so - [ ] Potentially making this project into a desktop environment, when I feel it's ready to do so
- [ ] Use `spmenu-desktop-launcher` if it's mature/usable, retaining `spmenu_run` for backwards compatibility with existing scripts - [ ] Use `spmenu-desktop-launcher` if it's mature/usable, retaining `spmenu_run` for backwards compatibility with existing scripts
- [ ] Making a wiki for documenting functions in this build, as well as other important information about the project
## Patching even further ## Patching even further
Patching everything is as easy as downloading the diff file, use the `patch` command and apply changes. Patching everything is as easy as editing the `patches.def.h` file included in the repo. Unlike 6.3, which had a complicated codebase, 6.5 aims for a much more streamlined process of patching things, unlike the previous version which would mean using `patch` and manually editing files whenever something isn't patched up properly.
But, since this is a heavily patched version of everything, I wouldn't recommend patching even further unless if you know what you're doing. A huge thanks for bakkeby on the work for making suckless software easier to patch, meaning more people could modify and configure the code to their liking.
## Contributing to the project
Contributions are welcome, as long as it follows the defined rules in [the CONTRIBUTING document](/CONTRIBUTING.md).
Documentations are also welcome, in fact, I do need someone who could maintain documentation for the project's inner workings.
## How the versioning system works ## How the versioning system works
Suckless Uilities (the whole package and not the individual components) are versioned under the current version of the repo's dwm. Suckless Utilities (the whole package and not the individual components) are versioned under the current version of the repo's dwm.
Even if dwm 6.4 releases, if the repo still uses dwm 6.3 for compatibility reasons, the whole package will be still be Suckless Utilities 6.3. Even if dwm(-flexipatch) 6.6 releases, if the repo still uses dwm(-flexipatch) 6.5 for compatibility reasons, the whole package will still be Suckless Utilities 6.4.
## Licensing ## Licensing
All programs are licensed under the MIT License, which sucks, and worse than GNU GPL, but hey, it's better than proprietary code! All programs are licensed under the MIT License, except for some submodules, which might have different licenses (for example, GPLv2).
## Screenshots ## Screenshots
![Screenshot of the desktop](/pics/desktop.png)
![Screenshot of neofetch](/pics/neofetch.png) ![Screenshot of neofetch](/pics/neofetch.png)
![Screenshot of random applications (Spotify, Space Cadet Pinball, NCSA Mosaic)](/pics/random.png) ![Screenshot of random screenshots](/pics/random.png)
![Screenshot of it's gaming abilities](/pics/gaming.png)
![A demo of it's pywal abilities](/pics/wal.gif)
![Screenhot of slim on a Debian test VM](/pics/login.png)
![Screenhot of tabb running](/pics/tabbed.png)
## Special thanks ## Special thanks
* [Speedie](https://speedie.gq) for helping me out with this and providing me with patches * [Speedie](https://speedie.site) for helping me out with this and providing me with patches
* [The suckless team](https://suckless.org) for maintaining suckless software suck less * [The suckless team](https://suckless.org) for maintaining suckless software suck less
* [bakkeby](https://github.com/bakkeby) for creating dwm-flexipatch and related projects, making it possible to easily integrate patches
## Mirrors ## Mirrors
* [GitHub](https://github.com/Lucas-mother3/suckless-utils) - Main mirror * [GitHub](https://github.com/Lucas-mother3/suckless-utils) - Main mirror
* [GitLab](https://gitlab.com/Lucas-mother3/suckless-utils) - Secondary (and backup) * [GitLab](https://gitlab.com/Lucas-mother3/suckless-utils) - Secondary (and backup)
* [BitBucket](https://bitbucket.org/Lucas-mother3/suckless-utils) - Secondary backup * [BitBucket](https://bitbucket.org/Lucas-mother3/suckless-utils) - Secondary backup
* [Codeberg](https://codeberg.org/Lucas-mother3/suckless-utils) - Tritary backup
* [speedie.site](https://git.speedie.site/Lucas-mother3/suckless-utils) - Mirror of gitlab * [speedie.site](https://git.speedie.site/Lucas-mother3/suckless-utils) - Mirror of gitlab

1
abduco Submodule

@ -0,0 +1 @@
Subproject commit 8c32909a159aaa9484c82b71f05b7a73321eb491

3
config/README.md Normal file
View file

@ -0,0 +1,3 @@
# Dotfiles
Random dotfiles designed for suckless-utils.

1465
config/bashrc Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,169 @@
###############################################################
# A skin for a terminal with a dark background
# This skin uses RGB values so won't work for some
# terminals.
#
# Created by A. Taha Baki <atahabaki@pm.me>
# Based on the built-in gruvbox theme.
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
input: rgb(205, 214, 244) none
# fg:none bg:$surface2
selected_line: none rgb(88, 91, 112)
# fg:$text bg:none
default: rgb(205, 214, 244) none
# fg:$overlay0 bg:none
tree: rgb(108, 112, 134) none
# fg:$sapphire bg:none
parent: rgb(116, 199, 236) none
file: none none
#
### PERMISSIONS
#
perm__: rgb(186, 194, 222) none
# $peach
perm_r: rgb(250, 179, 135) none
# $maroon
perm_w: rgb(235, 160, 172) none
# $green
perm_x: rgb(166, 227, 161) none
# $teal
owner: rgb(148, 226, 213) none
# $sky
group: rgb(137, 220, 235) none
#
### DATE
#
# $subtext1
dates: rgb(186, 194, 222) none
#
### DIRECTORY
#
# $lavender
directory: rgb(180, 190, 254) none Bold
# $green
exe: rgb(166, 227, 161) none
# $yellow
link: rgb(249, 226, 175) none
# $subtext0
pruning: rgb(166, 173, 200) none Italic
#
### PREVIEW
#
# fg:$text bg:$mantle
preview_title: rgb(205, 214, 244) rgb(24, 24, 37)
# fg:$text bg:$mantle
preview: rgb(205, 214, 244) rgb(24, 24, 37)
# fg:$overlay0
preview_line_number: rgb(108, 112, 134) none
#
### MATCH
#
char_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic
content_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic
preview_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic
# children count
# fg:$yellow bg:none
count: rgb(249, 226, 175) none
sparse: rgb(243, 139, 168) none
content_extract: rgb(243, 139, 168) none Italic
#
### GIT
#
git_branch: rgb(250, 179, 135) none
git_insertions: rgb(250, 179, 135) none
git_deletions: rgb(250, 179, 135) none
git_status_current: rgb(250, 179, 135) none
git_status_modified: rgb(250, 179, 135) none
git_status_new: rgb(250, 179, 135) none Bold
git_status_ignored: rgb(250, 179, 135) none
git_status_conflicted: rgb(250, 179, 135) none
git_status_other: rgb(250, 179, 135) none
staging_area_title: rgb(250, 179, 135) none
#
### FLAG
#
flag_label: rgb(243, 139, 168) none
flag_value: rgb(243, 139, 168) none Bold
#
### STATUS
#
# fg:none #bg:$mantle
status_normal: none rgb(24, 24, 37)
# fg:$red bg:$mantle
status_italic: rgb(243, 139, 168) rgb(24, 24, 37) Italic
# fg:$maroon bg:$mantle
status_bold: rgb(235, 160, 172) rgb(24, 24, 37) Bold
# fg:$maroon bg:$mantle
status_ellipsis: rgb(235, 160, 172) rgb(24, 24, 37) Bold
# fg:$text bg:$red
status_error: rgb(205, 214, 244) rgb(243, 139, 168)
# fg:$maroon bg:$mantle
status_job: rgb(235, 160, 172) rgb(40, 38, 37)
# fg:$maroon bg:$mantle
status_code: rgb(235, 160, 172) rgb(24, 24, 37) Italic
# fg:$maroon bg:$mantle
mode_command_mark: rgb(235, 160, 172) rgb(24, 24, 37) Bold
#
### HELP
#
# fg:$text
help_paragraph: rgb(205, 214, 244) none
# fg:$red
help_headers: rgb(243, 139, 168) none Bold
# fg:$peach
help_bold: rgb(250, 179, 135) none Bold
# fg:$yellow
help_italic: rgb(249, 226, 175) none Italic
# fg:green bg:$surface0
help_code: rgb(166, 227, 161) rgb(49, 50, 68)
# fg:$overlay0
help_table_border: rgb(108, 112, 134) none
#
### HEX
#
# fg:$text
hex_null: rgb(205, 214, 244) none
# fg:$peach
hex_ascii_graphic: rgb(250, 179, 135) none
# fg:$green
hex_ascii_whitespace: rgb(166, 227, 161) none
# fg: teal
hex_ascii_other: rgb(148, 226, 213) none
# fg: red
hex_non_ascii: rgb(243, 139, 168) none
# fg:$text bg:$red
file_error: rgb(251, 73, 52) none
#
### PURPOSE
#
purpose_normal: none none
purpose_italic: rgb(177, 98, 134) none Italic
purpose_bold: rgb(177, 98, 134) none Bold
purpose_ellipsis: none none
#
### SCROLLBAR
#
# fg:$surface0
scrollbar_track: rgb(49, 50, 68) none
# fg:$surface1
scrollbar_thumb: rgb(88, 91, 112) none
#
### GOODTOBAD
#
good_to_bad_0: rgb(166, 227, 161) none
good_to_bad_1: rgb(148, 226, 213) none
good_to_bad_2: rgb(137, 220, 235) none
good_to_bad_3: rgb(116, 199, 236) none
good_to_bad_4: rgb(137, 180, 250) none
good_to_bad_5: rgb(180, 190, 254) none
good_to_bad_6: rgb(203, 166, 247) none
good_to_bad_7: rgb(250, 179, 135) none
good_to_bad_8: rgb(235, 160, 172) none
good_to_bad_9: rgb(243, 139, 168) none
}

189
config/broot/conf.hjson Normal file
View file

@ -0,0 +1,189 @@
###############################################################
# This configuration file lets you
# - define new commands
# - change the shortcut or triggering keys of built-in verbs
# - change the colors
# - set default values for flags
# - set special behaviors on specific paths
# - and more...
#
# Configuration documentation is available at
# https://dystroy.org/broot
#
# This file's format is Hjson ( https://hjson.github.io/ ). Some
# properties are commented out. To enable them, remove the `#`.
#
###############################################################
###############################################################
# Default flags
# You can set up flags you want broot to start with by
# default, for example `default_flags="ihp"` if you usually want
# to see hidden and gitignored files and the permissions (then
# if you don't want the hidden files you can launch `br -H`)
# A popular flag is the `g` one which displays git related info.
#
# default_flags:
###############################################################
# Date/Time format
# If you want to change the format for date/time, uncomment the
# following line and change it according to
# https://docs.rs/chrono/0.4.11/chrono/format/strftime/index.html
#
date_time_format: %a %m/%d/%Y %r
###############################################################
# uncomment to activate modal mode
#
# (you really should read https://dystroy.org/broot/modal/
# before as it may not suit everybody even among vim users)
#
# modal: true
###############################################################
# Whether to mark the selected line with a triangle
#
show_selection_mark: true
###############################################################
# Column order
# cols_order, if specified, must be a permutation of the following
# array. You should keep the name column at the end as it has a
# variable length.
#
# cols_order: [
# mark
# git
# size
# permission
# date
# count
# branch
# name
# ]
###############################################################
# True Colors
# If this parameter isn't set, broot tries to automatically
# determine whether true colors (24 bits) are available.
# As this process is unreliable, you may uncomment this setting
# and set it to false or true if you notice the colors in
# previewed images are too off.
#
# true_colors: false
###############################################################
# Icons
# If you want to display icons in broot, uncomment this line
# (see https://dystroy.org/broot/icons for installation and
# troubleshooting)
#
icon_theme: vscode
###############################################################
# Special paths
# If some paths must be handled specially, uncomment (and change
# this section as per the examples)
#
special_paths: {
"/media" : "no-enter" // comment it if desired
# "/media/slow-backup-disk" : no-enter
# "/home/dys/useless" : hide
# "/home/dys/my-link-I-want-to-explore" : enter
}
###############################################################
# Quit on last cancel
# You can usually cancel the last state change on escape.
# If you want the escape key to quit broot when there's nothing
# to cancel (for example when you just opened broot), uncomment
# this parameter
#
# quit_on_last_cancel: true
###############################################################
# Search modes
#
# broot allows many search modes.
# A search mode is defined by
# - the way to search: 'fuzzy', 'exact', 'regex', or 'tokens'.
# - where to search: file 'name', 'path', or file 'content'
# A search pattern may for example be "fuzzy path" (default),
# "regex content" or "exact path".
#
# The search mode is selected from its prefix. For example, if
# you type "abc", the default mode is "fuzzy path". If you type
# "/abc", the mode is "regex path". If you type "rn/abc", the mode
# is "regex name".
#
# This mapping may be modified. You may want to dedicate the
# empty prefix (the one which doesn't need a '/') to the
# search mode you use most often. The example below makes it
# easy to search on name rather than on the subpath.
#
# More information on
# https://dystroy.org/broot/input/#the-filtering-pattern
#
# search_modes: {
# <empty>: fuzzy name
# /: regex name
# }
###############################################################
# File Extension Colors
#
# uncomment and modify the next section if you want to color
# file name depending on their extension
#
# ext_colors: {
# png: rgb(255, 128, 75)
# rs: yellow
# }
###############################################################
# Max file size for content search
#
# Bigger files are ignored when searching their content. You
# can specify this size either in ISO units (eg 5GB) or in
# the old binary units (eg 44Kib)
content_search_max_file_size: 10MB
###############################################################
# Max Panels Count
#
# Change this if you sometimes want to have more than 2 panels
# open
# max_panels_count: 2
###############################################################
# Imports
#
# While it's possible to have all configuration in one file,
# it's more convenient to split it in several ones.
# Importing also allows to set a condition on the terminal's
# color, which makes it possible to have a different skin
# chosen when your terminal has a light background and when
# it has a light one.
imports: [
# Verbs are better configured in verbs.hjson. But you
# can also add another files for your personal verbs
verbs.hjson
# This file contains the skin to use when the terminal
# is dark (or when this couldn't be determined)
{
luma: [
dark
unknown
]
file: dark-blue-skin.hjson
}
# This skin is imported when your terminal is light
{
luma: light
file: white-skin.hjson
}
]

View file

@ -0,0 +1,115 @@
###############################################################
# A skin for a terminal with a dark background
#
# To create your own skin, copy this file, change the entries
# and import your skin file from the main conf file (look
# for "imports")
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
###############################################################
# Skin
# If you want to change the colors of broot,
# uncomment the following block and start messing
# with the various values.
# A skin entry value is made of two parts separated with a '/':
# The first one is the skin for the active panel.
# The second one, optional, is the skin for non active panels.
# You may find explanations and other skins on
# https://dystroy.org/broot/skins
###############################################################
skin: {
default: gray(22) none / gray(20) none
tree: gray(8) None / gray(4) None
parent: gray(18) None / gray(13) None
file: gray(22) None / gray(15) None
directory: ansi(110) None bold / ansi(110) None
exe: Cyan None
link: Magenta None
pruning: gray(12) None Italic
perm__: gray(5) None
perm_r: ansi(94) None
perm_w: ansi(132) None
perm_x: ansi(65) None
owner: ansi(138) None
group: ansi(131) None
count: ansi(138) gray(4)
dates: ansi(66) None
sparse: ansi(214) None
content_extract: ansi(29) None
content_match: ansi(34) None
device_id_major: ansi(138) None
device_id_sep: ansi(102) None
device_id_minor: ansi(138) None
git_branch: ansi(178) None
git_insertions: ansi(28) None
git_deletions: ansi(160) None
git_status_current: gray(5) None
git_status_modified: ansi(28) None
git_status_new: ansi(94) None bold
git_status_ignored: gray(17) None
git_status_conflicted: ansi(88) None
git_status_other: ansi(88) None
selected_line: None gray(6) / None gray(4)
char_match: Green None
file_error: Red None
flag_label: gray(15) gray(2)
flag_value: ansi(178) gray(2) bold
input: White gray(2) / gray(15) None
status_error: gray(22) ansi(124)
status_job: ansi(220) gray(5)
status_normal: gray(20) gray(4) / gray(2) gray(2)
status_italic: ansi(178) gray(4) / gray(2) gray(2)
status_bold: ansi(178) gray(4) bold / gray(2) gray(2)
status_code: ansi(229) gray(4) / gray(2) gray(2)
status_ellipsis: gray(19) gray(1) / gray(2) gray(2)
purpose_normal: gray(20) gray(2)
purpose_italic: ansi(178) gray(2)
purpose_bold: ansi(178) gray(2) bold
purpose_ellipsis: gray(20) gray(2)
scrollbar_track: gray(7) None / gray(4) None
scrollbar_thumb: gray(22) None / gray(14) None
help_paragraph: gray(20) None
help_bold: ansi(178) None bold
help_italic: ansi(229) None
help_code: gray(21) gray(3)
help_headers: ansi(178) None
help_table_border: ansi(239) None
preview: gray(20) gray(1) / gray(18) gray(2)
preview_title: gray(23) gray(2) / gray(21) gray(2)
preview_line_number: gray(12) gray(3)
preview_match: None ansi(29)
hex_null: gray(8) None
hex_ascii_graphic: gray(18) None
hex_ascii_whitespace: ansi(143) None
hex_ascii_other: ansi(215) None
hex_non_ascii: ansi(167) None
staging_area_title: gray(22) gray(2) / gray(20) gray(3)
mode_command_mark: gray(5) ansi(204) bold
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
###############################################################
# Syntax Theme
#
# If you want to choose the theme used for preview, uncomment
# one of the following lines:
#
# syntax_theme: GitHub
# syntax_theme: SolarizedDark
# syntax_theme: SolarizedLight
syntax_theme: MochaDark
# syntax_theme: MochaDark
# syntax_theme: OceanDark
# syntax_theme: OceanLight

View file

@ -0,0 +1,87 @@
###############################################################
# A skin for a terminal with a dark background
# This skin uses RGB values so won't work for some
# terminals.
#
#
# (initially contributed by @basbebe)
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
skin: {
default: rgb(235, 219, 178) none / rgb(189, 174, 147) none
tree: rgb(70, 70, 80) None / rgb(60, 60, 60) None
parent: rgb(235, 219, 178) none / rgb(189, 174, 147) none Italic
file: None None / None None Italic
directory: rgb(131, 165, 152) None Bold / rgb(131, 165, 152) None
exe: rgb(184, 187, 38) None
link: rgb(104, 157, 106) None
pruning: rgb(124, 111, 100) None Italic
perm__: None None
perm_r: rgb(215, 153, 33) None
perm_w: rgb(204, 36, 29) None
perm_x: rgb(152, 151, 26) None
owner: rgb(215, 153, 33) None Bold
group: rgb(215, 153, 33) None
count: rgb(69, 133, 136) rgb(50, 48, 47)
dates: rgb(168, 153, 132) None
sparse: rgb(250, 189,47) None
content_extract: ansi(29) None Italic
content_match: ansi(34) None Bold
git_branch: rgb(251, 241, 199) None
git_insertions: rgb(152, 151, 26) None
git_deletions: rgb(190, 15, 23) None
git_status_current: rgb(60, 56, 54) None
git_status_modified: rgb(152, 151, 26) None
git_status_new: rgb(104, 187, 38) None Bold
git_status_ignored: rgb(213, 196, 161) None
git_status_conflicted: rgb(204, 36, 29) None
git_status_other: rgb(204, 36, 29) None
selected_line: None rgb(60, 56, 54) / None rgb(50, 48, 47)
char_match: rgb(250, 189, 47) None
file_error: rgb(251, 73, 52) None
flag_label: rgb(189, 174, 147) None
flag_value: rgb(211, 134, 155) None Bold
input: rgb(251, 241, 199) None / rgb(189, 174, 147) None Italic
status_error: rgb(213, 196, 161) rgb(204, 36, 29)
status_job: rgb(250, 189, 47) rgb(60, 56, 54)
status_normal: None rgb(40, 38, 37) / None None
status_italic: rgb(211, 134, 155) rgb(40, 38, 37) Italic / None None
status_bold: rgb(211, 134, 155) rgb(40, 38, 37) Bold / None None
status_code: rgb(251, 241, 199) rgb(40, 38, 37) / None None
status_ellipsis: rgb(251, 241, 199) rgb(40, 38, 37) Bold / None None
purpose_normal: None None
purpose_italic: rgb(177, 98, 134) None Italic
purpose_bold: rgb(177, 98, 134) None Bold
purpose_ellipsis: None None
scrollbar_track: rgb(80, 73, 69) None / rgb(50, 48, 47) None
scrollbar_thumb: rgb(213, 196, 161) None / rgb(102, 92, 84) None
help_paragraph: None None
help_bold: rgb(214, 93, 14) None Bold
help_italic: rgb(211, 134, 155) None Italic
help_code: rgb(142, 192, 124) rgb(50, 48, 47)
help_headers: rgb(254, 128, 25) None Bold
help_table_border: rgb(80, 73, 69) None
preview_title: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(189, 174, 147) rgb(40, 40, 40)
preview: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(235, 219, 178) rgb(40, 40, 40)
preview_line_number: rgb(124, 111, 100) None / rgb(124, 111, 100) rgb(40, 40, 40)
preview_match: None ansi(29) Bold
hex_null: rgb(189, 174, 147) None
hex_ascii_graphic: rgb(213, 196, 161) None
hex_ascii_whitespace: rgb(152, 151, 26) None
hex_ascii_other: rgb(254, 128, 25) None
hex_non_ascii: rgb(214, 93, 14) None
staging_area_title: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(189, 174, 147) rgb(40, 40, 40)
mode_command_mark: gray(5) ansi(204) Bold
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}

View file

@ -0,0 +1,110 @@
###############################################################
# A skin for a terminal with a dark background
#
# To create your own skin, copy this file, change the entries
# and import your skin file from the main conf file (look
# for "imports")
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
###############################################################
# Skin
# If you want to change the colors of broot,
# uncomment the following bloc and start messing
# with the various values.
# A skin entry value is made of two parts separated with a '/':
# The first one is the skin for the active panel.
# The second one, optional, is the skin for non active panels.
# You may find explanations and other skins on
# https://dystroy.org/broot/skins
###############################################################
skin: {
default: none none / gray(20) none
tree: ansi(94) None / gray(3) None
parent: gray(18) None / gray(13) None
file: gray(20) None / gray(15) None
directory: ansi(208) None Bold / ansi(172) None bold
exe: Cyan None
link: Magenta None
pruning: gray(12) None Italic
perm__: gray(5) None
perm_r: ansi(94) None
perm_w: ansi(132) None
perm_x: ansi(65) None
owner: ansi(138) None
group: ansi(131) None
count: ansi(136) gray(3)
dates: ansi(66) None
sparse: ansi(214) None
content_extract: ansi(29) None
content_match: ansi(34) None
git_branch: ansi(229) None
git_insertions: ansi(28) None
git_deletions: ansi(160) None
git_status_current: gray(5) None
git_status_modified: ansi(28) None
git_status_new: ansi(94) None Bold
git_status_ignored: gray(17) None
git_status_conflicted: ansi(88) None
git_status_other: ansi(88) None
selected_line: None gray(5) / None gray(4)
char_match: Yellow None
file_error: Red None
flag_label: gray(15) None
flag_value: ansi(208) None Bold
input: White None / gray(15) gray(2)
status_error: gray(22) ansi(124)
status_job: ansi(220) gray(5)
status_normal: gray(20) gray(3) / gray(2) gray(2)
status_italic: ansi(208) gray(3) / gray(2) gray(2)
status_bold: ansi(208) gray(3) Bold / gray(2) gray(2)
status_code: ansi(229) gray(3) / gray(2) gray(2)
status_ellipsis: gray(19) gray(1) / gray(2) gray(2)
purpose_normal: gray(20) gray(2)
purpose_italic: ansi(178) gray(2)
purpose_bold: ansi(178) gray(2) Bold
purpose_ellipsis: gray(20) gray(2)
scrollbar_track: gray(7) None / gray(4) None
scrollbar_thumb: gray(22) None / gray(14) None
help_paragraph: gray(20) None
help_bold: ansi(208) None Bold
help_italic: ansi(166) None
help_code: gray(21) gray(3)
help_headers: ansi(208) None
help_table_border: ansi(239) None
preview: gray(20) gray(1) / gray(18) gray(2)
preview_line_number: gray(12) gray(3)
preview_match: None ansi(29)
hex_null: gray(11) None
hex_ascii_graphic: gray(18) None
hex_ascii_whitespace: ansi(143) None
hex_ascii_other: ansi(215) None
hex_non_ascii: ansi(167) None
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}
###############################################################
# Syntax Theme
#
# If you want to choose the theme used for preview, uncomment
# one of the following lines:
#
# syntax_theme: GitHub
# syntax_theme: SolarizedDark
# syntax_theme: SolarizedLight
syntax_theme: SolarizedDark
# syntax_theme: MochaDark
# syntax_theme: OceanDark
# syntax_theme: OceanLight

View file

@ -0,0 +1 @@
/home/lucss21a/.local/share/broot/launcher/bash/1

View file

@ -0,0 +1,4 @@
This file tells broot the installation of the br function was done.
If there's a problem and you want to install it again run
broot -- install

View file

@ -0,0 +1,66 @@
// contributed by [@danieltrautmann](https://github.com/danieltrautmann)
//
//
// The Solarized Dark skin uses RGB values, so it might not work well with some
// terminals
//
// Doc at https://dystroy.org/broot/skins/
skin: {
default: "rgb(131, 148, 150) rgb(0, 43, 54) / rgb(131, 148, 150) rgb(7, 54, 66)" // base0 base03 / base01 base02
tree: "rgb(88, 110, 117) none" // base01 default
file: "none none" // default default
directory: "rgb(38, 139, 210) none bold" // blue default bold
exe: "rgb(211, 1, 2) none" // red default
link: "rgb(211, 54, 130) none" // magenta default
pruning: "rgb(88, 110, 117) none italic" // base01 default italic
perm__: "rgb(88, 110, 117) none" // base01 default
perm_r: "none none" // default default
perm_w: "none none" // default default
perm_x: "none none" // default default
owner: "rgb(88, 110, 117) none" // base01 default
group: "rgb(88, 110, 117) none" // base01 default
sparse: "none none" // default default
git_branch: "rgb(147, 161, 161) none" // base1 default
git_insertions: "rgb(133, 153, 0) none" // green default
git_deletions: "rgb(211, 1, 2) none" // red default
git_status_current: "none none" // default default
git_status_modified: "rgb(181, 137, 0) none" // yellow default
git_status_new: "rgb(133, 153, 0) none" // green default
git_status_ignored: "rgb(88, 110, 117) none" // base01 default
git_status_conflicted: "rgb(211, 1, 2) none" // red default
git_status_other: "rgb(211, 1, 2) none" // red default
selected_line: "none rgb(7, 54, 66)" // default base02
char_match: "rgb(133, 153, 0) none underlined" // green default underlined
file_error: "rgb(203, 75, 22) none italic" // orange default italic
flag_label: "none none" // default default
flag_value: "rgb(181, 137, 0) none bold" // yellow default bold
input: "none none" // default default
status_error: "rgb(203, 75, 22) rgb(7, 54, 66)" // orange base02
status_job: "rgb(108, 113, 196) rgb(7, 54, 66) bold" // violet base02 bold
status_normal: "none rgb(7, 54, 66)" // default base02
status_italic: "rgb(181, 137, 0) rgb(7, 54, 66)" // yellow base02
status_bold: "rgb(147, 161, 161) rgb(7, 54, 66) bold" // base1 base02 bold
status_code: "rgb(108, 113, 196) rgb(7, 54, 66)" // violet base02
status_ellipsis: "none rgb(7, 54, 66)" // default base02
scrollbar_track: "rgb(7, 54, 66) none" // base02 default
scrollbar_thumb: "none none" // default default
help_paragraph: "none none" // default default
help_bold: "rgb(147, 161, 161) none bold" // base1 default bold
help_italic: "rgb(147, 161, 161) none italic" // base1 default italic
help_code: "rgb(147, 161, 161) rgb(7, 54, 66)" // base1 base02
help_headers: "rgb(181, 137, 0) none" // yellow default
help_table_border: "none none" // default default
preview_title: "gray(20) rgb(0, 43, 54)"
staging_area_title: "gray(22) rgb(0, 43, 54)"
good_to_bad_0: "ansi(28)" // green
good_to_bad_1: "ansi(29)"
good_to_bad_2: "ansi(29)"
good_to_bad_3: "ansi(29)"
good_to_bad_4: "ansi(29)"
good_to_bad_5: "ansi(100)"
good_to_bad_6: "ansi(136)"
good_to_bad_7: "ansi(172)"
good_to_bad_8: "ansi(166)"
good_to_bad_9: "ansi(196)" // red
}

View file

@ -0,0 +1,113 @@
// contributed by [@danieltrautmann](https://github.com/danieltrautmann)
//
//
// The Solarized Light skin uses RGB values, so it might not work well with some
// terminals
//
// Doc at https://dystroy.org/broot/skins/
skin: {
// base00 base3 / base1 base2
default: "rgb(101, 123, 131) rgb(253, 246, 227) / rgb(147, 161, 161) rgb(238, 232, 213)"
// base1 default
tree: "rgb(147, 161, 161) none"
// default default
file: "none none"
// blue default bold
directory: "rgb(38, 139, 210) none bold"
// red default
exe: "rgb(211, 1, 2) none"
// magenta default
link: "rgb(211, 54, 130) none"
// base1 default italic
pruning: "rgb(147, 161, 161) none italic"
// base1 default
perm__: "rgb(147, 161, 161) none"
// default default
perm_r: "none none"
// default default
perm_w: "none none"
// default default
perm_x: "none none"
// base1 default
owner: "rgb(147, 161, 161) none"
// base1 default
group: "rgb(147, 161, 161) none"
// default default
sparse: "none none"
// base01 default
git_branch: "rgb(88, 110, 117) none"
// green default
git_insertions: "rgb(133, 153, 0) none"
// red default
git_deletions: "rgb(211, 1, 2) none"
// default default
git_status_current: "none none"
// yellow default
git_status_modified: "rgb(181, 137, 0) none"
// green default
git_status_new: "rgb(133, 153, 0) none"
// base1 default
git_status_ignored: "rgb(147, 161, 161) none"
// red default
git_status_conflicted: "rgb(211, 1, 2) none"
// red default
git_status_other: "rgb(211, 1, 2) none"
// default base2
selected_line: "none rgb(238, 232, 213)"
// green default underlined
char_match: "rgb(133, 153, 0) none underlined"
// orange default italic
file_error: "rgb(203, 75, 22) none italic"
// default default
flag_label: "none none"
// yellow default bold
flag_value: "rgb(181, 137, 0) none bold"
// default default
input: "none none"
// orange base2
status_error: "rgb(203, 75, 22) rgb(238, 232, 213)"
// violet base2 bold
status_job: "rgb(108, 113, 196) rgb(238, 232, 213) bold"
// default base2
status_normal: "none rgb(238, 232, 213)"
// yellow base2
status_italic: "rgb(181, 137, 0) rgb(238, 232, 213)"
// base01 base2 bold
status_bold: "rgb(88, 110, 117) rgb(238, 232, 213) bold"
// violet base2
status_code: "rgb(108, 113, 196) rgb(238, 232, 213)"
// default base2
status_ellipsis: "none rgb(238, 232, 213)"
// base2 default
scrollbar_track: "rgb(238, 232, 213) none"
// default default
scrollbar_thumb: "none none"
// default default
help_paragraph: "none none"
// base01 default bold
help_bold: "rgb(88, 110, 117) none bold"
// base01 default italic
help_italic: "rgb(88, 110, 117) none italic"
// base01 base2
help_code: "rgb(88, 110, 117) rgb(238, 232, 213)"
// yellow default
help_headers: "rgb(181, 137, 0) none"
// default default
help_table_border: "none none"
preview_title: "rgb(147, 161, 161) rgb(238, 232, 213)"
preview: "rgb(101, 123, 131) rgb(253, 246, 227) / rgb(147, 161, 161) rgb(238, 232, 213)"
preview_line_number: "rgb(147, 161, 161) rgb(238, 232, 213)"
preview_match: "None ansi(29)"
staging_area_title: "gray(22) rgb(253, 246, 227)"
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}

126
config/broot/verbs.hjson Normal file
View file

@ -0,0 +1,126 @@
###############################################################
# This file contains the verb definitions for broot
#
# Doc at https://dystroy.org/broot/verbs/
###############################################################
verbs: [
# Example 1: launching `tail -n` on the selected file (leaving broot)
# {
# name: tail_lines
# invocation: tl {lines_count}
# execution: "tail -f -n {lines_count} {file}"
# }
# Example 2: creating a new file without leaving broot
# {
# name: touch
# invocation: touch {new_file}
# execution: "touch {directory}/{new_file}"
# leave_broot: false
# }
# A standard recommended command for editing files, that you
# can customize.
# If $EDITOR isn't set on your computer, you should either set it using
# something similar to
# export EDITOR=/usr/local/bin/nvim
# or just replace it with your editor of choice in the 'execution'
# pattern.
# If your editor is able to open a file on a specific line, use {line}
# so that you may jump directly at the right line from a preview.
# Example:
# execution: nvim +{line} {file}
{
invocation: edit
shortcut: e
execution: "$EDITOR +{line} {file}"
leave_broot: false
}
# A convenient shortcut to create new text files in
# the current directory or below
{
invocation: create {subpath}
execution: "$EDITOR {directory}/{subpath}"
leave_broot: false
}
{
invocation: git_diff
shortcut: gd
leave_broot: false
execution: "git difftool -y {file}"
}
# On ctrl-b, propose the creation of a copy of the selection.
# While this might occasionally be useful, this verb is mostly here
# as an example to demonstrate rare standard groups like {file-stem}
# and {file-dot-extension} and the auto_exec verb property which
# allows verbs not executed until you hit enter
{
invocation: "backup {version}"
key: ctrl-b
leave_broot: false
auto_exec: false
execution: "cp -r {file} {parent}/{file-stem}-{version}{file-dot-extension}"
}
# This verb lets you launch a terminal on ctrl-T
# (on exit you'll be back in broot)
{
invocation: terminal
key: ctrl-t
execution: "$SHELL"
set_working_dir: true
leave_broot: false
}
# Here's an example of a shortcut bringing you to your home directory
# {
# invocation: home
# key: ctrl-home
# execution: ":focus ~"
# }
# A popular set of shortcuts for going up and down:
#
# {
# key: ctrl-k
# execution: ":line_up"
# }
# {
# key: ctrl-j
# execution: ":line_down"
# }
# {
# key: ctrl-u
# execution: ":page_up"
# }
# {
# key: ctrl-d
# execution: ":page_down"
# }
# If you develop using git, you might like to often switch
# to the git status filter:
# {
# key: ctrl-g
# execution: ":toggle_git_status"
# }
# You can reproduce the bindings of Norton Commander
# on copying or moving to the other panel:
# {
# key: F5
# external: "cp -r {file} {other-panel-directory}"
# leave_broot: false
# }
# {
# key: F6
# external: "mv {file} {other-panel-directory}"
# leave_broot: false
# }
]

View file

@ -0,0 +1,83 @@
###############################################################
# A skin for a terminal with a white background
#
# To create your own skin, copy this file, change the entries
# and import your skin file from the main conf file (look
# for "imports")
#
# Doc at https://dystroy.org/broot/skins/
###############################################################
syntax_theme: base16-ocean.light
skin: {
default: gray(1) None
tree: gray(7) None / gray(18) None
file: gray(3) None / gray(8) None
directory: ansi(25) None Bold / ansi(25) None
exe: ansi(130) None
link: Magenta None
pruning: gray(12) None Italic
perm__: gray(5) None
perm_r: ansi(94) None
perm_w: ansi(132) None
perm_x: ansi(65) None
owner: ansi(138) None
group: ansi(131) None
dates: ansi(66) None
sparse: ansi(214) None
git_branch: ansi(229) None
git_insertions: ansi(28) None
git_deletions: ansi(160) None
git_status_current: gray(5) None
git_status_modified: ansi(28) None
git_status_new: ansi(94) None Bold
git_status_ignored: gray(17) None
git_status_conflicted: ansi(88) None
git_status_other: ansi(88) None
selected_line: None gray(19) / None gray(21)
char_match: ansi(22) None
file_error: Red None
flag_label: gray(9) None
flag_value: ansi(166) None Bold
input: gray(1) None / gray(4) gray(20)
status_error: gray(22) ansi(124)
status_normal: gray(2) gray(20)
status_job: ansi(220) gray(5)
status_italic: ansi(166) gray(20)
status_bold: ansi(166) gray(20)
status_code: ansi(17) gray(20)
status_ellipsis: gray(19) gray(15)
purpose_normal: gray(20) gray(2)
purpose_italic: ansi(178) gray(2)
purpose_bold: ansi(178) gray(2) Bold
purpose_ellipsis: gray(20) gray(2)
scrollbar_track: gray(20) none
scrollbar_thumb: ansi(238) none
help_paragraph: gray(2) none
help_bold: ansi(202) none bold
help_italic: ansi(202) none italic
help_code: gray(5) gray(22)
help_headers: ansi(202) none
help_table_border: ansi(239) None
preview_title: gray(3) None / gray(5) None
preview: gray(5) gray(23) / gray(7) gray(23)
preview_line_number: gray(6) gray(20)
preview_match: None ansi(29) Underlined
hex_null: gray(15) None
hex_ascii_graphic: gray(2) None
hex_ascii_whitespace: ansi(143) None
hex_ascii_other: ansi(215) None
hex_non_ascii: ansi(167) None
staging_area_title: gray(8) None / gray(13) None
mode_command_mark: gray(15) ansi(204) Bold
good_to_bad_0: ansi(28)
good_to_bad_1: ansi(29)
good_to_bad_2: ansi(29)
good_to_bad_3: ansi(29)
good_to_bad_4: ansi(29)
good_to_bad_5: ansi(100)
good_to_bad_6: ansi(136)
good_to_bad_7: ansi(172)
good_to_bad_8: ansi(166)
good_to_bad_9: ansi(196)
}

226
config/cava/config Normal file
View file

@ -0,0 +1,226 @@
## Configuration file for CAVA.
# Remove the ; to change parameters.
[general]
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
; mode = normal
# Accepts only non-negative values.
; framerate = 120
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
# new as of 0.6.0 autosens of low values (dynamic range)
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0
; autosens = 1
; overshoot = 20
# Manual sensitivity in %. If autosens is enabled, this will only be the initial value.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100
# The number of bars (0-512). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
; bars = 0
; bar_width = 2
; bar_spacing = 1
# bar_height is only used for output in "noritake" format
; bar_height = 32
# For SDL width and space between bars is in pixels, defaults are:
; bar_width = 20
; bar_spacing = 5
# sdl_glsl have these default values, they are only used to calulate max number of bars.
; bar_width = 1
; bar_spacing = 0
# Lower and higher cutoff frequencies for lowest and highest bars
# the bandwidth of the visualizer.
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
# Cava will automatically increase the higher cutoff if a too low band is specified.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000
# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
; sleep_timer = 0
[input]
# Audio capturing method. Possible methods are: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem'
# Defaults to 'pulse', 'pipewire', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
# On Mac it defaults to 'portaudio' or 'fifo'
# On windows this is automatic and no input settings are needed.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
#
# For piepwire 'source' will be the object name or object.serial of the device to capture from.
# Both input and output devices are supported.
#
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
; method = pulse
; source = auto
; method = pipewire
; source = auto
; method = alsa
; source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo
; sample_rate = 44100
; sample_bits = 16
; method = shmem
; source = /squeezelite-AA:BB:CC:DD:EE:FF
; method = portaudio
; source = auto
[output]
# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl'
# or 'sdl_glsl'.
# 'noncurses' uses a custom framebuffer technique and prints only changes
# from frame to frame in the terminal. 'ncurses' is default if supported.
#
# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data
# stream of the bar heights that can be used to send to other applications.
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
#
# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display
# in graphic mode. It only support the 3000 series graphical VFDs for now.
#
# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or
# use one of the predefined ones.
; method = ncurses
# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'.
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
# which can make ncurses not look right.
; orientation = bottom
# Visual channels. Can be 'stereo' or 'mono'.
# 'stereo' mirrors both channels with low frequencies in center.
# 'mono' outputs left to right lowest to highest frequencies.
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
# set 'reverse' to 1 to display frequencies the other way around.
; channels = stereo
; mono_option = average
; reverse = 0
# Raw output target. A fifo will be created if target does not exist.
; raw_target = /dev/stdout
# Raw data format. Can be 'binary' or 'ascii'.
; data_format = binary
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
; bar_delimiter = 59
; frame_delimiter = 10
# sdl window size and position. -1,-1 is centered.
; sdl_width = 1000
; sdl_height = 500
; sdl_x = -1
; sdl_y= -1
# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none'
# 'frequency' displays the lower cut off frequency of the bar above.
# Only supported on ncurses and noncurses output.
; xaxis = none
# enable alacritty synchronized updates. 1 = on, 0 = off
# removes flickering in alacritty terminal emulator.
# defaults to off since the behaviour in other terminal emulators is unknown
; alacritty_sync = 0
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
; vertex_shader = pass_through.vert
; fragment_shader = bar_spectrum.frag
; for glsl output mode, keep rendering even if no audio
; continuous_rendering = 0
[color]
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
# default is to keep current terminal color
; background = default
; foreground = default
# SDL and sdl_glsl only support hex code colors, these are the default:
; background = '#111111'
; foreground = '#33ffff'
# Gradient mode, only hex defined colors are supported,
# background must also be defined in hex or remain commented out. 1 = on, 0 = off.
# You can define as many as 8 different colors. They range from bottom to top of screen
gradient = 1
gradient_count = 3
gradient_color_1 = '#3F4193'
gradient_color_2 = '#5373CD'
gradient_color_3 = '#6994D7'
[smoothing]
# Percentage value for integral smoothing. Takes values from 0 - 100.
# Higher values means smoother, but less precise. 0 to disable.
# DEPRECATED as of 0.8.0, use noise_reduction instead
; integral = 77
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
; monstercat = 0
; waves = 0
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
# DEPRECATED as of 0.8.0, use noise_reduction instead
; gravity = 100
# In bar height, bars that would have been lower that this will not be drawn.
# DEPRECATED as of 0.8.0
; ignore = 0
# Noise reduction, int 0 - 100. default 77
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
# 100 will be very slow and smooth, 0 will be fast but noisy.
; noise_reduction = 77
[eq]
# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more than one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
; 1 = 1 # bass
; 2 = 1
; 3 = 1 # midtone
; 4 = 1
; 5 = 1 # treble

View file

@ -0,0 +1,79 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform int bar_width; // bar width (configurable), not used here
uniform int bar_spacing; // space bewteen bars (configurable)
uniform vec3 u_resolution; // window resolution
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
uniform vec3 bg_color; // background color
uniform vec3 fg_color; // foreground color
uniform int gradient_count;
uniform vec3 gradient_colors[8]; // gradient colors
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
{
//create color based on fraction of this color and next color
float yr = (y - y_min) / (y_max - y_min);
return col_1 * (1.0 - yr) + col_2 * yr;
}
void main()
{
// find which bar to use based on where we are on the x axis
float x = u_resolution.x * fragCoord.x;
int bar = int(bars_count * fragCoord.x);
//calculate a bar size
float bar_size = u_resolution.x / bars_count;
//the y coordinate and bar values are the same
float y = bars[bar];
// make sure there is a thin line at bottom
if (y * u_resolution.y < 1.0)
{
y = 1.0 / u_resolution.y;
}
//draw the bar up to current height
if (y > fragCoord.y)
{
//make some space between bars basen on settings
if (x > (bar + 1) * (bar_size) - bar_spacing)
{
fragColor = vec4(bg_color,1.0);
}
else
{
if (gradient_count == 0)
{
fragColor = vec4(fg_color,1.0);
}
else
{
//find which color in the configured gradient we are at
int color = int((gradient_count - 1) * fragCoord.y);
//find where on y this and next color is supposed to be
float y_min = color / (gradient_count - 1.0);
float y_max = (color + 1.0) / (gradient_count - 1.0);
//make color
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
}
}
}
else
{
fragColor = vec4(bg_color,1.0);
}
}

View file

@ -0,0 +1,34 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
float y = (bars[bar]) * bar_y;
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
bar_r = bar_r * bar_r * 2;
// set color
fragColor.r = fg_color.x * y * bar_r;
fragColor.g = fg_color.y * y * bar_r;
fragColor.b = fg_color.z * y * bar_r;
}

View file

@ -0,0 +1,14 @@
#version 330
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
// Output data ; will be interpolated for each fragment.
out vec2 fragCoord;
void main()
{
gl_Position = vec4(vertexPosition_modelspace,1);
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
}

1
config/dunst/dunstrc Symbolic link
View file

@ -0,0 +1 @@
/home/lucss21a/.cache/wal/dunstrc

8
config/eww/README Normal file
View file

@ -0,0 +1,8 @@
Please link your scss wal config here
use:
ln $HOME/.cache/wal/colors.scss $HOME/.config/eww/colors.scss
Also please install the scripts in ../scripts/eww to $PATH

26
config/eww/colors.scss Normal file
View file

@ -0,0 +1,26 @@
// SCSS Variables
// Generated by 'wal'
$wallpaper: "/home/lucss21a/Pictures/Wallpapers/Jaguar Aqua Blue.jpg";
// Special
$background: #112245;
$foreground: #a9c3d9;
$cursor: #a9c3d9;
// Colors
$color0: #112245;
$color1: #386CA8;
$color2: #4479B2;
$color3: #3E81B6;
$color4: #5089BB;
$color5: #648BBD;
$color6: #5C96C2;
$color7: #a9c3d9;
$color8: #768897;
$color9: #386CA8;
$color10: #4479B2;
$color11: #3E81B6;
$color12: #5089BB;
$color13: #648BBD;
$color14: #5C96C2;
$color15: #a9c3d9;

90
config/eww/eww.scss Normal file
View file

@ -0,0 +1,90 @@
/** Colors *******************************************/
@import 'colors.scss'
* {
font-family: "Hack Nerd Font";
}
.main {
background-color: $color0;
padding: 1em;
margin: 0.5em;
}
.date-box {
background-color: $color6;
color: $color0;
padding: 0.9em;
}
.spacer {
padding: 0.5rem;
background-color: $color0;
}
.time {
font-size: 3rem;
}
.date {
font-size: 1.2rem;
}
.title, .album, .artist {
color: $color0;
font-size: 1rem;
}
.title, .album, .artist {
color: $color0;
font-size: 1rem;
}
.music-box{
background-color: $color6;
padding: 0.9em;
}
.weather-box{
background-color: $color0;
}
.weather-icon {
background-color: $color6;
padding: 1em;
}
.weather-forecast {
color: $color0;
background-color: $color6;
padding: 1rem;
padding-right: 1em;
}
.weather-icon-text {
color: $color0;
font-size: 2em;
margin: 1rem;
margin-right: 0rem;
}
.ram-box, .cpu-box {
background-color: $color6;
padding: 1em;
}
.ram-radial, .cpu-radial {
color: $color0;
background-color: $color5;
}
.ram-radial-label {
font-size: 2em;
padding: 3.3rem;
margin-left: 0.25rem;
margin-right: 0.75rem;
}
.cpu-radial-label {
font-size: 2em;
padding: 3.3rem;
margin-right: 0.75rem;
}
.weather-location {
font-size: 1.25rem;
}
.weather-temp {
font-size: 2rem;
font-weight: bold;
}
.notification {
font-weight: bold;
color: $color0;
}

154
config/eww/eww.yuck Normal file
View file

@ -0,0 +1,154 @@
(defpoll time :interval "1s" "date '+%I:%M:%S'")
(defpoll date :interval "1s" "date '+%B %d, %Y'")
(defpoll time2 :interval "1s" "TZ=UTC date '+%I:%M %B %d (%Z)'")
(defpoll title :interval "1s" "eww-music")
(defpoll artist :interval "1s" "eww-artist")
(defpoll album :interval "1s" "eww-album")
(defpoll distro :interval "1s" "printf '󱅿 : ' && cat /etc/os-release | grep 'NAME=' | head -n 1 | sed -e 's/NAME=//g' -e 's/\"//g'")
(defpoll kernel :interval "1s" "printf ' : ' && uname -r")
(defpoll cpu :interval "1s" "printf ' : ' && lscpu | grep 'Model name:' | sed 's/Model name: //g' | head -c 25")
(defpoll gpu :interval "1s" "printf '󰍹 : ' && glxinfo -B | grep 'OpenGL renderer string' | sed 's/OpenGL renderer string: //g' | head -c 25")
(defpoll wm :interval "1s" "printf ' : ' && wmctrl -m | grep 'Name: ' | sed 's/Name: //g'")
(defpoll weather-icon :interval "1s" "curl -s wttr.in/?format='%c'")
(defpoll weather-location :interval "1s" "curl -s wttr.in/?format='%l'")
(defpoll weather-temp :interval "1s" "curl -s wttr.in/?format='%t'")
(defpoll weather-feeltemp :interval "1s" "printf 'Feels like ' && curl -s wttr.in/?format='%f'")
; (defvar weather-temp "+34°C")
; (defvar weather-location "Gapan, NE")
; (defvar weather-icon "☁")
(defvar notification "Notifications")
(defpoll notification-history :interval "1s" "printf 'In history: ' && dunstctl count history")
(defpoll notification-display :interval "1s" "printf 'Currently Displayed: ' && dunstctl count displayed")
(defpoll notification-summary :interval "1s" "printf 'Last notification:\\n' && dunstctl history | jq '.data[] | .[] | .summary | .data' | head -n 1 | sed 's/\"//g' | fold -sw 25")
(defpoll quoter-text :interval "10s" "quoter | fold -sw 30")
(defwidget datetime []
(box :class "date-box" :space-evenly "false" :orientation "v"
(label :class "time" :text time)
(label :class "date" :text date)
(label :class "date" :text time2)
)
)
(defwidget music[]
(box :class "music-box" :space-evenly "false" :orientation "v"
(label :class "title" :text title)
(label :class "artist" :text artist)
(label :class "album" :text album)
)
)
(defwidget fetch[]
(box :class "music-box" :space-evenly "false" :orientation "v"
(label :class "title" :text distro :xalign 0)
(label :class "artist" :text kernel :xalign 0)
(label :class "album" :text cpu :xalign 0)
(label :class "album" :text gpu :xalign 0)
(label :class "album" :text wm :xalign 0)
)
)
(defwidget quoter[]
(box :class "music-box" :space-evenly "false" :orientation "v"
(label :class "title" :text quoter-text :xalign 0)
)
)
(defwidget notifications[]
(box :class "music-box" :space-evenly "false" :orientation "v"
(label :class "notification" :text notification)
(label :class "artist" :text notification-history :xalign 0)
(label :class "album" :text notification-display :xalign 0)
(label :class "album" :text notification-summary :xalign 0)
)
)
(defwidget weather[]
(box :class "weather-box" :space-evenly "false" :orientation "h"
(box :class "weather-icon" :space-evenly "false" :orientation "v"
(label :class "weather-icon-text" :text weather-icon)
)
(box :class "spacer" :space-evenly "false" :orientation "v")
(box :class "weather-forecast" :space-evenly "false" :orientation "v"
(label :class "weather-location" :text weather-location :xalign 0)
(label :class "weather-temp" :text weather-temp :xalign 0)
(label :class "weather-location" :text weather-feeltemp :xalign 0)
)
)
)
(defwidget ram []
(box :class "ram-box" :space-evenly "false" :orientation "v"
(circular-progress :class "ram-radial"
:value "${EWW_RAM.used_mem_perc}"
:thickness 10
:clockwise "true"
:tooltip "Used RAM: ${EWW_RAM.used_mem_perc}%"
(label
:class "ram-radial-label"
:text ""
:valign "center"
:halign "center"))))
(defwidget cpu []
(box :class "cpu-box" :space-evenly "false" :orientation "v"
(circular-progress :class "cpu-radial"
:value "${EWW_CPU.avg}"
:thickness 10
:clockwise "true"
:tooltip "CPU Usage: ${EWW_CPU.avg}%"
(label
:class "cpu-radial-label"
:text ""
:valign "center"
:halign "center"))))
(defwidget spacer[]
(box :class "spacer" :space-evenly "false" :orientation "v")
)
(defwidget main []
(box :class "main" :space-evenly "false" :orientation "v"
(box :class "top-row" :space-evenly "false" :orientation "v"
(datetime)
(spacer)
(music)
(spacer)
)
(box :class "middle-row" :space-evenly "false" :orientation "h" :halign "center"
(ram)
(spacer)
(cpu)
)
(box :class "bottom-row" :space-evenly "false" :orientation "v" :halign "center"
(spacer)
(fetch)
(spacer)
(weather)
(spacer)
(notifications)
(spacer)
(quoter)
)
)
)
(defwindow main
:monitor 0
:geometry (geometry
:x "-20px"
:y "0%"
:width "15%"
:height "94%"
:anchor "center right")
:stacking "fg"
:reserve (struts :distance "40px" :side "top")
:windowtype "desktop"
:wm-ignore false
(main))

74
config/jgmenu/jgmenurc Normal file
View file

@ -0,0 +1,74 @@
# verbosity = 0
# stay_alive = 1
# persistent = 0
# hide_on_startup = 0
# csv_cmd = apps
# tint2_look = 0
# position_mode = fixed
# edge_snap_x = 30
# terminal_exec = x-terminal-emulator
# terminal_args = -e
# monitor = 0
# hover_delay = 100
# hide_back_items = 1
# columns = 1
# tabs = 120
# menu_margin_x = 0
# menu_margin_y = 0
# menu_width = 200
# menu_height_min = 0
# menu_height_max = 0
# menu_height_mode = static
# menu_padding_top = 5
# menu_padding_right = 5
# menu_padding_bottom = 5
# menu_padding_left = 5
# menu_radius = 1
# menu_border = 0
# menu_halign = left
# menu_valign = bottom
# menu_gradient_pos = none
# sub_spacing = 1
# sub_padding_top = auto
# sub_padding_right = auto
# sub_padding_bottom = auto
# sub_padding_left = auto
# sub_hover_action = 1
# item_margin_x = 3
# item_margin_y = 3
# item_height = 25
# item_padding_x = 4
# item_radius = 1
# item_border = 0
# item_halign = left
# sep_height = 5
# sep_halign = left
# sep_markup =
font = HackNerdFont 12
font_fallback = xtg
icon_size = 22
# icon_text_spacing = 10
# icon_norm_alpha = 100
# icon_sel_alpha = 100
icon_theme = breeze-dark
icon_theme_fallback = xtg
arrow_string = ▸
arrow_width = 15
color_menu_bg = #112245 100
# color_menu_bg_to = #000000 100
color_menu_border = #648BBD 100
color_norm_bg = #112245 100
color_norm_fg = #a9c3d9 100
color_sel_bg = #648BBD 100
color_sel_fg = #112245 100
color_sel_border = #648BBD 8
color_sep_fg = #386CA8 20
color_scroll_ind = #4479B2 100
color_title_fg = #a9c3d9 50
color_title_bg = #112245 0
color_title_border = #112245 0
# csv_name_format = %n (%g)
# csv_single_window = 0
# csv_no_dirs = 0
# csv_i18n =
# csv_no_duplicates = 0

73
config/ncmpcpp/config Normal file
View file

@ -0,0 +1,73 @@
ncmpcpp_directory = ~/.ncmpcpp
lyrics_directory = ~/.ncmpcpp/lyrics
mpd_host = localhost
mpd_port = 6600
mpd_connection_timeout = 5
mpd_music_dir = ~/Music
mpd_crossfade_time = 5
visualizer_fifo_path = /tmp/mpd.fifo
visualizer_output_name = mpd_fifo
visualizer_in_stereo = yes
visualizer_sync_interval = 30
visualizer_type = ellipse
visualizer_look = ▮●
visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
system_encoding = "UTF-8"
playlist_disable_highlight_delay = 5
message_delay_time = 5
song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f}
song_library_format = {%n - }{%t}|{%f}
alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
now_playing_prefix = $b
now_playing_suffix = $/b
song_window_title_format = {%a - }{%t}|{%f}
browser_sort_mode = name
browser_sort_format = {%a - }{%t}|{%f} {(%l)}
song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}
playlist_show_mpd_host = no
playlist_show_remaining_time = yes
playlist_shorten_total_times = no
playlist_separate_albums = no
playlist_display_mode = columns
browser_display_mode = classic
search_engine_display_mode = classic
playlist_editor_display_mode = classic
incremental_seeking = yes
seek_time = 1
volume_change_step = 2
autocenter_mode = yes
centered_cursor = yes
progressbar_look = =>
default_place_to_search_in = database
user_interface = alternative
media_library_primary_tag = genre
default_find_mode = wrapped
header_visibility = yes
statusbar_visibility = yes
titles_visibility = yes
header_text_scrolling = yes
cyclic_scrolling = yes
lines_scrolled = 2
follow_now_playing_lyrics = yes
fetch_lyrics_for_current_song_in_background = yes
store_lyrics_in_song_dir = yes
allow_for_physical_item_deletion = no
screen_switcher_mode = browser, media_library, visualizer
startup_screen = playlist
startup_slave_screen = "visualizer"
startup_slave_screen_focus = no
locked_screen_width_part = 50
jump_to_now_playing_song_at_start = yes
ask_before_clearing_playlists = yes
clock_display_seconds = no
display_volume_level = yes
display_bitrate = no
display_remaining_time = yes
ignore_leading_the = no
mouse_support = yes
enable_window_title = yes
external_editor = vim
use_console_editor = yes
colors_enabled = yes

0
config/ncmpcpp/error.log Normal file
View file

25
config/neofetch/ascii Normal file
View file

@ -0,0 +1,25 @@
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣎⣬⢴⣒⣐⡤⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡾⠀⡳⠟⠮⣻⣯⣟⣵⣾⣯⣥⣴⣆⣀⢤⢄⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣇⢃⡫⠩⡐⢖⡉⡬⠽⢛⣛⡿⠿⢿⣿⣿⣿⣶⣾⣯⣤⣶⣆⣠⡤⠄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡽⣸⡀⡠⠉⡍⠓⠲⠷⠶⣵⣄⣀⡉⠉⠐⠒⠏⠭⢽⣛⠟⠿⢿⣿⣿⣿⣿⣶⣷⣤⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⢧⡇⠁⠐⢠⢌⠛⡓⠵⠂⠀⠀⠈⠉⠉⠛⠒⠲⠦⠼⣄⣎⣏⣙⠒⢚⢋⡝⢿⡿⠇⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣸⠁⠀⠀⣀⢀⠀⠈⣁⠀⠀⠀⠀⠀⠀⢀⡺⢸⣍⡅⠀⢠⢨⠫⠽⣙⡖⢿⣾⡏⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡏⣷⣿⣶⣶⣶⣭⣩⣅⣿⣋⡋⠥⠐⠖⡀⠤⠄⢀⣀⠐⠛⠊⠉⠒⣁⢋⢹⣦⣯⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣶⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣷⣶⣦⣤⣭⣀⣒⡅⠍⠀⢀⡤⠻⠅⣆⣹⣯⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⠧⠴⣞⡹⠙⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣜⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⣩⣿⣿⣿⣿⣿⣿⣿⠀⣠⡰⣦⢿⡿⠅⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣸⣿⣿⣿⣿⡿⠋⠛⣿⣿⣿⣿⡿⠁⣠⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⣌⢧⠘⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣘⢏⣿⣿⣿⣿⣿⣿⣦⣾⣿⣿⣿⡏⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⢄⢻⡈⢿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⡼⠄⢿⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢰⣏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⢀⢃⠹⣤⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣼⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠻⠿⣦⣸⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢀⡽⣾⣿⣿⣿⣿⠋⠉⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠰⢸⢹⡘⣟⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣾⣧⣿⣿⣿⣿⣿⣷⣶⣾⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣠⠨⡟⢿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢠⣾⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⡄⢠⣰⣾⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣸⡏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⢹⣿⣿⣿⣿⣿⣿⣿⣿⠁⠈⠃⡈⢧⣿⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⣻⠙⣻⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣿⡟⠀⠻⠀⢿⣾⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⡏⣎⣁⠔⠳⡉⡥⣄⣀⣉⠍⠟⠛⡻⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⠇⠐⡆⠸⣦⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠠⠯⢽⣞⣉⣭⠶⢒⣯⡿⠏⣛⣻⣗⡆⡀⣷⠟⢢⣈⡋⠛⢛⡻⠿⠈⣣⡀⣆⣹⣿⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠛⠋⠹⠲⢒⡿⡥⢴⣞⣋⣤⠷⢋⣡⠴⢒⣻⡡⢜⠓⢀⢇⣲⡘⡿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠛⠉⠙⠖⠚⣿⡥⢴⣛⣫⣬⠞⢊⣟⢿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠋⠋⠽⠳⡾⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

864
config/neofetch/config.conf Normal file
View file

@ -0,0 +1,864 @@
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
# info title
# info underline
info "OS" distro
info "Host" model
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "Resolution" resolution
info "DE" de
info "WM" wm
# info "WM Theme" wm_theme
# info "Theme" theme
# info "Icons" icons
info "Terminal" term
# info "Terminal Font" term_font
info "CPU" cpu
info "GPU" gpu
info "Memory" memory
# info "GPU Driver" gpu_driver # Linux/macOS only
# info "CPU Usage" cpu_usage
info "Disk" disk
# info "Battery" battery
# info "Font" font
# info "Song" song
# [[ "$player" ]] && prin "Music Player" "$player"
# info "Local IP" local_ip
# info "Public IP" public_ip
# info "Users" users
# info "Locale" locale # This only works on glibc systems.
info cols
}
# Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="off"
# Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
# Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
# Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="on"
# Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="on"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="mib"
# Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
# Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
# CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="off"
# GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
# Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="off"
# Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="on"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
# IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
# Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
# Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
# Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
# Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="-"
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator=":"
# Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
# Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="$HOME/.config/neofetch/ascii"
# Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
# Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=3
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
# Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

17
config/newsboat/config Normal file
View file

@ -0,0 +1,17 @@
browser "firefox"
player "mpv"
download-path "~/Downloads/%n"
save-path "~/Downloads"
reload-threads 20
cleanup-on-quit yes
text-width 74
auto-reload yes
bind-key q home
bind-key j down
bind-key k up
bind-key Q quit
bind-key e end
macro y set browser "mpv %u" ; open-in-browser ; set browser "firefox %u"
macro , set browser "firefox %u"; open-in-browser

3
config/newsboat/urls Normal file
View file

@ -0,0 +1,3 @@
https://reddit.com/r/unixporn.rss
https://reddit.com/r/linux.rss
https://alexisgaming95.neocities.org/feed.xml

99
config/picom.conf Normal file
View file

@ -0,0 +1,99 @@
### Shadow }
shadow = true;
shadow-radius = 12;
shadow-opacity = 0.75;
shadow-offset-x = -12;
shadow-offset-y = -12;
shadow-color = "#000000";
shadow-exclude = [
"class_g = 'dwmsystray'",
"class_g = 'Tint2'",
];
### Shadow }
### Fading }
fading = true;
fade-in-step = 0.03;
fade-out-step = 0.03;
fade-delta = 3;
no-fading-openclose = false;
no-fading-destroyed-argb = true;
### Fading }
### Opacity }
inactive-opacity = 1;
frame-opacity = 1;
inactive-opacity-override = false;
active-opacity = 1;
inactive-dim = 0.0;
focus-exclude = [
"class_g ?= 'dmenu'",
];
### Opacity }
### Blurring }
blur: {
method = "dual_kawase";
strength = 2.75;
deviation = 2.0;
kernel = "11x11gaussian";
}
blur-background = false;
blur-background-frame = true;
blur-background-fixed = true;
blur-background-exclude = [
"class_g = 'dwmsystray'",
"window_type = 'dock'",
"class_g ~= 'slop'",
"class_i ~= 'slop'",
"name ~= 'slop'",
"window_type = 'desktop'",
"_GTK_FRAME_EXTENTS@:c",
];
### Blurring }
### General Settings }
backend = "glx";
daemon = false;
vsync = true;
dbus = false;
mark-wmwin-focused = true;
mark-ovredir-focused = true;
detect-client-opacity = true;
refresh-rate = 0;
unredir-if-possible = true;
unredir-if-possible-delay = 0
detect-transient = true;
detect-client-leader = true;
resize-damage = 1;
glx-no-stencil = true;
use-damage = true;
transparent-clipping = false;
log-level = "warn";
log-file = "~/.cache/picom.log";
show-all-xerrors = true;
wintypes: {
tooltip = { fade = true; shadow = true; focus = false; };
normal = { shadow = true; };
dock = { shadow = true; };
dnd = { shadow = true; };
popup_menu = { shadow = true; focus = false; opacity = 0.90; };
dropdown_menu = { shadow = true; focus = false; };
above = { shadow = true; };
splash = { shadow = true; };
utility = { focus = false; shadow = true; blur-background = true; };
notification = { shadow = true; };
desktop = { shadow = true; blur-background = true; };
menu = { focus = false; };
dialog = { shadow = true; };
};
### General Settings }

View file

@ -0,0 +1,9 @@
# screenshot-spmenu config file
RUNLAUNCHER="spmenu" # Run launcher to use
SHOW_CURSOR="true" # Show cursor or not (true/false)
DEFAULT_SCREENSHOT_DIRECTORY="/home/lucss21a/Screenshots" # Default screenshot path
PREFIX="screenshot-" # Screenshot prefix
FORMAT="+%T_%D" # Screenshot format
PREVIEW_IMAGE=true
IMAGE_SIZE="500"
CACHE_IMAGE="false"

154
config/spmenu/run/config Normal file
View file

@ -0,0 +1,154 @@
# spmenu_run default configuration file
#
# This is the configuration file for the run launcher spmenu comes with.
# It is not the configuration file for spmenu, see ~/.config/spmenu/spmenu.conf for that.
#
# spmenu_run also runs these functions if found in the config file:
#
# 'run_pre_func' before spawning spmenu.
# 'run_post_func' after spawning spmenu, selected item passed as an argument.
# 'run_pre_bookmark_list_func' while listing selected/marked items. The selected item is passed as an argument.
# 'run_post_bookmark_list_func' while listing selected/marked items. The selected item is passed as an argument.
# 'run_file_bookmark_list_func' while reading entries from the bookmark file. The current bookmark is passed as an argument.
# 'run_single_char_pre_bookmark_list_func' while listing selected/marked items. The first character of the spmenu output is passed as an argument.
# 'run_single_char_func' while checking the value of a single character. The first character of the spmenu output is passed as an argument.
# 'run_output_func' while checking the value of the spmenu output. spmenu output is passed as an argument.
# 'desktop_pre_func' before spawning spmenu.
# 'desktop_post_func' after spawning spmenu, selected item passed as an argument.
# 'desktop_pre_caching_func' before caching entries.
# 'desktop_post_caching_func' after caching entries.
# 'desktop_file_caching_func' while caching entries. The current file that is being parsed is passed as an argument.
# 'fm_pre_func' before spawning spmenu.
# 'fm_post_func' after spawning spmenu, selected item passed as an argument.
# 'fm_pre_list_func' right before listing out files.
# 'fm_post_list_func' right after listing out files.
# 'fm_line_func' for each line in ls output, the line is passed as an argument, including SGR colors.
# 'read_man' when reading a man page, selected item passed as an argument.
# 'print_array' when printing out .desktop entries
#
# You may create those functions below.
#
# For example, to implement a basic history file:
#
# run_post_func() {
# rm -f /tmp/spmenu_entryhist; printf "$1\n" >> /tmp/spmenu_entryhist
# }
#
# You can use anything POSIX compliant shells and Bash support, as well as programs available on the system.
# Miscellanious software options
TERMINAL="${TERMINAL:-st -e}" # Terminal commands are spawned in
BROWSER="${BROWSER:-xdg-open}" # Web browser, for URLs
TORRENT="${TORRENT:-qbittorrent}" # Torrent client, for magnet links
PDF_READER="${PDF_READER:-zathura}" # PDF reader, for file management
EDITOR="${EDITOR:-nvim}" # Editor, used to open documents
PLAYER="${PLAYER:-mpv}" # Player, used to play audio/video
GENERIC="${GENERIC:-$TERMINAL -e $EDITOR}" # Generic, used to open unknown files
WEB_GREP="http:|https:|www[.]" # Needs to be in grep -E syntax
MAGNET_GREP="magnet:?" # Needs to be in grep -E syntax
HISTORY="${XDG_CACHE_HOME:-$HOME/.cache/}/spmenu/spmenu_run.hist" # History file, spmenu (meaning your user) must have permission to read and write to it.
DISPLAY_BOOKMARKS="true" # Display bookmarks in regular list (true/false)
BOOKMARK_FILE="${BOOKMARK_FILE:-${XDG_CACHE_HOME:-$HOME/.cache/}/spmenu/spmenu_run.bookmarks}" # Bookmark file, spmenu_run must have permission to read and write to it.
BOOKMARK_PROMPT="Bookmarks" # Bookmark prompt (-p)
# Run launcher argument options
RUNLAUNCHER="${RUNLAUNCHER:-spmenu}" # Run launcher to use
RUNLAUNCHER_RUN_ARGS="" # Extra arguments passed to $RUNLAUNCHER when using the run launcher
RUNLAUNCHER_BM_ARGS="" # Extra arguments passed to $RUNLAUNCHER when using the bookmark menu
RUNLAUNCHER_DESKTOP_ARGS="" # Extra rguments passed to $RUNLAUNCHER when using the .desktop launcher
RUNLAUNCHER_FM_ARGS="" # Extra arguments passed to $RUNLAUNCHER when using the file manager
RUNLAUNCHER_HELP_ARGS="" # Extra arguments passed to $RUNLAUNCHER when using the help
DMENU_COMPAT="false" # Enable dmenu compatibility (true/false)
# Pretext
RUNLAUNCHER_RUN_PRETEXT="Type in keywords to search for a program.." # Text to display when no input text
RUNLAUNCHER_BM_PRETEXT="Type in keywords to search for a bookmark.." # Text to display when no input text
RUNLAUNCHER_DESKTOP_PRETEXT="Type in keywords to search for a program.." # Text to display when no input text
RUNLAUNCHER_FM_PRETEXT="Type in keywords to search for a file or directory.." # Text to display when no input text
RUNLAUNCHER_HELP_PRETEXT="" # Text to display when no input text
# Sorting
SORT_BY_NUMBER="false" # Sort by numbers
SORT_IN_REVERSE="false" # Sort in reverse
SORT_BY_RECENT="false" # Sort by recent
SORT_ARGS="" # Extra arguments passed to the sort command.
# Keywords
HIDDEN_KEYWORDS="spmenu" # Keywords that will be ignored, needs to be in grep -vE syntax.
KEYWORDS="" # Keywords that will be matched, needs to be in grep -E syntax.
# Miscellanious
STDOUT="false" # Print to stdout and exit (true/false)
DISPLAY_DUPLICATES="false" # Display duplicates or not
DEFAULT_FEATURE="" # spmenu_run default feature (run/fm/desktop/help)
HELP_COLOR="#FFFF00"
# .desktop entry options
DESKTOP_DIR="/usr/share/applications /usr/local/share/applications /home/lucss21a/.local/share/applications /var/lib/flatpak/exports/share/applications /home/lucss21a/.local/share/flatpak/exports/share/applications" # Directories for .desktop entries
ICON_DIR="/usr/share/icons /usr/local/share/icons /home/lucss21a/.local/share/icons /usr/share/pixmaps /usr/local/share/pixmaps /var/lib/flatpak/exports/share/icons" # Directories for icons defined in the entries
HIDDEN_ENTRY_KEYWORDS="$HIDDEN_KEYWORDS" # Keywords that will be ignored, needs to be in grep -vE syntax.
ENTRY_KEYWORDS="$KEYWORDS" # Keywords that will be matched, needs to be in grep -E syntax.
AUTOREFRESH="true" # Refresh (clear) cache if there are more entries available than cached. May cause cache to be cleared every time in some cases. (true/false)
MULTISELECT="true" # Allow handling multiple items, if set to false only the first line/selected item will be used.
IMAGE="true" # Display images (true/false)
DISPLAY_COMMENT="true" # Display comment (true/false)
DISPLAY_DESCRIPTION="false" # Display description (true/false)"
DESCRIPTION_COLOR="#999888" # Description text color
DESCRIPTION_SEPARATOR=" - " # Separator between title and description
COMMENT_COLOR="#999888" # Comment text color
COMMENT_SEPARATOR=" - " # Separator between title and comment
RESPECT_NODISPLAY="true" # Respect NoDisplay in .desktop entries. If set to true, entries with 'NoDisplay=true' will not be displayed (true/false)
RESPECT_ONLYSHOWIN="true" # Respect OnlyShowIn in .desktop entries. If set to true, entries wth 'OnlyShowIn' assigned will not be displayed (true/false)
PREFERRED_LANGUAGE="generic" # Preferred language for the title and description. "generic" means the default for that .desktop entry (true/false)
LOGFILE="/tmp/spmenu_run.log" # Log file
PRINT_LOGS_STDERR="true" # Print information (such as logs) to stderr (true/false)
TITLEFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_title" # File containing the different titles to display.
DESCFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_desc" # File containing the description to display
EXECFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_exec" # File containing the different executables to run.
ICONFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_icon" # File containing the paths to the icons to display.
FILEFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_file" # File containing the path to the .desktop entries.
TERMFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_term" # File containing the path to the terminal data
ONLYFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_only" # File containing the path to the OnlyShowIn data
DISPLAYFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_display" # File containing the path to the NoDisplay data
COMMENTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/spmenu/.desktop_comment" # File containing the comment to display
# File management
DEFAULT_DIRECTORY="$(pwd)" # Directory to start -fm if none is specified.
LS_ARGS="${LS_ARGS:- --color=always}" # Arguments passed to /bin/ls
USE_FULL_PATH="true" # Return full path (true/false)
# Function to read the man page in spmenu
read_man() {
man "$1" | \
col -b | \
${RUNLAUNCHER:-spmenu} --lines 40 --columns 1 -p "man $1"
}
# Function used to print out the .desktop entries
print_array() {
for i in "${!it_title[@]}"; do
[ "$RESPECT_ONLYSHOWIN" != "false" ] && [ "${it_only[i]}" != "false" ] && continue
[ "$RESPECT_NODISPLAY" != "false" ] && [ "${it_display[i]}" != "true" ] && continue
if [ -f "${it_icon[i]}" ] && [ -n "${it_title[i]}" ] && [ -n "${it_exec[i]}" ] && [ "$IMAGE" != "false" ]; then
printf "%s\t%s" "img://${it_icon[i]}" "${it_title[i]}"
elif [ -n "${it_title[i]}" ] && [ -n "${it_exec[i]}" ]; then
printf "%s" "${it_title[i]}"
else
continue
fi
if [ -n "${it_desc[i]}" ] && [ "$DISPLAY_DESCRIPTION" = "true" ]; then
[ "$DMENU_COMPAT" != "true" ] && COL='\033[0;31m'
printf -- "$DESCRIPTION_SEPARATOR%b%s" "${COL}" "${it_desc[i]}"
fi
if [ -n "${it_comment[i]}" ] && [ "$DISPLAY_COMMENT" = "true" ]; then
[ "$DMENU_COMPAT" != "true" ] && COL='\033[0;32m'
printf -- "$COMMENT_SEPARATOR%b%s" "${COL}" "${it_comment[i]}"
fi
printf "\n"
done
}

View file

@ -134,61 +134,62 @@ spmenu = {
} }
); );
/* Alpha */
/* Alpha */ /* Alpha */
alpha = ( { itemnormfg = 255; // Normal item foreground alpha (0-255) alpha = ( { itemnormfg = 255; // Normal item foreground alpha (0-255)
itemnormbg = 182; // Normal item background alpha (0-255) itemnormbg = 222; // Normal item background alpha (0-255)
itemnormfg2 = 255; // Normal next item foreground alpha (0-255) itemnormfg2 = 255; // Normal next item foreground alpha (0-255)
itemnormbg2 = 182; // Normal next item background alpha (0-255) itemnormbg2 = 222; // Normal next item background alpha (0-255)
itemselfg = 255; // Selected item foreground alpha (0-255) itemselfg = 255; // Selected item foreground alpha (0-255)
itemselbg = 182; // Selected item background alpha (0-255) itemselbg = 222; // Selected item background alpha (0-255)
itemmarkedfg = 255; // Marked item foreground alpha (0-255) itemmarkedfg = 255; // Marked item foreground alpha (0-255)
itemmarkedbg = 182; // Marked item background alpha (0-255) itemmarkedbg = 222; // Marked item background alpha (0-255)
itemnormprifg = 255; // Normal priority item foreground alpha (0-255) itemnormprifg = 255; // Normal priority item foreground alpha (0-255)
itemnormpribg = 182; // Normal priority item background alpha (0-255) itemnormpribg = 222; // Normal priority item background alpha (0-255)
itemselprifg = 255; // Selected priority item foreground alpha (0-255) itemselprifg = 255; // Selected priority item foreground alpha (0-255)
itemselpribg = 182; // Selected priority item background alpha (0-255) itemselpribg = 222; // Selected priority item background alpha (0-255)
inputfg = 255; // Input foreground alpha (0-255) inputfg = 255; // Input foreground alpha (0-255)
inputbg = 182; // Input background alpha (0-255) inputbg = 222; // Input background alpha (0-255)
pretextfg = 255; // Pretext foreground alpha (0-255) pretextfg = 255; // Pretext foreground alpha (0-255)
pretextbg = 182; // Pretext background alpha (0-255) pretextbg = 222; // Pretext background alpha (0-255)
menu = 182; // Menu alpha (0-255) menu = 222; // Menu alpha (0-255)
promptfg = 255; // Prompt foreground alpha (0-255) promptfg = 255; // Prompt foreground alpha (0-255)
promptbg = 182; // Prompt background alpha (0-255) promptbg = 222; // Prompt background alpha (0-255)
larrowfg = 255; // Left arrow foreground alpha (0-255) larrowfg = 255; // Left arrow foreground alpha (0-255)
larrowbg = 182; // Left arrow background alpha (0-255) larrowbg = 222; // Left arrow background alpha (0-255)
rarrowfg = 255; // Right arrow foreground alpha (0-255) rarrowfg = 255; // Right arrow foreground alpha (0-255)
rarrowbg = 182; // Right arrow background alpha (0-255) rarrowbg = 222; // Right arrow background alpha (0-255)
hlnormfg = 255; // Normal highlight foreground alpha (0-255) hlnormfg = 255; // Normal highlight foreground alpha (0-255)
hlnormbg = 182; // Normal highlight background alpha (0-255) hlnormbg = 222; // Normal highlight background alpha (0-255)
hlselfg = 255; // Selected highlight foreground alpha (0-255) hlselfg = 255; // Selected highlight foreground alpha (0-255)
hlselbg = 182; // Selected highlight background alpha (0-255) hlselbg = 222; // Selected highlight background alpha (0-255)
numfg = 255; // Match count foreground alpha (0-255) numfg = 255; // Match count foreground alpha (0-255)
numbg = 182; // Match count background alpha (0-255) numbg = 222; // Match count background alpha (0-255)
border = 182; // Border alpha (0-255) border = 255; // Border alpha (0-255)
caretfg = 255; // Caret (cursor) foreground alpha (0-255) caretfg = 255; // Caret (cursor) foreground alpha (0-255)
caretbg = 182; // Caret (cursor) background alpha (0-255) caretbg = 222; // Caret (cursor) background alpha (0-255)
modefg = 255; // Mode indicator foreground alpha (0-255) modefg = 255; // Mode indicator foreground alpha (0-255)
modebg = 182; // Mode indicator background alpha (0-255) modebg = 222; // Mode indicator background alpha (0-255)
capsfg = 255; // Caps Lock indicator foreground alpha (0-255) capsfg = 255; // Caps Lock indicator foreground alpha (0-255)
capsbg = 182; // Caps Lock indicator background alpha (0-255) capsbg = 222; // Caps Lock indicator background alpha (0-255)
} }
); );

View file

@ -0,0 +1,15 @@
4
12
6
14
2
10
11
3
5
1
13
9
7
15
0

3
config/vis/colors/pywal Normal file
View file

@ -0,0 +1,3 @@
#3F4193
#5373CD
#6994D7

30
config/vis/colors/rainbow Normal file
View file

@ -0,0 +1,30 @@
#1F80F3
#08ADD8
#06B3D4
#01D7AF
#01DBA9
#0DF47E
#26FE53
#2CFF4B
#4FF829
#58F522
#83DE0B
#8FD506
#ADBB01
#BEAA01
#D78C07
#E27C0D
#F65525
#F94C2B
#FE2A4D
#FE2456
#F20B81
#D901AC
#D501B2
#B007D6
#AA09DA
#7C21F4
#6D2DF9
#5541FE
#3E58FE
#2A70F9

91
config/vis/config Normal file
View file

@ -0,0 +1,91 @@
##Refresh rate of the visualizers. A really high refresh rate may cause screen tearing. Default is 20.
#visualizer.fps=20
##Sets the audio sources to use.
##Currently available ones are "mpd", "pulse", "shmem", and "alsa". Defaults to "pulse".
#audio.sources=pulse
##vis tries to find the correct pulseaudio sink, however this will not work on all systems.
##If pulse audio is not working with vis try switching the audio source. A list can be found by running the
##command pacmd list-sinks | grep -e 'name:' -e 'index'
#audio.pulse.source=0
##Defaults to "/tmp/mpd.fifo"
#mpd.fifo.path=/tmp/mpd.fifo
##If set to false the visualizers will use mono mode instead of stereo. Some visualizers will
##behave differently when mono is enabled. For example, spectrum show two sets of bars.
#audio.stereo.enabled=false
##Specifies how often the visualizer will change in seconds. 0 means do not rotate. Default is 0.
#visualizer.rotation.secs=10
##Configures the samples rate and the cutoff frequencies.
#audio.sampling.frequency=44100
#audio.low.cutoff.frequency=30
#audio.high.cutoff.frequency=22050
##Applies scaling factor to both lorenz and ellipse visualizers. This is useful when the system audio is set
#to a low volume.
#visualizer.scaling.multiplier=1.0
##Configures the visualizers and the order they are in. Available visualizers are spectrum,lorenz,ellipse.
##Defaults to spectrum,ellipse,lorenz
#visualizers=spectrum,ellipse,lorenz
##Configures what character the spectrum visualizer will use. Specifying a space (e.g " ") means the
##background will be colored instead of the character. Defaults to " ".
#visualizer.spectrum.character=#
##Spectrum bar width. Defaults to 2.
visualizer.spectrum.bar.width=1
##The amount of space between each bar in the spectrum visualizer. Defaults to 1. It's possible to set this to
##zero to have no space between bars
visualizer.spectrum.bar.spacing=0
##Available smoothing options are monstercat, sgs, none.
#visualizer.spectrum.smoothing.mode=sgs
##This configures the falloff effect on the spectrum visualizer. Available falloff options are fill,top,none.
##Defaults to "fill"
#visualizer.spectrum.falloff.mode=fill
##Configures how fast the falloff character falls. This is an exponential falloff so values usually look
##best 0.9+ and small changes in this value can have a large effect. Defaults to 0.95
#visualizer.spectrum.falloff.weight=0.95
##Margins in percent of total screen for spectrum visualizer. All margins default to 0
#visualizer.spectrum.top.margin=0.30
#visualizer.spectrum.bottom.margin=0.10
#visualizer.spectrum.right.margin=0.10
#visualizer.spectrum.left.margin=0.10
##Reverses the direction of the spectrum so that high freqs are first and low freqs last. Defaults to false.
#visualizer.spectrum.reversed=false
##This configures the sgs smoothing effect on the spectrum visualizer. More points spreads out the smoothing
##effect and increasing passes runs the smoother multiple times on reach run. Defaults are points=3 and passes=1
visualizer.sgs.smoothing.points=3
visualizer.sgs.smoothing.passes=1
##Configures what character the ellipse visualizer will use. Specifying a space (e.g " ") means the
##background will be colored instead of the character. Defaults to "█".
#visualizer.ellipse.character=#
##The radius of each color ring in the ellipse visualizer. Defaults to 2.
#visualizer.ellipse.radius=2
##Configures what character the lorenz visualizer will use. Specifying a space (e.g " ") means the
##background will be colored instead of the character. Defaults to "█".
#visualizer.lorenz.character=#
##Turns off overriding the user's terminal colors. This is true by default.
#colors.override.terminal=false
##Specifies the color scheme. The color scheme must be in ~/.config/vis/colors/ directory. The default scheme is "colors".
colors.scheme=pywal

View file

@ -0,0 +1,28 @@
{
"wallpaper": "/home/lucss21a/Pictures/Wallpapers/Adelle/Grids (Blue).png",
"alpha": "100",
"special": {
"background": "#00001D",
"foreground": "#e6e9f0",
"cursor": "#e6e9f0"
},
"colors": {
"color0": "#00001D",
"color1": "#0D38AA",
"color2": "#1244B6",
"color3": "#5171B9",
"color4": "#0105C9",
"color5": "#154BCF",
"color6": "#859CCE",
"color7": "#e6e9f0",
"color8": "#a1a3a8",
"color9": "#0D38AA",
"color10": "#1244B6",
"color11": "#5171B9",
"color12": "#0105C9",
"color13": "#154BCF",
"color14": "#859CCE",
"color15": "#e6e9f0"
}
}

View file

@ -0,0 +1,27 @@
{
"alpha": "100",
"special": {
"background": "#161616",
"foreground": "#a6c8ff",
"cursor": "#a6c8ff"
},
"colors": {
"color0": "#161616",
"color1": "#08bdba",
"color2": "#3ddbd9",
"color3": "#33b1ff",
"color4": "#1192e8",
"color5": "#0043ce",
"color6": "#4589ff",
"color7": "#a6c8ff",
"color8": "#878d96",
"color9": "#08bdba",
"color10": "#3ddbd9",
"color11": "#33b1ff",
"color12": "#1192e8",
"color13": "#0043ce",
"color14": "#4589ff",
"color15": "#a6c8ff"
}
}

View file

@ -0,0 +1,25 @@
{
"special": {
"background": "#001b3c",
"foreground": "#d5e3ff",
"cursor": "#d5e3ff"
},
"colors": {
"color0": "#001b3c",
"color1": "#003061",
"color2": "#00468a",
"color3": "#255ea7",
"color4": "#4378c1",
"color5": "#5f92dd",
"color6": "#7bacfa",
"color7": "#d5e3ff",
"color8": "#d9e3f8",
"color9": "#003061",
"color10": "#00468a",
"color11": "#255ea7",
"color12": "#4378c1",
"color13": "#5f92dd",
"color14": "#7bacfa",
"color15": "#d5e3ff"
}
}

View file

@ -0,0 +1,226 @@
## Configuration file for CAVA.
# Remove the ; to change parameters.
[general]
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
; mode = normal
# Accepts only non-negative values.
; framerate = 120
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
# new as of 0.6.0 autosens of low values (dynamic range)
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0
; autosens = 1
; overshoot = 20
# Manual sensitivity in %. If autosens is enabled, this will only be the initial value.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100
# The number of bars (0-512). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
; bars = 0
; bar_width = 2
; bar_spacing = 1
# bar_height is only used for output in "noritake" format
; bar_height = 32
# For SDL width and space between bars is in pixels, defaults are:
; bar_width = 20
; bar_spacing = 5
# sdl_glsl have these default values, they are only used to calulate max number of bars.
; bar_width = 1
; bar_spacing = 0
# Lower and higher cutoff frequencies for lowest and highest bars
# the bandwidth of the visualizer.
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
# Cava will automatically increase the higher cutoff if a too low band is specified.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000
# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
; sleep_timer = 0
[input]
# Audio capturing method. Possible methods are: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem'
# Defaults to 'pulse', 'pipewire', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
# On Mac it defaults to 'portaudio' or 'fifo'
# On windows this is automatic and no input settings are needed.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
#
# For piepwire 'source' will be the object name or object.serial of the device to capture from.
# Both input and output devices are supported.
#
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
; method = pulse
; source = auto
; method = pipewire
; source = auto
; method = alsa
; source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo
; sample_rate = 44100
; sample_bits = 16
; method = shmem
; source = /squeezelite-AA:BB:CC:DD:EE:FF
; method = portaudio
; source = auto
[output]
# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl'
# or 'sdl_glsl'.
# 'noncurses' uses a custom framebuffer technique and prints only changes
# from frame to frame in the terminal. 'ncurses' is default if supported.
#
# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data
# stream of the bar heights that can be used to send to other applications.
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
#
# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display
# in graphic mode. It only support the 3000 series graphical VFDs for now.
#
# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or
# use one of the predefined ones.
; method = ncurses
# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'.
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
# which can make ncurses not look right.
; orientation = bottom
# Visual channels. Can be 'stereo' or 'mono'.
# 'stereo' mirrors both channels with low frequencies in center.
# 'mono' outputs left to right lowest to highest frequencies.
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
# set 'reverse' to 1 to display frequencies the other way around.
; channels = stereo
; mono_option = average
; reverse = 0
# Raw output target. A fifo will be created if target does not exist.
; raw_target = /dev/stdout
# Raw data format. Can be 'binary' or 'ascii'.
; data_format = binary
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
; bar_delimiter = 59
; frame_delimiter = 10
# sdl window size and position. -1,-1 is centered.
; sdl_width = 1000
; sdl_height = 500
; sdl_x = -1
; sdl_y= -1
# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none'
# 'frequency' displays the lower cut off frequency of the bar above.
# Only supported on ncurses and noncurses output.
; xaxis = none
# enable alacritty synchronized updates. 1 = on, 0 = off
# removes flickering in alacritty terminal emulator.
# defaults to off since the behaviour in other terminal emulators is unknown
; alacritty_sync = 0
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
; vertex_shader = pass_through.vert
; fragment_shader = bar_spectrum.frag
; for glsl output mode, keep rendering even if no audio
; continuous_rendering = 0
[color]
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
# default is to keep current terminal color
; background = default
; foreground = default
# SDL and sdl_glsl only support hex code colors, these are the default:
; background = '#111111'
; foreground = '#33ffff'
# Gradient mode, only hex defined colors are supported,
# background must also be defined in hex or remain commented out. 1 = on, 0 = off.
# You can define as many as 8 different colors. They range from bottom to top of screen
gradient = 1
gradient_count = 3
gradient_color_1 = '{color1}'
gradient_color_2 = '{color4}'
gradient_color_3 = '{color6}'
[smoothing]
# Percentage value for integral smoothing. Takes values from 0 - 100.
# Higher values means smoother, but less precise. 0 to disable.
# DEPRECATED as of 0.8.0, use noise_reduction instead
; integral = 77
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
; monstercat = 0
; waves = 0
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
# DEPRECATED as of 0.8.0, use noise_reduction instead
; gravity = 100
# In bar height, bars that would have been lower that this will not be drawn.
# DEPRECATED as of 0.8.0
; ignore = 0
# Noise reduction, int 0 - 100. default 77
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
# 100 will be very slow and smooth, 0 will be fast but noisy.
; noise_reduction = 77
[eq]
# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more than one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
; 1 = 1 # bass
; 2 = 1
; 3 = 1 # midtone
; 4 = 1
; 5 = 1 # treble

View file

@ -0,0 +1,89 @@
! X colors.
! Generated by 'wal'
*foreground: {foreground}
*background: {background}
*.foreground: {foreground}
*.background: {background}
Xmessage*font: -misc-hack-medium-r-normal-*-17-120-100-100-*-0-iso10646-1
Xmessage*foreground: {foreground}
Xmessage*background: {background}
emacs*foreground: {foreground}
emacs*background: {background}
URxvt*foreground: {foreground}
XTerm*foreground: {foreground}
UXTerm*foreground: {foreground}
URxvt*background: {background.alpha}
XTerm*background: {background}
UXTerm*background: {background}
URxvt*cursorColor: {cursor}
XTerm*cursorColor: {cursor}
UXTerm*cursorColor: {cursor}
URxvt*borderColor: {background.alpha}
background: {background}
foreground: {foreground}
! Colors 0-15.
*.color0: {color0}
*color0: {color0}
*.color1: {color1}
*color1: {color1}
*.color2: {color2}
*color2: {color2}
*.color3: {color3}
*color3: {color3}
*.color4: {color4}
*color4: {color4}
*.color5: {color5}
*color5: {color5}
*.color6: {color6}
*color6: {color6}
*.color7: {color7}
*color7: {color7}
*.color8: {color8}
*color8: {color8}
*.color9: {color9}
*color9: {color9}
*.color10: {color10}
*color10: {color10}
*.color11: {color11}
*color11: {color11}
*.color12: {color12}
*color12: {color12}
*.color13: {color13}
*color13: {color13}
*.color14: {color14}
*color14: {color14}
*.color15: {color15}
*color15: {color15}
! Black color that will not be affected by bold highlighting.
*.color66: {color0}
*color66: {color0}
! Xclock colors.
XClock*foreground: {foreground}
XClock*background: {background}
XClock*majorColor: rgba:{color15.xrgba}
XClock*minorColor: rgba:{color15.xrgba}
XClock*hourColor: rgba:{color15.xrgba}
XClock*minuteColor: rgba:{color15.xrgba}
XClock*secondColor: rgba:{color15.xrgba}
! Set depth to make transparency work.
URxvt*depth: 32
! XMenu entries
XMenu.activeBackground: {color6}
XMenu.activeForeground: {color0}
XMenu.borderColor: {color6}
XMenu.faceName: Hack Nerd Font
XMenu.faceSize: 12
! dmenu stuff
dmenu.selbackground: {color4}
dmenu.selforeground: {color0}
dmenu.outbackground: {color2}
dmenu.outforeground: {color0}
dmenu.midbackground: {color2}
dmenu.midforeground: {color0}
dmenu.bordercolor: {color5}

View file

@ -0,0 +1,465 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = none
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The maximum height of a single notification, excluding the frame.
height = 600
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = 10x50
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 20
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 5
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Corner radius for the icon image.
icon_corner_radius = 0
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 10
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "{color1}"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = "Hack Nerd Font 10"
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%a</b>\n<i>%s</i>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
icon_theme = "breeze-dark, Adwaita"
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons (only neccesary when not using recursive icon lookup)
icon_path = /usr/share/icons/breeze-dark/16/status/:/usr/share/icons/breeze-dark/16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
# Adjust this according to your monitor resolution.
# i.e 1920-600=1320, 1280-600=680 for the -x arg. I'm looking for a way to make
# it work with jgmenu.
dmenu = /usr/local/bin/spmenu -p dunst: -x 1320 -z 600 -nt -ml 10 -g 1
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = do_action, close_current
mouse_middle_click = context, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "{color0}"
foreground = "{color8}"
highlight = "{color5}"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
background = "{color0}"
foreground = "{color15}"
highlight = "{color5}"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
background = "{color13}"
foreground = "{color0}"
highlight = "{color5}"
# frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View file

@ -0,0 +1,74 @@
# verbosity = 0
# stay_alive = 1
# persistent = 0
# hide_on_startup = 0
# csv_cmd = apps
# tint2_look = 0
# position_mode = fixed
# edge_snap_x = 30
# terminal_exec = x-terminal-emulator
# terminal_args = -e
# monitor = 0
# hover_delay = 100
# hide_back_items = 1
# columns = 1
# tabs = 120
# menu_margin_x = 0
# menu_margin_y = 0
# menu_width = 200
# menu_height_min = 0
# menu_height_max = 0
# menu_height_mode = static
# menu_padding_top = 5
# menu_padding_right = 5
# menu_padding_bottom = 5
# menu_padding_left = 5
# menu_radius = 1
# menu_border = 0
# menu_halign = left
# menu_valign = bottom
# menu_gradient_pos = none
# sub_spacing = 1
# sub_padding_top = auto
# sub_padding_right = auto
# sub_padding_bottom = auto
# sub_padding_left = auto
# sub_hover_action = 1
# item_margin_x = 3
# item_margin_y = 3
# item_height = 25
# item_padding_x = 4
# item_radius = 1
# item_border = 0
# item_halign = left
# sep_height = 5
# sep_halign = left
# sep_markup =
font = HackNerdFont 12
font_fallback = xtg
icon_size = 22
# icon_text_spacing = 10
# icon_norm_alpha = 100
# icon_sel_alpha = 100
icon_theme = breeze-dark
icon_theme_fallback = xtg
arrow_string = ▸
arrow_width = 15
color_menu_bg = {color0} 100
# color_menu_bg_to = #000000 100
color_menu_border = {color5} 100
color_norm_bg = {color0} 100
color_norm_fg = {color15} 100
color_sel_bg = {color5} 100
color_sel_fg = {color0} 100
color_sel_border = {color5} 8
color_sep_fg = {color1} 20
color_scroll_ind = {color2} 100
color_title_fg = {color15} 50
color_title_bg = {color0} 0
color_title_border = {color0} 0
# csv_name_format = %n (%g)
# csv_single_window = 0
# csv_no_dirs = 0
# csv_i18n =
# csv_no_duplicates = 0

View file

@ -0,0 +1,5 @@
#!/bin/sh
# Reloads slim (needs sudo to ask the passswoes)
sudo cp .cache/wal/slim.theme /usr/share/slim/themes/suckless
sudo cp {wallpaper} /usr/share/slim/themes/suckless/background.png

View file

@ -0,0 +1,52 @@
# Green glass theme for SLiM
# by Rob Pearce <slim@flitspace.org.uk>
# Messages (e.g. shutdown)
msg_color {color15}
msg_font Hack Nerd Font:size=18:bold:dpi=75
msg_x 50%
msg_y 40%
msg_shadow_color {color0}
msg_shadow_xoffset 2
msg_shadow_yoffset 2
# valid values: stretch, tile
background_style stretch
background_color {color0}
# Input controls
input_panel_x 50%
input_panel_y 45%
input_name_x 344
input_name_y 166
input_pass_x 344
input_pass_y 203
input_font Hack Nerd Font:size=12:dpi=75
input_color {color0}
# Username / password request
username_font Hack Nerd Font:size=18:dpi=75
username_color {color15}
username_x 230
username_y 166
password_x 230
password_y 203
username_shadow_color {color0}
username_shadow_xoffset 2
username_shadow_yoffset 2
username_msg Username:
password_msg Password:
# Welcome message
welcome_font Hack Nerd Font:size=28:bold:dpi=75
welcome_color {color15}
welcome_x 50%
welcome_y 30%
welcome_msg Welcome to %host!
welcome_shadow_xoffset 1
welcome_shadow_yoffset 1
welcome_shadow_color {color0}
passwd_feedback_x 50%
passwd_feedback_y 80%

3
config/wal/templates/vis Normal file
View file

@ -0,0 +1,3 @@
{color1}
{color4}
{color6}

View file

@ -0,0 +1,28 @@
{
"wallpaper": "/home/lucss21a/Pictures/Wallpapers/Adelle/Grids (Blue).png",
"alpha": "100",
"special": {
"background": "#00001D",
"foreground": "#e6e9f0",
"cursor": "#e6e9f0"
},
"colors": {
"color0": "#00001D",
"color1": "#0D38AA",
"color2": "#1244B6",
"color3": "#5171B9",
"color4": "#0105C9",
"color5": "#154BCF",
"color6": "#859CCE",
"color7": "#e6e9f0",
"color8": "#a1a3a8",
"color9": "#0D38AA",
"color10": "#1244B6",
"color11": "#5171B9",
"color12": "#0105C9",
"color13": "#154BCF",
"color14": "#859CCE",
"color15": "#e6e9f0"
}
}

View file

@ -0,0 +1 @@
{"special":{"background":"#090300","foreground":"#a5a2a2","cursor":"#db2d20"},"colors":{"color0":"#090300","color1":"#db2d20","color2":"#01a252","color3":"#fded02","color4":"#01a0e4","color5":"#a16a94","color6":"#b5e4f4","color7":"#a5a2a2","color8":"#5c5855","color9":"#db2d20","color10":"#01a252","color11":"#fded02","color12":"#01a0e4","color13":"#a16a94","color14":"#b5e4f4","color15":"#f7f7f7"}}

View file

@ -0,0 +1 @@
{"special":{"background":"#1d1f21","foreground":"#c5c8c6","cursor":"#c5c8c6"},"colors":{"color0":"#1d1f21","color1":"#CC342B","color2":"#198844","color3":"#FBA922","color4":"#3971ED","color5":"#A36AC7","color6":"#3971ED","color7":"#c5c8c6","color8":"#969896","color9":"#CC342B","color10":"#198844","color11":"#FBA922","color12":"#3971ED","color13":"#A36AC7","color14":"#3971ED","color15":"#ffffff"}}

View file

@ -0,0 +1,27 @@
{
"alpha": "100",
"special": {
"background": "#161616",
"foreground": "#a6c8ff",
"cursor": "#a6c8ff"
},
"colors": {
"color0": "#161616",
"color1": "#08bdba",
"color2": "#3ddbd9",
"color3": "#33b1ff",
"color4": "#1192e8",
"color5": "#0043ce",
"color6": "#4589ff",
"color7": "#a6c8ff",
"color8": "#878d96",
"color9": "#08bdba",
"color10": "#3ddbd9",
"color11": "#33b1ff",
"color12": "#1192e8",
"color13": "#0043ce",
"color14": "#4589ff",
"color15": "#a6c8ff"
}
}

View file

@ -0,0 +1,25 @@
{
"special": {
"background": "#001b3c",
"foreground": "#d5e3ff",
"cursor": "#d5e3ff"
},
"colors": {
"color0": "#001b3c",
"color1": "#003061",
"color2": "#00468a",
"color3": "#255ea7",
"color4": "#4378c1",
"color5": "#5f92dd",
"color6": "#7bacfa",
"color7": "#d5e3ff",
"color8": "#d9e3f8",
"color9": "#003061",
"color10": "#00468a",
"color11": "#255ea7",
"color12": "#4378c1",
"color13": "#5f92dd",
"color14": "#7bacfa",
"color15": "#d5e3ff"
}
}

View file

@ -0,0 +1,226 @@
## Configuration file for CAVA.
# Remove the ; to change parameters.
[general]
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
; mode = normal
# Accepts only non-negative values.
; framerate = 120
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
# new as of 0.6.0 autosens of low values (dynamic range)
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0
; autosens = 1
; overshoot = 20
# Manual sensitivity in %. If autosens is enabled, this will only be the initial value.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100
# The number of bars (0-512). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
; bars = 0
; bar_width = 2
; bar_spacing = 1
# bar_height is only used for output in "noritake" format
; bar_height = 32
# For SDL width and space between bars is in pixels, defaults are:
; bar_width = 20
; bar_spacing = 5
# sdl_glsl have these default values, they are only used to calulate max number of bars.
; bar_width = 1
; bar_spacing = 0
# Lower and higher cutoff frequencies for lowest and highest bars
# the bandwidth of the visualizer.
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
# Cava will automatically increase the higher cutoff if a too low band is specified.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000
# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
; sleep_timer = 0
[input]
# Audio capturing method. Possible methods are: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem'
# Defaults to 'pulse', 'pipewire', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
# On Mac it defaults to 'portaudio' or 'fifo'
# On windows this is automatic and no input settings are needed.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
#
# For piepwire 'source' will be the object name or object.serial of the device to capture from.
# Both input and output devices are supported.
#
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
; method = pulse
; source = auto
; method = pipewire
; source = auto
; method = alsa
; source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo
; sample_rate = 44100
; sample_bits = 16
; method = shmem
; source = /squeezelite-AA:BB:CC:DD:EE:FF
; method = portaudio
; source = auto
[output]
# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl'
# or 'sdl_glsl'.
# 'noncurses' uses a custom framebuffer technique and prints only changes
# from frame to frame in the terminal. 'ncurses' is default if supported.
#
# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data
# stream of the bar heights that can be used to send to other applications.
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
#
# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display
# in graphic mode. It only support the 3000 series graphical VFDs for now.
#
# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or
# use one of the predefined ones.
; method = ncurses
# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'.
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
# which can make ncurses not look right.
; orientation = bottom
# Visual channels. Can be 'stereo' or 'mono'.
# 'stereo' mirrors both channels with low frequencies in center.
# 'mono' outputs left to right lowest to highest frequencies.
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
# set 'reverse' to 1 to display frequencies the other way around.
; channels = stereo
; mono_option = average
; reverse = 0
# Raw output target. A fifo will be created if target does not exist.
; raw_target = /dev/stdout
# Raw data format. Can be 'binary' or 'ascii'.
; data_format = binary
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
; bar_delimiter = 59
; frame_delimiter = 10
# sdl window size and position. -1,-1 is centered.
; sdl_width = 1000
; sdl_height = 500
; sdl_x = -1
; sdl_y= -1
# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none'
# 'frequency' displays the lower cut off frequency of the bar above.
# Only supported on ncurses and noncurses output.
; xaxis = none
# enable alacritty synchronized updates. 1 = on, 0 = off
# removes flickering in alacritty terminal emulator.
# defaults to off since the behaviour in other terminal emulators is unknown
; alacritty_sync = 0
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
; vertex_shader = pass_through.vert
; fragment_shader = bar_spectrum.frag
; for glsl output mode, keep rendering even if no audio
; continuous_rendering = 0
[color]
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
# default is to keep current terminal color
; background = default
; foreground = default
# SDL and sdl_glsl only support hex code colors, these are the default:
; background = '#111111'
; foreground = '#33ffff'
# Gradient mode, only hex defined colors are supported,
# background must also be defined in hex or remain commented out. 1 = on, 0 = off.
# You can define as many as 8 different colors. They range from bottom to top of screen
gradient = 1
gradient_count = 3
gradient_color_1 = '{color1}'
gradient_color_2 = '{color4}'
gradient_color_3 = '{color6}'
[smoothing]
# Percentage value for integral smoothing. Takes values from 0 - 100.
# Higher values means smoother, but less precise. 0 to disable.
# DEPRECATED as of 0.8.0, use noise_reduction instead
; integral = 77
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
; monstercat = 0
; waves = 0
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
# DEPRECATED as of 0.8.0, use noise_reduction instead
; gravity = 100
# In bar height, bars that would have been lower that this will not be drawn.
# DEPRECATED as of 0.8.0
; ignore = 0
# Noise reduction, int 0 - 100. default 77
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
# 100 will be very slow and smooth, 0 will be fast but noisy.
; noise_reduction = 77
[eq]
# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more than one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
; 1 = 1 # bass
; 2 = 1
; 3 = 1 # midtone
; 4 = 1
; 5 = 1 # treble

View file

@ -0,0 +1,89 @@
! X colors.
! Generated by 'wal'
*foreground: {foreground}
*background: {background}
*.foreground: {foreground}
*.background: {background}
Xmessage*font: -misc-hack-medium-r-normal-*-17-120-100-100-*-0-iso10646-1
Xmessage*foreground: {foreground}
Xmessage*background: {background}
emacs*foreground: {foreground}
emacs*background: {background}
URxvt*foreground: {foreground}
XTerm*foreground: {foreground}
UXTerm*foreground: {foreground}
URxvt*background: {background.alpha}
XTerm*background: {background}
UXTerm*background: {background}
URxvt*cursorColor: {cursor}
XTerm*cursorColor: {cursor}
UXTerm*cursorColor: {cursor}
URxvt*borderColor: {background.alpha}
background: {background}
foreground: {foreground}
! Colors 0-15.
*.color0: {color0}
*color0: {color0}
*.color1: {color1}
*color1: {color1}
*.color2: {color2}
*color2: {color2}
*.color3: {color3}
*color3: {color3}
*.color4: {color4}
*color4: {color4}
*.color5: {color5}
*color5: {color5}
*.color6: {color6}
*color6: {color6}
*.color7: {color7}
*color7: {color7}
*.color8: {color8}
*color8: {color8}
*.color9: {color9}
*color9: {color9}
*.color10: {color10}
*color10: {color10}
*.color11: {color11}
*color11: {color11}
*.color12: {color12}
*color12: {color12}
*.color13: {color13}
*color13: {color13}
*.color14: {color14}
*color14: {color14}
*.color15: {color15}
*color15: {color15}
! Black color that will not be affected by bold highlighting.
*.color66: {color0}
*color66: {color0}
! Xclock colors.
XClock*foreground: {foreground}
XClock*background: {background}
XClock*majorColor: rgba:{color15.xrgba}
XClock*minorColor: rgba:{color15.xrgba}
XClock*hourColor: rgba:{color15.xrgba}
XClock*minuteColor: rgba:{color15.xrgba}
XClock*secondColor: rgba:{color15.xrgba}
! Set depth to make transparency work.
URxvt*depth: 32
! XMenu entries
XMenu.activeBackground: {color6}
XMenu.activeForeground: {color0}
XMenu.borderColor: {color6}
XMenu.faceName: Hack Nerd Font
XMenu.faceSize: 12
! dmenu stuff
dmenu.selbackground: {color4}
dmenu.selforeground: {color0}
dmenu.outbackground: {color2}
dmenu.outforeground: {color0}
dmenu.midbackground: {color2}
dmenu.midforeground: {color0}
dmenu.bordercolor: {color5}

View file

@ -0,0 +1,465 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = none
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The maximum height of a single notification, excluding the frame.
height = 600
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = 10x50
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 20
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 5
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Corner radius for the icon image.
icon_corner_radius = 0
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 10
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "{color1}"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = "Hack Nerd Font 10"
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%a</b>\n<i>%s</i>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
icon_theme = "breeze-dark, Adwaita"
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons (only neccesary when not using recursive icon lookup)
icon_path = /usr/share/icons/breeze-dark/16/status/:/usr/share/icons/breeze-dark/16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
# Adjust this according to your monitor resolution.
# i.e 1920-600=1320, 1280-600=680 for the -x arg. I'm looking for a way to make
# it work with jgmenu.
dmenu = /usr/local/bin/spmenu -p dunst: -x 1320 -z 600 -nt -ml 10 -g 1
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = do_action, close_current
mouse_middle_click = context, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "{color0}"
foreground = "{color8}"
highlight = "{color5}"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
background = "{color0}"
foreground = "{color15}"
highlight = "{color5}"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
background = "{color13}"
foreground = "{color0}"
highlight = "{color5}"
# frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View file

@ -0,0 +1,74 @@
# verbosity = 0
# stay_alive = 1
# persistent = 0
# hide_on_startup = 0
# csv_cmd = apps
# tint2_look = 0
# position_mode = fixed
# edge_snap_x = 30
# terminal_exec = x-terminal-emulator
# terminal_args = -e
# monitor = 0
# hover_delay = 100
# hide_back_items = 1
# columns = 1
# tabs = 120
# menu_margin_x = 0
# menu_margin_y = 0
# menu_width = 200
# menu_height_min = 0
# menu_height_max = 0
# menu_height_mode = static
# menu_padding_top = 5
# menu_padding_right = 5
# menu_padding_bottom = 5
# menu_padding_left = 5
# menu_radius = 1
# menu_border = 0
# menu_halign = left
# menu_valign = bottom
# menu_gradient_pos = none
# sub_spacing = 1
# sub_padding_top = auto
# sub_padding_right = auto
# sub_padding_bottom = auto
# sub_padding_left = auto
# sub_hover_action = 1
# item_margin_x = 3
# item_margin_y = 3
# item_height = 25
# item_padding_x = 4
# item_radius = 1
# item_border = 0
# item_halign = left
# sep_height = 5
# sep_halign = left
# sep_markup =
font = HackNerdFont 12
font_fallback = xtg
icon_size = 22
# icon_text_spacing = 10
# icon_norm_alpha = 100
# icon_sel_alpha = 100
icon_theme = breeze-dark
icon_theme_fallback = xtg
arrow_string = ▸
arrow_width = 15
color_menu_bg = {color0} 100
# color_menu_bg_to = #000000 100
color_menu_border = {color5} 100
color_norm_bg = {color0} 100
color_norm_fg = {color15} 100
color_sel_bg = {color5} 100
color_sel_fg = {color0} 100
color_sel_border = {color5} 8
color_sep_fg = {color1} 20
color_scroll_ind = {color2} 100
color_title_fg = {color15} 50
color_title_bg = {color0} 0
color_title_border = {color0} 0
# csv_name_format = %n (%g)
# csv_single_window = 0
# csv_no_dirs = 0
# csv_i18n =
# csv_no_duplicates = 0

View file

@ -0,0 +1,13 @@
# wallpaper-spmenu 0.1
# This is the default config file for wallpaper-spmenu.
# You can use any valid shell syntax here.
# See https://spmenu.speedie.site wiki for more information.
PROTOCOL="1" # Default protocol to use (0: X11, 1: Wayland w/ wlroots)
WALLPAPER_DIR="/home/lucss21a/Wallpapers" # Default wallpaper directory, can be set on runtime
COLOR="always" # Color the entries (always/never)
DEFAULT_MODE="fill" # Default mode (stretch/fit/fill/center/tile)
ASK_MODE="false" # Ask how the wallpaper should be set (true/false)
DEFAULT_FEATURE="pw" # Default feature (sw/pw)
PREVIEW_IMAGE="true" # Enable image previews (true/false)

11
desktop/startdwm Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
systemctl --user restart clipmenud.service # restarts clipmenud, if installed
wal -R # could be changed
picom -b # launches compositor
/usr/local/bin/dwmblocks & # launches slstatus/dwmblocks
/usr/bin/dunst & # launches dunst daemon
nm-applet & # optional, launch network-manager applet
/usr/local/bin/eww daemon & # launch eww in start up, assumes eww is copied to $PATH
/usr/local/bin/eww open main & # make sure the config is copied
nemo-desktop & # launch nemo in desktop mode, to provide desktop icons, optional
exec /usr/local/bin/dwm # launch dwm

View file

@ -1,4 +1,5 @@
*.o *.o
config.h
patches.h
dmenu dmenu
stest stest
config.h

View file

@ -6,13 +6,7 @@ include config.mk
SRC = drw.c dmenu.c stest.c util.c SRC = drw.c dmenu.c stest.c util.c
OBJ = $(SRC:.c=.o) OBJ = $(SRC:.c=.o)
all: options dmenu stest all: dmenu stest
options:
@echo dmenu build options:
@echo "CFLAGS = $(CFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
@echo "CC = $(CC)"
.c.o: .c.o:
$(CC) -c $(CFLAGS) $< $(CC) -c $(CFLAGS) $<
@ -20,7 +14,10 @@ options:
config.h: config.h:
cp config.def.h $@ cp config.def.h $@
$(OBJ): arg.h config.h config.mk drw.h patches.h:
cp patches.def.h $@
$(OBJ): arg.h config.h config.mk drw.h patches.h
dmenu: dmenu.o drw.o util.o dmenu: dmenu.o drw.o util.o
$(CC) -o $@ dmenu.o drw.o util.o $(LDFLAGS) $(CC) -o $@ dmenu.o drw.o util.o $(LDFLAGS)
@ -61,4 +58,4 @@ uninstall:
$(DESTDIR)$(MANPREFIX)/man1/dmenu.1\ $(DESTDIR)$(MANPREFIX)/man1/dmenu.1\
$(DESTDIR)$(MANPREFIX)/man1/stest.1 $(DESTDIR)$(MANPREFIX)/man1/stest.1
.PHONY: all options clean dist install uninstall .PHONY: all clean dist install uninstall

265
dmenu-flexipatch/README.md Normal file
View file

@ -0,0 +1,265 @@
Similar to [dwm-flexipatch](https://github.com/bakkeby/dwm-flexipatch) this dmenu 5.3 (7be720c,
2024-03-19) project has a different take on patching. It uses preprocessor directives to decide
whether or not to include a patch during build time. Essentially this means that this build, for
better or worse, contains both the patched _and_ the original code. The aim being that you can
select which patches to include and the build will contain that code and nothing more.
For example to include the `alpha` patch then you would only need to flip this setting from 0
to 1 in [patches.h](https://github.com/bakkeby/dmenu-flexipatch/blob/master/patches.def.h):
```c
#define ALPHA_PATCH 1
```
Once you have found out what works for you and what doesn't then you should be in a better position
to choose patches should you want to start patching from scratch.
Alternatively if you have found the patches you want, but don't want the rest of the flexipatch
entanglement on your plate then you may want to have a look at
[flexipatch-finalizer](https://github.com/bakkeby/flexipatch-finalizer); a custom pre-processor
tool that removes all the unused flexipatch code leaving you with a build that contains the patches
you selected.
Refer to [https://tools.suckless.org/dmenu/](https://tools.suckless.org/dmenu/) for details on
dmenu, how to install it and how it works.
Browsing patches? There is a [map of patches](https://coggle.it/diagram/YjT2DD6jBM9dayf3) diagram which tries to organise patches into categories.
---
### Changelog:
2023-06-15 - Added the caret width patch
2022-09-05 - Removed the json patch due to maintenance and compatibility reasons, added the
separator patch
2022-09-04 - Added the fzfexpect patch
2022-06-21 - Adding barpadding patch and relative input width patch
2022-03-02 - Bump to 5.1
2021-05-23 - Adding support for `ctrl+v` to paste and adding emoji-highlight patch
2021-05-17 - Added the restrict return, no sort, gridnav and plain-prompt (listfullwidth) patches
2021-05-15 - Added the tsv and printindex patches
2020-08-08 - Added the json, symbols, managed, morecolor, multi-selection and preselect patches
2020-08-05 - Added the grid, highlight, highpriority, dynamic options and numbers patches
2020-06-13 - Added the pango patch
2020-06-10 - Added the case-insensitive patch
2020-05-29 - Added the alpha patch (derived from Baitinq's [build](https://github.com/Baitinq/dmenu))
and the color emoji patch
2020-04-05 - Added fuzzyhighlight patch
2020-02-09 - Added revised border patch (adding command line parameter for setting border width)
2019-12-29 - Added xresources patch
2019-10-16 - Introduced [flexipatch-finalizer](https://github.com/bakkeby/flexipatch-finalizer)
2019-09-18 - Added border, center, fuzzymatch, incremental, initialtext, instant, line-height,
mouse-support, navhistory, non-blocking-stdin, password, pipeout, printinputtext,
rejectnomatch, scroll, vertfull, wmtype and xyw patches
### Patches included:
- [alpha](https://github.com/bakkeby/patches/blob/master/dmenu/dmenu-alpha-5.0_20210725_523aa08.diff)
- adds transparency for the dmenu window
- [barpadding](https://github.com/bakkeby/patches/wiki/barpadding)
- adds padding for dmenu in similar fashion to the [barpadding](https://dwm.suckless.org/patches/barpadding/)
patch for dwm
- [border](http://tools.suckless.org/dmenu/patches/border/)
- adds a border around the dmenu window
- [caret-width](https://github.com/DarkSamus669/dmenu-patches/blob/main/dmenu-caretwidth-5.2.diff)
- makes the caret width configurable and overridable via a command line option
- [case-insensitive](http://tools.suckless.org/dmenu/patches/case-insensitive/)
- makes dmenu case-insensitive by default, replacing the case-insensitive `-i` option with a
case sensitive `-s` option
- [center](https://tools.suckless.org/dmenu/patches/center/)
- this patch centers dmenu in the middle of the screen
- color_emoji
- enables color emoji in dmenu by removing a workaround for a BadLength error in the Xft
library when color glyphs are used
- enabling this will crash dmenu on encountering such glyphs unless you also have an updated
Xft library that can handle them
- [dynamic_options](https://tools.suckless.org/dmenu/patches/dynamicoptions/)
- adds a flag (`-dy`) which makes dmenu run the command given to it whenever input is changed
with the current input as the last argument and update the option list according to the
output of that command
- [emoji-highlight](https://tools.suckless.org/dmenu/patches/emoji-highlight/)
- this patch will allow for emojis on the left side with a colored background when selected
- [fuzzyhighlight](https://tools.suckless.org/dmenu/patches/fuzzyhighlight/)
- intended to be combined with the fuzzymatch patch, this makes it so that fuzzy matches are
highlighted
- [fuzzymatch](https://tools.suckless.org/dmenu/patches/fuzzymatch/)
- adds support for fuzzy-matching to dmenu, allowing users to type non-consecutive portions
of the string to be matched
- [fzfexpect](https://github.com/DAFF0D11/dafmenu/blob/master/patches/dmenu-fzfexpect-5.1.diff)
- adds fzf expect functionality in dmenu
- [grid](https://tools.suckless.org/dmenu/patches/grid/)
- allows dmenu's entries to be rendered in a grid by adding a new `-g` flag to specify the
number of grid columns
- the `-g` and `-l` options can be used together to create a G columns * L lines grid
- [gridnav](https://tools.suckless.org/dmenu/patches/gridnav/)
- adds the ability to move left and right through a grid (when using the grid patch)
- [highlight](https://tools.suckless.org/dmenu/patches/highlight/)
- this patch highlights the individual characters of matched text for each dmenu list entry
- [highpriority](https://tools.suckless.org/dmenu/patches/highpriority/)
- this patch will automatically sort the search result so that high priority items are shown
first
- [incremental](https://tools.suckless.org/dmenu/patches/incremental/)
- this patch causes dmenu to print out the current text each time a key is pressed
- [initialtext](https://tools.suckless.org/dmenu/patches/initialtext/)
- adds an option to provide preselected text
- [instant](https://tools.suckless.org/dmenu/patches/instant/)
- adds a flag that will cause dmenu to select an item immediately if there is only one
matching option left
- [~json~](https://tools.suckless.org/dmenu/patches/json/)
- ~adds basic support for json files~
- [line-height](http://tools.suckless.org/dmenu/patches/line-height/)
- adds a `-h` option which sets the minimum height of a dmenu line
- this helps integrate dmenu with other UI elements that require a particular vertical size
- [managed](https://tools.suckless.org/dmenu/patches/managed/)
- adds a `-wm` flag which sets override_redirect to false; thus letting your window manager
manage the dmenu window
- this may be helpful in contexts where you don't want to exclusively bind dmenu or want to
treat dmenu more as a "window" rather than as an overlay
- [morecolor](https://tools.suckless.org/dmenu/patches/morecolor/)
- adds an additional color scheme for highlighting entries adjacent to the current selection
- [mouse-support](https://tools.suckless.org/dmenu/patches/mouse-support/)
- adds basic mouse support for dmenu
- [multi-selection](https://tools.suckless.org/dmenu/patches/multi-selection/)
- without this patch when you press `Ctrl+Enter` dmenu just outputs current item and it is
not possible to undo that
- with this patch dmenu will output all selected items only on exit
- it is also possible to deselect any selected item
- [navhistory](https://tools.suckless.org/dmenu/patches/navhistory/)
- provides dmenu the ability for history navigation similar to that of bash
- [no-sort](https://tools.suckless.org/dmenu/patches/no-sort/)
- adds the `-S` option to disable sorting menu items after matching
- useful, for example, when menu items are sorted by their frequency of use (using an
external cache) and the most frequently selected items should always appear first regardless
of how they were exact, prefix, or substring matches
- [non-blocking-stdin](https://tools.suckless.org/dmenu/patches/non_blocking_stdin/)
- this is a patch to have dmenu read stdin in a non blocking way, making it wait for input
both from stdin and from X
- this means that you can continue feeding dmenu while you type
- the patch is meant to be used along with the incremental patch in order to use stdout to
feed stdin
- [numbers](https://tools.suckless.org/dmenu/patches/numbers/)
- adds text which displays the number of matched and total items in the top right corner of
dmenu
- [pango](https://github.com/StillANixRookie/dmenu-pango/)
- adds simple markup for dmenu using pango markup
- [password](https://tools.suckless.org/dmenu/patches/password/)
- with this patch dmenu will not directly display the keyboard input, but instead replace it
with dots
- all data from stdin will be ignored
- [pipeout](https://tools.suckless.org/dmenu/patches/pipeout/)
- this patch allows the selected text to be piped back out with dmenu
- this can be useful if you want to display the output of a command on the screen
- [plain-prompt](https://tools.suckless.org/dmenu/patches/listfullwidth/)
- simple change that avoids colors for the prompt by making it use the same style as the
rest of the input field
- [prefix-completion](https://tools.suckless.org/dmenu/patches/prefix-completion/)
- changes the behaviour of matched items and the Tab key to allow tab completion
- [preselect](https://tools.suckless.org/dmenu/patches/preselect/)
- adds an option `-ps` to preselect an item by providing the index that should be pre-selected
- [printindex](https://tools.suckless.org/dmenu/patches/printindex/)
- allows dmenu to print out the 0-based index of matched text instead of the matched text
itself
- this can be useful in cases where you would like to select entries from one array of text
but index into another, or when you are selecting from an ordered list of non-unique items
- [printinputtext](https://tools.suckless.org/dmenu/patches/printinputtext/)
- this patch adds a flag `-t` which makes Return key ignore selection and print the input
text to stdout
- the flag basically swaps the functions of Return and Shift+Return hotkeys
- [rejectnomatch](https://tools.suckless.org/dmenu/patches/reject-no-match/)
- adds a new flag to dmenu with which text input will be rejected if it would result in no
matching item
- relative_input_width
- prior to commit [e1e1de7](https://git.suckless.org/dmenu/commit/e1e1de7b3b8399cba90ddca9613f837b2dbef7b9.html)
the input width was calculated based on the input options
- this feature was removed in favour of hardcoding the input width to always take up 1/3rd of
the available space
- this patch adds that feature back in with some bespoke performance optimisations at the cost
of accuracy and correctness
- [restrict-return](https://tools.suckless.org/dmenu/patches/restrict-return/)
- adds a `-1` option which disables Shift-Return and Ctrl-Return
- this guarantees that dmenu will only output one item, and that item was read from stdin
- [scroll](https://tools.suckless.org/dmenu/patches/scroll/)
- this patch adds support for text scrolling
- it doesn't append `...` for long input anymore as it can handle long text
- [separator](https://tools.suckless.org/dmenu/patches/separator/)
- adds `-d` and `-D` flags which separates the input into two halves; one half to be
displayed in dmenu and the other to be printed to stdout
- [symbols](https://tools.suckless.org/dmenu/patches/symbols/)
- allows the symbols, which are printed in dmenu to indicate that either the input is too
long or there are too many options to be shown in dmenu in one line, to be defined
- [tsv](https://tools.suckless.org/dmenu/patches/tsv/)
- makes dmenu split input lines at first tab character and only display first part, but it
will perform matching on and output full lines as usual
- can be useful if you want to separate data and representation
- [vertfull](https://tools.suckless.org/dmenu/patches/vertfull/)
- prevents dmenu from indenting items at the same level as the prompt length
- [wmtype](https://github.com/Baitinq/dmenu/blob/master/patches/dmenu-wm_type.diff)
- adds extended window manager hints such as \_NET_WM_WINDOW_TYPE and \_NET_WM_WINDOW_TYPE_DOCK
- [xresources](https://tools.suckless.org/dmenu/patches/xresources/)
- allows dmenu to read font and colors from Xresources
- note that with this patch the Xresources settings takes precedence over command line arguments
- [xyw](https://tools.suckless.org/dmenu/patches/xyw/)
- adds options for specifying dmenu window position and width

View file

@ -0,0 +1,153 @@
/* See LICENSE file for copyright and license details. */
/* Default settings; can be overriden by command line. */
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
#if ALPHA_PATCH
static int opacity = 1; /* -o option; if 0, then alpha is disabled */
#endif // ALPHA_PATCH
#if CARET_WIDTH_PATCH
static int caret_width = 2; /* -cw option; set default caret width */
#endif // CARET_WIDTH_PATCH
#if FUZZYMATCH_PATCH
static int fuzzy = 1; /* -F option; if 0, dmenu doesn't use fuzzy matching */
#endif // FUZZYMATCH_PATCH
#if INCREMENTAL_PATCH
static int incremental = 0; /* -r option; if 1, outputs text each time a key is pressed */
#endif // INCREMENTAL_PATCH
#if INSTANT_PATCH
static int instant = 0; /* -n option; if 1, selects matching item without the need to press enter */
#endif // INSTANT_PATCH
#if CENTER_PATCH
static int center = 1; /* -c option; if 0, dmenu won't be centered on the screen */
static int min_width = 500; /* minimum width when centered */
#endif // CENTER_PATCH
#if BARPADDING_PATCH
static const int vertpad = 10; /* vertical padding of bar */
static const int sidepad = 10; /* horizontal padding of bar */
#endif // BARPADDING_PATCH
#if RESTRICT_RETURN_PATCH
static int restrict_return = 0; /* -1 option; if 1, disables shift-return and ctrl-return */
#endif // RESTRICT_RETURN_PATCH
/* -fn option overrides fonts[0]; default X11 font or font set */
#if PANGO_PATCH
static char font[] = "Hack Nerd Font 12";
#else
#if XRESOURCES_PATCH
static char *fonts[] =
#else
static const char *fonts[] =
#endif // XRESOURCES_PATCH
{
"Hack Nerd Font:size=12"
};
#endif // PANGO_PATCH
#if MANAGED_PATCH
static char *prompt = NULL; /* -p option; prompt to the left of input field */
#else
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
#endif // MANAGED_PATCH
#if DYNAMIC_OPTIONS_PATCH
static const char *dynamic = NULL; /* -dy option; dynamic command to run on input change */
#endif // DYNAMIC_OPTIONS_PATCH
#if SYMBOLS_PATCH
static const char *symbol_1 = "<";
static const char *symbol_2 = ">";
#endif // SYMBOLS_PATCH
#if ALPHA_PATCH
static const unsigned int baralpha = 0xd0;
static const unsigned int borderalpha = OPAQUE;
static const unsigned int alphas[][3] = {
/* fg bg border */
[SchemeNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeSel] = { OPAQUE, baralpha, borderalpha },
#if BORDER_PATCH
[SchemeBorder] = { OPAQUE, OPAQUE, OPAQUE },
#endif // BORDER_PATCH
#if MORECOLOR_PATCH
[SchemeMid] = { OPAQUE, baralpha, borderalpha },
#endif // MORECOLOR_PATCH
#if HIGHLIGHT_PATCH || FUZZYHIGHLIGHT_PATCH
[SchemeSelHighlight] = { OPAQUE, baralpha, borderalpha },
[SchemeNormHighlight] = { OPAQUE, baralpha, borderalpha },
#endif // HIGHLIGHT_PATCH | FUZZYHIGHLIGHT_PATCH
#if HIGHPRIORITY_PATCH
[SchemeHp] = { OPAQUE, baralpha, borderalpha },
#endif // HIGHPRIORITY_PATCH
#if EMOJI_HIGHLIGHT_PATCH
[SchemeHover] = { OPAQUE, baralpha, borderalpha },
[SchemeGreen] = { OPAQUE, baralpha, borderalpha },
[SchemeRed] = { OPAQUE, baralpha, borderalpha },
[SchemeYellow] = { OPAQUE, baralpha, borderalpha },
[SchemeBlue] = { OPAQUE, baralpha, borderalpha },
[SchemePurple] = { OPAQUE, baralpha, borderalpha },
#endif // EMOJI_HIGHLIGHT_PATCH
};
#endif // ALPHA_PATCH
static
#if !XRESOURCES_PATCH
const
#endif // XRESOURCES_PATCH
char *colors[][2] = {
/* fg bg */
[SchemeNorm] = { "#bbbbbb", "#222222" },
[SchemeSel] = { "#eeeeee", "#005577" },
[SchemeOut] = { "#000000", "#00ffff" },
#if BORDER_PATCH
[SchemeBorder] = { "#000000", "#005577" },
#endif // BORDER_PATCH
#if MORECOLOR_PATCH
[SchemeMid] = { "#eeeeee", "#770000" },
#endif // MORECOLOR_PATCH
#if HIGHLIGHT_PATCH || FUZZYHIGHLIGHT_PATCH
[SchemeSelHighlight] = { "#ffc978", "#005577" },
[SchemeNormHighlight] = { "#ffc978", "#222222" },
#endif // HIGHLIGHT_PATCH | FUZZYHIGHLIGHT_PATCH
#if HIGHPRIORITY_PATCH
[SchemeHp] = { "#bbbbbb", "#333333" },
#endif // HIGHPRIORITY_PATCH
#if EMOJI_HIGHLIGHT_PATCH
[SchemeHover] = { "#ffffff", "#353D4B" },
[SchemeGreen] = { "#ffffff", "#52E067" },
[SchemeRed] = { "#ffffff", "#e05252" },
[SchemeYellow] = { "#ffffff", "#e0c452" },
[SchemeBlue] = { "#ffffff", "#5280e0" },
[SchemePurple] = { "#ffffff", "#9952e0" },
#endif // EMOJI_HIGHLIGHT_PATCH
};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0;
#if GRID_PATCH
/* -g option; if nonzero, dmenu uses a grid comprised of columns and lines */
static unsigned int columns = 0;
#endif // GRID_PATCH
#if LINE_HEIGHT_PATCH
static unsigned int lineheight = 0; /* -h option; minimum height of a menu line */
static unsigned int min_lineheight = 8;
#endif // LINE_HEIGHT_PATCH
#if NAVHISTORY_PATCH
static unsigned int maxhist = 15;
static int histnodup = 1; /* if 0, record repeated histories */
#endif // NAVHISTORY_PATCH
/*
* Characters not considered part of a word while deleting words
* for example: " /?\"&[]"
*/
#if PIPEOUT_PATCH
static const char startpipe[] = "#";
#endif // PIPEOUT_PATCH
static const char worddelimiters[] = " ";
#if BORDER_PATCH
/* Size of the window border */
static unsigned int border_width = 1;
#endif // BORDER_PATCH
#if PREFIXCOMPLETION_PATCH
/*
* Use prefix matching by default; can be inverted with the -x flag.
*/
static int use_prefix = 1;
#endif // PREFIXCOMPLETION_PATCH

View file

@ -1,5 +1,5 @@
# dmenu version # dmenu version
VERSION = 5.1 VERSION = 5.3
# paths # paths
PREFIX = /usr/local PREFIX = /usr/local
@ -15,19 +15,26 @@ XINERAMAFLAGS = -DXINERAMA
# freetype # freetype
FREETYPELIBS = -lfontconfig -lXft FREETYPELIBS = -lfontconfig -lXft
FREETYPEINC = /usr/include/freetype2 FREETYPEINC = /usr/include/freetype2
# alpha
XRENDERLIBS = -lXrender
# OpenBSD (uncomment) # OpenBSD (uncomment)
#FREETYPEINC = $(X11INC)/freetype2 #FREETYPEINC = $(X11INC)/freetype2
#MANPREFIX = ${PREFIX}/man
# uncomment on RHEL for strcasecmp
#EXTRAFLAGS=-D_GNU_SOURCE
# Uncomment this for the alpha patch / ALPHA_PATCH
XRENDER = -lXrender
# Uncomment for the pango patch / PANGO_PATCH
#PANGOINC = `pkg-config --cflags xft pango pangoxft`
#PANGOLIB = `pkg-config --libs xft pango pangoxft`
# includes and libs # includes and libs
INCS = -I$(X11INC) -I$(FREETYPEINC) INCS = -I$(X11INC) -I$(FREETYPEINC) ${PANGOINC}
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) ${XRENDERLIBS} LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) -lm $(XRENDER) ${PANGOLIB}
# flags # flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) $(EXTRAFLAGS)
CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS) CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS)
LDFLAGS = $(LIBS) LDFLAGS = $(LIBS)

View file

@ -4,8 +4,6 @@ dmenu \- dynamic menu
.SH SYNOPSIS .SH SYNOPSIS
.B dmenu .B dmenu
.RB [ \-bfiv ] .RB [ \-bfiv ]
.RB [ \-g
.IR columns ]
.RB [ \-l .RB [ \-l
.IR lines ] .IR lines ]
.RB [ \-m .RB [ \-m
@ -49,11 +47,8 @@ is faster, but will lock up X until stdin reaches end\-of\-file.
.B \-i .B \-i
dmenu matches menu items case insensitively. dmenu matches menu items case insensitively.
.TP .TP
.BI \-g " columns"
dmenu lists items in a grid with the given number of columns.
.TP
.BI \-l " lines" .BI \-l " lines"
dmenu lists items in a grid with the given number of lines. dmenu lists items vertically, with the given number of lines.
.TP .TP
.BI \-m " monitor" .BI \-m " monitor"
dmenu is displayed on the monitor number supplied. Monitor numbers are starting dmenu is displayed on the monitor number supplied. Monitor numbers are starting

2227
dmenu-flexipatch/dmenu.c Normal file

File diff suppressed because it is too large Load diff

6
dmenu-flexipatch/dmenu_run Executable file
View file

@ -0,0 +1,6 @@
#!/bin/sh
export _JAVA_AWT_WM_NONREPARENTING=1
dmenu_path | dmenu "$@" | ${SHELL:-"/bin/sh"} &
# Uncomment for the NAVHISTORY patch (and remove the exec above)
#dmenu_path | dmenu -H "${XDG_CACHE_HOME:-$HOME/.cache/}/dmenu_run.hist" "$@" | ${SHELL:-"/bin/sh"} &

View file

@ -4,11 +4,12 @@
#include <string.h> #include <string.h>
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xft/Xft.h> #include <X11/Xft/Xft.h>
#include <Imlib2.h>
#include "patches.h"
#include "drw.h" #include "drw.h"
#include "util.h" #include "util.h"
#if !PANGO_PATCH
#define UTF_INVALID 0xFFFD #define UTF_INVALID 0xFFFD
#define UTF_SIZ 4 #define UTF_SIZ 4
@ -60,9 +61,14 @@ utf8decode(const char *c, long *u, size_t clen)
return len; return len;
} }
#endif // PANGO_PATCH
Drw * Drw *
#if ALPHA_PATCH
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap) drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap)
#else
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
#endif // ALPHA_PATCH
{ {
Drw *drw = ecalloc(1, sizeof(Drw)); Drw *drw = ecalloc(1, sizeof(Drw));
@ -71,12 +77,16 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h
drw->root = root; drw->root = root;
drw->w = w; drw->w = w;
drw->h = h; drw->h = h;
#if ALPHA_PATCH
drw->visual = visual; drw->visual = visual;
drw->depth = depth; drw->depth = depth;
drw->cmap = cmap; drw->cmap = cmap;
drw->drawable = XCreatePixmap(dpy, root, w, h, depth); drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
drw->picture = XRenderCreatePicture(dpy, drw->drawable, XRenderFindVisualFormat(dpy, visual), 0, NULL);
drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL); drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
#else
drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
drw->gc = XCreateGC(dpy, root, 0, NULL);
#endif // ALPHA_PATCH
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw; return drw;
@ -90,24 +100,63 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h)
drw->w = w; drw->w = w;
drw->h = h; drw->h = h;
if (drw->picture)
XRenderFreePicture(drw->dpy, drw->picture);
if (drw->drawable) if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable); XFreePixmap(drw->dpy, drw->drawable);
#if ALPHA_PATCH
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth); drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
drw->picture = XRenderCreatePicture(drw->dpy, drw->drawable, XRenderFindVisualFormat(drw->dpy, drw->visual), 0, NULL); #else
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
#endif // ALPHA_PATCH
} }
void void
drw_free(Drw *drw) drw_free(Drw *drw)
{ {
XRenderFreePicture(drw->dpy, drw->picture);
XFreePixmap(drw->dpy, drw->drawable); XFreePixmap(drw->dpy, drw->drawable);
XFreeGC(drw->dpy, drw->gc); XFreeGC(drw->dpy, drw->gc);
#if PANGO_PATCH
drw_font_free(drw->font);
#else
drw_fontset_free(drw->fonts); drw_fontset_free(drw->fonts);
#endif // PANGO_PATCH
free(drw); free(drw);
} }
#if PANGO_PATCH
/* This function is an implementation detail. Library users should use
* drw_font_create instead.
*/
static Fnt *
xfont_create(Drw *drw, const char *fontname)
{
Fnt *font;
PangoFontMap *fontmap;
PangoContext *context;
PangoFontDescription *desc;
PangoFontMetrics *metrics;
if (!fontname) {
die("no font specified.");
}
font = ecalloc(1, sizeof(Fnt));
font->dpy = drw->dpy;
fontmap = pango_xft_get_font_map(drw->dpy, drw->screen);
context = pango_font_map_create_context(fontmap);
desc = pango_font_description_from_string(fontname);
font->layout = pango_layout_new(context);
pango_layout_set_font_description(font->layout, desc);
metrics = pango_context_get_metrics(context, desc, pango_language_from_string ("en-us"));
font->h = pango_font_metrics_get_height(metrics) / PANGO_SCALE;
pango_font_metrics_unref(metrics);
g_object_unref(context);
return font;
}
#else
/* This function is an implementation detail. Library users should use /* This function is an implementation detail. Library users should use
* drw_fontset_create instead. * drw_fontset_create instead.
*/ */
@ -142,6 +191,7 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
die("no font specified."); die("no font specified.");
} }
#if NO_COLOR_EMOJI_PATCH
/* Do not allow using color fonts. This is a workaround for a BadLength /* Do not allow using color fonts. This is a workaround for a BadLength
* error from Xft with color glyphs. Modelled on the Xterm workaround. See * error from Xft with color glyphs. Modelled on the Xterm workaround. See
* https://bugzilla.redhat.com/show_bug.cgi?id=1498269 * https://bugzilla.redhat.com/show_bug.cgi?id=1498269
@ -150,10 +200,11 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
* and lots more all over the internet. * and lots more all over the internet.
*/ */
FcBool iscol; FcBool iscol;
if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) { if (FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) {
XftFontClose(drw->dpy, xfont); XftFontClose(drw->dpy, xfont);
return NULL; return NULL;
} }
#endif // NO_COLOR_EMOJI_PATCH
font = ecalloc(1, sizeof(Fnt)); font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont; font->xfont = xfont;
@ -163,18 +214,38 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
return font; return font;
} }
#endif // PANGO_PATCH
static void static void
xfont_free(Fnt *font) xfont_free(Fnt *font)
{ {
if (!font) if (!font)
return; return;
#if PANGO_PATCH
if (font->layout)
g_object_unref(font->layout);
#else
if (font->pattern) if (font->pattern)
FcPatternDestroy(font->pattern); FcPatternDestroy(font->pattern);
XftFontClose(font->dpy, font->xfont); XftFontClose(font->dpy, font->xfont);
#endif // PANGO_PATCH
free(font); free(font);
} }
#if PANGO_PATCH
Fnt*
drw_font_create(Drw* drw, const char *font)
{
Fnt *fnt = NULL;
if (!drw || !font)
return NULL;
fnt = xfont_create(drw, font);
return (drw->font = fnt);
}
#else
Fnt* Fnt*
drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount) drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
{ {
@ -192,7 +263,16 @@ drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
} }
return (drw->fonts = ret); return (drw->fonts = ret);
} }
#endif // PANGO_PATCH
#if PANGO_PATCH
void
drw_font_free(Fnt *font)
{
if (font)
xfont_free(font);
}
#else
void void
drw_fontset_free(Fnt *font) drw_fontset_free(Fnt *font)
{ {
@ -201,24 +281,40 @@ drw_fontset_free(Fnt *font)
xfont_free(font); xfont_free(font);
} }
} }
#endif // PANGO_PATCH
void void
#if ALPHA_PATCH
drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha) drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
#else
drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
#endif // ALPHA_PATCH
{ {
if (!drw || !dest || !clrname) if (!drw || !dest || !clrname)
return; return;
#if ALPHA_PATCH
if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap, if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
clrname, dest)) clrname, dest))
die("error, cannot allocate color '%s'", clrname); die("error, cannot allocate color '%s'", clrname);
dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24); dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24);
#else
if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen),
clrname, dest))
die("error, cannot allocate color '%s'", clrname);
#endif // ALPHA_PATCH
} }
/* Wrapper to create color schemes. The caller has to call free(3) on the /* Wrapper to create color schemes. The caller has to call free(3) on the
* returned color scheme when done using it. */ * returned color scheme when done using it. */
Clr * Clr *
#if ALPHA_PATCH
drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount) drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
#else
drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
#endif // ALPHA_PATCH
{ {
size_t i; size_t i;
Clr *ret; Clr *ret;
@ -228,16 +324,22 @@ drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], si
return NULL; return NULL;
for (i = 0; i < clrcount; i++) for (i = 0; i < clrcount; i++)
#if ALPHA_PATCH
drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]); drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
#else
drw_clr_create(drw, &ret[i], clrnames[i]);
#endif // ALPHA_PATCH
return ret; return ret;
} }
#if !PANGO_PATCH
void void
drw_setfontset(Drw *drw, Fnt *set) drw_setfontset(Drw *drw, Fnt *set)
{ {
if (drw) if (drw)
drw->fonts = set; drw->fonts = set;
} }
#endif // PANGO_PATCH
void void
drw_setscheme(Drw *drw, Clr *scm) drw_setscheme(Drw *drw, Clr *scm)
@ -246,67 +348,6 @@ drw_setscheme(Drw *drw, Clr *scm)
drw->scheme = scm; drw->scheme = scm;
} }
Picture
drw_picture_create_resized(Drw *drw, char *src, unsigned int srcw, unsigned int srch, unsigned int dstw, unsigned int dsth) {
Pixmap pm;
Picture pic;
GC gc;
if (srcw <= (dstw << 1u) && srch <= (dsth << 1u)) {
XImage img = {
srcw, srch, 0, ZPixmap, src,
ImageByteOrder(drw->dpy), BitmapUnit(drw->dpy), BitmapBitOrder(drw->dpy), 32,
32, 0, 32,
0, 0, 0
};
XInitImage(&img);
pm = XCreatePixmap(drw->dpy, drw->root, srcw, srch, 32);
gc = XCreateGC(drw->dpy, pm, 0, NULL);
XPutImage(drw->dpy, pm, gc, &img, 0, 0, 0, 0, srcw, srch);
XFreeGC(drw->dpy, gc);
pic = XRenderCreatePicture(drw->dpy, pm, XRenderFindStandardFormat(drw->dpy, PictStandardARGB32), 0, NULL);
XFreePixmap(drw->dpy, pm);
XRenderSetPictureFilter(drw->dpy, pic, FilterBilinear, NULL, 0);
XTransform xf;
xf.matrix[0][0] = (srcw << 16u) / dstw; xf.matrix[0][1] = 0; xf.matrix[0][2] = 0;
xf.matrix[1][0] = 0; xf.matrix[1][1] = (srch << 16u) / dsth; xf.matrix[1][2] = 0;
xf.matrix[2][0] = 0; xf.matrix[2][1] = 0; xf.matrix[2][2] = 65536;
XRenderSetPictureTransform(drw->dpy, pic, &xf);
} else {
Imlib_Image origin = imlib_create_image_using_data(srcw, srch, (DATA32 *)src);
if (!origin) return None;
imlib_context_set_image(origin);
imlib_image_set_has_alpha(1);
Imlib_Image scaled = imlib_create_cropped_scaled_image(0, 0, srcw, srch, dstw, dsth);
imlib_free_image_and_decache();
if (!scaled) return None;
imlib_context_set_image(scaled);
imlib_image_set_has_alpha(1);
XImage img = {
dstw, dsth, 0, ZPixmap, (char *)imlib_image_get_data_for_reading_only(),
ImageByteOrder(drw->dpy), BitmapUnit(drw->dpy), BitmapBitOrder(drw->dpy), 32,
32, 0, 32,
0, 0, 0
};
XInitImage(&img);
pm = XCreatePixmap(drw->dpy, drw->root, dstw, dsth, 32);
gc = XCreateGC(drw->dpy, pm, 0, NULL);
XPutImage(drw->dpy, pm, gc, &img, 0, 0, 0, 0, dstw, dsth);
imlib_free_image_and_decache();
XFreeGC(drw->dpy, gc);
pic = XRenderCreatePicture(drw->dpy, pm, XRenderFindStandardFormat(drw->dpy, PictStandardARGB32), 0, NULL);
XFreePixmap(drw->dpy, pm);
}
return pic;
}
void void
drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert) drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert)
{ {
@ -319,15 +360,84 @@ drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int
XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
} }
#if PANGO_PATCH
int
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert, Bool markup)
{
char buf[1024];
int i, ty, th;
unsigned int ew, eh;
XftDraw *d = NULL;
size_t len;
int render = x || y || w || h;
if (!drw || (render && !drw->scheme) || !text || !drw->font)
return 0;
if (!render) {
w = invert ? invert : ~invert;
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
#if ALPHA_PATCH
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
#else
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
#endif // ALPHA_PATCH
x += lpad;
w -= lpad;
}
len = strlen(text);
if (len) {
drw_font_getexts(drw->font, text, len, &ew, &eh, markup);
th = eh;
/* shorten text if necessary */
for (len = MIN(len, sizeof(buf) - 1); len && ew > w; len--) {
drw_font_getexts(drw->font, text, len, &ew, &eh, markup);
if (eh > th)
th = eh;
}
if (len) {
memcpy(buf, text, len);
buf[len] = '\0';
if (len < strlen(text))
for (i = len; i && i > len - 3; buf[--i] = '.')
; /* NOP */
if (render) {
ty = y + (h - th) / 2;
if (markup)
pango_layout_set_markup(drw->font->layout, buf, len);
else
pango_layout_set_text(drw->font->layout, buf, len);
pango_xft_render_layout(d, &drw->scheme[invert ? ColBg : ColFg],
drw->font->layout, x * PANGO_SCALE, ty * PANGO_SCALE);
if (markup) /* clear markup attributes */
pango_layout_set_attributes(drw->font->layout, NULL);
}
x += ew;
w -= ew;
}
}
if (d)
XftDrawDestroy(d);
return x + (render ? w : 0);
}
#else
int int
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert) drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
{ {
char buf[1024]; int ty, ellipsis_x = 0;
int ty; unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len, hash, h0, h1;
unsigned int ew;
XftDraw *d = NULL; XftDraw *d = NULL;
Fnt *usedfont, *curfont, *nextfont; Fnt *usedfont, *curfont, *nextfont;
size_t i, len;
int utf8strlen, utf8charlen, render = x || y || w || h; int utf8strlen, utf8charlen, render = x || y || w || h;
long utf8codepoint = 0; long utf8codepoint = 0;
const char *utf8str; const char *utf8str;
@ -335,24 +445,35 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
FcPattern *fcpattern; FcPattern *fcpattern;
FcPattern *match; FcPattern *match;
XftResult result; XftResult result;
int charexists = 0; int charexists = 0, overflow = 0;
/* keep track of a couple codepoints for which we have no match. */
static unsigned int nomatches[128], ellipsis_width;
const char *ellipsis = "...";
if (!drw || (render && !drw->scheme) || !text || !drw->fonts) if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
return 0; return 0;
if (!render) { if (!render) {
w = ~w; w = invert ? invert : ~invert;
} else { } else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
#if ALPHA_PATCH
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap); d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
#else
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
#endif // ALPHA_PATCH
x += lpad; x += lpad;
w -= lpad; w -= lpad;
} }
usedfont = drw->fonts; usedfont = drw->fonts;
if (!ellipsis_width && render)
ellipsis_width = drw_fontset_getwidth(drw, ellipsis);
while (1) { while (1) {
utf8strlen = 0; ew = ellipsis_len = utf8strlen = 0;
utf8str = text; utf8str = text;
nextfont = NULL; nextfont = NULL;
while (*text) { while (*text) {
@ -360,9 +481,27 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
for (curfont = drw->fonts; curfont; curfont = curfont->next) { for (curfont = drw->fonts; curfont; curfont = curfont->next) {
charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint); charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
if (charexists) { if (charexists) {
if (curfont == usedfont) { drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL);
if (ew + ellipsis_width <= w) {
/* keep track where the ellipsis still fits */
ellipsis_x = x + ew;
ellipsis_w = w - ew;
ellipsis_len = utf8strlen;
}
if (ew + tmpw > w) {
overflow = 1;
/* called from drw_fontset_getwidth_clamp():
* it wants the width AFTER the overflow
*/
if (!render)
x += tmpw;
else
utf8strlen = ellipsis_len;
} else if (curfont == usedfont) {
utf8strlen += utf8charlen; utf8strlen += utf8charlen;
text += utf8charlen; text += utf8charlen;
ew += tmpw;
} else { } else {
nextfont = curfont; nextfont = curfont;
} }
@ -370,36 +509,25 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
} }
} }
if (!charexists || nextfont) if (overflow || !charexists || nextfont)
break; break;
else else
charexists = 0; charexists = 0;
} }
if (utf8strlen) { if (utf8strlen) {
drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
/* shorten text if necessary */
for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--)
drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
if (len) {
memcpy(buf, utf8str, len);
buf[len] = '\0';
if (len < utf8strlen)
for (i = len; i && i > len - 3; buf[--i] = '.')
; /* NOP */
if (render) { if (render) {
ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent; ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg], XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
usedfont->xfont, x, ty, (XftChar8 *)buf, len); usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen);
} }
x += ew; x += ew;
w -= ew; w -= ew;
} }
} if (render && overflow && ellipsis_w)
drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, ellipsis, invert);
if (!*text) { if (!*text || overflow) {
break; break;
} else if (nextfont) { } else if (nextfont) {
charexists = 0; charexists = 0;
@ -409,6 +537,15 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
* character must be drawn. */ * character must be drawn. */
charexists = 1; charexists = 1;
hash = (unsigned int)utf8codepoint;
hash = ((hash >> 16) ^ hash) * 0x21F0AAAD;
hash = ((hash >> 15) ^ hash) * 0xD35A2D97;
h0 = ((hash >> 15) ^ hash) % LENGTH(nomatches);
h1 = (hash >> 17) % LENGTH(nomatches);
/* avoid expensive XftFontMatch call when we know we won't find a match */
if (nomatches[h0] == utf8codepoint || nomatches[h1] == utf8codepoint)
goto no_match;
fccharset = FcCharSetCreate(); fccharset = FcCharSetCreate();
FcCharSetAddChar(fccharset, utf8codepoint); FcCharSetAddChar(fccharset, utf8codepoint);
@ -420,7 +557,9 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
fcpattern = FcPatternDuplicate(drw->fonts->pattern); fcpattern = FcPatternDuplicate(drw->fonts->pattern);
FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
#if NO_COLOR_EMOJI_PATCH
FcPatternAddBool(fcpattern, FC_COLOR, FcFalse); FcPatternAddBool(fcpattern, FC_COLOR, FcFalse);
#endif // NO_COLOR_EMOJI_PATCH
FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
FcDefaultSubstitute(fcpattern); FcDefaultSubstitute(fcpattern);
@ -437,6 +576,8 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
curfont->next = usedfont; curfont->next = usedfont;
} else { } else {
xfont_free(usedfont); xfont_free(usedfont);
nomatches[nomatches[h0] ? h1 : h0] = utf8codepoint;
no_match:
usedfont = drw->fonts; usedfont = drw->fonts;
} }
} }
@ -447,14 +588,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
return x + (render ? w : 0); return x + (render ? w : 0);
} }
#endif // PANGO_PATCH
void
drw_pic(Drw *drw, int x, int y, unsigned int w, unsigned int h, Picture pic)
{
if (!drw)
return;
XRenderComposite(drw->dpy, PictOpOver, pic, None, drw->picture, 0, 0, 0, 0, x, y, w, h);
}
void void
drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
@ -466,6 +600,24 @@ drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
XSync(drw->dpy, False); XSync(drw->dpy, False);
} }
#if PANGO_PATCH
unsigned int
drw_font_getwidth(Drw *drw, const char *text, Bool markup)
{
if (!drw || !drw->font || !text)
return 0;
return drw_text(drw, 0, 0, 0, 0, 0, text, 0, markup);
}
unsigned int
drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
{
unsigned int tmp = 0;
if (drw && drw->font && text && n)
tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n, True);
return MIN(n, tmp);
}
#else
unsigned int unsigned int
drw_fontset_getwidth(Drw *drw, const char *text) drw_fontset_getwidth(Drw *drw, const char *text)
{ {
@ -474,6 +626,37 @@ drw_fontset_getwidth(Drw *drw, const char *text)
return drw_text(drw, 0, 0, 0, 0, 0, text, 0); return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
} }
unsigned int
drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
{
unsigned int tmp = 0;
if (drw && drw->fonts && text && n)
tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
return MIN(n, tmp);
}
#endif // PANGO_PATCH
#if PANGO_PATCH
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h, Bool markup)
{
if (!font || !text)
return;
PangoRectangle r;
if (markup)
pango_layout_set_markup(font->layout, text, len);
else
pango_layout_set_text(font->layout, text, len);
pango_layout_get_extents(font->layout, 0, &r);
if (markup) /* clear markup attributes */
pango_layout_set_attributes(font->layout, NULL);
if (w)
*w = r.width / PANGO_SCALE;
if (h)
*h = r.height / PANGO_SCALE;
}
#else
void void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h) drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
{ {
@ -488,6 +671,7 @@ drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w,
if (h) if (h)
*h = font->h; *h = font->h;
} }
#endif // PANGO_PATCH
Cur * Cur *
drw_cur_create(Drw *drw, int shape) drw_cur_create(Drw *drw, int shape)
@ -511,3 +695,7 @@ drw_cur_free(Drw *drw, Cur *cursor)
XFreeCursor(drw->dpy, cursor->cursor); XFreeCursor(drw->dpy, cursor->cursor);
free(cursor); free(cursor);
} }
#if SCROLL_PATCH
#include "patch/scroll.c"
#endif

View file

@ -1,5 +1,10 @@
/* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
#if PANGO_PATCH
#include <pango/pango.h>
#include <pango/pangoxft.h>
#endif // PANGO_PATCH
typedef struct { typedef struct {
Cursor cursor; Cursor cursor;
} Cur; } Cur;
@ -7,9 +12,13 @@ typedef struct {
typedef struct Fnt { typedef struct Fnt {
Display *dpy; Display *dpy;
unsigned int h; unsigned int h;
#if PANGO_PATCH
PangoLayout *layout;
#else
XftFont *xfont; XftFont *xfont;
FcPattern *pattern; FcPattern *pattern;
struct Fnt *next; struct Fnt *next;
#endif // PANGO_PATCH
} Fnt; } Fnt;
enum { ColFg, ColBg }; /* Clr scheme index */ enum { ColFg, ColBg }; /* Clr scheme index */
@ -20,41 +29,75 @@ typedef struct {
Display *dpy; Display *dpy;
int screen; int screen;
Window root; Window root;
#if ALPHA_PATCH
Visual *visual; Visual *visual;
unsigned int depth; unsigned int depth;
Colormap cmap; Colormap cmap;
#endif // ALPHA_PATCH
Drawable drawable; Drawable drawable;
GC gc; GC gc;
Clr *scheme; Clr *scheme;
#if PANGO_PATCH
Fnt *font;
#else
Fnt *fonts; Fnt *fonts;
#endif // PANGO_PATCH
} Drw; } Drw;
/* Drawable abstraction */ /* Drawable abstraction */
#if ALPHA_PATCH
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap); Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap);
#else
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
#endif // ALPHA_PATCH
void drw_resize(Drw *drw, unsigned int w, unsigned int h); void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw); void drw_free(Drw *drw);
/* Fnt abstraction */ /* Fnt abstraction */
#if PANGO_PATCH
Fnt *drw_font_create(Drw* drw, const char *font);
void drw_font_free(Fnt* set);
unsigned int drw_font_getwidth(Drw *drw, const char *text, Bool markup);
unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h, Bool markup);
#else
Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount); Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set); void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text); unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
#endif // PANGO_PATCH
/* Colorscheme abstraction */ /* Colorscheme abstraction */
#if ALPHA_PATCH
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha); void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount); Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount);
#else
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
#endif // ALPHA_PATCH
/* Cursor abstraction */ /* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape); Cur *drw_cur_create(Drw *drw, int shape);
void drw_cur_free(Drw *drw, Cur *cursor); void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */ /* Drawing context manipulation */
#if !PANGO_PATCH
void drw_setfontset(Drw *drw, Fnt *set); void drw_setfontset(Drw *drw, Fnt *set);
#endif // PANGO_PATCH
void drw_setscheme(Drw *drw, Clr *scm); void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */ /* Drawing functions */
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert); void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
#if PANGO_PATCH
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert, Bool markup);
#else
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert); int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
#endif // PANGO_PATCH
/* Map functions */ /* Map functions */
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h); void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
#if SCROLL_PATCH
#include "patch/scroll.h"
#endif

View file

@ -0,0 +1,8 @@
static int
max_textw(void)
{
int len = 0;
for (struct item *item = items; item && item->text; item++)
len = MAX(TEXTW(item->text), len);
return len;
}

View file

@ -0,0 +1,91 @@
static void
refreshoptions()
{
int dynlen = strlen(dynamic);
char* cmd= malloc(dynlen + strlen(text) + 2);
if (cmd == NULL)
die("malloc:");
sprintf(cmd, "%s %s", dynamic, text);
FILE *stream = popen(cmd, "r");
if (!stream)
die("popen(%s):", cmd);
readstream(stream);
int pc = pclose(stream);
if (pc == -1)
die("pclose:");
free(cmd);
curr = sel = items;
}
static void
readstream(FILE* stream)
{
char buf[sizeof text], *p;
size_t i, imax = 0, size = 0;
unsigned int tmpmax = 0;
/* read each line from stdin and add it to the item list */
for (i = 0; fgets(buf, sizeof buf, stream); i++) {
if (i + 1 >= size / sizeof *items)
if (!(items = realloc(items, (size += BUFSIZ))))
die("cannot realloc %u bytes:", size);
if ((p = strchr(buf, '\n')))
*p = '\0';
if (!(items[i].text = strdup(buf)))
die("cannot strdup %u bytes:", strlen(buf) + 1);
#if SEPARATOR_PATCH
if (separator && (p = separator_greedy ?
strrchr(items[i].text, separator) : strchr(items[i].text, separator))) {
*p = '\0';
items[i].text_output = ++p;
} else {
items[i].text_output = items[i].text;
}
if (separator_reverse) {
p = items[i].text;
items[i].text = items[i].text_output;
items[i].text_output = p;
}
#elif TSV_PATCH
if ((p = strchr(buf, '\t')))
*p = '\0';
if (!(items[i].stext = strdup(buf)))
die("cannot strdup %u bytes:", strlen(buf) + 1);
#endif // TSV_PATCH
#if MULTI_SELECTION_PATCH
items[i].id = i;
#else
items[i].out = 0;
#endif // MULTI_SELECTION_PATCH
#if HIGHPRIORITY_PATCH
items[i].hp = arrayhas(hpitems, hplength, items[i].text);
#endif // HIGHPRIORITY_PATCH
#if PANGO_PATCH
drw_font_getexts(drw->font, buf, strlen(buf), &tmpmax, NULL, True);
#else
drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL);
#endif // PANGO_PATCH
if (tmpmax > inputw) {
inputw = tmpmax;
imax = i;
}
}
/* If the command did not give any output at all, then do not clear the existing items */
if (!i)
return;
if (items)
items[i].text = NULL;
#if PANGO_PATCH
inputw = items ? TEXTWM(items[imax].text) : 0;
#else
inputw = items ? TEXTW(items[imax].text) : 0;
#endif // PANGO_PATCH
if (!dynamic || !*dynamic)
lines = MIN(lines, i);
else {
text[0] = '\0';
cursor = 0;
}
}

View file

@ -0,0 +1,2 @@
static void refreshoptions();
static void readstream(FILE* stream);

View file

@ -0,0 +1,66 @@
static void
#if EMOJI_HIGHLIGHT_PATCH
drawhighlights(struct item *item, char *output, int x, int y, int maxw)
#else
drawhighlights(struct item *item, int x, int y, int maxw)
#endif // EMOJI_HIGHLIGHT_PATCH
{
int i, indent;
char *highlight;
char c;
#if EMOJI_HIGHLIGHT_PATCH
char *itemtext = output;
#elif TSV_PATCH && !SEPARATOR_PATCH
char *itemtext = item->stext;
#else
char *itemtext = item->text;
#endif // TSV_PATCH
if (!(strlen(itemtext) && strlen(text)))
return;
/* Do not highlight items scheduled for output */
#if MULTI_SELECTION_PATCH
if (issel(item->id))
return;
#else
if (item->out)
return;
#endif // MULTI_SELECTION_PATCH
drw_setscheme(drw, scheme[item == sel
? SchemeSelHighlight
: SchemeNormHighlight]);
for (i = 0, highlight = itemtext; *highlight && text[i];) {
#if FUZZYMATCH_PATCH
if (!fstrncmp(&(*highlight), &text[i], 1))
#else
if (*highlight == text[i])
#endif // FUZZYMATCH_PATCH
{
/* get indentation */
c = *highlight;
*highlight = '\0';
indent = TEXTW(itemtext) - lrpad;
*highlight = c;
/* highlight character */
c = highlight[1];
highlight[1] = '\0';
drw_text(
drw,
x + indent + (lrpad / 2),
y,
MIN(maxw - indent - lrpad, TEXTW(highlight) - lrpad),
bh, 0, highlight, 0
#if PANGO_PATCH
, True
#endif // PANGO_PATCH
);
highlight[1] = c;
i++;
}
highlight++;
}
}

View file

@ -0,0 +1,115 @@
#include <math.h>
int
compare_distance(const void *a, const void *b)
{
struct item *da = *(struct item **) a;
struct item *db = *(struct item **) b;
if (!db)
return 1;
if (!da)
return -1;
return da->distance == db->distance ? 0 : da->distance < db->distance ? -1 : 1;
}
void
fuzzymatch(void)
{
/* bang - we have so much memory */
struct item *it;
struct item **fuzzymatches = NULL;
char c;
int number_of_matches = 0, i, pidx, sidx, eidx;
int text_len = strlen(text), itext_len;
#if HIGHPRIORITY_PATCH
struct item *lhpprefix, *hpprefixend;
lhpprefix = hpprefixend = NULL;
#endif // HIGHPRIORITY_PATCH
matches = matchend = NULL;
/* walk through all items */
for (it = items; it && it->text; it++) {
if (text_len) {
itext_len = strlen(it->text);
pidx = 0; /* pointer */
sidx = eidx = -1; /* start of match, end of match */
/* walk through item text */
for (i = 0; i < itext_len && (c = it->text[i]); i++) {
/* fuzzy match pattern */
if (!fstrncmp(&text[pidx], &c, 1)) {
if (sidx == -1)
sidx = i;
pidx++;
if (pidx == text_len) {
eidx = i;
break;
}
}
}
/* build list of matches */
if (eidx != -1) {
/* compute distance */
/* add penalty if match starts late (log(sidx+2))
* add penalty for long a match without many matching characters */
it->distance = log(sidx + 2) + (double)(eidx - sidx - text_len);
/* fprintf(stderr, "distance %s %f\n", it->text, it->distance); */
appenditem(it, &matches, &matchend);
number_of_matches++;
}
} else {
appenditem(it, &matches, &matchend);
}
}
if (number_of_matches) {
/* initialize array with matches */
if (!(fuzzymatches = realloc(fuzzymatches, number_of_matches * sizeof(struct item*))))
die("cannot realloc %u bytes:", number_of_matches * sizeof(struct item*));
for (i = 0, it = matches; it && i < number_of_matches; i++, it = it->right) {
fuzzymatches[i] = it;
}
#if NO_SORT_PATCH
if (sortmatches)
#endif // NO_SORT_PATCH
/* sort matches according to distance */
qsort(fuzzymatches, number_of_matches, sizeof(struct item*), compare_distance);
/* rebuild list of matches */
matches = matchend = NULL;
for (i = 0, it = fuzzymatches[i]; i < number_of_matches && it && \
it->text; i++, it = fuzzymatches[i]) {
#if HIGHPRIORITY_PATCH
#if NO_SORT_PATCH
if (sortmatches && it->hp)
#else
if (it->hp)
#endif // NO_SORT_PATCH
appenditem(it, &lhpprefix, &hpprefixend);
else
appenditem(it, &matches, &matchend);
#else
appenditem(it, &matches, &matchend);
#endif // HIGHPRIORITY_PATCH
}
free(fuzzymatches);
}
#if HIGHPRIORITY_PATCH
if (lhpprefix) {
hpprefixend->right = matches;
matches = lhpprefix;
}
#endif // HIGHPRIORITY_PATCH
curr = sel = matches;
#if INSTANT_PATCH
if (instant && matches && matches==matchend) {
puts(matches->text);
cleanup();
exit(0);
}
#endif // INSTANT_PATCH
calcoffsets();
}

View file

@ -0,0 +1,39 @@
static char *expected;
#if MULTI_SELECTION_PATCH
void
expect(char *expect, XKeyEvent *ev)
{
if (sel && expected && strstr(expected, expect)) {
if (expected && sel && !(ev->state & ShiftMask))
puts(expect);
for (int i = 0; i < selidsize; i++)
if (selid[i] != -1 && (!sel || sel->id != selid[i]))
puts(items[selid[i]].text);
if (sel && !(ev->state & ShiftMask)) {
puts(sel->text);
} else
puts(text);
cleanup();
exit(1);
} else if (!sel && expected && strstr(expected, expect)) {
puts(expect);
cleanup();
exit(1);
}
}
#else
void
expect(char *expect, XKeyEvent *ignored)
{
if (sel && expected && strstr(expected, expect)) {
puts(expect);
puts(sel->text);
cleanup();
exit(1);
} else if (!sel && expected && strstr(expected, expect)){
puts(expect);
cleanup();
exit(1);
}
}
#endif // MULTI_SELECTION_PATCH

View file

@ -0,0 +1 @@
static void expect(char *expect, XKeyEvent *ev);

View file

@ -0,0 +1,60 @@
static void
#if EMOJI_HIGHLIGHT_PATCH
drawhighlights(struct item *item, char *output, int x, int y, int maxw)
#else
drawhighlights(struct item *item, int x, int y, int maxw)
#endif // EMOJI_HIGHLIGHT_PATCH
{
char restorechar, tokens[sizeof text], *highlight, *token;
int indentx, highlightlen;
#if EMOJI_HIGHLIGHT_PATCH
char *itemtext = output;
#elif TSV_PATCH && !SEPARATOR_PATCH
char *itemtext = item->stext;
#else
char *itemtext = item->text;
#endif // EMOJI_HIGHLIGHT_PATCH | TSV_PATCH
/* Do not highlight items scheduled for output */
#if MULTI_SELECTION_PATCH
if (issel(item->id))
return;
#else
if (item->out)
return;
#endif // MULTI_SELECTION_PATCH
drw_setscheme(drw, scheme[item == sel ? SchemeSelHighlight : SchemeNormHighlight]);
strcpy(tokens, text);
for (token = strtok(tokens, " "); token; token = strtok(NULL, " ")) {
highlight = fstrstr(itemtext, token);
while (highlight) {
// Move item str end, calc width for highlight indent, & restore
highlightlen = highlight - itemtext;
restorechar = *highlight;
itemtext[highlightlen] = '\0';
indentx = TEXTW(itemtext);
itemtext[highlightlen] = restorechar;
// Move highlight str end, draw highlight, & restore
restorechar = highlight[strlen(token)];
highlight[strlen(token)] = '\0';
if (indentx - (lrpad / 2) - 1 < maxw)
drw_text(
drw,
x + indentx - (lrpad / 2) - 1,
y,
MIN(maxw - indentx, TEXTW(highlight) - lrpad),
bh, 0, highlight, 0
#if PANGO_PATCH
, True
#endif // PANGO_PATCH
);
highlight[strlen(token)] = restorechar;
if (strlen(highlight) - strlen(token) < strlen(token))
break;
highlight = fstrstr(highlight + strlen(token), token);
}
}
}

View file

@ -0,0 +1,35 @@
static char **hpitems = NULL;
static int hplength = 0;
static char **
tokenize(char *source, const char *delim, int *llen)
{
int listlength = 0, list_size = 0;
char **list = NULL, *token;
token = strtok(source, delim);
while (token) {
if (listlength + 1 >= list_size) {
if (!(list = realloc(list, (list_size += 8) * sizeof(*list))))
die("Unable to realloc %zu bytes\n", list_size * sizeof(*list));
}
if (!(list[listlength] = strdup(token)))
die("Unable to strdup %zu bytes\n", strlen(token) + 1);
token = strtok(NULL, delim);
listlength++;
}
*llen = listlength;
return list;
}
static int
arrayhas(char **list, int length, char *item) {
for (int i = 0; i < length; i++) {
int len1 = strlen(list[i]);
int len2 = strlen(item);
if (fstrncmp(list[i], item, len1 > len2 ? len2 : len1) == 0)
return 1;
}
return 0;
}

View file

@ -0,0 +1,2 @@
static int arrayhas(char **list, int length, char *item);

View file

@ -0,0 +1,38 @@
#if CENTER_PATCH
#include "center.c"
#endif
#if FUZZYHIGHLIGHT_PATCH
#include "fuzzyhighlight.c"
#elif HIGHLIGHT_PATCH
#include "highlight.c"
#endif
#if FUZZYMATCH_PATCH
#include "fuzzymatch.c"
#endif
#if FZFEXPECT_PATCH
#include "fzfexpect.c"
#endif
#if HIGHPRIORITY_PATCH
#include "highpriority.c"
#endif
#if DYNAMIC_OPTIONS_PATCH
#include "dynamicoptions.c"
#endif
#if MULTI_SELECTION_PATCH
#include "multiselect.c"
#endif
#if MOUSE_SUPPORT_PATCH
#include "mousesupport.c"
#endif
#if NAVHISTORY_PATCH
#include "navhistory.c"
#endif
#if NON_BLOCKING_STDIN_PATCH
#include "nonblockingstdin.c"
#endif
#if NUMBERS_PATCH
#include "numbers.c"
#endif
#if XRESOURCES_PATCH
#include "xresources.c"
#endif

View file

@ -0,0 +1,18 @@
#if DYNAMIC_OPTIONS_PATCH
#include "dynamicoptions.h"
#endif
#if FZFEXPECT_PATCH
#include "fzfexpect.h"
#endif
#if MULTI_SELECTION_PATCH
#include "multiselect.h"
#endif
#if HIGHPRIORITY_PATCH
#include "highpriority.h"
#endif
#if NON_BLOCKING_STDIN_PATCH
#include "nonblockingstdin.h"
#endif
#if NUMBERS_PATCH
#include "numbers.h"
#endif

View file

@ -0,0 +1,159 @@
static void
buttonpress(XEvent *e)
{
struct item *item;
XButtonPressedEvent *ev = &e->xbutton;
int x = 0, y = 0, h = bh, w;
if (ev->window != win)
return;
/* right-click: exit */
if (ev->button == Button3)
exit(1);
if (prompt && *prompt)
x += promptw;
/* input field */
w = (lines > 0 || !matches) ? mw - x : inputw;
/* left-click on input: clear input,
* NOTE: if there is no left-arrow the space for < is reserved so
* add that to the input width */
#if SYMBOLS_PATCH
if (ev->button == Button1 &&
((lines <= 0 && ev->x >= 0 && ev->x <= x + w +
((!prev || !curr->left) ? TEXTW(symbol_1) : 0)) ||
(lines > 0 && ev->y >= y && ev->y <= y + h))) {
insert(NULL, -cursor);
drawmenu();
return;
}
#else
if (ev->button == Button1 &&
((lines <= 0 && ev->x >= 0 && ev->x <= x + w +
((!prev || !curr->left) ? TEXTW("<") : 0)) ||
(lines > 0 && ev->y >= y && ev->y <= y + h))) {
insert(NULL, -cursor);
drawmenu();
return;
}
#endif // SYMBOLS_PATCH
/* middle-mouse click: paste selection */
if (ev->button == Button2) {
XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY,
utf8, utf8, win, CurrentTime);
drawmenu();
return;
}
/* scroll up */
if (ev->button == Button4 && prev) {
sel = curr = prev;
calcoffsets();
drawmenu();
return;
}
/* scroll down */
if (ev->button == Button5 && next) {
sel = curr = next;
calcoffsets();
drawmenu();
return;
}
if (ev->button != Button1)
return;
if (ev->state & ~ControlMask)
return;
if (lines > 0) {
/* vertical list: (ctrl)left-click on item */
w = mw - x;
for (item = curr; item != next; item = item->right) {
y += h;
if (ev->y >= y && ev->y <= (y + h)) {
#if !MULTI_SELECTION_PATCH
puts(item->text);
#endif // MULTI_SELECTION_PATCH
if (!(ev->state & ControlMask)) {
#if MULTI_SELECTION_PATCH
sel = item;
selsel();
printsel(ev->state);
#endif // MULTI_SELECTION_PATCH
exit(0);
}
sel = item;
if (sel) {
#if MULTI_SELECTION_PATCH
selsel();
#else
sel->out = 1;
#endif // MULTI_SELECTION_PATCH
drawmenu();
}
return;
}
}
} else if (matches) {
/* left-click on left arrow */
x += inputw;
#if SYMBOLS_PATCH
w = TEXTW(symbol_1);
#else
w = TEXTW("<");
#endif // SYMBOLS_PATCH
if (prev && curr->left) {
if (ev->x >= x && ev->x <= x + w) {
sel = curr = prev;
calcoffsets();
drawmenu();
return;
}
}
/* horizontal list: (ctrl)left-click on item */
for (item = curr; item != next; item = item->right) {
x += w;
#if SYMBOLS_PATCH
w = MIN(TEXTW(item->text), mw - x - TEXTW(symbol_2));
#else
w = MIN(TEXTW(item->text), mw - x - TEXTW(">"));
#endif // SYMBOLS_PATCH
if (ev->x >= x && ev->x <= x + w) {
#if !MULTI_SELECTION_PATCH
puts(item->text);
#endif // MULTI_SELECTION_PATCH
if (!(ev->state & ControlMask)) {
#if MULTI_SELECTION_PATCH
sel = item;
selsel();
printsel(ev->state);
#endif // MULTI_SELECTION_PATCH
exit(0);
}
sel = item;
if (sel) {
#if MULTI_SELECTION_PATCH
selsel();
#else
sel->out = 1;
#endif // MULTI_SELECTION_PATCH
drawmenu();
}
return;
}
}
/* left-click on right arrow */
#if SYMBOLS_PATCH
w = TEXTW(symbol_2);
#else
w = TEXTW(">");
#endif // SYMBOLS_PATCH
x = mw - w;
if (next && ev->x >= x && ev->x <= x + w) {
sel = curr = next;
calcoffsets();
drawmenu();
return;
}
}
}

View file

@ -0,0 +1,53 @@
static int
issel(size_t id)
{
for (int i = 0;i < selidsize;i++)
if (selid[i] == id)
return 1;
return 0;
}
static void
printsel(unsigned int state)
{
for (int i = 0;i < selidsize;i++)
if (selid[i] != -1 && (!sel || sel->id != selid[i])) {
#if PRINTINDEX_PATCH
if (print_index)
printf("%d\n", selid[i]);
else
#endif // PRINTINDEX_PATCH
puts(items[selid[i]].text);
}
if (sel && !(state & ShiftMask)) {
#if PRINTINDEX_PATCH
if (print_index)
printf("%d\n", sel->index);
else
#endif // PRINTINDEX_PATCH
puts(sel->text);
} else
puts(text);
}
static void
selsel()
{
if (!sel)
return;
if (issel(sel->id)) {
for (int i = 0; i < selidsize; i++)
if (selid[i] == sel->id)
selid[i] = -1;
} else {
for (int i = 0; i < selidsize; i++)
if (selid[i] == -1) {
selid[i] = sel->id;
return;
}
selidsize++;
selid = realloc(selid, (selidsize + 1) * sizeof(int));
selid[selidsize - 1] = sel->id;
}
}

View file

@ -0,0 +1 @@
static int issel(size_t id);

View file

@ -0,0 +1,126 @@
static char *histfile;
static char **history;
static size_t histsz, histpos;
static void
loadhistory(void)
{
FILE *fp = NULL;
static size_t cap = 0;
size_t llen;
char *line;
if (!histfile) {
return;
}
fp = fopen(histfile, "r");
if (!fp) {
return;
}
for (;;) {
line = NULL;
llen = 0;
if (-1 == getline(&line, &llen, fp)) {
if (ferror(fp)) {
die("failed to read history");
}
free(line);
break;
}
if (cap == histsz) {
cap += 64 * sizeof(char*);
history = realloc(history, cap);
if (!history) {
die("failed to realloc memory");
}
}
strtok(line, "\n");
history[histsz] = line;
histsz++;
}
histpos = histsz;
if (fclose(fp)) {
die("failed to close file %s", histfile);
}
}
static void
navhistory(int dir)
{
static char def[BUFSIZ];
char *p = NULL;
size_t len = 0;
if (!history || histpos + 1 == 0)
return;
if (histsz == histpos) {
strncpy(def, text, sizeof(def));
}
switch(dir) {
case 1:
if (histpos < histsz - 1) {
p = history[++histpos];
} else if (histpos == histsz - 1) {
p = def;
histpos++;
}
break;
case -1:
if (histpos > 0) {
p = history[--histpos];
}
break;
}
if (p == NULL) {
return;
}
len = MIN(strlen(p), BUFSIZ - 1);
strncpy(text, p, len);
text[len] = '\0';
cursor = len;
match();
}
static void
savehistory(char *input)
{
unsigned int i;
FILE *fp;
if (!histfile ||
0 == maxhist ||
0 == strlen(input)) {
goto out;
}
fp = fopen(histfile, "w");
if (!fp) {
die("failed to open %s", histfile);
}
for (i = histsz < maxhist ? 0 : histsz - maxhist; i < histsz; i++) {
if (0 >= fprintf(fp, "%s\n", history[i])) {
die("failed to write to %s", histfile);
}
}
if (histsz == 0 || !histnodup || (histsz > 0 && strcmp(input, history[histsz-1]) != 0)) { /* TODO */
if (0 >= fputs(input, fp)) {
die("failed to write to %s", histfile);
}
}
if (fclose(fp)) {
die("failed to close file %s", histfile);
}
out:
for (i = 0; i < histsz; i++) {
free(history[i]);
}
free(history);
}

View file

@ -0,0 +1,68 @@
#include <fcntl.h>
#include <unistd.h>
#include <sys/select.h>
static void
readstdin(void)
{
static size_t max = 0;
static struct item **end = &items;
char buf[sizeof text], *p, *maxstr;
struct item *item;
#if PASSWORD_PATCH
if (passwd) {
inputw = lines = 0;
return;
}
#endif // PASSWORD_PATCH
/* read each line from stdin and add it to the item list */
while (fgets(buf, sizeof buf, stdin)) {
if (!(item = malloc(sizeof *item)))
die("cannot malloc %u bytes:", sizeof *item);
if ((p = strchr(buf, '\n')))
*p = '\0';
if (!(item->text = strdup(buf)))
die("cannot strdup %u bytes:", strlen(buf)+1);
if (strlen(item->text) > max) {
max = strlen(maxstr = item->text);
#if PANGO_PATCH
inputw = maxstr ? TEXTWM(maxstr) : 0;
#else
inputw = maxstr ? TEXTW(maxstr) : 0;
#endif // PANGO_PATCH
}
*end = item;
end = &item->next;
item->next = NULL;
item->out = 0;
}
match();
drawmenu();
}
static void
run(void)
{
fd_set fds;
int flags, xfd = XConnectionNumber(dpy);
if ((flags = fcntl(0, F_GETFL)) == -1)
die("cannot get stdin control flags:");
if (fcntl(0, F_SETFL, flags | O_NONBLOCK) == -1)
die("cannot set stdin control flags:");
for (;;) {
FD_ZERO(&fds);
FD_SET(xfd, &fds);
if (!feof(stdin))
FD_SET(0, &fds);
if (select(xfd + 1, &fds, NULL, NULL, NULL) == -1)
die("cannot multiplex input:");
if (FD_ISSET(xfd, &fds))
readevent();
if (FD_ISSET(0, &fds))
readstdin();
}
}

View file

@ -0,0 +1 @@
static void readevent();

View file

@ -0,0 +1,16 @@
static char numbers[NUMBERSBUFSIZE] = "";
static void
recalculatenumbers()
{
unsigned int numer = 0, denom = 0;
struct item *item;
if (matchend) {
numer++;
for (item = matchend; item && item->left; item = item->left)
numer++;
}
for (item = items; item && item->text; item++)
denom++;
snprintf(numbers, NUMBERSBUFSIZE, "%d/%d", numer, denom);
}

View file

@ -0,0 +1,4 @@
#define NUMBERSMAXDIGITS 100
#define NUMBERSBUFSIZE (NUMBERSMAXDIGITS * 2) + 1
static void recalculatenumbers();

View file

@ -0,0 +1,172 @@
int
utf8nextchar(const char *str, int len, int i, int inc)
{
int n;
for (n = i + inc; n + inc >= 0 && n + inc <= len
&& (str[n] & 0xc0) == 0x80; n += inc)
;
return n;
}
int
drw_text_align(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int textlen, int align)
{
int ty;
unsigned int ew;
XftDraw *d = NULL;
Fnt *usedfont, *curfont, *nextfont;
size_t len;
int utf8strlen, utf8charlen, render = x || y || w || h;
long utf8codepoint = 0;
const char *utf8str;
FcCharSet *fccharset;
FcPattern *fcpattern;
FcPattern *match;
XftResult result;
int charexists = 0;
int i, n;
if (!drw || (render && !drw->scheme) || !text || !drw->fonts || textlen <= 0
|| (align != AlignL && align != AlignR))
return 0;
if (!render) {
w = ~w;
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
#if ALPHA_PATCH
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
#else
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
#endif // ALPHA_PATCH
}
usedfont = drw->fonts;
i = align == AlignL ? 0 : textlen;
x = align == AlignL ? x : x + w;
while (1) {
utf8strlen = 0;
nextfont = NULL;
/* if (align == AlignL) */
utf8str = text + i;
while ((align == AlignL && i < textlen) || (align == AlignR && i > 0)) {
if (align == AlignL) {
utf8charlen = utf8decode(text + i, &utf8codepoint, MIN(textlen - i, UTF_SIZ));
if (!utf8charlen) {
textlen = i;
break;
}
} else {
n = utf8nextchar(text, textlen, i, -1);
utf8charlen = utf8decode(text + n, &utf8codepoint, MIN(textlen - n, UTF_SIZ));
if (!utf8charlen) {
textlen -= i;
text += i;
i = 0;
break;
}
}
for (curfont = drw->fonts; curfont; curfont = curfont->next) {
charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
if (charexists) {
if (curfont == usedfont) {
utf8strlen += utf8charlen;
i += align == AlignL ? utf8charlen : -utf8charlen;
} else {
nextfont = curfont;
}
break;
}
}
if (!charexists || nextfont)
break;
else
charexists = 0;
}
if (align == AlignR)
utf8str = text + i;
if (utf8strlen) {
drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
/* shorten text if necessary */
if (align == AlignL) {
for (len = utf8strlen; len && ew > w; ) {
len = utf8nextchar(utf8str, len, len, -1);
drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
}
} else {
for (len = utf8strlen; len && ew > w; ) {
n = utf8nextchar(utf8str, len, 0, +1);
utf8str += n;
len -= n;
drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
}
}
if (len) {
if (render) {
ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
XftDrawStringUtf8(d, &drw->scheme[ColFg],
usedfont->xfont, align == AlignL ? x : x - ew, ty, (XftChar8 *)utf8str, len);
}
x += align == AlignL ? ew : -ew;
w -= ew;
}
if (len < utf8strlen)
break;
}
if ((align == AlignR && i <= 0) || (align == AlignL && i >= textlen)) {
break;
} else if (nextfont) {
charexists = 0;
usedfont = nextfont;
} else {
/* Regardless of whether or not a fallback font is found, the
* character must be drawn. */
charexists = 1;
fccharset = FcCharSetCreate();
FcCharSetAddChar(fccharset, utf8codepoint);
if (!drw->fonts->pattern) {
/* Refer to the comment in xfont_create for more information. */
die("the first font in the cache must be loaded from a font string.");
}
fcpattern = FcPatternDuplicate(drw->fonts->pattern);
FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
FcDefaultSubstitute(fcpattern);
match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result);
FcCharSetDestroy(fccharset);
FcPatternDestroy(fcpattern);
if (match) {
usedfont = xfont_create(drw, NULL, match);
if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
for (curfont = drw->fonts; curfont->next; curfont = curfont->next)
; /* NOP */
curfont->next = usedfont;
} else {
xfont_free(usedfont);
usedfont = drw->fonts;
}
}
}
}
if (d)
XftDrawDestroy(d);
return x;
}

View file

@ -0,0 +1,3 @@
enum { AlignL, AlignR };
int drw_text_align(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int textlen, int align);

View file

@ -0,0 +1,90 @@
#include <X11/Xresource.h>
void
readxresources(void)
{
XrmInitialize();
char* xrm;
if ((xrm = XResourceManagerString(drw->dpy))) {
char *type;
XrmDatabase xdb = XrmGetStringDatabase(xrm);
XrmValue xval;
if (XrmGetResource(xdb, "dmenu.font", "*", &type, &xval))
#if PANGO_PATCH
strcpy(font, xval.addr);
#else
fonts[0] = strdup(xval.addr);
#endif // PANGO_PATCH
#if !PANGO_PATCH
else
fonts[0] = strdup(fonts[0]);
#endif // PANGO_PATCH
if (XrmGetResource(xdb, "dmenu.background", "*", &type, &xval))
colors[SchemeNorm][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.foreground", "*", &type, &xval))
colors[SchemeNorm][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.selbackground", "*", &type, &xval))
colors[SchemeSel][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.selforeground", "*", &type, &xval))
colors[SchemeSel][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.outbackground", "*", &type, &xval))
colors[SchemeOut][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.outforeground", "*", &type, &xval))
colors[SchemeOut][ColFg] = strdup(xval.addr);
#if MORECOLOR_PATCH
if (XrmGetResource(xdb, "dmenu.midbackground", "*", &type, &xval))
colors[SchemeMid][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.midforeground", "*", &type, &xval))
colors[SchemeMid][ColFg] = strdup(xval.addr);
#endif // MORECOLOR_PATCH
#if BORDER_PATCH
if (XrmGetResource(xdb, "dmenu.bordercolor", "*", &type, &xval))
colors[SchemeBorder][ColBg] = strdup(xval.addr);
#endif // BORDER_PATCH
#if HIGHLIGHT_PATCH || FUZZYHIGHLIGHT_PATCH
if (XrmGetResource(xdb, "dmenu.selhlbackground", "*", &type, &xval))
colors[SchemeSelHighlight][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.selhlforeground", "*", &type, &xval))
colors[SchemeSelHighlight][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.hlbackground", "*", &type, &xval))
colors[SchemeNormHighlight][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.hlforeground", "*", &type, &xval))
colors[SchemeNormHighlight][ColFg] = strdup(xval.addr);
#endif // HIGHLIGHT_PATCH | FUZZYHIGHLIGHT_PATCH
#if HIGHPRIORITY_PATCH
if (XrmGetResource(xdb, "dmenu.hpbackground", "*", &type, &xval))
colors[SchemeHp][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.hpforeground", "*", &type, &xval))
colors[SchemeHp][ColFg] = strdup(xval.addr);
#endif // HIGHPRIORITY_PATCH
#if EMOJI_HIGHLIGHT_PATCH
if (XrmGetResource(xdb, "dmenu.hoverbackground", "*", &type, &xval))
colors[SchemeHover][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.hoverforeground", "*", &type, &xval))
colors[SchemeHover][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.greenbackground", "*", &type, &xval))
colors[SchemeGreen][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.greenforeground", "*", &type, &xval))
colors[SchemeGreen][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.yellowbackground", "*", &type, &xval))
colors[SchemeYellow][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.yellowforeground", "*", &type, &xval))
colors[SchemeYellow][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.bluebackground", "*", &type, &xval))
colors[SchemeBlue][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.blueforeground", "*", &type, &xval))
colors[SchemeBlue][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.purplebackground", "*", &type, &xval))
colors[SchemePurple][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.purpleforeground", "*", &type, &xval))
colors[SchemePurple][ColFg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.redbackground", "*", &type, &xval))
colors[SchemeRed][ColBg] = strdup(xval.addr);
if (XrmGetResource(xdb, "dmenu.redforeground", "*", &type, &xval))
colors[SchemeRed][ColFg] = strdup(xval.addr);
#endif // EMOJI_HIGHLIGHT_PATCH
XrmDestroyDatabase(xdb);
}
}

View file

@ -0,0 +1,355 @@
/* Patches */
/* The alpha patch adds transparency for the dmenu window.
* You need to uncomment the corresponding line in config.mk to use the -lXrender library
* when including this patch.
* https://github.com/bakkeby/patches/blob/master/dmenu/dmenu-alpha-5.0_20210725_523aa08.diff
*/
#define ALPHA_PATCH 1
/* This adds padding for dmenu in similar fashion to the similarly named patch for dwm. The idea
* is to have dmenu appear on top of the bar when using said patch in dwm.
* https://github.com/bakkeby/patches/wiki/barpadding
*/
#define BARPADDING_PATCH 0
/* This patch adds a border around the dmenu window. It is intended to be used with the center
* or xyw patches, to make the menu stand out from similarly coloured windows.
* http://tools.suckless.org/dmenu/patches/border/
*/
#define BORDER_PATCH 1
/* By default the caret in dmenu has a width of 2 pixels. This patch makes that configurable
* as well as overridable via a command line option.
* https://github.com/DarkSamus669/dmenu-patches/blob/main/dmenu-caretwidth-5.2.diff
*/
#define CARET_WIDTH_PATCH 1
/* This patch makes dmenu case-insensitive by default, replacing the
* case-insensitive -i option with a case sensitive -s option.
* http://tools.suckless.org/dmenu/patches/case-insensitive/
*/
#define CASEINSENSITIVE_PATCH 1
/* This patch centers dmenu in the middle of the screen.
* https://tools.suckless.org/dmenu/patches/center/
*/
#define CENTER_PATCH 0
/* Minor patch to enable the use of Ctrl+v (XA_PRIMARY) and Ctrl+Shift+v (CLIPBOARD) to paste.
* By default dmenu only supports Ctrl+y and Ctrl+Shift+y to paste.
*/
#define CTRL_V_TO_PASTE_PATCH 1
/* This patch adds a flag (-dy) which makes dmenu run the command given to it whenever input
* is changed with the current input as the last argument and update the option list according
* to the output of that command.
* https://tools.suckless.org/dmenu/patches/dynamicoptions/
*/
#define DYNAMIC_OPTIONS_PATCH 1
/* This patch will allow for emojis on the left side with a colored background when selected.
* To test this try running:
* $ echo -e ":b here\n:p there\n:r and here" | ./dmenu -p "Search..." -W 400 -l 20 -i -h -1
* NB: the original patch came embedded with the the xyw patch, the morecolors patch and the
* line height patch and as such is intended to be combined with these.
* https://tools.suckless.org/dmenu/patches/emoji-highlight/
*/
#define EMOJI_HIGHLIGHT_PATCH 0
/* This patch make it so that fuzzy matches gets highlighted and is therefore meant
* to be used together with the fuzzymatch patch.
* https://tools.suckless.org/dmenu/patches/fuzzyhighlight/
*/
#define FUZZYHIGHLIGHT_PATCH 1
/* This patch adds support for fuzzy-matching to dmenu, allowing users to type non-consecutive
* portions of the string to be matched.
* https://tools.suckless.org/dmenu/patches/fuzzymatch/
*/
#define FUZZYMATCH_PATCH 1
/* Adds fzf-like functionality for dmenu.
* Refer to https://github.com/DAFF0D11/dafmenu/ for documentation and example use cases.
* https://github.com/DAFF0D11/dafmenu/blob/master/patches/dmenu-fzfexpect-5.1.diff
*/
#define FZFEXPECT_PATCH 1
/* Allows dmenu's entries to be rendered in a grid by adding a new -g flag to specify
* the number of grid columns. The -g and -l options can be used together to create a
* G columns * L lines grid.
* https://tools.suckless.org/dmenu/patches/grid/
*/
#define GRID_PATCH 1
/* This patch adds the ability to move left and right through a grid.
* This patch depends on the grid patch.
* https://tools.suckless.org/dmenu/patches/gridnav/
*/
#define GRIDNAV_PATCH 1
/* This patch highlights the individual characters of matched text for each dmenu list entry.
* The fuzzy highlight patch takes precedence over this patch.
* https://tools.suckless.org/dmenu/patches/highlight/
*/
#define HIGHLIGHT_PATCH 0
/* This will automatically sort the search result so that high priority items are shown first.
* https://tools.suckless.org/dmenu/patches/highpriority/
*/
#define HIGHPRIORITY_PATCH 0
/* This patch causes dmenu to print out the current text each time a key is pressed.
* https://tools.suckless.org/dmenu/patches/incremental/
*/
#define INCREMENTAL_PATCH 1
/* This patch adds an option to provide preselected text.
* https://tools.suckless.org/dmenu/patches/initialtext/
*/
#define INITIALTEXT_PATCH 1
/* This patch adds a flag which will cause dmenu to select an item immediately if there
* is only one matching option left.
* https://tools.suckless.org/dmenu/patches/instant/
*/
#define INSTANT_PATCH 1
/* This patch adds a '-h' option which sets the minimum height of a dmenu line. This helps
* integrate dmenu with other UI elements that require a particular vertical size.
* http://tools.suckless.org/dmenu/patches/line-height/
*/
#define LINE_HEIGHT_PATCH 1
/* This patch adds a -wm flag which sets override_redirect to false; thus letting your window
* manager manage the dmenu window.
*
* This may be helpful in contexts where you don't want to exclusively bind dmenu or want to
* treat dmenu more as a "window" rather than as an overlay.
* https://tools.suckless.org/dmenu/patches/managed/
*/
#define MANAGED_PATCH 1
/* This patch adds an additional color scheme for highlighting entries adjacent to the current
* selection.
* https://tools.suckless.org/dmenu/patches/morecolor/
*/
#define MORECOLOR_PATCH 1
/* This patch adds basic mouse support for dmenu.
* https://tools.suckless.org/dmenu/patches/mouse-support/
*/
#define MOUSE_SUPPORT_PATCH 1
/* Without this patch when you press Ctrl+Enter dmenu just outputs current item and it is not
* possible to undo that.
* With this patch dmenu will output all selected items only on exit. It is also possible to
* deselect any selected item.
* Also refer to the dmenu_run replacement on the below URL that supports multiple selections.
*
* This patch is not compatible with, and takes precedence over, the json, printinputtext,
* pipeout and non-blocking stdin patches.
*
* https://tools.suckless.org/dmenu/patches/multi-selection/
*/
#define MULTI_SELECTION_PATCH 1
/* This patch provides dmenu the ability for history navigation similar to that of bash.
*
* If you take this patch then it is recommended that you also uncomment the line in the
* dmenu_run script which replaces the exec command.
*
* https://tools.suckless.org/dmenu/patches/navhistory/
*/
#define NAVHISTORY_PATCH 1
/* This patch adds back in the workaround for a BadLength error in the Xft library when color
* glyphs are used. This is for systems that do not have an updated version of the Xft library
* (or generally prefer monochrome fonts).
*/
#define NO_COLOR_EMOJI_PATCH 0
/* Adds the -S option to disable sorting menu items after matching. Useful, for example, when menu
* items are sorted by their frequency of use (using an external cache) and the most frequently
* selected items should always appear first regardless of how they were exact, prefix, or
* substring matches.
* https://tools.suckless.org/dmenu/patches/no-sort/
*/
#define NO_SORT_PATCH 0
/* This is a patch to have dmenu read stdin in a non blocking way, making it wait for input both
* from stdin and from X. This means that you can continue feeding dmenu while you type.
* This patch is meant to be used along with the incremental patch, so that you can use stdout
* to feed stdin.
*
* This patch is not compatible with the json and multi-selection patches, both of which takes
* precedence over this patch.
*
* https://tools.suckless.org/dmenu/patches/non_blocking_stdin/
*/
#define NON_BLOCKING_STDIN_PATCH 0
/* Adds text which displays the number of matched and total items in the top right corner of dmenu.
* https://tools.suckless.org/dmenu/patches/numbers/
*/
#define NUMBERS_PATCH 1
/* This patch adds simple markup for dmenu using pango markup.
* This depends on the pango library v1.44 or greater.
* You need to uncomment the corresponding lines in config.mk to use the pango libraries
* when including this patch.
*
* Note that the pango patch is incompatible with the scroll patch and will result in
* compilation errors if both are enabled.
*
* Note that the pango patch does not protect against the BadLength error from Xft
* when color glyphs are used, which means that dmenu will crash if color emoji is used.
*
* If you need color emoji then you may want to install this patched library from the AUR:
* https://aur.archlinux.org/packages/libxft-bgra/
*
* A long term fix for the libXft library is pending approval of this pull request:
* https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1
*
* Also see:
* https://developer.gnome.org/pygtk/stable/pango-markup-language.html
* https://github.com/StillANixRookie/dmenu-pango
*/
#define PANGO_PATCH 0
/* With this patch dmenu will not directly display the keyboard input, but instead replace
* it with dots. All data from stdin will be ignored.
* https://tools.suckless.org/dmenu/patches/password/
*/
#define PASSWORD_PATCH 0
/* This patch allows the selected text to be piped back out with dmenu. This can be useful if you
* want to display the output of a command on the screen.
* Only text starting with the character '#' is piped out by default.
*
* This patch is not compatible with the json and multi-select patches, both of which takes
* precedence over this one.
*
* https://tools.suckless.org/dmenu/patches/pipeout/
*/
#define PIPEOUT_PATCH 0
/* Lifted from the listfullwidth patch this simple change just avoids colors for the prompt (with
* the -p option or in config.h) by making it use the same style as the rest of the input field.
* The rest of the listfullwidth patch is covered by the vertfull patch.
* https://tools.suckless.org/dmenu/patches/listfullwidth/
*/
#define PLAIN_PROMPT_PATCH 0
/* This patch changes the behaviour of matched items and the Tab key to allow tab completion.
* https://tools.suckless.org/dmenu/patches/prefix-completion/
*/
#define PREFIXCOMPLETION_PATCH 0
/* This patch adds an option -ps to specify an item by providing the index that should be
* pre-selected.
* https://tools.suckless.org/dmenu/patches/preselect/
*/
#define PRESELECT_PATCH 1
/* This patch allows dmenu to print out the 0-based index of matched text instead of the matched
* text itself. This can be useful in cases where you would like to select entries from one array
* of text but index into another, or when you are selecting from an ordered list of non-unique
* items.
* https://tools.suckless.org/dmenu/patches/printindex/
*/
#define PRINTINDEX_PATCH 0
/* This patch adds a flag (-t) which makes Return key to ignore selection and print the input
* text to stdout. The flag basically swaps the functions of Return and Shift+Return hotkeys.
*
* This patch is not compatible with the multi-select and json patches, both of which takes
* precedence over this one.
*
* https://tools.suckless.org/dmenu/patches/printinputtext/
*/
#define PRINTINPUTTEXT_PATCH 0
/* This patch adds a new flag to dmenu with which text input will be rejected if it would
* result in no matching item.
* https://tools.suckless.org/dmenu/patches/reject-no-match/
*/
#define REJECTNOMATCH_PATCH 0
/* The input width used to be relative to the input options prior to commit e1e1de7:
* https://git.suckless.org/dmenu/commit/e1e1de7b3b8399cba90ddca9613f837b2dbef7b9.html
*
* This had a performance hit when using large data sets and was removed in favour of having the
* input width take up 1/3rd of the available space.
*
* This option adds that feature back in with some performance optimisations at the cost of
* accuracy and correctness.
*/
#define RELATIVE_INPUT_WIDTH_PATCH 0
/* This patch adds a '-1' option which disables Shift-Return and Ctrl-Return.
* This guarantees that dmenu will only output one item, and that item was read from stdin.
* The original patch used '-r'. This was changed to '-1' to avoid conflict with the incremental
* patch.
* https://tools.suckless.org/dmenu/patches/restrict-return/
*/
#define RESTRICT_RETURN_PATCH 1
/* This patch adds support for text scrolling and no longer appends '...' for long input as
* it can handle long text.
* https://tools.suckless.org/dmenu/patches/scroll/
*/
#define SCROLL_PATCH 1
/* This patch adds -d and -D flags which separates the input into two halves; one half to be
* displayed in dmenu and the other to be printed to stdout. This patch takes precedence over
* the TSV patch.
* https://tools.suckless.org/dmenu/patches/separator/
*/
#define SEPARATOR_PATCH 0
/* This patch allows the symbols, which are printed in dmenu to indicate that either the input
* is too long or there are too many options to be shown in dmenu in one line, to be defined.
* https://tools.suckless.org/dmenu/patches/symbols/
*/
#define SYMBOLS_PATCH 1
/* With this patch dmenu will split input lines at first tab character and only display first
* part, but it will perform matching on and output full lines as usual.
*
* This can be useful if you want to separate data and representation, for example, a music
* player wrapper can display only a track title to user, but still supply full filename to
* the underlying script.
* https://tools.suckless.org/dmenu/patches/tsv/
*/
#define TSV_PATCH 1
/* This patch prevents dmenu from indenting items at the same level as the prompt length.
* https://tools.suckless.org/dmenu/patches/vertfull/
*/
#define VERTFULL_PATCH 1
/* Adds extended window manager hints such as _NET_WM_WINDOW_TYPE and _NET_WM_WINDOW_TYPE_DOCK.
* https://github.com/Baitinq/dmenu/blob/master/patches/dmenu-wm_type.diff
*/
#define WMTYPE_PATCH 1
/* This patch adds the ability to configure dmenu via Xresources. At startup, dmenu will read and
* apply the resources named below:
* dmenu.font : font or font set
* dmenu.background : normal background color
* dmenu.foreground : normal foreground color
* dmenu.selbackground : selected background color
* dmenu.selforeground : selected foreground color
*
* See patch/xresources.c for more color settings.
*
* https://tools.suckless.org/dmenu/patches/xresources/
*/
#define XRESOURCES_PATCH 1
/* This patch adds options for specifying dmenu window position and width.
* The center patch takes precedence over the XYW patch if enabled.
* https://tools.suckless.org/dmenu/patches/xyw/
*/
#define XYW_PATCH 0

Some files were not shown because too many files have changed in this diff Show more