Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
Alexis Jhon Gaspar | 02c73ec245 |
9
.gitmodules
vendored
9
.gitmodules
vendored
|
@ -16,12 +16,3 @@
|
||||||
[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
|
|
||||||
|
|
182
README.md
182
README.md
|
@ -1,94 +1,22 @@
|
||||||
# Suckless Utilities version 6.5
|
# Suckless Utilities version 6.3
|
||||||
|
## Warning
|
||||||
|
|
||||||
|
This is an older version, maintained for archival. Check main for an updated version.
|
||||||
|
|
||||||
## About
|
## About
|
||||||
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).
|
These are my builds of suckless software such as dwm and st.
|
||||||
|
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
|
||||||
|
|
||||||
### slim 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.
|
||||||
|
|
||||||
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
|
- clipnotify (included on the folder)
|
||||||
|
|
||||||
screenshot-spmenu dependencies:
|
screenshot-spmenu dependencies:
|
||||||
- curl
|
- curl
|
||||||
|
@ -101,35 +29,22 @@ screenshot-spmenu dependencies:
|
||||||
wallpaper-spmenu dependencies:
|
wallpaper-spmenu dependencies:
|
||||||
- xwallpaper
|
- xwallpaper
|
||||||
```
|
```
|
||||||
|
|
||||||
Additionally, spmenu will not work on macOS, so use `dmenu` instead.
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
### Prerequisites
|
|
||||||
|
1. Install necessary tools and libraries
|
||||||
```
|
```
|
||||||
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 (Hack as default, can be changed manually)
|
- Nerd Fonts (for slstatus)
|
||||||
- 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
|
||||||
|
@ -153,95 +68,58 @@ 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`, and `patches.h` files, to make sure all patches are applied correctly
|
4. Remove the `config.h` file, to make sure all patches are applied correctly
|
||||||
5. Copy `make clean install` (or `make install-all` for nsxiv) and paste it on your terminal
|
5. Copy `make clean install` 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/.xinitrc`)
|
7. Insert dwm, slstatus and/or st inside your `.xinitrc` using your favorite text editor (usually located in `/home/<username>/.xinitrc`)
|
||||||
- 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.
|
8. Start it and done!
|
||||||
- `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
|
||||||
- [x] Rebase the dwm build to dwm-flexipatch (maybe under a new branch with a VM debug environment?)
|
- [ ] Rebase the dwm build to dwm-flexipatch (maybe under a new branch with a VM debug environment?)
|
||||||
- [x] Integrate barmodules if the dwm-flexipatch rewrite did happen
|
- [ ] Integrate barmodules if the dwm-flexipatch rewrite did happen
|
||||||
- [x] Version jump from 6.3 -> 6.4
|
- [ ] 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 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.
|
Patching everything is as easy as downloading the diff file, use the `patch` command and apply changes.
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## 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 Utilities (the whole package and not the individual components) are versioned under the current version of the repo's dwm.
|
Suckless Uilities (the whole package and not the individual components) are versioned under the current version of the repo's dwm.
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
All programs are licensed under the MIT License, except for some submodules, which might have different licenses (for example, GPLv2).
|
All programs are licensed under the MIT License, which sucks, and worse than GNU GPL, but hey, it's better than proprietary code!
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
![Screenshot of the desktop](/pics/desktop.png)
|
|
||||||
![Screenshot of neofetch](/pics/neofetch.png)
|
![Screenshot of neofetch](/pics/neofetch.png)
|
||||||
![Screenshot of random screenshots](/pics/random.png)
|
![Screenshot of random applications (Spotify, Space Cadet Pinball, NCSA Mosaic)](/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.site) for helping me out with this and providing me with patches
|
* [Speedie](https://speedie.gq) 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
1
abduco
|
@ -1 +0,0 @@
|
||||||
Subproject commit 8c32909a159aaa9484c82b71f05b7a73321eb491
|
|
|
@ -1,3 +0,0 @@
|
||||||
# Dotfiles
|
|
||||||
|
|
||||||
Random dotfiles designed for suckless-utils.
|
|
1465
config/bashrc
1465
config/bashrc
File diff suppressed because it is too large
Load diff
|
@ -1,169 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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
|
|
||||||
}
|
|
|
@ -1,189 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -1,115 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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
|
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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)
|
|
||||||
}
|
|
|
@ -1,110 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
/home/lucss21a/.local/share/broot/launcher/bash/1
|
|
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
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
|
|
|
@ -1,66 +0,0 @@
|
||||||
// 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
|
|
||||||
}
|
|
|
@ -1,113 +0,0 @@
|
||||||
// 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)
|
|
||||||
}
|
|
|
@ -1,126 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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
|
|
||||||
# }
|
|
||||||
]
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
###############################################################
|
|
||||||
# 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)
|
|
||||||
}
|
|
|
@ -1,226 +0,0 @@
|
||||||
## 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
|
|
|
@ -1,79 +0,0 @@
|
||||||
#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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
#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;
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
#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 +0,0 @@
|
||||||
/home/lucss21a/.cache/wal/dunstrc
|
|
|
@ -1,8 +0,0 @@
|
||||||
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
|
|
|
@ -1,26 +0,0 @@
|
||||||
// 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;
|
|
|
@ -1,90 +0,0 @@
|
||||||
/** 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;
|
|
||||||
}
|
|
|
@ -1,154 +0,0 @@
|
||||||
(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))
|
|
|
@ -1,74 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,73 +0,0 @@
|
||||||
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
|
|
|
@ -1,25 +0,0 @@
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣎⣬⢴⣒⣐⡤⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡾⠀⡳⠟⠮⣻⣯⣟⣵⣾⣯⣥⣴⣆⣀⢤⢄⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣇⢃⡫⠩⡐⢖⡉⡬⠽⢛⣛⡿⠿⢿⣿⣿⣿⣶⣾⣯⣤⣶⣆⣠⡤⠄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡽⣸⡀⡠⠉⡍⠓⠲⠷⠶⣵⣄⣀⡉⠉⠐⠒⠏⠭⢽⣛⠟⠿⢿⣿⣿⣿⣿⣶⣷⣤⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⢧⡇⠁⠐⢠⢌⠛⡓⠵⠂⠀⠀⠈⠉⠉⠛⠒⠲⠦⠼⣄⣎⣏⣙⠒⢚⢋⡝⢿⡿⠇⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣸⠁⠀⠀⣀⢀⠀⠈⣁⠀⠀⠀⠀⠀⠀⢀⡺⢸⣍⡅⠀⢠⢨⠫⠽⣙⡖⢿⣾⡏⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡏⣷⣿⣶⣶⣶⣭⣩⣅⣿⣋⡋⠥⠐⠖⡀⠤⠄⢀⣀⠐⠛⠊⠉⠒⣁⢋⢹⣦⣯⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣶⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣷⣶⣦⣤⣭⣀⣒⡅⠍⠀⢀⡤⠻⠅⣆⣹⣯⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⠧⠴⣞⡹⠙⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣜⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⣩⣿⣿⣿⣿⣿⣿⣿⠀⣠⡰⣦⢿⡿⠅⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣸⣿⣿⣿⣿⡿⠋⠛⣿⣿⣿⣿⡿⠁⣠⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⣌⢧⠘⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣘⢏⣿⣿⣿⣿⣿⣿⣦⣾⣿⣿⣿⡏⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⢄⢻⡈⢿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⡼⠄⢿⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⢰⣏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⢀⢃⠹⣤⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⣼⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠻⠿⣦⣸⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⢀⡽⣾⣿⣿⣿⣿⠋⠉⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠰⢸⢹⡘⣟⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⣾⣧⣿⣿⣿⣿⣿⣷⣶⣾⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣠⠨⡟⢿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⢠⣾⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⡄⢠⣰⣾⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⣸⡏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⢹⣿⣿⣿⣿⣿⣿⣿⣿⠁⠈⠃⡈⢧⣿⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⣿⣻⠙⣻⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣿⡟⠀⠻⠀⢿⣾⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⢸⡏⣎⣁⠔⠳⡉⡥⣄⣀⣉⠍⠟⠛⡻⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⠇⠐⡆⠸⣦⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠠⠯⢽⣞⣉⣭⠶⢒⣯⡿⠏⣛⣻⣗⡆⡀⣷⠟⢢⣈⡋⠛⢛⡻⠿⠈⣣⡀⣆⣹⣿⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠛⠋⠹⠲⢒⡿⡥⢴⣞⣋⣤⠷⢋⣡⠴⢒⣻⡡⢜⠓⢀⢇⣲⡘⡿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠛⠉⠙⠖⠚⣿⡥⢴⣛⣫⣬⠞⢊⣟⢿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
||||||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠋⠋⠽⠳⡾⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
|
@ -1,864 +0,0 @@
|
||||||
# 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"
|
|
|
@ -1,17 +0,0 @@
|
||||||
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
|
|
|
@ -1,3 +0,0 @@
|
||||||
https://reddit.com/r/unixporn.rss
|
|
||||||
https://reddit.com/r/linux.rss
|
|
||||||
https://alexisgaming95.neocities.org/feed.xml
|
|
|
@ -1,99 +0,0 @@
|
||||||
### 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 }
|
|
|
@ -1,9 +0,0 @@
|
||||||
# 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"
|
|
|
@ -1,154 +0,0 @@
|
||||||
# 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
|
|
||||||
}
|
|
|
@ -134,62 +134,61 @@ spmenu = {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Alpha */
|
|
||||||
/* Alpha */
|
/* Alpha */
|
||||||
alpha = ( { itemnormfg = 255; // Normal item foreground alpha (0-255)
|
alpha = ( { itemnormfg = 255; // Normal item foreground alpha (0-255)
|
||||||
itemnormbg = 222; // Normal item background alpha (0-255)
|
itemnormbg = 182; // 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 = 222; // Normal next item background alpha (0-255)
|
itemnormbg2 = 182; // Normal next item background alpha (0-255)
|
||||||
|
|
||||||
itemselfg = 255; // Selected item foreground alpha (0-255)
|
itemselfg = 255; // Selected item foreground alpha (0-255)
|
||||||
itemselbg = 222; // Selected item background alpha (0-255)
|
itemselbg = 182; // Selected item background alpha (0-255)
|
||||||
|
|
||||||
itemmarkedfg = 255; // Marked item foreground alpha (0-255)
|
itemmarkedfg = 255; // Marked item foreground alpha (0-255)
|
||||||
itemmarkedbg = 222; // Marked item background alpha (0-255)
|
itemmarkedbg = 182; // 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 = 222; // Normal priority item background alpha (0-255)
|
itemnormpribg = 182; // 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 = 222; // Selected priority item background alpha (0-255)
|
itemselpribg = 182; // Selected priority item background alpha (0-255)
|
||||||
|
|
||||||
inputfg = 255; // Input foreground alpha (0-255)
|
inputfg = 255; // Input foreground alpha (0-255)
|
||||||
inputbg = 222; // Input background alpha (0-255)
|
inputbg = 182; // Input background alpha (0-255)
|
||||||
|
|
||||||
pretextfg = 255; // Pretext foreground alpha (0-255)
|
pretextfg = 255; // Pretext foreground alpha (0-255)
|
||||||
pretextbg = 222; // Pretext background alpha (0-255)
|
pretextbg = 182; // Pretext background alpha (0-255)
|
||||||
|
|
||||||
menu = 222; // Menu alpha (0-255)
|
menu = 182; // Menu alpha (0-255)
|
||||||
|
|
||||||
promptfg = 255; // Prompt foreground alpha (0-255)
|
promptfg = 255; // Prompt foreground alpha (0-255)
|
||||||
promptbg = 222; // Prompt background alpha (0-255)
|
promptbg = 182; // Prompt background alpha (0-255)
|
||||||
|
|
||||||
larrowfg = 255; // Left arrow foreground alpha (0-255)
|
larrowfg = 255; // Left arrow foreground alpha (0-255)
|
||||||
larrowbg = 222; // Left arrow background alpha (0-255)
|
larrowbg = 182; // Left arrow background alpha (0-255)
|
||||||
|
|
||||||
rarrowfg = 255; // Right arrow foreground alpha (0-255)
|
rarrowfg = 255; // Right arrow foreground alpha (0-255)
|
||||||
rarrowbg = 222; // Right arrow background alpha (0-255)
|
rarrowbg = 182; // Right arrow background alpha (0-255)
|
||||||
|
|
||||||
hlnormfg = 255; // Normal highlight foreground alpha (0-255)
|
hlnormfg = 255; // Normal highlight foreground alpha (0-255)
|
||||||
hlnormbg = 222; // Normal highlight background alpha (0-255)
|
hlnormbg = 182; // Normal highlight background alpha (0-255)
|
||||||
|
|
||||||
hlselfg = 255; // Selected highlight foreground alpha (0-255)
|
hlselfg = 255; // Selected highlight foreground alpha (0-255)
|
||||||
hlselbg = 222; // Selected highlight background alpha (0-255)
|
hlselbg = 182; // Selected highlight background alpha (0-255)
|
||||||
|
|
||||||
numfg = 255; // Match count foreground alpha (0-255)
|
numfg = 255; // Match count foreground alpha (0-255)
|
||||||
numbg = 222; // Match count background alpha (0-255)
|
numbg = 182; // Match count background alpha (0-255)
|
||||||
|
|
||||||
border = 255; // Border alpha (0-255)
|
border = 182; // Border alpha (0-255)
|
||||||
|
|
||||||
caretfg = 255; // Caret (cursor) foreground alpha (0-255)
|
caretfg = 255; // Caret (cursor) foreground alpha (0-255)
|
||||||
caretbg = 222; // Caret (cursor) background alpha (0-255)
|
caretbg = 182; // Caret (cursor) background alpha (0-255)
|
||||||
|
|
||||||
modefg = 255; // Mode indicator foreground alpha (0-255)
|
modefg = 255; // Mode indicator foreground alpha (0-255)
|
||||||
modebg = 222; // Mode indicator background alpha (0-255)
|
modebg = 182; // 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 = 222; // Caps Lock indicator background alpha (0-255)
|
capsbg = 182; // Caps Lock indicator background alpha (0-255)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
4
|
|
||||||
12
|
|
||||||
6
|
|
||||||
14
|
|
||||||
2
|
|
||||||
10
|
|
||||||
11
|
|
||||||
3
|
|
||||||
5
|
|
||||||
1
|
|
||||||
13
|
|
||||||
9
|
|
||||||
7
|
|
||||||
15
|
|
||||||
0
|
|
|
@ -1,3 +0,0 @@
|
||||||
#3F4193
|
|
||||||
#5373CD
|
|
||||||
#6994D7
|
|
|
@ -1,30 +0,0 @@
|
||||||
#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
|
|
|
@ -1,91 +0,0 @@
|
||||||
##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
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,226 +0,0 @@
|
||||||
## 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
|
|
|
@ -1,89 +0,0 @@
|
||||||
! 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}
|
|
|
@ -1,465 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,74 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/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
|
|
|
@ -1,52 +0,0 @@
|
||||||
# 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%
|
|
|
@ -1,3 +0,0 @@
|
||||||
{color1}
|
|
||||||
{color4}
|
|
||||||
{color6}
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
{"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"}}
|
|
|
@ -1 +0,0 @@
|
||||||
{"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"}}
|
|
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,226 +0,0 @@
|
||||||
## 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
|
|
|
@ -1,89 +0,0 @@
|
||||||
! 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}
|
|
|
@ -1,465 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,74 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,13 +0,0 @@
|
||||||
# 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)
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/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
|
|
|
@ -1,265 +0,0 @@
|
||||||
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
|
|
|
@ -1,153 +0,0 @@
|
||||||
/* 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
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +0,0 @@
|
||||||
#!/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"} &
|
|
|
@ -1,8 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
static void refreshoptions();
|
|
||||||
static void readstream(FILE* stream);
|
|
|
@ -1,66 +0,0 @@
|
||||||
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++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,115 +0,0 @@
|
||||||
#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();
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
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
|
|
|
@ -1 +0,0 @@
|
||||||
static void expect(char *expect, XKeyEvent *ev);
|
|
|
@ -1,60 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
static int arrayhas(char **list, int length, char *item);
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
#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
|
|
|
@ -1,18 +0,0 @@
|
||||||
#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
|
|
|
@ -1,159 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
static int issel(size_t id);
|
|
|
@ -1,126 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
|
@ -1,68 +0,0 @@
|
||||||
#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();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
static void readevent();
|
|
|
@ -1,16 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
#define NUMBERSMAXDIGITS 100
|
|
||||||
#define NUMBERSBUFSIZE (NUMBERSMAXDIGITS * 2) + 1
|
|
||||||
|
|
||||||
static void recalculatenumbers();
|
|
|
@ -1,172 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
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);
|
|
|
@ -1,90 +0,0 @@
|
||||||
#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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,355 +0,0 @@
|
||||||
/* 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
|
|
|
@ -1,5 +1,4 @@
|
||||||
*.o
|
*.o
|
||||||
config.h
|
|
||||||
patches.h
|
|
||||||
dmenu
|
dmenu
|
||||||
stest
|
stest
|
||||||
|
config.h
|
|
@ -6,7 +6,13 @@ 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: dmenu stest
|
all: options 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) $<
|
||||||
|
@ -14,10 +20,7 @@ all: dmenu stest
|
||||||
config.h:
|
config.h:
|
||||||
cp config.def.h $@
|
cp config.def.h $@
|
||||||
|
|
||||||
patches.h:
|
$(OBJ): arg.h config.h config.mk drw.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)
|
||||||
|
@ -58,4 +61,4 @@ uninstall:
|
||||||
$(DESTDIR)$(MANPREFIX)/man1/dmenu.1\
|
$(DESTDIR)$(MANPREFIX)/man1/dmenu.1\
|
||||||
$(DESTDIR)$(MANPREFIX)/man1/stest.1
|
$(DESTDIR)$(MANPREFIX)/man1/stest.1
|
||||||
|
|
||||||
.PHONY: all clean dist install uninstall
|
.PHONY: all options clean dist install uninstall
|
34
dmenu/config.def.h
Normal file
34
dmenu/config.def.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/* 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 */
|
||||||
|
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||||
|
static const char *fonts[] = {
|
||||||
|
"Hack Nerd Font:size=11:"
|
||||||
|
};
|
||||||
|
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||||
|
|
||||||
|
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 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *colors[SchemeLast][2] = {
|
||||||
|
/* fg bg */
|
||||||
|
[SchemeNorm] = { "#bbbbbb", "#222222" },
|
||||||
|
[SchemeSel] = { "#eeeeee", "#005577" },
|
||||||
|
[SchemeOut] = { "#000000", "#00ffff" },
|
||||||
|
[SchemeMid] = { "#eeeeee", "#770000" },
|
||||||
|
};
|
||||||
|
/* -l and -g options; controls number of lines and columns in grid if > 0 */
|
||||||
|
static unsigned int lines = 0;
|
||||||
|
static unsigned int columns = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Characters not considered part of a word while deleting words
|
||||||
|
* for example: " /?\"&[]"
|
||||||
|
*/
|
||||||
|
static const char worddelimiters[] = " ";
|
|
@ -1,5 +1,5 @@
|
||||||
# dmenu version
|
# dmenu version
|
||||||
VERSION = 5.3
|
VERSION = 5.1
|
||||||
|
|
||||||
# paths
|
# paths
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
|
@ -15,26 +15,19 @@ 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) ${PANGOINC}
|
INCS = -I$(X11INC) -I$(FREETYPEINC)
|
||||||
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) -lm $(XRENDER) ${PANGOLIB}
|
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) ${XRENDERLIBS}
|
||||||
|
|
||||||
# flags
|
# flags
|
||||||
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) $(EXTRAFLAGS)
|
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS)
|
||||||
CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS)
|
CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS)
|
||||||
LDFLAGS = $(LIBS)
|
LDFLAGS = $(LIBS)
|
||||||
|
|
|
@ -4,6 +4,8 @@ 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
|
||||||
|
@ -47,8 +49,11 @@ 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 vertically, with the given number of lines.
|
dmenu lists items in a grid 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
|
847
dmenu/dmenu.c
Normal file
847
dmenu/dmenu.c
Normal file
|
@ -0,0 +1,847 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#ifdef XINERAMA
|
||||||
|
#include <X11/extensions/Xinerama.h>
|
||||||
|
#endif
|
||||||
|
#include <X11/Xft/Xft.h>
|
||||||
|
|
||||||
|
#include "drw.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
/* macros */
|
||||||
|
#define INTERSECT(x,y,w,h,r) (MAX(0, MIN((x)+(w),(r).x_org+(r).width) - MAX((x),(r).x_org)) \
|
||||||
|
* MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org)))
|
||||||
|
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||||
|
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
||||||
|
#define OPAQUE 0xffU
|
||||||
|
|
||||||
|
/* enums */
|
||||||
|
enum { SchemeNorm, SchemeSel, SchemeOut, SchemeMid, SchemeLast }; /* color schemes */
|
||||||
|
|
||||||
|
struct item {
|
||||||
|
char *text;
|
||||||
|
struct item *left, *right;
|
||||||
|
int out;
|
||||||
|
};
|
||||||
|
|
||||||
|
static char text[BUFSIZ] = "";
|
||||||
|
static char *embed;
|
||||||
|
static int bh, mw, mh;
|
||||||
|
static int inputw = 0, promptw;
|
||||||
|
static int lrpad; /* sum of left and right padding */
|
||||||
|
static size_t cursor;
|
||||||
|
static struct item *items = NULL;
|
||||||
|
static struct item *matches, *matchend;
|
||||||
|
static struct item *prev, *curr, *next, *sel;
|
||||||
|
static int mon = -1, screen;
|
||||||
|
|
||||||
|
static Atom clip, utf8;
|
||||||
|
static Display *dpy;
|
||||||
|
static Window root, parentwin, win;
|
||||||
|
static XIC xic;
|
||||||
|
|
||||||
|
static int useargb = 0;
|
||||||
|
static Visual *visual;
|
||||||
|
static int depth;
|
||||||
|
static Colormap cmap;
|
||||||
|
|
||||||
|
static Drw *drw;
|
||||||
|
static Clr *scheme[SchemeLast];
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
static char * cistrstr(const char *s, const char *sub);
|
||||||
|
static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp;
|
||||||
|
static char *(*fstrstr)(const char *, const char *) = cistrstr;
|
||||||
|
|
||||||
|
static void
|
||||||
|
appenditem(struct item *item, struct item **list, struct item **last)
|
||||||
|
{
|
||||||
|
if (*last)
|
||||||
|
(*last)->right = item;
|
||||||
|
else
|
||||||
|
*list = item;
|
||||||
|
|
||||||
|
item->left = *last;
|
||||||
|
item->right = NULL;
|
||||||
|
*last = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
calcoffsets(void)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
|
||||||
|
if (lines > 0)
|
||||||
|
n = lines * columns * bh;
|
||||||
|
else
|
||||||
|
n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">"));
|
||||||
|
/* calculate which items will begin the next page and previous page */
|
||||||
|
for (i = 0, next = curr; next; next = next->right)
|
||||||
|
if ((i += (lines > 0) ? bh : MIN(TEXTW(next->text), n)) > n)
|
||||||
|
break;
|
||||||
|
for (i = 0, prev = curr; prev && prev->left; prev = prev->left)
|
||||||
|
if ((i += (lines > 0) ? bh : MIN(TEXTW(prev->left->text), n)) > n)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cleanup(void)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
XUngrabKey(dpy, AnyKey, AnyModifier, root);
|
||||||
|
for (i = 0; i < SchemeLast; i++)
|
||||||
|
free(scheme[i]);
|
||||||
|
drw_free(drw);
|
||||||
|
XSync(dpy, False);
|
||||||
|
XCloseDisplay(dpy);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
cistrstr(const char *h, const char *n)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (!n[0])
|
||||||
|
return (char *)h;
|
||||||
|
|
||||||
|
for (; *h; ++h) {
|
||||||
|
for (i = 0; n[i] && tolower((unsigned char)n[i]) ==
|
||||||
|
tolower((unsigned char)h[i]); ++i)
|
||||||
|
;
|
||||||
|
if (n[i] == '\0')
|
||||||
|
return (char *)h;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
drawitem(struct item *item, int x, int y, int w)
|
||||||
|
{
|
||||||
|
if (item == sel)
|
||||||
|
drw_setscheme(drw, scheme[SchemeSel]);
|
||||||
|
else if (item->left == sel || item->right == sel)
|
||||||
|
drw_setscheme(drw, scheme[SchemeMid]);
|
||||||
|
else if (item->out)
|
||||||
|
drw_setscheme(drw, scheme[SchemeOut]);
|
||||||
|
else
|
||||||
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
|
|
||||||
|
return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
drawmenu(void)
|
||||||
|
{
|
||||||
|
unsigned int curpos;
|
||||||
|
struct item *item;
|
||||||
|
int x = 0, y = 0, w;
|
||||||
|
|
||||||
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
|
drw_rect(drw, 0, 0, mw, mh, 1, 1);
|
||||||
|
|
||||||
|
if (prompt && *prompt) {
|
||||||
|
drw_setscheme(drw, scheme[SchemeSel]);
|
||||||
|
x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0);
|
||||||
|
}
|
||||||
|
/* draw input field */
|
||||||
|
w = (lines > 0 || !matches) ? mw - x : inputw;
|
||||||
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
|
drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
|
||||||
|
|
||||||
|
curpos = TEXTW(text) - TEXTW(&text[cursor]);
|
||||||
|
if ((curpos += lrpad / 2 - 1) < w) {
|
||||||
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
|
drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lines > 0) {
|
||||||
|
/* draw grid */
|
||||||
|
int i = 0;
|
||||||
|
for (item = curr; item != next; item = item->right, i++)
|
||||||
|
drawitem(
|
||||||
|
item,
|
||||||
|
x + ((i / lines) * ((mw - x) / columns)),
|
||||||
|
y + (((i % lines) + 1) * bh),
|
||||||
|
(mw - x) / columns
|
||||||
|
);
|
||||||
|
} else if (matches) {
|
||||||
|
/* draw horizontal list */
|
||||||
|
x += inputw;
|
||||||
|
w = TEXTW("<");
|
||||||
|
if (curr->left) {
|
||||||
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
|
drw_text(drw, x, 0, w, bh, lrpad / 2, "<", 0);
|
||||||
|
}
|
||||||
|
x += w;
|
||||||
|
for (item = curr; item != next; item = item->right)
|
||||||
|
x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">")));
|
||||||
|
if (next) {
|
||||||
|
w = TEXTW(">");
|
||||||
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
|
drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
drw_map(drw, win, 0, 0, mw, mh);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
grabfocus(void)
|
||||||
|
{
|
||||||
|
struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
|
||||||
|
Window focuswin;
|
||||||
|
int i, revertwin;
|
||||||
|
|
||||||
|
for (i = 0; i < 100; ++i) {
|
||||||
|
XGetInputFocus(dpy, &focuswin, &revertwin);
|
||||||
|
if (focuswin == win)
|
||||||
|
return;
|
||||||
|
XSetInputFocus(dpy, win, RevertToParent, CurrentTime);
|
||||||
|
nanosleep(&ts, NULL);
|
||||||
|
}
|
||||||
|
die("cannot grab focus");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
grabkeyboard(void)
|
||||||
|
{
|
||||||
|
struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 };
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (embed)
|
||||||
|
return;
|
||||||
|
/* try to grab keyboard, we may have to wait for another process to ungrab */
|
||||||
|
for (i = 0; i < 1000; i++) {
|
||||||
|
if (XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync,
|
||||||
|
GrabModeAsync, CurrentTime) == GrabSuccess)
|
||||||
|
return;
|
||||||
|
nanosleep(&ts, NULL);
|
||||||
|
}
|
||||||
|
die("cannot grab keyboard");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
match(void)
|
||||||
|
{
|
||||||
|
static char **tokv = NULL;
|
||||||
|
static int tokn = 0;
|
||||||
|
|
||||||
|
char buf[sizeof text], *s;
|
||||||
|
int i, tokc = 0;
|
||||||
|
size_t len, textsize;
|
||||||
|
struct item *item, *lprefix, *lsubstr, *prefixend, *substrend;
|
||||||
|
|
||||||
|
strcpy(buf, text);
|
||||||
|
/* separate input text into tokens to be matched individually */
|
||||||
|
for (s = strtok(buf, " "); s; tokv[tokc - 1] = s, s = strtok(NULL, " "))
|
||||||
|
if (++tokc > tokn && !(tokv = realloc(tokv, ++tokn * sizeof *tokv)))
|
||||||
|
die("cannot realloc %u bytes:", tokn * sizeof *tokv);
|
||||||
|
len = tokc ? strlen(tokv[0]) : 0;
|
||||||
|
|
||||||
|
matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL;
|
||||||
|
textsize = strlen(text) + 1;
|
||||||
|
for (item = items; item && item->text; item++) {
|
||||||
|
for (i = 0; i < tokc; i++)
|
||||||
|
if (!fstrstr(item->text, tokv[i]))
|
||||||
|
break;
|
||||||
|
if (i != tokc) /* not all tokens match */
|
||||||
|
continue;
|
||||||
|
/* exact matches go first, then prefixes, then substrings */
|
||||||
|
if (!tokc || !fstrncmp(text, item->text, textsize))
|
||||||
|
appenditem(item, &matches, &matchend);
|
||||||
|
else if (!fstrncmp(tokv[0], item->text, len))
|
||||||
|
appenditem(item, &lprefix, &prefixend);
|
||||||
|
else
|
||||||
|
appenditem(item, &lsubstr, &substrend);
|
||||||
|
}
|
||||||
|
if (lprefix) {
|
||||||
|
if (matches) {
|
||||||
|
matchend->right = lprefix;
|
||||||
|
lprefix->left = matchend;
|
||||||
|
} else
|
||||||
|
matches = lprefix;
|
||||||
|
matchend = prefixend;
|
||||||
|
}
|
||||||
|
if (lsubstr) {
|
||||||
|
if (matches) {
|
||||||
|
matchend->right = lsubstr;
|
||||||
|
lsubstr->left = matchend;
|
||||||
|
} else
|
||||||
|
matches = lsubstr;
|
||||||
|
matchend = substrend;
|
||||||
|
}
|
||||||
|
curr = sel = matches;
|
||||||
|
calcoffsets();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
insert(const char *str, ssize_t n)
|
||||||
|
{
|
||||||
|
if (strlen(text) + n > sizeof text - 1)
|
||||||
|
return;
|
||||||
|
/* move existing text out of the way, insert new text, and update cursor */
|
||||||
|
memmove(&text[cursor + n], &text[cursor], sizeof text - cursor - MAX(n, 0));
|
||||||
|
if (n > 0)
|
||||||
|
memcpy(&text[cursor], str, n);
|
||||||
|
cursor += n;
|
||||||
|
match();
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
nextrune(int inc)
|
||||||
|
{
|
||||||
|
ssize_t n;
|
||||||
|
|
||||||
|
/* return location of next utf8 rune in the given direction (+1 or -1) */
|
||||||
|
for (n = cursor + inc; n + inc >= 0 && (text[n] & 0xc0) == 0x80; n += inc)
|
||||||
|
;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
movewordedge(int dir)
|
||||||
|
{
|
||||||
|
if (dir < 0) { /* move cursor to the start of the word*/
|
||||||
|
while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]))
|
||||||
|
cursor = nextrune(-1);
|
||||||
|
while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)]))
|
||||||
|
cursor = nextrune(-1);
|
||||||
|
} else { /* move cursor to the end of the word */
|
||||||
|
while (text[cursor] && strchr(worddelimiters, text[cursor]))
|
||||||
|
cursor = nextrune(+1);
|
||||||
|
while (text[cursor] && !strchr(worddelimiters, text[cursor]))
|
||||||
|
cursor = nextrune(+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
keypress(XKeyEvent *ev)
|
||||||
|
{
|
||||||
|
char buf[32];
|
||||||
|
int len;
|
||||||
|
KeySym ksym;
|
||||||
|
Status status;
|
||||||
|
|
||||||
|
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
|
||||||
|
switch (status) {
|
||||||
|
default: /* XLookupNone, XBufferOverflow */
|
||||||
|
return;
|
||||||
|
case XLookupChars:
|
||||||
|
goto insert;
|
||||||
|
case XLookupKeySym:
|
||||||
|
case XLookupBoth:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ev->state & ControlMask) {
|
||||||
|
switch(ksym) {
|
||||||
|
case XK_a: ksym = XK_Home; break;
|
||||||
|
case XK_b: ksym = XK_Left; break;
|
||||||
|
case XK_c: ksym = XK_Escape; break;
|
||||||
|
case XK_d: ksym = XK_Delete; break;
|
||||||
|
case XK_e: ksym = XK_End; break;
|
||||||
|
case XK_f: ksym = XK_Right; break;
|
||||||
|
case XK_g: ksym = XK_Escape; break;
|
||||||
|
case XK_h: ksym = XK_BackSpace; break;
|
||||||
|
case XK_i: ksym = XK_Tab; break;
|
||||||
|
case XK_j: /* fallthrough */
|
||||||
|
case XK_J: /* fallthrough */
|
||||||
|
case XK_m: /* fallthrough */
|
||||||
|
case XK_M: ksym = XK_Return; ev->state &= ~ControlMask; break;
|
||||||
|
case XK_n: ksym = XK_Down; break;
|
||||||
|
case XK_p: ksym = XK_Up; break;
|
||||||
|
|
||||||
|
case XK_k: /* delete right */
|
||||||
|
text[cursor] = '\0';
|
||||||
|
match();
|
||||||
|
break;
|
||||||
|
case XK_u: /* delete left */
|
||||||
|
insert(NULL, 0 - cursor);
|
||||||
|
break;
|
||||||
|
case XK_w: /* delete word */
|
||||||
|
while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]))
|
||||||
|
insert(NULL, nextrune(-1) - cursor);
|
||||||
|
while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)]))
|
||||||
|
insert(NULL, nextrune(-1) - cursor);
|
||||||
|
break;
|
||||||
|
case XK_y: /* paste selection */
|
||||||
|
case XK_Y:
|
||||||
|
XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY,
|
||||||
|
utf8, utf8, win, CurrentTime);
|
||||||
|
return;
|
||||||
|
case XK_Left:
|
||||||
|
case XK_KP_Left:
|
||||||
|
movewordedge(-1);
|
||||||
|
goto draw;
|
||||||
|
case XK_Right:
|
||||||
|
case XK_KP_Right:
|
||||||
|
movewordedge(+1);
|
||||||
|
goto draw;
|
||||||
|
case XK_Return:
|
||||||
|
case XK_KP_Enter:
|
||||||
|
break;
|
||||||
|
case XK_bracketleft:
|
||||||
|
cleanup();
|
||||||
|
exit(1);
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (ev->state & Mod1Mask) {
|
||||||
|
switch(ksym) {
|
||||||
|
case XK_b:
|
||||||
|
movewordedge(-1);
|
||||||
|
goto draw;
|
||||||
|
case XK_f:
|
||||||
|
movewordedge(+1);
|
||||||
|
goto draw;
|
||||||
|
case XK_g: ksym = XK_Home; break;
|
||||||
|
case XK_G: ksym = XK_End; break;
|
||||||
|
case XK_h: ksym = XK_Up; break;
|
||||||
|
case XK_j: ksym = XK_Next; break;
|
||||||
|
case XK_k: ksym = XK_Prior; break;
|
||||||
|
case XK_l: ksym = XK_Down; break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(ksym) {
|
||||||
|
default:
|
||||||
|
insert:
|
||||||
|
if (!iscntrl(*buf))
|
||||||
|
insert(buf, len);
|
||||||
|
break;
|
||||||
|
case XK_Delete:
|
||||||
|
case XK_KP_Delete:
|
||||||
|
if (text[cursor] == '\0')
|
||||||
|
return;
|
||||||
|
cursor = nextrune(+1);
|
||||||
|
/* fallthrough */
|
||||||
|
case XK_BackSpace:
|
||||||
|
if (cursor == 0)
|
||||||
|
return;
|
||||||
|
insert(NULL, nextrune(-1) - cursor);
|
||||||
|
break;
|
||||||
|
case XK_End:
|
||||||
|
case XK_KP_End:
|
||||||
|
if (text[cursor] != '\0') {
|
||||||
|
cursor = strlen(text);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (next) {
|
||||||
|
/* jump to end of list and position items in reverse */
|
||||||
|
curr = matchend;
|
||||||
|
calcoffsets();
|
||||||
|
curr = prev;
|
||||||
|
calcoffsets();
|
||||||
|
while (next && (curr = curr->right))
|
||||||
|
calcoffsets();
|
||||||
|
}
|
||||||
|
sel = matchend;
|
||||||
|
break;
|
||||||
|
case XK_Escape:
|
||||||
|
cleanup();
|
||||||
|
exit(1);
|
||||||
|
case XK_Home:
|
||||||
|
case XK_KP_Home:
|
||||||
|
if (sel == matches) {
|
||||||
|
cursor = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sel = curr = matches;
|
||||||
|
calcoffsets();
|
||||||
|
break;
|
||||||
|
case XK_Left:
|
||||||
|
case XK_KP_Left:
|
||||||
|
if (cursor > 0 && (!sel || !sel->left || lines > 0)) {
|
||||||
|
cursor = nextrune(-1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (lines > 0)
|
||||||
|
return;
|
||||||
|
/* fallthrough */
|
||||||
|
case XK_Up:
|
||||||
|
case XK_KP_Up:
|
||||||
|
if (sel && sel->left && (sel = sel->left)->right == curr) {
|
||||||
|
curr = prev;
|
||||||
|
calcoffsets();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XK_Next:
|
||||||
|
case XK_KP_Next:
|
||||||
|
if (!next)
|
||||||
|
return;
|
||||||
|
sel = curr = next;
|
||||||
|
calcoffsets();
|
||||||
|
break;
|
||||||
|
case XK_Prior:
|
||||||
|
case XK_KP_Prior:
|
||||||
|
if (!prev)
|
||||||
|
return;
|
||||||
|
sel = curr = prev;
|
||||||
|
calcoffsets();
|
||||||
|
break;
|
||||||
|
case XK_Return:
|
||||||
|
case XK_KP_Enter:
|
||||||
|
puts((sel && !(ev->state & ShiftMask)) ? sel->text : text);
|
||||||
|
if (!(ev->state & ControlMask)) {
|
||||||
|
cleanup();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
if (sel)
|
||||||
|
sel->out = 1;
|
||||||
|
break;
|
||||||
|
case XK_Right:
|
||||||
|
case XK_KP_Right:
|
||||||
|
if (text[cursor] != '\0') {
|
||||||
|
cursor = nextrune(+1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (lines > 0)
|
||||||
|
return;
|
||||||
|
/* fallthrough */
|
||||||
|
case XK_Down:
|
||||||
|
case XK_KP_Down:
|
||||||
|
if (sel && sel->right && (sel = sel->right) == next) {
|
||||||
|
curr = next;
|
||||||
|
calcoffsets();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XK_Tab:
|
||||||
|
if (!sel)
|
||||||
|
return;
|
||||||
|
strncpy(text, sel->text, sizeof text - 1);
|
||||||
|
text[sizeof text - 1] = '\0';
|
||||||
|
cursor = strlen(text);
|
||||||
|
match();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw:
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
paste(void)
|
||||||
|
{
|
||||||
|
char *p, *q;
|
||||||
|
int di;
|
||||||
|
unsigned long dl;
|
||||||
|
Atom da;
|
||||||
|
|
||||||
|
/* we have been given the current selection, now insert it into input */
|
||||||
|
if (XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False,
|
||||||
|
utf8, &da, &di, &dl, &dl, (unsigned char **)&p)
|
||||||
|
== Success && p) {
|
||||||
|
insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p));
|
||||||
|
XFree(p);
|
||||||
|
}
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xinitvisual()
|
||||||
|
{
|
||||||
|
XVisualInfo *infos;
|
||||||
|
XRenderPictFormat *fmt;
|
||||||
|
int nitems;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
XVisualInfo tpl = {
|
||||||
|
.screen = screen,
|
||||||
|
.depth = 32,
|
||||||
|
.class = TrueColor
|
||||||
|
};
|
||||||
|
long masks = VisualScreenMask | VisualDepthMask | VisualClassMask;
|
||||||
|
|
||||||
|
infos = XGetVisualInfo(dpy, masks, &tpl, &nitems);
|
||||||
|
visual = NULL;
|
||||||
|
for(i = 0; i < nitems; i ++) {
|
||||||
|
fmt = XRenderFindVisualFormat(dpy, infos[i].visual);
|
||||||
|
if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
|
||||||
|
visual = infos[i].visual;
|
||||||
|
depth = infos[i].depth;
|
||||||
|
cmap = XCreateColormap(dpy, root, visual, AllocNone);
|
||||||
|
useargb = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XFree(infos);
|
||||||
|
|
||||||
|
if (! visual) {
|
||||||
|
visual = DefaultVisual(dpy, screen);
|
||||||
|
depth = DefaultDepth(dpy, screen);
|
||||||
|
cmap = DefaultColormap(dpy, screen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
readstdin(void)
|
||||||
|
{
|
||||||
|
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, stdin); 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);
|
||||||
|
items[i].out = 0;
|
||||||
|
drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL);
|
||||||
|
if (tmpmax > inputw) {
|
||||||
|
inputw = tmpmax;
|
||||||
|
imax = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (items)
|
||||||
|
items[i].text = NULL;
|
||||||
|
inputw = items ? TEXTW(items[imax].text) : 0;
|
||||||
|
lines = MIN(lines, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
run(void)
|
||||||
|
{
|
||||||
|
XEvent ev;
|
||||||
|
|
||||||
|
while (!XNextEvent(dpy, &ev)) {
|
||||||
|
if (XFilterEvent(&ev, win))
|
||||||
|
continue;
|
||||||
|
switch(ev.type) {
|
||||||
|
case DestroyNotify:
|
||||||
|
if (ev.xdestroywindow.window != win)
|
||||||
|
break;
|
||||||
|
cleanup();
|
||||||
|
exit(1);
|
||||||
|
case Expose:
|
||||||
|
if (ev.xexpose.count == 0)
|
||||||
|
drw_map(drw, win, 0, 0, mw, mh);
|
||||||
|
break;
|
||||||
|
case FocusIn:
|
||||||
|
/* regrab focus from parent window */
|
||||||
|
if (ev.xfocus.window != win)
|
||||||
|
grabfocus();
|
||||||
|
break;
|
||||||
|
case KeyPress:
|
||||||
|
keypress(&ev.xkey);
|
||||||
|
break;
|
||||||
|
case SelectionNotify:
|
||||||
|
if (ev.xselection.property == utf8)
|
||||||
|
paste();
|
||||||
|
break;
|
||||||
|
case VisibilityNotify:
|
||||||
|
if (ev.xvisibility.state != VisibilityUnobscured)
|
||||||
|
XRaiseWindow(dpy, win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setup(void)
|
||||||
|
{
|
||||||
|
int x, y, i, j;
|
||||||
|
unsigned int du;
|
||||||
|
XSetWindowAttributes swa;
|
||||||
|
XIM xim;
|
||||||
|
Window w, dw, *dws;
|
||||||
|
XWindowAttributes wa;
|
||||||
|
XClassHint ch = {"dmenu", "dmenu"};
|
||||||
|
#ifdef XINERAMA
|
||||||
|
XineramaScreenInfo *info;
|
||||||
|
Window pw;
|
||||||
|
int a, di, n, area = 0;
|
||||||
|
#endif
|
||||||
|
/* init appearance */
|
||||||
|
for (j = 0; j < SchemeLast; j++)
|
||||||
|
scheme[j] = drw_scm_create(drw, colors[j], alphas[j], 2);
|
||||||
|
|
||||||
|
clip = XInternAtom(dpy, "CLIPBOARD", False);
|
||||||
|
utf8 = XInternAtom(dpy, "UTF8_STRING", False);
|
||||||
|
|
||||||
|
/* calculate menu geometry */
|
||||||
|
bh = drw->fonts->h + 2;
|
||||||
|
lines = MAX(lines, 0);
|
||||||
|
mh = (lines + 1) * bh;
|
||||||
|
#ifdef XINERAMA
|
||||||
|
i = 0;
|
||||||
|
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
|
||||||
|
XGetInputFocus(dpy, &w, &di);
|
||||||
|
if (mon >= 0 && mon < n)
|
||||||
|
i = mon;
|
||||||
|
else if (w != root && w != PointerRoot && w != None) {
|
||||||
|
/* find top-level window containing current input focus */
|
||||||
|
do {
|
||||||
|
if (XQueryTree(dpy, (pw = w), &dw, &w, &dws, &du) && dws)
|
||||||
|
XFree(dws);
|
||||||
|
} while (w != root && w != pw);
|
||||||
|
/* find xinerama screen with which the window intersects most */
|
||||||
|
if (XGetWindowAttributes(dpy, pw, &wa))
|
||||||
|
for (j = 0; j < n; j++)
|
||||||
|
if ((a = INTERSECT(wa.x, wa.y, wa.width, wa.height, info[j])) > area) {
|
||||||
|
area = a;
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* no focused window is on screen, so use pointer location instead */
|
||||||
|
if (mon < 0 && !area && XQueryPointer(dpy, root, &dw, &dw, &x, &y, &di, &di, &du))
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
if (INTERSECT(x, y, 1, 1, info[i]) != 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
x = info[i].x_org;
|
||||||
|
y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
|
||||||
|
mw = info[i].width;
|
||||||
|
XFree(info);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (!XGetWindowAttributes(dpy, parentwin, &wa))
|
||||||
|
die("could not get embedding window attributes: 0x%lx",
|
||||||
|
parentwin);
|
||||||
|
x = 0;
|
||||||
|
y = topbar ? 0 : wa.height - mh;
|
||||||
|
mw = wa.width;
|
||||||
|
}
|
||||||
|
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
||||||
|
inputw = MIN(inputw, mw/3);
|
||||||
|
match();
|
||||||
|
|
||||||
|
/* create menu window */
|
||||||
|
swa.override_redirect = True;
|
||||||
|
swa.background_pixel = 0;
|
||||||
|
swa.colormap = cmap;
|
||||||
|
swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
|
||||||
|
win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
|
||||||
|
depth, InputOutput, visual,
|
||||||
|
CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &swa);
|
||||||
|
XSetClassHint(dpy, win, &ch);
|
||||||
|
|
||||||
|
|
||||||
|
/* input methods */
|
||||||
|
if ((xim = XOpenIM(dpy, NULL, NULL, NULL)) == NULL)
|
||||||
|
die("XOpenIM failed: could not open input device");
|
||||||
|
|
||||||
|
xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing,
|
||||||
|
XNClientWindow, win, XNFocusWindow, win, NULL);
|
||||||
|
|
||||||
|
XMapRaised(dpy, win);
|
||||||
|
if (embed) {
|
||||||
|
XSelectInput(dpy, parentwin, FocusChangeMask | SubstructureNotifyMask);
|
||||||
|
if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) {
|
||||||
|
for (i = 0; i < du && dws[i] != win; ++i)
|
||||||
|
XSelectInput(dpy, dws[i], FocusChangeMask);
|
||||||
|
XFree(dws);
|
||||||
|
}
|
||||||
|
grabfocus();
|
||||||
|
}
|
||||||
|
drw_resize(drw, mw, mh);
|
||||||
|
drawmenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
|
||||||
|
" [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
XWindowAttributes wa;
|
||||||
|
int i, fast = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
/* these options take no arguments */
|
||||||
|
if (!strcmp(argv[i], "-v")) { /* prints version information */
|
||||||
|
puts("dmenu-"VERSION);
|
||||||
|
exit(0);
|
||||||
|
} else if (!strcmp(argv[i], "-b")) /* appears at the bottom of the screen */
|
||||||
|
topbar = 0;
|
||||||
|
else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
|
||||||
|
fast = 1;
|
||||||
|
else if (!strcmp(argv[i], "-s")) { /* case-sensitive item matching */
|
||||||
|
fstrncmp = strncmp;
|
||||||
|
fstrstr = strstr;
|
||||||
|
} else if (i + 1 == argc)
|
||||||
|
usage();
|
||||||
|
/* these options take one argument */
|
||||||
|
else if (!strcmp(argv[i], "-g")) { /* number of columns in grid */
|
||||||
|
columns = atoi(argv[++i]);
|
||||||
|
if (lines == 0) lines = 1;
|
||||||
|
} else if (!strcmp(argv[i], "-l")) { /* number of lines in grid */
|
||||||
|
lines = atoi(argv[++i]);
|
||||||
|
if (columns == 0) columns = 1;
|
||||||
|
} else if (!strcmp(argv[i], "-m"))
|
||||||
|
mon = atoi(argv[++i]);
|
||||||
|
else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */
|
||||||
|
prompt = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-fn")) /* font or font set */
|
||||||
|
fonts[0] = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-nb")) /* normal background color */
|
||||||
|
colors[SchemeNorm][ColBg] = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-nf")) /* normal foreground color */
|
||||||
|
colors[SchemeNorm][ColFg] = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-sb")) /* selected background color */
|
||||||
|
colors[SchemeSel][ColBg] = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-sf")) /* selected foreground color */
|
||||||
|
colors[SchemeSel][ColFg] = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-w")) /* embedding window id */
|
||||||
|
embed = argv[++i];
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
|
||||||
|
if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
||||||
|
fputs("warning: no locale support\n", stderr);
|
||||||
|
if (!(dpy = XOpenDisplay(NULL)))
|
||||||
|
die("cannot open display");
|
||||||
|
screen = DefaultScreen(dpy);
|
||||||
|
root = RootWindow(dpy, screen);
|
||||||
|
if (!embed || !(parentwin = strtol(embed, NULL, 0)))
|
||||||
|
parentwin = root;
|
||||||
|
if (!XGetWindowAttributes(dpy, parentwin, &wa))
|
||||||
|
die("could not get embedding window attributes: 0x%lx",
|
||||||
|
parentwin);
|
||||||
|
xinitvisual();
|
||||||
|
drw = drw_create(dpy, screen, root, wa.width, wa.height, visual, depth, cmap);
|
||||||
|
if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
|
||||||
|
die("no fonts could be loaded.");
|
||||||
|
lrpad = drw->fonts->h;
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
if (pledge("stdio rpath", NULL) == -1)
|
||||||
|
die("pledge");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fast && !isatty(0)) {
|
||||||
|
grabkeyboard();
|
||||||
|
readstdin();
|
||||||
|
} else {
|
||||||
|
readstdin();
|
||||||
|
grabkeyboard();
|
||||||
|
}
|
||||||
|
setup();
|
||||||
|
run();
|
||||||
|
|
||||||
|
return 1; /* unreachable */
|
||||||
|
}
|
2
dmenu/dmenu_run
Executable file
2
dmenu/dmenu_run
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/sh
|
||||||
|
dmenu_path | dmenu "$@" | ${SHELL:-"/bin/sh"} &
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue