mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
[MKDocs] Add dynamic theme guide.
This commit is contained in:
parent
82b2ce9435
commit
5b892ce86e
6 changed files with 211 additions and 5 deletions
BIN
mkdocs/docs/guides/DynamicThemes/1.png
Normal file
BIN
mkdocs/docs/guides/DynamicThemes/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 626 KiB |
BIN
mkdocs/docs/guides/DynamicThemes/2.png
Normal file
BIN
mkdocs/docs/guides/DynamicThemes/2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 992 KiB |
204
mkdocs/docs/guides/DynamicThemes/dynamic_themes.md
Normal file
204
mkdocs/docs/guides/DynamicThemes/dynamic_themes.md
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
# Dynamic Theme
|
||||||
|
|
||||||
|
A new addition in rofi 1.7.5 that did not get a lot of attention is support for
|
||||||
|
the enabled keyword in the media statement and supporting environment values.
|
||||||
|
Or more practical, you can modify your theme based on environment variables.
|
||||||
|
|
||||||
|
```css
|
||||||
|
|
||||||
|
@media ( enabled: env(DO_X, false)) {
|
||||||
|
listview {
|
||||||
|
orientation: vertical;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now enable this part of the theme by running rofi with `DO_X` set.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DO_X=true rofi -show combi
|
||||||
|
```
|
||||||
|
|
||||||
|
## Image browser example
|
||||||
|
|
||||||
|
In the current release, there is a
|
||||||
|
[fullscreen_preview](https://github.com/davatorium/rofi/blob/next/themes/fullscreen-preview.rasi)
|
||||||
|
as an example.
|
||||||
|
|
||||||
|
In this theme we are going to modify the filebrowser view with a preview widget that we can enable.
|
||||||
|
|
||||||
|
Lets start with the basic theme.
|
||||||
|
|
||||||
|
```css
|
||||||
|
* {
|
||||||
|
background-color: transparent;
|
||||||
|
text-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
fullscreen: true;
|
||||||
|
background-color: black/80%;
|
||||||
|
padding: 4em;
|
||||||
|
children: [ wrap, listview-split];
|
||||||
|
spacing: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** We add an extra child to this if PREVIEW=true */
|
||||||
|
listview-split {
|
||||||
|
orientation: horizontal;
|
||||||
|
spacing: 0.4em;
|
||||||
|
children: [listview];
|
||||||
|
}
|
||||||
|
|
||||||
|
wrap {
|
||||||
|
expand: false;
|
||||||
|
orientation: vertical;
|
||||||
|
children: [ inputbar, message ];
|
||||||
|
background-image: linear-gradient(white/5%, white/40%);
|
||||||
|
border-color: lightblue;
|
||||||
|
border: 3px;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
icon-ib {
|
||||||
|
expand: false;
|
||||||
|
filename: "system-search";
|
||||||
|
vertical-align: 0.5;
|
||||||
|
horizontal-align: 0.5;
|
||||||
|
size: 1em;
|
||||||
|
}
|
||||||
|
inputbar {
|
||||||
|
spacing: 0.4em;
|
||||||
|
padding: 0.4em;
|
||||||
|
children: [ icon-ib, entry ];
|
||||||
|
}
|
||||||
|
entry {
|
||||||
|
placeholder: "Search";
|
||||||
|
placeholder-color: grey;
|
||||||
|
}
|
||||||
|
message {
|
||||||
|
background-color: red/20%;
|
||||||
|
border-color: lightsalmon;
|
||||||
|
border: 3px 0px 0px 0px;
|
||||||
|
padding: 0.4em;
|
||||||
|
spacing: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
listview {
|
||||||
|
flow: horizontal;
|
||||||
|
fixed-columns: true;
|
||||||
|
columns: 7;
|
||||||
|
lines: 5;
|
||||||
|
spacing: 1.0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
element {
|
||||||
|
orientation: vertical;
|
||||||
|
padding: 0.1em;
|
||||||
|
|
||||||
|
background-image: linear-gradient(white/5%, white/20%);
|
||||||
|
border-color: lightblue /15%;
|
||||||
|
border: 3px;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
|
||||||
|
children: [element-icon, element-text ];
|
||||||
|
}
|
||||||
|
element-icon {
|
||||||
|
size: calc(((100% - 8em) / 7 ));
|
||||||
|
horizontal-align: 0.5;
|
||||||
|
vertical-align: 0.5;
|
||||||
|
}
|
||||||
|
element-text {
|
||||||
|
horizontal-align: 0.5;
|
||||||
|
vertical-align: 0.5;
|
||||||
|
padding: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
element selected {
|
||||||
|
background-image: linear-gradient(white/25%, white/10%);
|
||||||
|
border-color: lightblue;
|
||||||
|
border: 3px;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
When running this theme:
|
||||||
|
```bash
|
||||||
|
rofi -theme fullscreen-preview.rasi -show filebrowser
|
||||||
|
```
|
||||||
|
|
||||||
|
![Basic Theme](1.png)
|
||||||
|
|
||||||
|
We already prepared the place where we are going to add a 2nd widget.
|
||||||
|
Now lets, at the end of the theme, add the extra element in a media block.
|
||||||
|
|
||||||
|
|
||||||
|
```css
|
||||||
|
@media ( enabled: env(PREVIEW, false)) {
|
||||||
|
```
|
||||||
|
The variable is `PREVIEW`, if it is not set `false` is used.
|
||||||
|
Otherwise the content of `PREVIEW` is parsed.
|
||||||
|
|
||||||
|
These will be merged into the theme on load:
|
||||||
|
|
||||||
|
```css
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launching rofi with environment PREVIEW set to true
|
||||||
|
* will split the screen and show a preview widget.
|
||||||
|
*/
|
||||||
|
@media ( enabled: env(PREVIEW, false)) {
|
||||||
|
// preview widget
|
||||||
|
icon-current-entry {
|
||||||
|
expand: true;
|
||||||
|
size: 80%;
|
||||||
|
}
|
||||||
|
// override the children of `listview-split`
|
||||||
|
listview-split {
|
||||||
|
children: [listview, icon-current-entry];
|
||||||
|
}
|
||||||
|
// Reduce to 4 columns
|
||||||
|
listview {
|
||||||
|
columns: 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Now if we run it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
REVIEW=true rofi -theme fullscreen-preview.rasi -show filebrowser
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
It looks like this:
|
||||||
|
|
||||||
|
![Image preview](2.png)
|
||||||
|
|
||||||
|
We can add more sections; for example for text only we hide the images:
|
||||||
|
|
||||||
|
```css
|
||||||
|
@media ( enabled: env(NO_IMAGE, false)) {
|
||||||
|
listview {
|
||||||
|
columns: 1;
|
||||||
|
spacing: 0.4em;
|
||||||
|
}
|
||||||
|
element {
|
||||||
|
children: [ element-text ];
|
||||||
|
}
|
||||||
|
element-text {
|
||||||
|
horizontal-align: 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Wallpaper picker
|
||||||
|
|
||||||
|
If you run latest git version, you can now easily make a wallpaper picker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PREVIEW=true rofi -theme fullscreen-preview.rasi -show filebrowser -filebrowser-command 'feh --bg-scale' -filebrowser-directory ~/Wallpapers/
|
||||||
|
```
|
|
@ -33,3 +33,4 @@ The manpages are grouped on rofi version.
|
||||||
* [Transparency](guides/Transparency/theme3-transparency)
|
* [Transparency](guides/Transparency/theme3-transparency)
|
||||||
* [Positioning](guides/Positioning/theme3-positioning)
|
* [Positioning](guides/Positioning/theme3-positioning)
|
||||||
* [Plugins](guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins.md)
|
* [Plugins](guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins.md)
|
||||||
|
* [Dynamic Theme](guides/DynamicThemes/dynamic_themes.md)
|
||||||
|
|
|
@ -13,6 +13,7 @@ nav:
|
||||||
- Transparency: guides/Transparency/theme3-transparency.markdown
|
- Transparency: guides/Transparency/theme3-transparency.markdown
|
||||||
- Positioning: guides/Positioning/theme3-positioning.markdown
|
- Positioning: guides/Positioning/theme3-positioning.markdown
|
||||||
- Plugins: guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins.md
|
- Plugins: guides/Plugins/2017-04-19-rofi-140-sneak-preview-plugins.md
|
||||||
|
- Dynamic Theme: guides/DynamicThemes/dynamic_themes.md
|
||||||
- Current:
|
- Current:
|
||||||
- Rofi: current/rofi.1.markdown
|
- Rofi: current/rofi.1.markdown
|
||||||
- Themes: current/rofi-theme.5.markdown
|
- Themes: current/rofi-theme.5.markdown
|
||||||
|
|
|
@ -20,11 +20,6 @@ window {
|
||||||
spacing: 1em;
|
spacing: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** preview widget */
|
|
||||||
icon-current-entry {
|
|
||||||
expand: true;
|
|
||||||
size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** We add an extra child to this is PREVIEW=true */
|
/** We add an extra child to this is PREVIEW=true */
|
||||||
listview-split {
|
listview-split {
|
||||||
|
@ -109,6 +104,11 @@ element selected {
|
||||||
* will split the screen and show a preview widget.
|
* will split the screen and show a preview widget.
|
||||||
*/
|
*/
|
||||||
@media ( enabled: env(PREVIEW, false)) {
|
@media ( enabled: env(PREVIEW, false)) {
|
||||||
|
/** preview widget */
|
||||||
|
icon-current-entry {
|
||||||
|
expand: true;
|
||||||
|
size: 80%;
|
||||||
|
}
|
||||||
listview-split {
|
listview-split {
|
||||||
children: [listview, icon-current-entry];
|
children: [listview, icon-current-entry];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue