diff --git a/.xfiles/ephemeral b/.xfiles/ephemeral new file mode 100644 index 0000000..ea20f3b --- /dev/null +++ b/.xfiles/ephemeral @@ -0,0 +1,23 @@ +*background: #323F4E +*foreground: #F8F8F2 +*cursorColor: #F8F8F2 +*color0: #3D4C5F +*color1: #F48FB1 +*color2: #A1EFD3 +*color3: #F1FA8C +*color4: #92B6F4 +*color5: #BD99FF +*color6: #87DFEB +*color7: #F8F8F2 +*color8: #56687E +*color9: #EE4F84 +*color10: #53E2AE +*color11: #F1FF52 +*color12: #6498EF +*color13: #985EFF +*color14: #24D1E7 +*color15: #E5E5E5 + + + + diff --git a/README.md b/README.md index c13701d..777efd2 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,80 @@ # dotfiles ## Some details -+ **OS**: Antergos -+ **WM**: Awesome -+ **Terminal**: xst (fork of Suckless terminal) ++ **OS**: Ubuntu 18.04 ++ **WM**: AwesomeWM ++ **Terminal**: Kitty + **File Manager**: Nemo for GUI, Ranger for terminal -+ **Bar Icons**: Typicons Font + **Launcher**: Rofi + **Editor**: Vim ++ **Org editor**: [Remacs](https://github.com/remacs/remacs) + **Browser**: Firefox ## Latest preview -![Screenshot](./previews/skyfall.png?raw=true "Latest") +![Screenshot](https://i.redd.it/ddrd1bbxzpd31.png) ## Dependencies -Here is a list of dependencies needed for making these themes work. +Here is a complete list of dependencies needed for making these themes work. If you install all of them you will have a (mostly) smooth out of the box experience. Of course, not all of them actually do something useful (see `fortune-mod` dependency). -Also if you are willing to edit a few configuration files, **which you will have to do** at some point, most of these dependencies can be replaced. For example you can replace `i3lock` with your own command, `rofi` with `dmenu`, my `screenshot.sh` script with `scrot`. +Also if you are willing to edit a few configuration files, **which you will have to do** at some point, most of these dependencies can be replaced. For example you can replace `rofi` with `dmenu`,`maim` with `scrot`. If you notice that something is missing, please open an issue so I can add the dependency to this table. | Dependency | Description | Why/Where is it needed? | | --- | --- | --- | -| `awesome` v4.2+ | Window manager | (explains itself) | + +| `awesome` (git `master` branch) | Window manager | (explains itself) | | `rofi` | Window switcher, application launcher and dmenu replacement | (explains itself) | -| `xorg-xbacklight` | Gets/Sets screen brightness (intel GPU only) | brightness widget | -| `lm_sensors` | CPU temperature sensor | CPU temperature widget | -| `upower` | Abstraction for enumerating power devices, listening to device events and more | battery widget | -| `pulseaudio`, `libpulse` | Sound system **(You probably already have these)** | volume widget, [bin/volume-control.sh](./bin/volume-control.sh) script | -| [bin/volume-control.sh](./bin/volume-control.sh) in your `$PATH` | Commands to control your volume | volume buttons, volume widget | -| `jq` | Parses `json` output | weather widget | -| `fortune-mod` | Displays random quotations (fortune cookies) | fortune widget | -| `mpd` | Server-side application for playing music | **sidebar** music widget | -| `mpc` | Minimalist command line interface to MPD | **sidebar** music widget | -| `i3lock` | Screen locker | exit screen lock command | -| `maim` | Takes screenshots (improved `scrot`) | [bin/screenshot.sh](./bin/screenshot.sh) script | -| [bin/screenshot.sh](./bin/screenshot.sh) in your `$PATH` | Commands to take/view screenshots | screenshot button | -| `feh` | Image viewer and wallpaper setter | screenshot previews, wallpapers | -| *Typicons* font | Icon font | text exit screen, text weather icons, *skyfall* bar | -| Any *Nerd Font* | Icon font | *manta* bar icons, *skyfall* taglist icons | -| [openweathermap](https://openweathermap.org/) key | Provides weather data | weather widgets | +| `light` | Gets/Sets screen brightness | Brightness keybinds | +| `lm_sensors` | CPU temperature sensor | CPU temperature widgets | +| `upower` | Abstraction for enumerating power devices, listening to device events and more | Battery widgets | +| `acpid` | Daemon for delivering ACPI events | Charger notifications | +| `pulseaudio`, `libpulse` | Sound system **(Installed by default on most distros)** | Volume widgets and keybinds | +| `jq` | Parses `json` output | Weather widgets | +| `fortune-mod` | Displays random quotations (fortune cookies) | Fortune widget | +| `redshift` | Controls screen temperature | Night mode command | +| `mpd` | Server-side application for playing music | Music widgets | +| `mpc` | Minimalist command line interface to MPD | Music widgets | +| `maim` | Takes screenshots (improved `scrot`) | Screenshot keybinds | +| `feh` | Image viewer and wallpaper setter | Screenshot previews, wallpapers | +| [openweathermap](https://openweathermap.org/) key | Provides weather data | Weather widgets | + +### Fonts +##### Icon fonts ++ **Typicons** ++ **Material Icons** ++ **Icomoon** ++ **Nerd Fonts** +##### Monospace ++ **Iosevka** ++ **Anka/Coder** +##### Fancy ++ **Scriptina** +##### Sans ++ **Google Sans** ++ **Roboto Condensed** ++ **San Francisco Display** ## Things to do after you set up dependencies + Backup your current `~/.config/awesome` directory if you have one and copy this repo's `config/awesome` directory in its place. -+ Configure default applications ++ Configure user preferences - In `rc.lua` there is a section where default applications such as terminal, editor and file manager are defined. + In `rc.lua` there is a *User variables and preferences* section where user preferences and default applications are defined. There include the terminal, editor, file manager, screenshot directory, weather widget configuration and more. You should change those to your liking. + Configure autostart applications in `autostart.sh` + The commands in `autostart.sh` will run every time AwesomeWM restarts. If you would like to run something only once on login, I suggest you create the file `~/.xprofile`, make it executable and put the commands you want there. + + *(Optional)* Load any `Xresources` colorscheme (`xrdb -merge `). In the [.xfiles](.xfiles) directory I provide you with a few of my own colorschemes, but you can also use your favorite one. All of my AwesomeWM themes take their colors from `xrdb`. + Have a general idea of what my keybinds do My keybinds will most probably not suit you, but on your first login you might need to know how to navigate the desktop. - See the **Basic keybinds** section for more details. + See the [Basic keybinds](#basic-keybinds) section for more details. + **You are now ready to login with AwesomeWM!** @@ -76,19 +93,25 @@ If you notice that something is missing, please open an issue so I can add the d - `cava` - Audio visualizer ## AwesomeWM configuration: File structure -+ I have split my `rc.lua` into multiple files for organization purposes. +I have split my `rc.lua` into multiple files for organization purposes. + The `noodle` directory contains widgets that usually take up more than 50 lines of code. - I prefer not filling my `bars.lua` with a ton of widget configurations, but also not making a seperate file for every widget. + I prefer not filling my files with a ton of widget configurations, but also not making a seperate file for every widget. + ++ The `evil` directory contains daemons (processes that run in the background) which emit system info. + + They provide an easy way of writing widgets that rely on external information. All you need to do is subscribe to the signal a daemon provides. + No need to remember which shell command gives you the necessary info or bother about killing orphan processes. Evil takes care of everything. + In `themes` you can find a directory for each available theme. Such a directory should include at least a `theme.lua` and optionally icons, wallpaper, and whatever asset you need that is theme-specific. -+ In `bar_themes` you can find a `.lua` file for each available bar or bar group. ++ In `bars` you can find a `.lua` file for each available bar or bar group. Multiple bars can be created in one file. + Every bar theme provides the global functions `toggle_wibars()` and `toggle_tray()` which you can bind to any keys you want. ## Basic keybinds @@ -105,9 +128,7 @@ I use `super` AKA Windows key as my main modifier. + `super + s` - Tiling layout + `super + shift + s` - Floating layout + `super + w` - Maximized / Monocle layout -+ `super + [arrow keys]` - Change focus by direction -+ `super + j/k` - Cycle through clients -+ `super + h/l` - Add / remove clients to / from master area ++ `super + [arrow keys] / hjkl` - Change focus by direction + `super + shift + [arrow keys] / [hjkl]` - Move client by direction. Move to edge if it is floating. + `super + control + [arrow keys] / [hjkl]` - Resize + `super + f` - Toggle fullscreen @@ -163,7 +184,7 @@ I use `super` AKA Windows key as my main modifier. ## More details about the sidebar + Can be toggled with `super+grave`. -+ Can be activated by moving the mouse to the edge of the screen and hidden by moving the mouse out of it (these settings can be easily enabled/disabled in your `theme.lua`). ++ Can be activated by moving the mouse to the edge of the screen and hidden by moving the mouse out of it (these settings can be easily enabled/disabled in your `user` preferences in rc.lua). + By default it is always above windows, and does not grab your keyboard (so you can have it open while doing something else, or just toggle it for a second to check your battery while you are watching something in fullscreen). + Most widgets (volume, search, exit, music...) are clickable. + Volume and music update only when they need to, as they are subscribed to pulse and mpd events respectively. @@ -188,19 +209,19 @@ I use `super` AKA Windows key as my main modifier. + If you are new to AwesomeWM... - I suggest you start from the default configuration and add pieces you like to it instead of trying to modify someone else's configuration even if you feel really comfortable with that specific config. - Otherwise you will have no idea how anything works and how you can modify things to your own liking. Trust me, I've been there. + I suggest you start from the default configuration and add pieces you like to it instead of trying to modify someone else's configuration. + Even if you feel really comfortable with that specific config, you will realize that you have no idea how anything works and how you can modify things to your own liking. Trust me, I've been there. + Don't forget to use the [API Documentation for AwesomeWM](https://awesomewm.org/apidoc/index.html). It is well written and has plenty of examples. -## Theme previews -### Lovelace -![Screenshot](./previews/lovelace.png?raw=true "lovelace theme") ++ You can also post your questions on [/r/awesomewm](https://www.reddit.com/r/awesomewm/) -### Manta -![Screenshot](./previews/manta.png?raw=true "manta theme") - -### Reasons -![Screenshot](./previews/reasons.png?raw=true "reasons theme") +## Older theme previews +| Theme | Preview | Reddit post | +| --- | --- | --- | +| Skyfall | ![Screenshot](https://i.redd.it/kobla5v7r5i21.png "Skyfall theme") | [Skyfall](https://www.reddit.com/r/unixporn/comments/atkn5b) | +| Lovelace | ![Screenshot](https://i.redd.it/glzrkk83f4621.png "Lovelace theme") | [Mechanical Love](https://www.reddit.com/comments/a900p7) | +| Manta | ![Screenshot](https://i.imgur.com/5pV3Xxa.png "Manta theme") | [Cake Day](https://www.reddit.com/r/unixporn/comments/9ji6uu/awesome_cake_day/) | +| Reasons | ![Screenshot](https://i.imgur.com/MdAN8jT.png "Reasons theme") | [25 reasons why you need a tiling WM](https://www.reddit.com/r/unixporn/comments/8jxpxc) | diff --git a/bin/performance_mode b/bin/performance_mode new file mode 100755 index 0000000..106958b --- /dev/null +++ b/bin/performance_mode @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# Toggle compton +# Requires that you have allowed cpufreq-set to run without password. +if pgrep compton; then + pkill compton + sudo cpufreq-set -g performance + echo "ON" +else + compton --config ~/.config/compton/compton.conf & + sudo cpufreq-set -g powersave + echo "OFF" +fi diff --git a/bin/scratchpad b/bin/scratchpad new file mode 100755 index 0000000..2837360 --- /dev/null +++ b/bin/scratchpad @@ -0,0 +1,16 @@ +#!/bin/bash + +SCRATCHPAD_SESSION="$(tmux ls | grep scratchpad)" +SCRATCHPAD_WINDOW="$(xdotool search --classname scratchpad)" + +# If there is no such window +# (Checking for the window should not be necessary if AwesomeWM does it already) +if [ ${#SCRATCHPAD_WINDOW} -eq "0" ]; then + # If the session does not exist, create a new one + if [ ${#SCRATCHPAD_SESSION} -eq "0" ]; then + kitty -1 --class scratchpad -e tmux new-session -s scratchpad & + # Else attach to the session + else + kitty -1 --class scratchpad -e tmux attach -t scratchpad & + fi +fi diff --git a/bin/visualizer b/bin/visualizer new file mode 100755 index 0000000..3063136 --- /dev/null +++ b/bin/visualizer @@ -0,0 +1,4 @@ +#!/bin/bash +# Toggle visualizer: +# Kill it if it is running or spawn it if it does not running +xdotool search --class Visualizer &>/dev/null && (ps x | grep "kitty --class Visualizer" | grep -v grep | awk '{print $1}' | xargs kill) || kitty --class Visualizer -o background_opacity=0 -o font_size=6 -o window_margin_width=0 -e cava & diff --git a/config/awesome/.projectile b/config/awesome/.projectile index e69de29..c5e82bd 100644 --- a/config/awesome/.projectile +++ b/config/awesome/.projectile @@ -0,0 +1 @@ +-/.png \ No newline at end of file diff --git a/config/awesome/autostart.sh b/config/awesome/autostart.sh index 184c4d2..ecc5126 100755 --- a/config/awesome/autostart.sh +++ b/config/awesome/autostart.sh @@ -4,7 +4,8 @@ # Use "program &" to run it regardless # --- # NOTE: This script runs with every restart of AwesomeWM -# TODO: run_once +# If you would like to run a command *once* on login, +# you can use ~/.xprofile function run { if ! pgrep $1 > /dev/null ; @@ -14,16 +15,17 @@ function run { } # Music -run mpd ~/.config/mpd/mpd.conf +# run mpd +# (Alternatively, enable the mpd service so mpd runs on login) # Emacs daemon #run emacs --daemon # Load terminal colorscheme and settings -#xrdb ~/.Xresources +xrdb ~/.Xresources # Urxvt daemon -#run urxvtd -q -o -f +# run urxvtd -q -o -f # Mpv input file if [ ! -e /tmp/mpv.fifo ]; then @@ -34,21 +36,15 @@ fi #run compton --config ~/.config/compton/compton.conf # Enable numlock on login +# Required numlockx to be installed run numlockx -# Battery notifications -# run battery_daemon - # Network manager tray icon run nm-applet -# Keyboard layout -# setxkbmap -layout "us,gr" -option "grp:alt_shift_toggle" & -# setxkbmap -layout "us,de" -option "grp:alt_shift_toggle" & -# setxkbmap -layout "us,gr,ru" -option "grp:alt_shift_toggle" +# Kill redshift processes +# pkill redshift -# Caps Lock is Escape (Escape remains as is) -# setxkbmap -option caps:escape - -# Scratchpad -# scratchpad +# Wallpaper +# (Already set to run in rc.lua) +# ~/.fehbg diff --git a/config/awesome/awesome-cleanup.sh b/config/awesome/awesome-cleanup.sh deleted file mode 100755 index 3246872..0000000 --- a/config/awesome/awesome-cleanup.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -# Noodle Cleanup Script -# Some of my widgets (mpd, volume) rely on scripts that have to be -# run persistently in the background. -# They sleep until mpd/volume state changes, in an infinite loop. -# As a result when awesome restarts, they keep running in background, along with the new ones that are created after the restart. -# This script cleans up the old processes. - -# Mpd widget -ps aux | grep "mpc idleloop player" | grep -v grep | awk '{print $2}' | xargs kill -#ps aux | grep "mpc idle player" | grep -v grep | awk '{print $2}' | xargs kill -# Volume widget -ps aux | grep "pactl subscribe" | grep -v grep | awk '{print $2}' | xargs kill diff --git a/config/awesome/bar_themes/lovelace.lua b/config/awesome/bar_themes/lovelace.lua deleted file mode 100644 index 31d36b0..0000000 --- a/config/awesome/bar_themes/lovelace.lua +++ /dev/null @@ -1,361 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local wibox = require("wibox") -local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi ---local xrdb = xresources.get_current_theme() - -local helpers = require("helpers") -local keys = require("keys") - --- {{{ Widgets -local desktop_control = require("noodle.desktop_control") -local minimal_tasklist = require("noodle.minimal_tasklist") -local icon_taglist = require("noodle.icon_taglist") - --- Start button widget (can toggle sidebar, tray, scratchpad) -start_widget = wibox.widget.imagebox(beautiful.start_icon) -start_widget:buttons(gears.table.join( - -- Left click - Toggle sidebar - awful.button({ }, 1, function () - sidebar.visible = not sidebar.visible - end), - -- Middle click - Toggle scratchpad - awful.button({ }, 2, function () - helpers.toggle_scratchpad() - end), - -- Right click - Toggle tray - awful.button({ }, 3, function () - local traybox = awful.screen.focused().traybox - traybox.visible = not traybox.visible - end) -)) - --- Keyboard map indicator and switcher --- keyboardlayout_prefix = wibox.widget.textbox(" ") --- keyboardlayout_prefix.markup = helpers.colorize_text(keyboardlayout_prefix.text, beautiful.prefix_fg) --- mykeyboardlayout = awful.widget.keyboardlayout() - --- Create a textclock widget that shows date --- date_prefix = wibox.widget.textbox(" ") --- date_prefix.markup = helpers.colorize_text(date_prefix.text, beautiful.prefix_fg) ---mytextdate = wibox.widget.textclock("%a %d %B") --- mytextdate = wibox.widget.textclock("%j days around the sun") --HAHA very useful --- Create a textclock widget --- clock_prefix = wibox.widget.textbox(" ") --- clock_prefix.markup = helpers.colorize_text(clock_prefix.text, beautiful.prefix_fg) --- mytextclock = wibox.widget.textclock("%H:%M") - --- Create item separator -textseparator = wibox.widget.textbox() -textseparator.text = beautiful.separator_text -textseparator.font = "hurmit nerd font bold 14" -textseparator.markup = helpers.colorize_text(textseparator.text, beautiful.separator_fg) - --- Create padding -pad = wibox.widget.textbox(" ") - --- Create a wibox for each screen and add it -local taglist_buttons = gears.table.join( - awful.button({ }, 1, function(t) - -- Tag back and forth - local current_tag = awful.screen.focused().selected_tag - if t == current_tag then - awful.tag.history.restore() - else - t:view_only() - end - -- t:view_only() - end), - awful.button({ modkey }, 1, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - -- awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ }, 3, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - awful.button({ modkey }, 3, function(t) - if client.focus then - client.focus:toggle_tag(t) - end - end), - awful.button({ }, 4, function(t) awful.tag.viewprev(t.screen) end), - awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end) - ) - -local tasklist_buttons = gears.table.join( - awful.button({ }, 1, - function (c) - if c == client.focus then - c.minimized = true - else - -- Without this, the following - -- :isvisible() makes no sense - c.minimized = false - if not c:isvisible() and c.first_tag then - c.first_tag:view_only() - end - -- This will also un-minimize - -- the client, if needed - client.focus = c - c:raise() - end - end), - -- Middle mouse button closes the window - awful.button({ }, 2, function (c) c:kill() end), - awful.button({ }, 3, helpers.client_menu_toggle()), - awful.button({ }, 4, function () - awful.client.focus.byidx(-1) - end), - awful.button({ }, 5, function () - awful.client.focus.byidx(1) - end) -) --- }}} - -awful.screen.connect_for_each_screen(function(s) - -- Create a promptbox for each screen - -- s.mypromptbox = awful.widget.prompt({prompt = " Run: ", fg = beautiful.prompt_fg}) - -- Create an imagebox widget which will contain an icon indicating which layout we're using. - -- We need one layoutbox per screen. - -- s.mylayoutbox = awful.widget.layoutbox(s) - -- s.mylayoutbox:buttons(gears.table.join( - -- awful.button({ }, 1, function () awful.layout.inc( 1) end), - -- awful.button({ }, 3, function () awful.layout.inc(-1) end), - -- awful.button({ }, 4, function () awful.layout.inc( 1) end), - -- awful.button({ }, 5, function () awful.layout.inc(-1) end))) - -- -- Create a taglist widget - -- s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons) - -- s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.noempty, taglist_buttons) - -- s.mytaglist.font = beautiful.font - - -- Create a tasklist widget - -- s.mytasklist = awful.widget.tasklist { - -- screen = s, - -- filter = awful.widget.tasklist.filter.currenttags, - -- buttons = tasklist_buttons, - -- layout = { - -- spacing_widget = { - -- { - -- forced_width = 5, - -- forced_height = 24, - -- thickness = 1, - -- color = '#777777', - -- widget = wibox.widget.separator - -- }, - -- valign = 'center', - -- halign = 'center', - -- widget = wibox.container.place, - -- }, - -- spacing = 1, - -- layout = wibox.layout.fixed.horizontal - -- }, - -- -- Notice that there is *NO* wibox.wibox prefix, it is a template, - -- -- not a widget instance. - -- widget_template = { - -- { - -- wibox.widget.base.make_widget(), - -- forced_height = 5, - -- id = 'background_role', - -- widget = wibox.container.background, - -- }, - -- { - -- { - -- id = 'clienticon', - -- widget = awful.widget.clienticon, - -- }, - -- margins = 5, - -- color = '#777777', - -- widget = wibox.container.margin - -- }, - -- nil, - -- create_callback = function(self, c, index, objects) --luacheck: no unused args - -- self:get_children_by_id('clienticon')[1].client = c - -- end, - -- layout = wibox.layout.align.vertical, - -- }, - -- } - - -- s.mytasklist = awful.widget.tasklist { - -- screen = s, - -- filter = awful.widget.tasklist.filter.currenttags, - -- buttons = tasklist_buttons, - -- style = { - -- shape_border_width = 4, - -- shape_border_color = beautiful.bg_minimize, - -- shape = gears.shape.rounded_bar, - -- }, - -- layout = { - -- spacing = 10, - -- spacing_widget = { - -- { - -- forced_width = 5, - -- shape = gears.shape.circle, - -- widget = wibox.widget.separator - -- }, - -- valign = 'center', - -- halign = 'center', - -- widget = wibox.container.place, - -- }, - -- layout = wibox.layout.flex.horizontal - -- }, - -- -- Notice that there is *NO* wibox.wibox prefix, it is a template, - -- -- not a widget instance. - -- widget_template = { - -- { - -- { - -- { - -- { - -- id = 'icon_role', - -- widget = wibox.widget.imagebox, - -- }, - -- margins = 5, - -- widget = wibox.container.margin, - -- }, - -- { - -- id = 'text_role', - -- widget = wibox.widget.textbox, - -- }, - -- layout = wibox.layout.fixed.horizontal, - -- }, - -- left = 10, - -- right = 10, - -- widget = wibox.container.margin - -- }, - -- id = 'background_role', - -- widget = wibox.container.background, - -- }, - -- } - - - -- Outer gaps - --awful.screen.padding(awful.screen.focused(),{left = 28, right = 28, top = 28, bottom = 28}) - - -- Create a system tray widget - s.systray = wibox.widget.systray() - - -- Wibar detached - Method: Transparent useless bar - -- Requires compositor - if beautiful.wibar_detached then - s.useless_wibar = awful.wibar({ position = beautiful.wibar_position, screen = s, height = beautiful.screen_margin * 2, opacity = 0 }) - --TODO - --s.useless_wibar:buttons(keys.desktopbuttons) - end - -- Create the wibox - s.mywibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)}) - -- Wibar items - -- Add or remove widgets here - s.mywibox:setup { - layout = wibox.layout.align.horizontal, - { -- Left widgets - layout = wibox.layout.fixed.horizontal, - pad, - start_widget, - textseparator, - -- s.mytaglist, - icon_taglist, - textseparator - -- minimal_tasklist - }, - { -- Middle widgets - layout = wibox.layout.fixed.horizontal, - --s.mypromptbox, - -- textseparator, - -- s.mytasklist, - -- minimal_tasklist - desktop_control - }, - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - --mpdarc_widget, - --textseparator, - --volumebar_prefix, - --volumebar_widget, - --textseparator, - --keyboardlayout_prefix, - --mykeyboardlayout, - --textseparator, - -- s.systray, - --minimal_tasklist, - -- textseparator, - --date_prefix, - -- mytextdate, - -- textseparator, - --clock_prefix, - -- mytextclock, - -- textseparator, - -- s.mylayoutbox, - pad - }, - } - - -- Only set them if they exist, else they overwrite the position variable - if beautiful.wibar_x then - s.mywibox.x = beautiful.wibar_x - end - if beautiful.wibar_y then - s.mywibox.y = beautiful.wibar_y - end - - -- Create a wibox that will only show the tray - -- Hidden by default. Can be toggled with a keybind. - s.traybox = wibox({visible = false, ontop = true, shape = helpers.rbar(), type = "dock"}) - s.traybox.width = dpi(150) - s.traybox.height = dpi(38) - s.traybox.x = beautiful.screen_margin * 2 - -- s.traybox.x = s.geometry.width - s.traybox.width - beautiful.screen_margin * 2 - s.traybox.y = s.geometry.height - s.traybox.height - beautiful.screen_margin * 2 - s.traybox.bg = beautiful.bg_systray - s.traybox:setup { - -- wibox.widget.textbox("test"), - pad, - s.systray, - pad, - layout = wibox.layout.align.horizontal - } - s.traybox:buttons(gears.table.join( - -- Middle click - Hide traybox - awful.button({ }, 2, function () - s.traybox.visible = false - end) - )) - - -- TODO --- s.mytaskwibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)}) --- s.mytaskwibox.x = s.mywibox.x --- s.mytaskwibox.y = s.mywibox.y --- s.mytaskwibox.visible = false --- s.mytaskwibox:setup { --- layout = wibox.layout.align.horizontal, --- { -- Left widgets --- layout = wibox.layout.fixed.horizontal, --- s.mytasklist --- }, --- { -- Middle widgets --- layout = wibox.layout.fixed.horizontal, --- }, --- { -- Right widgets --- layout = wibox.layout.fixed.horizontal, --- textseparator, --- mytextclock, --- textseparator, --- pad --- }, --- } - - -- awesome.connect_signal("dummy", function (c) --- if s.mywibox.visible then --- s.mytaskwibox.visible = true --- s.mywibox.visible = false --- else --- s.mywibox.visible = true --- s.mytaskwibox.visible = false --- end --- end) -end) - diff --git a/config/awesome/bar_themes/manta.lua b/config/awesome/bar_themes/manta.lua deleted file mode 100644 index 1e0fb4f..0000000 --- a/config/awesome/bar_themes/manta.lua +++ /dev/null @@ -1,281 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local wibox = require("wibox") -local beautiful = require("beautiful") ---local xresources = require("beautiful.xresources") ---local xrdb = xresources.get_current_theme() - -local helpers = require("helpers") -local keys = require("keys") - --- {{{ Widgets -local desktop_mode_widget = require("noodle.desktop_mode_widget") -local minimal_tasklist = require("noodle.minimal_tasklist") - --- Volume widget prefix -volumebar_prefix = wibox.widget.textbox(" ") -volumebar_prefix.markup = helpers.colorize_text(volumebar_prefix.text, beautiful.prefix_fg) - --- Keyboard map indicator and switcher -keyboardlayout_prefix = wibox.widget.textbox(" ") -keyboardlayout_prefix.markup = helpers.colorize_text(keyboardlayout_prefix.text, beautiful.prefix_fg) -mykeyboardlayout = awful.widget.keyboardlayout() - --- Create a textclock widget that shows date -date_prefix = wibox.widget.textbox(" ") -date_prefix.markup = helpers.colorize_text(date_prefix.text, beautiful.prefix_fg) ---mytextdate = wibox.widget.textclock("%a %d %B") -mytextdate = wibox.widget.textclock("%j days around the sun") --HAHA very useful --- Create a textclock widget -clock_prefix = wibox.widget.textbox(" ") -clock_prefix.markup = helpers.colorize_text(clock_prefix.text, beautiful.prefix_fg) -mytextclock = wibox.widget.textclock("%H:%M") - --- Create item separator -textseparator = wibox.widget.textbox() -textseparator.text = beautiful.separator_text -textseparator.markup = helpers.colorize_text(textseparator.text, beautiful.separator_fg) - --- Create padding -pad = wibox.widget.textbox(" ") - --- Create a wibox for each screen and add it -local taglist_buttons = gears.table.join( - awful.button({ }, 1, function(t) t:view_only() end), - awful.button({ modkey }, 1, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - -- awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ }, 3, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - awful.button({ modkey }, 3, function(t) - if client.focus then - client.focus:toggle_tag(t) - end - end), - awful.button({ }, 4, function(t) awful.tag.viewprev(t.screen) end), - awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end) - ) - -local tasklist_buttons = gears.table.join( - awful.button({ }, 1, - function (c) - if c == client.focus then - c.minimized = true - else - -- Without this, the following - -- :isvisible() makes no sense - c.minimized = false - if not c:isvisible() and c.first_tag then - c.first_tag:view_only() - end - -- This will also un-minimize - -- the client, if needed - client.focus = c - c:raise() - end - end), - -- Middle mouse button closes the window - awful.button({ }, 2, function (c) c:kill() end), - awful.button({ }, 3, helpers.client_menu_toggle()), - awful.button({ }, 4, function () - awful.client.focus.byidx(-1) - end), - awful.button({ }, 5, function () - awful.client.focus.byidx(1) - end) -) --- }}} - -awful.screen.connect_for_each_screen(function(s) - -- Create a promptbox for each screen - s.mypromptbox = awful.widget.prompt({prompt = " Run: ", fg = beautiful.prompt_fg}) - -- Create an imagebox widget which will contain an icon indicating which layout we're using. - -- We need one layoutbox per screen. - s.mylayoutbox = awful.widget.layoutbox(s) - s.mylayoutbox:buttons(gears.table.join( - awful.button({ }, 1, function () awful.layout.inc( 1) end), - awful.button({ }, 3, function () awful.layout.inc(-1) end), - awful.button({ }, 4, function () awful.layout.inc( 1) end), - awful.button({ }, 5, function () awful.layout.inc(-1) end))) - -- Create a taglist widget - s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons) - s.mytaglist.font = beautiful.font - - -- Create a tasklist widget - -- Show all clients - -- s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons) - -- Show only focused client - --s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.focused, tasklist_buttons) - -- Show only minimized clients - --s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.minimizedcurrenttags, tasklist_buttons) - -- TODO doesn't work - -- s.mytasklist.layout = wibox.layout.flex.horizontal - - -- Outer gaps - --awful.screen.padding(awful.screen.focused(),{left = 28, right = 28, top = 28, bottom = 28}) - - -- Create a system tray widget - s.systray = wibox.widget.systray() - s.systray.visible = false -- can be toggled by a keybind - - -- Wibar detached - Method: Transparent useless bar - -- Requires compositor - if beautiful.wibar_detached then - s.useless_wibar = awful.wibar({ position = beautiful.wibar_position, screen = s, height = beautiful.screen_margin * 2, opacity = 0 }) - --TODO - --s.useless_wibar:buttons(keys.desktopbuttons) - end - -- Create the wibox - s.mywibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)}) - -- Wibar items - -- Add or remove widgets here - s.mywibox:setup { - layout = wibox.layout.align.horizontal, - { -- Left widgets - layout = wibox.layout.fixed.horizontal, - --s.mylayoutbox, - --mylauncher, - s.mytaglist, - textseparator, - minimal_tasklist - }, - { -- Middle widgets - layout = wibox.layout.fixed.horizontal, - --s.mypromptbox, - --textseparator, - --s.mytasklist, - --minimal_tasklist - }, - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - --mpdarc_widget, - --textseparator, - --volumebar_prefix, - --volumebar_widget, - --textseparator, - --keyboardlayout_prefix, - --mykeyboardlayout, - --textseparator, - s.systray, - --minimal_tasklist, - textseparator, - --date_prefix, - mytextdate, - textseparator, - --clock_prefix, - mytextclock, - textseparator, - desktop_mode_widget, - pad, - pad - }, - } - - -- Second (alternate panel) - if beautiful.wibar_alt_enabled then - if beautiful.wibar_alt_detached then - s.useless_wibar_alt = awful.wibar({ position = beautiful.wibar_alt_position, screen = s, height = beautiful.screen_margin * 2, opacity = 0 }) - s.useless_wibar_alt:buttons(gears.table.join( - --TODO - --keys.desktopbuttons - )) - end - s.mywibox_alt = awful.wibox({ position = beautiful.wibar_alt_position, screen = s, width = beautiful.wibar_alt_width, height = beautiful.wibar_alt_height, shape = helpers.rrect(beautiful.wibar_alt_border_radius)}) - -- Only set them if they exist, else they overwrite the position variable - if beautiful.wibar_alt_x then - s.mywibox_alt.x = beautiful.wibar_alt_x - end - if beautiful.wibar_alt_y then - s.mywibox_alt.y = beautiful.wibar_alt_y - end - -- Second wibar items - -- Add or remove widgets here - s.mywibox_alt:setup { - layout = wibox.layout.align.horizontal, - { -- Left widgets - layout = wibox.layout.fixed.horizontal, - --pad, - --s.mylayoutbox, - --mylauncher, - }, - { -- Middle widgets - layout = wibox.layout.fixed.horizontal, - --s.mypromptbox, - --s.mytasklist, - --textseparator, - }, - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - --mpdarc_widget, - --textseparator, - --volumebar_prefix, - --volumebar_widget, - --textseparator, - --keyboardlayout_prefix, - --mykeyboardlayout, - --textseparator, - -- s.systray, - minimal_tasklist, - textseparator, - date_prefix, - mytextdate, - textseparator, - clock_prefix, - mytextclock, - textseparator, - desktop_mode_widget, - pad - }, - } - end - - -- Only set them if they exist, else they overwrite the position variable - if beautiful.wibar_x then - s.mywibox.x = beautiful.wibar_x - end - if beautiful.wibar_y then - s.mywibox.y = beautiful.wibar_y - end - --- s.mytaskwibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)}) --- s.mytaskwibox.x = s.mywibox.x --- s.mytaskwibox.y = s.mywibox.y --- s.mytaskwibox.visible = false --- s.mytaskwibox:setup { --- layout = wibox.layout.align.horizontal, --- { -- Left widgets --- layout = wibox.layout.fixed.horizontal, --- s.mytasklist --- }, --- { -- Middle widgets --- layout = wibox.layout.fixed.horizontal, --- }, --- { -- Right widgets --- layout = wibox.layout.fixed.horizontal, --- textseparator, --- mytextclock, --- textseparator, --- desktop_mode_widget, --- pad --- }, --- } - --- awesome.connect_signal("dummy", function (c) --- if s.mywibox.visible then --- s.mytaskwibox.visible = true --- s.mytaskwibox.ontop = true --- s.mywibox.visible = false --- else --- s.mywibox.visible = true --- s.mywibox.ontop = true --- s.mytaskwibox.visible = false --- end --- end) -end) - diff --git a/config/awesome/bars/ephemeral.lua b/config/awesome/bars/ephemeral.lua new file mode 100644 index 0000000..2a77261 --- /dev/null +++ b/config/awesome/bars/ephemeral.lua @@ -0,0 +1,358 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") + +local keys = require("keys") +local helpers = require("helpers") +local pad = helpers.pad + +-- Helper function that creates a button widget +local create_button = function (symbol, color, bg_color, hover_color) + local widget = wibox.widget { + font = "icomoon 14", + align = "center", + id = "text_role", + valign = "center", + markup = helpers.colorize_text(symbol, color), + widget = wibox.widget.textbox() + } + + local section = wibox.widget { + widget, + forced_width = dpi(70), + bg = bg_color, + widget = wibox.container.background + } + + -- Hover animation + section:connect_signal("mouse::enter", function () + section.bg = hover_color + end) + section:connect_signal("mouse::leave", function () + section.bg = bg_color + end) + + -- helpers.add_hover_cursor(section, "hand1") + + return section +end + +local exit = create_button("", beautiful.xcolor6, beautiful.xcolor8.."C0",beautiful.xcolor8.."E0") +exit:buttons(gears.table.join( + awful.button({ }, 1, function () + exit_screen_show() + end) +)) + +local volume_symbol = "" +local volume_muted_color = beautiful.xcolor8 +local volume_unmuted_color = beautiful.xcolor5 +local volume = create_button(volume_symbol, volume_unmuted_color, beautiful.xcolor8.."30", beautiful.xcolor8.."50") + +volume:buttons(gears.table.join( + -- Left click - Mute / Unmute + awful.button({ }, 1, function () + helpers.volume_control(0) + end), + -- Right click - Run or raise pavucontrol + awful.button({ }, 3, function () + helpers.run_or_raise({class = 'Pavucontrol'}, true, "pavucontrol") + end), + -- Scroll - Increase / Decrease volume + awful.button({ }, 4, function () + helpers.volume_control(5) + end), + awful.button({ }, 5, function () + helpers.volume_control(-5) + end) +)) + +awesome.connect_signal("evil::volume", function(_, muted) + local t = volume:get_all_children()[1] + if muted then + t.markup = helpers.colorize_text(volume_symbol, volume_muted_color) + else + t.markup = helpers.colorize_text(volume_symbol, volume_unmuted_color) + end +end) + +local microphone_symbol = "" +local microphone_muted_color = beautiful.xcolor8 +local microphone_unmuted_color = beautiful.xcolor3 +local microphone = create_button(microphone_symbol, microphone_unmuted_color, beautiful.xcolor8.."60", beautiful.xcolor8.."80") + +microphone:buttons(gears.table.join( + awful.button({ }, 1, function () + awful.spawn.with_shell("amixer -D pulse sset Capture toggle &> /dev/null") + end) +)) + +awesome.connect_signal("evil::microphone", function(muted) + local t = microphone:get_all_children()[1] + if muted then + t.markup = helpers.colorize_text(microphone_symbol, microphone_muted_color) + else + t.markup = helpers.colorize_text(microphone_symbol, microphone_unmuted_color) + end +end) + +local music = create_button("", beautiful.xcolor4, beautiful.xcolor8.."90", beautiful.xcolor8.."B0") + +music:buttons(gears.table.join( + awful.button({ }, 1, function () + helpers.run_or_raise({class = "music"}, true, user.music_client) + end), + awful.button({ }, 3, function () + helpers.run_or_raise({class = "music"}, true, user.music_client) + end) +)) + +local sandwich = create_button("", beautiful.xcolor1, beautiful.xcolor8.."30", beautiful.xcolor8.."50") +sandwich:buttons(gears.table.join( + awful.button({ }, 1, function () + app_drawer_show() + end), + awful.button({ }, 2, function () + helpers.toggle_scratchpad() + end), + awful.button({ }, 3, function () + toggle_tray() + end) +)) + +-- Helper function that updates a tasklist item +local update_tasklist = function (task, c) + local background = task:get_children_by_id('bg_role')[1] + local text = task:get_children_by_id('text_role')[1] + if c.minimized then + color = "#00000000" + else + if c.class == "email" then + color = beautiful.xcolor2 + elseif c.class == "Firefox" then + color = beautiful.xcolor1 + elseif c.class == "music" then + color = beautiful.xcolor5 + elseif c.class == "TelegramDesktop" then + color = beautiful.xcolor2 + elseif c.class == "Thunar" then + color = beautiful.xcolor3 + elseif c.class == "mpv" then + color = beautiful.xcolor6 + elseif c.class == "Alacritty" then + color = beautiful.xcolor4 + else + color = beautiful.xcolor7 + end + end + if client.focus == c then + text.markup = helpers.colorize_text(text.text, color) + -- background.bg = color + background.border_color = color + background.bg = beautiful.xbackground.."AA" + else + text.markup = helpers.colorize_text(text.text, beautiful.xforeground) + background.bg = color + background.border_color = "#00000000" + end +end + +local tag_colors_empty = { "#00000000", "#00000000", "#00000000", "#00000000", "#00000000", "#00000000", "#00000000", "#00000000", "#00000000", "#00000000", } + +local tag_colors_urgent = { + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7, + beautiful.xcolor7 +} + +local tag_colors_focused = { + beautiful.xcolor1, + beautiful.xcolor5, + beautiful.xcolor4, + beautiful.xcolor6, + beautiful.xcolor2, + beautiful.xcolor3, + beautiful.xcolor1, + beautiful.xcolor5, + beautiful.xcolor4, + beautiful.xcolor6, +} + +local tag_colors_occupied = { + beautiful.xcolor1.."55", + beautiful.xcolor5.."55", + beautiful.xcolor4.."55", + beautiful.xcolor6.."55", + beautiful.xcolor2.."55", + beautiful.xcolor3.."55", + beautiful.xcolor1.."55", + beautiful.xcolor5.."55", + beautiful.xcolor4.."55", + beautiful.xcolor6.."55", +} + +-- Helper function that updates a taglist item +local update_taglist = function (item, tag, index) + if tag.selected then + item.bg = tag_colors_focused[index] + elseif tag.urgent then + item.bg = tag_colors_urgent[index] + elseif #tag:clients() > 0 then + item.bg = tag_colors_occupied[index] + else + item.bg = tag_colors_empty[index] + end +end + +awful.screen.connect_for_each_screen(function(s) + -- Create a taglist for every screen + s.mytaglist = awful.widget.taglist { + screen = s, + filter = awful.widget.taglist.filter.all, + buttons = keys.taglist_buttons, + layout = wibox.layout.flex.horizontal, + widget_template = { + widget = wibox.container.background, + create_callback = function(self, tag, index, _) + update_taglist(self, tag, index) + end, + update_callback = function(self, tag, index, _) + update_taglist(self, tag, index) + end, + } + } + + -- Create a tasklist for every screen + s.mytasklist = awful.widget.tasklist { + screen = s, + filter = awful.widget.tasklist.filter.currenttags, + buttons = keys.tasklist_buttons, + style = { + font = beautiful.tasklist_font, + bg = beautiful.xcolor0, + }, + layout = { + layout = wibox.layout.flex.horizontal + }, + widget_template = { + { + { + id = 'text_role', + align = "center", + widget = wibox.widget.textbox, + }, + forced_width = dpi(220), + left = dpi(15), + right = dpi(15), + -- Add margins to top and bottom in order to force the + -- text to be on a single line, if needed. Might need + -- to adjust them according to font size. + top = dpi(4), + bottom = dpi(4), + widget = wibox.container.margin + }, + id = "bg_role", + widget = wibox.container.background, + }, + } + + + -- Create the wibox + s.mywibox = awful.wibar({visible = true, ontop = true, type = "dock", position = "bottom"}) + s.mywibox.height = beautiful.wibar_height + -- s.mywibox.width = beautiful.wibar_width + + s.mywibox.bg = beautiful.xcolor0 + + -- Bar placement + awful.placement.maximize_horizontally(s.mywibox) + + -- Wibar items + -- Add or remove widgets here + s.mywibox:setup { + sandwich, + s.mytasklist, + { + volume, + microphone, + music, + exit, + layout = wibox.layout.fixed.horizontal + }, + -- expand = "none", + layout = wibox.layout.align.horizontal + } + + + -- Create the top bar + s.mytopwibox = awful.wibar({visible = true, ontop = false, type = "dock", position = "top", height = dpi(5)}) + -- Bar placement + awful.placement.maximize_horizontally(s.mytopwibox) + s.mytopwibox.bg = "#00000000" + + s.mytopwibox:setup { + widget = s.mytaglist, + } + + -- Create a system tray widget + s.systray = wibox.widget.systray() + + -- Create a wibox that will only show the tray + -- Hidden by default. Can be toggled with a keybind. + s.traybox = wibox({visible = false, ontop = true, type = "normal"}) + s.traybox.width = dpi(120) + s.traybox.height = beautiful.wibar_height + awful.placement.bottom_left(s.traybox, {honor_workarea = true, margins = beautiful.screen_margin * 2}) + s.traybox.bg = "#00000000" + s.traybox:setup { + s.systray, + bg = beautiful.bg_systray, + shape = helpers.rrect(beautiful.border_radius), + widget = wibox.container.background() + } + + s.traybox:buttons(gears.table.join( + -- Middle click - Hide traybox + awful.button({ }, 2, function () + s.traybox.visible = false + end) + )) + -- Hide traybox when mouse leaves + s.traybox:connect_signal("mouse::leave", function () + s.traybox.visible = false + end) +end) + +-- We have set the wibar(s) to be ontop, but we do not want it to be above fullscreen clients +local function no_wibar_ontop(c) + local s = awful.screen.focused() + if c.fullscreen then + s.mywibox.ontop = false + else + s.mywibox.ontop = true + end +end + +client.connect_signal("focus", no_wibar_ontop) +client.connect_signal("unfocus", no_wibar_ontop) +client.connect_signal("property::fullscreen", no_wibar_ontop) + +-- Every bar theme should provide these fuctions +function toggle_wibars() + local s = awful.screen.focused() + s.mywibox.visible = not s.mywibox.visible + s.mytopwibox.visible = not s.mytopwibox.visible +end + +function toggle_tray() + local s = awful.screen.focused() + s.traybox.visible = not s.traybox.visible +end diff --git a/config/awesome/bars/lovelace.lua b/config/awesome/bars/lovelace.lua new file mode 100644 index 0000000..6dbe2f5 --- /dev/null +++ b/config/awesome/bars/lovelace.lua @@ -0,0 +1,131 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +--local xrdb = xresources.get_current_theme() + +local helpers = require("helpers") +local keys = require("keys") + +-- {{{ Widgets +local desktop_control = require("noodle.desktop_control") +local minimal_tasklist = require("noodle.minimal_tasklist") + +-- Start button widget (can toggle sidebar, tray, scratchpad) +start_widget = wibox.widget.imagebox(icons.start) +start_widget:buttons(gears.table.join( + -- Left click - Toggle sidebar + awful.button({ }, 1, function () + sidebar.visible = not sidebar.visible + end), + -- Middle click - Toggle scratchpad + awful.button({ }, 2, function () + helpers.toggle_scratchpad() + end), + -- Right click - Toggle tray + awful.button({ }, 3, function () + local traybox = awful.screen.focused().traybox + traybox.visible = not traybox.visible + end) + )) + +-- Create item separator +textseparator = wibox.widget.textbox() +textseparator.text = beautiful.separator_text +textseparator.font = "hurmit nerd font bold 14" +textseparator.markup = helpers.colorize_text(textseparator.text, beautiful.separator_fg) + +-- Create padding +pad = wibox.widget.textbox(" ") + +-- }}} +local update_taglist = function (item, tag, index) + if tag.selected then + item.image = beautiful.taglist_icons_focused[index] + elseif tag.urgent then + item.image = beautiful.taglist_icons_urgent[index] + elseif #tag:clients() > 0 then + item.image = beautiful.taglist_icons_occupied[index] + else + item.image = beautiful.taglist_icons_empty[index] + end +end + +awful.screen.connect_for_each_screen(function(s) + s.mytaglist = awful.widget.taglist { + screen = s, + filter = awful.widget.taglist.filter.all, + layout = wibox.layout.fixed.horizontal, + widget_template = { + widget = wibox.widget.imagebox, + -- Add support for hover colors and an index label + create_callback = function(self, tag, index, objects) + update_taglist(self, tag, index) + end, + update_callback = function(self, tag, index, objects) + update_taglist(self, tag, index) + end, + }, + buttons = keys.taglist_buttons + } + + -- Create a system tray widget + s.systray = wibox.widget.systray() + + -- Create the wibox + s.mywibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)}) + -- Wibar items + -- Add or remove widgets here + s.mywibox:setup { + layout = wibox.layout.fixed.horizontal, + pad, + start_widget, + textseparator, + s.mytaglist, + textseparator, + desktop_control, + pad + } + + -- Only set them if they exist, else they overwrite the position variable + if beautiful.wibar_x then + s.mywibox.x = beautiful.wibar_x + end + if beautiful.wibar_y then + s.mywibox.y = beautiful.wibar_y + end + + -- Create a wibox that will only show the tray + -- Hidden by default. Can be toggled with a keybind. + s.traybox = wibox({visible = false, ontop = true, shape = gears.shape.rounded_bar, type = "dock"}) + s.traybox.width = dpi(150) + s.traybox.height = dpi(38) + s.traybox.x = beautiful.screen_margin * 2 + -- s.traybox.x = s.geometry.width - s.traybox.width - beautiful.screen_margin * 2 + s.traybox.y = s.geometry.height - s.traybox.height - beautiful.screen_margin * 2 + s.traybox.bg = beautiful.bg_systray + s.traybox:setup { + -- wibox.widget.textbox("test"), + pad, + s.systray, + pad, + layout = wibox.layout.align.horizontal + } + s.traybox:buttons(gears.table.join( + -- Middle click - Hide traybox + awful.button({ }, 2, function () + s.traybox.visible = false + end) + )) + +end) + +-- Every bar theme should provide these fuctions +function toggle_wibars() + local s = awful.screen.focused() + s.mywibox.visible = not s.mywibox.visible +end +function toggle_tray() + local s = awful.screen.focused() + s.traybox.visible = not s.traybox.visible +end diff --git a/config/awesome/bars/manta.lua b/config/awesome/bars/manta.lua new file mode 100644 index 0000000..7e3e7b8 --- /dev/null +++ b/config/awesome/bars/manta.lua @@ -0,0 +1,111 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +--local xrdb = xresources.get_current_theme() + +local helpers = require("helpers") +local keys = require("keys") + +-- {{{ Widgets +local desktop_mode_widget = require("noodle.desktop_mode_widget") +local minimal_tasklist = require("noodle.minimal_tasklist") + +-- Volume widget prefix +volumebar_prefix = wibox.widget.textbox(" ") +volumebar_prefix.markup = helpers.colorize_text(volumebar_prefix.text, beautiful.prefix_fg) + +-- Keyboard map indicator and switcher +keyboardlayout_prefix = wibox.widget.textbox(" ") +keyboardlayout_prefix.markup = helpers.colorize_text(keyboardlayout_prefix.text, beautiful.prefix_fg) +mykeyboardlayout = awful.widget.keyboardlayout() + +-- Create a textclock widget that shows date +date_prefix = wibox.widget.textbox(" ") +date_prefix.markup = helpers.colorize_text(date_prefix.text, beautiful.prefix_fg) +--mytextdate = wibox.widget.textclock("%a %d %B") +mytextdate = wibox.widget.textclock("%j days around the sun") --HAHA very useful +-- Create a textclock widget +clock_prefix = wibox.widget.textbox(" ") +clock_prefix.markup = helpers.colorize_text(clock_prefix.text, beautiful.prefix_fg) +mytextclock = wibox.widget.textclock("%H:%M") + +-- Create item separator +textseparator = wibox.widget.textbox() +textseparator.text = beautiful.separator_text +textseparator.markup = helpers.colorize_text(textseparator.text, beautiful.separator_fg) + +-- Create padding +pad = wibox.widget.textbox(" ") + +-- }}} + +-- Create a wibox for each screen and add it +awful.screen.connect_for_each_screen(function(s) + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt({prompt = " Run: ", fg = beautiful.prompt_fg}) + -- Create an imagebox widget which will contain an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(gears.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, keys.taglist_buttons) + s.mytaglist.font = beautiful.font + + -- Create a system tray widget + s.systray = wibox.widget.systray() + s.systray.visible = false -- can be toggled by a keybind + + -- Create the wibox + s.mywibox = awful.wibar({ position = beautiful.wibar_position, screen = s, width = beautiful.wibar_width, height = beautiful.wibar_height, shape = helpers.rrect(beautiful.wibar_border_radius)}) + -- Wibar items + -- Add or remove widgets here + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + s.mytaglist, + textseparator, + minimal_tasklist + }, + { -- Middle widgets + layout = wibox.layout.fixed.horizontal, + --s.mypromptbox, + --textseparator, + --s.mytasklist, + --minimal_tasklist + }, + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + s.systray, + textseparator, + mytextdate, + textseparator, + mytextclock, + textseparator, + desktop_mode_widget, + pad, + pad + }, + } + + -- Place bar at the bottom and add margins + awful.placement.bottom(s.mywibox, {margins = beautiful.useless_gap * 2}) + -- Also add some screen padding so that clients do not stick to the bar + s.padding = { bottom = s.padding.bottom + beautiful.useless_gap * 2 } + +end) + +-- Every bar theme should provide these fuctions +function toggle_wibars() + local s = awful.screen.focused() + s.mywibox.visible = not s.mywibox.visible +end +function toggle_tray() + local s = awful.screen.focused() + s.systray.visible = not s.systray.visible +end diff --git a/config/awesome/bar_themes/skyfall.lua b/config/awesome/bars/skyfall.lua similarity index 57% rename from config/awesome/bar_themes/skyfall.lua rename to config/awesome/bars/skyfall.lua index 60ca8fd..3f805b9 100644 --- a/config/awesome/bar_themes/skyfall.lua +++ b/config/awesome/bars/skyfall.lua @@ -2,67 +2,47 @@ local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi +local keys = require("keys") local helpers = require("helpers") local pad = helpers.pad --- {{{ Widgets +-- Helper function that updates a taglist item +local update_taglist = function (item, tag, index) + if tag.selected then + item.markup = helpers.colorize_text(beautiful.taglist_text_focused[index], beautiful.taglist_text_color_focused[index]) + elseif tag.urgent then + item.markup = helpers.colorize_text(beautiful.taglist_text_urgent[index], beautiful.taglist_text_color_urgent[index]) + elseif #tag:clients() > 0 then + item.markup = helpers.colorize_text(beautiful.taglist_text_occupied[index], beautiful.taglist_text_color_occupied[index]) + else + item.markup = helpers.colorize_text(beautiful.taglist_text_empty[index], beautiful.taglist_text_color_empty[index]) + end +end + -- Create a wibox for each screen and add it -local taglist_buttons = gears.table.join( - awful.button({ }, 1, function(t) t:view_only() end), - awful.button({ modkey }, 1, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - -- awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ }, 3, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - awful.button({ modkey }, 3, function(t) - if client.focus then - client.focus:toggle_tag(t) - end - end), - awful.button({ }, 4, function(t) awful.tag.viewprev(t.screen) end), - awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end) - ) - -local tasklist_buttons = gears.table.join( - awful.button({ }, 1, - function (c) - if c == client.focus then - c.minimized = true - else - -- Without this, the following - -- :isvisible() makes no sense - c.minimized = false - if not c:isvisible() and c.first_tag then - c.first_tag:view_only() - end - -- This will also un-minimize - -- the client, if needed - client.focus = c - c:raise() - end - end), - -- Middle mouse button closes the window - awful.button({ }, 2, function (c) c:kill() end), - awful.button({ }, 3, function (c) c.minimized = true end), - awful.button({ }, 4, function () - awful.client.focus.byidx(-1) - end), - awful.button({ }, 5, function () - awful.client.focus.byidx(1) - end) -) --- }}} - awful.screen.connect_for_each_screen(function(s) + s.mytaglist = awful.widget.taglist { + screen = s, + filter = awful.widget.taglist.filter.all, + layout = wibox.layout.fixed.horizontal, + widget_template = { + widget = wibox.widget.textbox, + create_callback = function(self, tag, index, _) + self.align = "center" + self.valign = "center" + self.forced_width = dpi(25) + self.font = beautiful.taglist_text_font + + update_taglist(self, tag, index) + end, + update_callback = function(self, tag, index, _) + update_taglist(self, tag, index) + end, + }, + buttons = keys.taglist_buttons + } + -- Create a system tray widget s.systray = wibox.widget.systray() @@ -92,23 +72,14 @@ awful.screen.connect_for_each_screen(function(s) s.traybox.visible = false end) - -- Create a taglist widget - -- s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons) - - -- Create an icon taglist - -- local icon_taglist = require("noodle.icon_taglist") - - -- Create a custom text taglist - local text_taglist = require("noodle.text_taglist") - -- Create text weather widget local text_weather = require("noodle.text_weather") - local weather_widget_icon = text_weather:get_all_children()[1] +> local weather_widget_icon = text_weather:get_all_children()[1] weather_widget_icon.font = "Typicons 11" local weather_widget_text = text_weather:get_all_children()[2] weather_widget_text.font = "sans 9" - -- Create a widget that displays window buttons (close, maximize, minimize) + -- Create a window control widget local close_button = wibox.widget.textbox() close_button.font = "Typicons 11" close_button.markup = helpers.colorize_text("", beautiful.xcolor1) @@ -153,7 +124,7 @@ awful.screen.connect_for_each_screen(function(s) } window_buttons:buttons(gears.table.join( awful.button({ }, 2, function () - awful.spawn.with_shell("rofi -show windowcd") + awful.spawn.with_shell("rofi -matching fuzzy -show windowcd") end), awful.button({ }, 4, function () awful.client.focus.byidx(-1) @@ -176,7 +147,7 @@ awful.screen.connect_for_each_screen(function(s) spacing = dpi(12), layout = wibox.layout.fixed.horizontal }, - text_taglist, + s.mytaglist, window_buttons, expand = "none", layout = wibox.layout.align.horizontal @@ -185,9 +156,18 @@ end) local s = mouse.screen -- Show traybox when the mouse touches the rightmost edge of the wibar --- TODO fix for wibar_position = "top" traybox_activator = wibox({ x = s.geometry.width - 1, y = s.geometry.height - beautiful.wibar_height, height = beautiful.wibar_height, width = 1, opacity = 0, visible = true, bg = beautiful.wibar_bg }) traybox_activator:connect_signal("mouse::enter", function () -- awful.screen.focused().traybox.visible = true s.traybox.visible = true end) + +-- Every bar theme should provide these fuctions +function toggle_wibars() + local s = awful.screen.focused() + s.mywibox.visible = not s.mywibox.visible +end +function toggle_tray() + local s = awful.screen.focused() + s.traybox.visible = not s.traybox.visible +end diff --git a/config/awesome/evil/battery.lua b/config/awesome/evil/battery.lua new file mode 100644 index 0000000..56c4def --- /dev/null +++ b/config/awesome/evil/battery.lua @@ -0,0 +1,51 @@ +-- Provides: +-- evil::battery +-- percentage (integer) +-- evil::charger +-- plugged (boolean) +-- +local awful = require("awful") + +local update_interval = 30 + +local battery_script = [[ + sh -c " + upower -i $(upower -e | grep BAT) | grep percentage | awk '{print $2}' + "]] + +-- Subscribe to power supply status changes with acpi_listen +local charger_script = [[ + sh -c ' + acpi_listen | grep --line-buffered ac_adapter +']] + +-- Periodically get battery info +awful.widget.watch(battery_script, update_interval, function(widget, stdout) + local battery = stdout:gsub("%%", "") + awesome.emit_signal("evil::battery", tonumber(battery)) +end) + +local emit_charger_info = function() + awful.spawn.easy_async_with_shell("cat /sys/class/power_supply/*/online", function (out) + status = tonumber(out) + if status == 1 then + awesome.emit_signal("evil::charger", true) + else + awesome.emit_signal("evil::charger", false) + end + end) +end + +-- Run once to initialize widgets +emit_charger_info() + +-- Kill old acpi_listen process +awful.spawn.easy_async_with_shell("ps x | grep \"acpi_listen\" | grep -v grep | awk '{print $1}' | xargs kill", function () + -- Update charger status with each line printed + awful.spawn.with_line_callback(charger_script, { + stdout = function(_) + emit_charger_info() + end + }) + +end) diff --git a/config/awesome/evil/brightness.lua b/config/awesome/evil/brightness.lua new file mode 100644 index 0000000..d44a071 --- /dev/null +++ b/config/awesome/evil/brightness.lua @@ -0,0 +1,38 @@ +-- Provides: +-- evil::brightness +-- percentage (integer) +local awful = require("awful") + +-- Subscribe to backlight changes +-- Requires inotify-tools +local brightness_subscribe_script = [[ + bash -c " + while (inotifywait -e modify /sys/class/backlight/?**/brightness -qq) do echo; done +"]] + +local brightness_script = [[ + sh -c " + light -G +"]] + +local emit_brightness_info = function() + awful.spawn.with_line_callback(brightness_script, { + stdout = function(line) + percentage = math.floor(tonumber(line)) + awesome.emit_signal("evil::brightness", percentage) + end + }) +end + +-- Run once to initialize widgets +emit_brightness_info() + +-- Kill old inotifywait process +awful.spawn.easy_async_with_shell("ps x | grep \"inotifywait -e modify /sys/class/backlight\" | grep -v grep | awk '{print $1}' | xargs kill", function () + -- Update brightness status with each line printed + awful.spawn.with_line_callback(brightness_subscribe_script, { + stdout = function(_) + emit_brightness_info() + end + }) +end) diff --git a/config/awesome/evil/cpu.lua b/config/awesome/evil/cpu.lua new file mode 100644 index 0000000..f910709 --- /dev/null +++ b/config/awesome/evil/cpu.lua @@ -0,0 +1,18 @@ +-- Provides: +-- evil::cpu +-- used percentage (integer) +local awful = require("awful") + +local update_interval = 5 +local cpu_idle_script = [[ + sh -c " + vmstat 1 2 | tail -1 | awk '{printf \"%d\", $15}' + "]] + +-- Periodically get cpu info +awful.widget.watch(cpu_idle_script, update_interval, function(widget, stdout) + -- local cpu_idle = stdout:match('+(.*)%.%d...(.*)%(') + local cpu_idle = stdout + cpu_idle = string.gsub(cpu_idle, '^%s*(.-)%s*$', '%1') + awesome.emit_signal("evil::cpu", 100 - tonumber(cpu_idle)) +end) diff --git a/config/awesome/evil/init.lua b/config/awesome/evil/init.lua new file mode 100644 index 0000000..f6f9518 --- /dev/null +++ b/config/awesome/evil/init.lua @@ -0,0 +1,12 @@ +-- evil = {} + +require("evil.volume") +require("evil.battery") +require("evil.cpu") +require("evil.temperature") +require("evil.ram") +require("evil.weather") +require("evil.mpd") +require("evil.brightness") + +-- return evil diff --git a/config/awesome/evil/mpd.lua b/config/awesome/evil/mpd.lua new file mode 100644 index 0000000..1734ab8 --- /dev/null +++ b/config/awesome/evil/mpd.lua @@ -0,0 +1,46 @@ +-- Provides: +-- evil::mpd +-- artist (string) +-- song (string) +-- paused (boolean) +local awful = require("awful") + +local function emit_info() + awful.spawn.easy_async({"mpc", "-f", "[[%artist%@@%title%@]]"}, + function(stdout) + local artist = stdout:match('(.*)@@') + local title = stdout:match('@@(.*)@') + title = string.gsub(title, '^%s*(.-)%s*$', '%1') + local status = stdout:match('%[(.*)%]') + status = string.gsub(status, '^%s*(.-)%s*$', '%1') + + local paused + if status == "playing" then + paused = false + else + paused = true + end + + awesome.emit_signal("evil::mpd", artist, title, paused) + end + ) +end + +-- Run once to initialize widgets +emit_info() + +-- Sleeps until mpd changes state (pause/play/next/prev) +local mpd_script = [[ + sh -c ' + mpc idleloop player + ']] + +-- Kill old mpc idleloop player process +awful.spawn.easy_async_with_shell("ps x | grep \"mpc idleloop player\" | grep -v grep | awk '{print $1}' | xargs kill", function () + -- Emit song info with each line printed + awful.spawn.with_line_callback(mpd_script, { + stdout = function(line) + emit_info() + end + }) +end) diff --git a/config/awesome/evil/ram.lua b/config/awesome/evil/ram.lua new file mode 100644 index 0000000..2d8fb25 --- /dev/null +++ b/config/awesome/evil/ram.lua @@ -0,0 +1,20 @@ +-- Provides: +-- evil::ram +-- used (integer - mega bytes) +-- total (integer - mega bytes) +local awful = require("awful") + +local update_interval = 20 +-- Returns the used amount of ram in percentage +local ram_script = [[ + sh -c " + free -m | grep 'Mem:' | awk '{printf \"%d@@%d@\", $7, $2}' + "]] + +-- Periodically get ram info +awful.widget.watch(ram_script, update_interval, function(widget, stdout) + local available = stdout:match('(.*)@@') + local total = stdout:match('@@(.*)@') + local used = tonumber(total) - tonumber(available) + awesome.emit_signal("evil::ram", used, tonumber(total)) +end) diff --git a/config/awesome/evil/temperature.lua b/config/awesome/evil/temperature.lua new file mode 100644 index 0000000..12394db --- /dev/null +++ b/config/awesome/evil/temperature.lua @@ -0,0 +1,15 @@ +-- Provides: +-- evil::temperature +-- temperature (integer - in Celcius) +local awful = require("awful") + +local update_interval = 15 +local temp_script = [[ + sh -c " + sensors | grep Package | awk '{print $4}' | cut -c 2-3 + "]] + +-- Periodically get temperature info +awful.widget.watch(temp_script, update_interval, function(widget, stdout) + awesome.emit_signal("evil::temperature", tonumber(stdout)) +end) diff --git a/config/awesome/evil/volume.lua b/config/awesome/evil/volume.lua new file mode 100644 index 0000000..2ca6ea0 --- /dev/null +++ b/config/awesome/evil/volume.lua @@ -0,0 +1,74 @@ +-- Provides: +-- evil::volume +-- volume percentage (integer) +-- muted (boolean) +-- evil::microphone +-- muted (boolean) +local awful = require("awful") + +local function emit_volume_info() + -- Get volume info + awful.spawn.easy_async("pactl list sinks", + function(stdout) + local volume = stdout:match('(%d+)%% /') + local muted = stdout:match('Mute:(%s+)[yes]') + if muted ~= nil then + awesome.emit_signal("evil::volume", tonumber(volume), true) + else + awesome.emit_signal("evil::volume", tonumber(volume), false) + end + end + ) +end + +local function emit_microphone_info() + -- Use tail to grab the last line of the output (which refers to the microphone) + awful.spawn.easy_async_with_shell("pacmd list-sources | grep muted | tail -1 | awk '{print $2}'", + function(stdout) + -- Remove trailing whitespace + muted = stdout:gsub('^%s*(.-)%s*$', '%1') + if muted == "yes" then + awesome.emit_signal("evil::microphone", true) + else + awesome.emit_signal("evil::microphone", false) + end + end + ) +end + + +-- Run once to initialize widgets +emit_volume_info() +emit_microphone_info() + +-- Sleeps until pactl detects an event (volume up/down/toggle mute) +local volume_script = [[ + bash -c ' + pactl subscribe 2> /dev/null | grep --line-buffered "sink" + ']] + + +-- Sleeps until pactl detects an event (microphone volume up / down / (un)mute) +local microphone_script = [[ + bash -c ' + pactl subscribe 2> /dev/null | grep --line-buffered "source" + ']] + +-- Kill old pactl subscribe processes +awful.spawn.easy_async_with_shell("ps x | grep \"pactl subscribe\" | grep -v grep | awk '{print $1}' | xargs kill", function () + -- Run emit_volume_info() with each line printed + awful.spawn.with_line_callback(volume_script, { + stdout = function(line) + emit_volume_info() + end + }) + -- Run emit_microphone_info() with each line printed + awful.spawn.with_line_callback(microphone_script, { + stdout = function(line) + emit_microphone_info() + end + }) + +end) + + diff --git a/config/awesome/evil/weather.lua b/config/awesome/evil/weather.lua new file mode 100644 index 0000000..d9f4fb9 --- /dev/null +++ b/config/awesome/evil/weather.lua @@ -0,0 +1,50 @@ +-- Provides: +-- evil::weather +-- temperature (integer) +-- description (string) +-- icon_code (string) +local awful = require("awful") + +-- Configuration +local key = user.openweathermap_key +local city_id = user.openweathermap_city_id +local units = user.weather_units +-- Don't update too often, because your requests might get blocked for 24 hours +local update_interval = 1200 + +local weather_details_script = [[ + bash -c ' + KEY="]]..key..[[" + CITY="]]..city_id..[[" + UNITS="]]..units..[[" + + weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID=$KEY&id=$CITY&units=$UNITS") + + if [ ! -z "$weather" ]; then + weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) + weather_icon=$(echo "$weather" | jq -r ".weather[].icon" | head -1) + weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1) + + echo "$weather_icon" "$weather_description"@@"$weather_temp" + else + echo "..." + fi + ']] + +-- Periodically get weather info +awful.widget.watch(weather_details_script, update_interval, function(widget, stdout) + local icon_code = string.sub(stdout, 1, 3) + local weather_details = string.sub(stdout, 5) + weather_details = string.gsub(weather_details, '^%s*(.-)%s*$', '%1') + -- Replace "-0" with "0" degrees + weather_details = string.gsub(weather_details, '%-0', '0') + -- Capitalize first letter of the description + weather_details = weather_details:sub(1,1):upper()..weather_details:sub(2) + local description = weather_details:match('(.*)@@') + local temperature = weather_details:match('@@(.*)') + if icon_code == "..." then + awesome.emit_signal("evil::weather", 999, "Weather unavailable", "") + else + awesome.emit_signal("evil::weather", tonumber(temperature), description, icon_code) + end +end) diff --git a/config/awesome/helpers.lua b/config/awesome/helpers.lua index 76358da..ae4762f 100644 --- a/config/awesome/helpers.lua +++ b/config/awesome/helpers.lua @@ -1,3 +1,5 @@ +-- Functions that you use more than once and in different files would +-- be nice to define here. local awful = require("awful") local gears = require("gears") local beautiful = require("beautiful") @@ -5,48 +7,20 @@ local xresources = require("beautiful.xresources") local dpi = xresources.apply_dpi local wibox = require("wibox") +local naughty = require("naughty") + local helpers = {} --- Create rounded rectangle shape +-- Create rounded rectangle shape (in one line) helpers.rrect = function(radius) return function(cr, width, height) gears.shape.rounded_rect(cr, width, height, radius) - --gears.shape.octogon(cr, width, height, radius) - --gears.shape.rounded_bar(cr, width, height) end end -helpers.rbar = function() - return function(cr, width, height) - gears.shape.rounded_bar(cr, width, height) - end -end - helpers.prrect = function(radius, tl, tr, br, bl) - return function(cr, width, height) - gears.shape.partially_rounded_rect(cr, width, height, tl, tr, br, bl, radius) - end -end - --- Create info bubble shape --- TODO -helpers.infobubble = function(radius) - return function(cr, width, height) - gears.shape.infobubble(cr, width, height, radius) - end -end - --- Create rectangle shape -helpers.rect = function() return function(cr, width, height) - gears.shape.rectangle(cr, width, height) - end -end - --- Create circle shape -helpers.circle = function() - return function(cr, width, height) - gears.shape.circle(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, tl, tr, br, bl, radius) end end @@ -77,99 +51,77 @@ function helpers.pad(size) end function helpers.move_to_edge(c, direction) - local workarea = awful.screen.focused().workarea - local client_geometry = c:geometry() + -- local workarea = awful.screen.focused().workarea + -- local client_geometry = c:geometry() if direction == "up" then - c:geometry({ nil, y = workarea.y + beautiful.screen_margin * 2, nil, nil }) + local old_x = c:geometry().x + awful.placement.top(c, {honor_padding = true, honor_workarea = true, honor_padding = true}) + c.x = old_x + -- c:geometry({ nil, y = workarea.y + beautiful.screen_margin * 2, nil, nil }) elseif direction == "down" then - c:geometry({ nil, y = workarea.height + workarea.y - client_geometry.height - beautiful.screen_margin * 2 - beautiful.border_width * 2, nil, nil }) + local old_x = c:geometry().x + awful.placement.bottom(c, {honor_padding = true, honor_workarea = true, honor_padding = true}) + c.x = old_x + -- c:geometry({ nil, y = workarea.height + workarea.y - client_geometry.height - beautiful.screen_margin * 2 - beautiful.border_width * 2, nil, nil }) elseif direction == "left" then - c:geometry({ x = workarea.x + beautiful.screen_margin * 2, nil, nil, nil }) + local old_y = c:geometry().y + awful.placement.left(c, {honor_padding = true, honor_workarea = true, honor_padding = true}) + c.y = old_y + -- c:geometry({ x = workarea.x + beautiful.screen_margin * 2, nil, nil, nil }) elseif direction == "right" then - c:geometry({ x = workarea.width + workarea.x - client_geometry.width - beautiful.screen_margin * 2 - beautiful.border_width * 2, nil, nil, nil }) + local old_y = c:geometry().y + awful.placement.right(c, {honor_padding = true, honor_workarea = true, honor_padding = true}) + c.y = old_y + -- c:geometry({ x = workarea.width + workarea.x - client_geometry.width - beautiful.screen_margin * 2 - beautiful.border_width * 2, nil, nil, nil }) end end -function helpers.create_titlebar(c, titlebar_buttons, titlebar_position, titlebar_size) - awful.titlebar(c, {font = beautiful.titlebar_font, position = titlebar_position, size = titlebar_size}) : setup { - { - buttons = titlebar_buttons, - layout = wibox.layout.fixed.horizontal - }, - { - buttons = titlebar_buttons, - layout = wibox.layout.fixed.horizontal - }, - { - buttons = titlebar_buttons, - layout = wibox.layout.fixed.horizontal - }, - layout = wibox.layout.align.horizontal - } -end - - local double_tap_timer = nil function helpers.single_double_tap(single_tap_function, double_tap_function) - if double_tap_timer then - double_tap_timer:stop() - double_tap_timer = nil - double_tap_function() - -- naughty.notify({text = "We got a double tap"}) - return - end - - double_tap_timer = - gears.timer.start_new(0.20, function() - double_tap_timer = nil - -- naughty.notify({text = "We got a single tap"}) - single_tap_function() - return false - end) -end - -function helpers.toggle_scratchpad() - local screen = awful.screen.focused() - - -- Get rid of it if it is focused - if client.focus ~= nil and client.focus.class == "scratchpad" then - -- 1. Minimize scratchpad - Does not work? - -- client.focus.minimized = true - - -- 2. Move scratchpad to "Miscellaneous" tag - local tag = screen.tags[10] - if tag then - client.focus:move_to_tag(tag) - end + if double_tap_timer then + double_tap_timer:stop() + double_tap_timer = nil + double_tap_function() + -- naughty.notify({text = "We got a double tap"}) return end - -- Move scratchpad to current tag - local current_tag = screen.selected_tag - local scratchpad_client = function (c) - return awful.rules.match(c, {class = "scratchpad"}) - end - for c in awful.client.iterate(scratchpad_client) do - c.minimized = false - c:move_to_tag(current_tag) - client.focus = c - c:raise() - end - - -- if client.focus ~= nil and client.focus.class == "scratchpad" then - -- client.focus.minimized = true - -- return - -- end - -- local matcher = function (c) - -- return awful.rules.match(c, {class = 'scratchpad'}) - -- end - -- awful.client.run_or_raise( "scratchpad" , matcher) + double_tap_timer = + gears.timer.start_new(0.20, function() + double_tap_timer = nil + -- naughty.notify({text = "We got a single tap"}) + if single_tap_function then + single_tap_function() + end + return false + end) end --- Add a clickable effect on a widget by changing the cursor on mouse::enter and mouse::leave -function helpers.add_clickable_effect(w) + +-- Used as a custom command in rofi to move a window into the current tag +-- instead of following it. +-- Rofi has access to the X window id of the client. +function helpers.rofi_move_client_here(window) + local win = function (c) + return awful.rules.match(c, {window = window}) + end + + for c in awful.client.iterate(win) do + c.minimized = false + c:move_to_tag(mouse.screen.selected_tag) + client.focus = c + c:raise() + end +end + +-- Add a hover cursor to a widget by changing the cursor on +-- mouse::enter and mouse::leave +-- You can find the names of the available cursors by opening any +-- cursor theme and looking in the "cursors folder" +-- For example: "hand1" is the cursor that appears when hovering over +-- links +function helpers.add_hover_cursor(w, hover_cursor) local original_cursor = "left_ptr" - local hover_cursor = "hand1" w:connect_signal("mouse::enter", function () local w = _G.mouse.current_wibox @@ -186,4 +138,320 @@ function helpers.add_clickable_effect(w) end) end +-- Tag back and forth: +-- If you try to focus the same tag you are at, go back to the previous tag. +-- Useful for quick switching after for example checking an incoming chat +-- message at tag 2 and coming back to your work at tag 1 with the same +-- keypress +function helpers.tag_back_and_forth(tag_index) + local s = mouse.screen + local tag = s.tags[tag_index] + if tag then + if tag == s.selected_tag then + awful.tag.history.restore() + else + tag:view_only() + end + end +end + + +-- Resize DWIM (Do What I Mean) +-- Resize client or factor +-- Constants -- +local floating_resize_amount = dpi(20) +local tiling_resize_factor= 0.05 +--------------- +function helpers.resize_dwim(c, direction) + if awful.layout.get(mouse.screen) == awful.layout.suit.floating or (c and c.floating) then + if direction == "up" then + c:relative_move( 0, 0, 0, -floating_resize_amount) + elseif direction == "down" then + c:relative_move( 0, 0, 0, floating_resize_amount) + elseif direction == "left" then + c:relative_move( 0, 0, -floating_resize_amount, 0) + elseif direction == "right" then + c:relative_move( 0, 0, floating_resize_amount, 0) + end + else + if direction == "up" then + awful.client.incwfact(-tiling_resize_factor) + elseif direction == "down" then + awful.client.incwfact( tiling_resize_factor) + elseif direction == "left" then + awful.tag.incmwfact(-tiling_resize_factor) + elseif direction == "right" then + awful.tag.incmwfact( tiling_resize_factor) + end + end +end + +-- Move client to screen edge, respecting the screen workarea +function helpers.move_to_edge(c, direction) + local workarea = awful.screen.focused().workarea + if direction == "up" then + c:geometry({ nil, y = workarea.y + beautiful.useless_gap * 2, nil, nil }) + elseif direction == "down" then + c:geometry({ nil, y = workarea.height + workarea.y - c:geometry().height - beautiful.useless_gap * 2 - beautiful.border_width * 2, nil, nil }) + elseif direction == "left" then + c:geometry({ x = workarea.x + beautiful.useless_gap * 2, nil, nil, nil }) + elseif direction == "right" then + c:geometry({ x = workarea.width + workarea.x - c:geometry().width - beautiful.useless_gap * 2 - beautiful.border_width * 2, nil, nil, nil }) + end +end + +-- Move client DWIM (Do What I Mean) +-- Move to edge if the client / layout is floating +-- Swap by index if maximized +-- Else swap client by direction +function helpers.move_client_dwim(c, direction) + if c.floating or (awful.layout.get(mouse.screen) == awful.layout.suit.floating) then + helpers.move_to_edge(c, direction) + elseif awful.layout.get(mouse.screen) == awful.layout.suit.max then + if direction == "up" or direction == "left" then + awful.client.swap.byidx(-1, c) + elseif direction == "down" or direction == "right" then + awful.client.swap.byidx(1, c) + end + else + awful.client.swap.bydirection(direction, c, nil) + end +end + +-- Make client floating and snap to the desired edge +function helpers.float_and_edge_snap(c, direction) + -- if not c.floating then + -- c.floating = true + -- end + naughty.notify({ text = "double tap"}) + c.floating = true + local workarea = awful.screen.focused().workarea + if direction == "up" then + local axis = 'horizontally' + local f = awful.placement.scale + + awful.placement.top + + (axis and awful.placement['maximize_'..axis] or nil) + local geo = f(client.focus, {honor_padding = true, honor_workarea=true, to_percent = 0.5}) + elseif direction == "down" then + local axis = 'horizontally' + local f = awful.placement.scale + + awful.placement.bottom + + (axis and awful.placement['maximize_'..axis] or nil) + local geo = f(client.focus, {honor_padding = true, honor_workarea=true, to_percent = 0.5}) + elseif direction == "left" then + local axis = 'vertically' + local f = awful.placement.scale + + awful.placement.left + + (axis and awful.placement['maximize_'..axis] or nil) + local geo = f(client.focus, {honor_padding = true, honor_workarea=true, to_percent = 0.5}) + elseif direction == "right" then + local axis = 'vertically' + local f = awful.placement.scale + + awful.placement.right + + (axis and awful.placement['maximize_'..axis] or nil) + local geo = f(client.focus, {honor_padding = true, honor_workarea=true, to_percent = 0.5}) + end +end + +-- Rounds a number to any number of decimals +function helpers.round(number, decimals) + local power = 10 ^ decimals + return math.floor(number * power) / power +end + +local volume_get_cmd = "pactl list sinks | grep -m 1 'Volume:' | awk '{print $5}' | cut -d '%' -f1 " +local muted_get_cmd = "pactl list sinks | grep -m 1 'Mute:' | awk '{printf \"%s\", $2}'" +local volume_notif +function helpers.volume_control(step) + local cmd + if step == 0 then + -- Toggle mute + cmd = "pactl set-sink-mute @DEFAULT_SINK@ toggle && "..muted_get_cmd + awful.spawn.with_shell(cmd) + -- awful.spawn.easy_async_with_shell(cmd, function(out) + -- local text + -- if out:match('yes') then + -- text = "Muted" + -- else + -- text = "Unmuted" + -- end + -- if not sidebar.visible then + -- if volume_notif and not volume_notif.is_expired then + -- volume_notif.message = text + -- else + -- volume_notif = naughty.notification({ title = "Volume", message = text, timeout = 2 }) + -- end + -- end + -- end) + else + if step > 0 then + sign = "+" + else + sign = "" + end + cmd = "pactl set-sink-mute @DEFAULT_SINK@ 0 && pactl set-sink-volume @DEFAULT_SINK@ "..sign..tostring(step).."% && "..volume_get_cmd + awful.spawn.easy_async_with_shell(cmd, function(out) + print(out) + out = out:gsub('^%s*(.-)%s*$', '%1') + print(out) + if not sidebar.visible then + if volume_notif and not volume_notif.is_expired then + volume_notif.message = out + else + volume_notif = naughty.notification({ title = "Volume", message = out, timeout = 2 }) + end + end + + end) + end +end + +-- TODO: notification action buttons +function helpers.screenshot(action, delay) + local cmd + local timestamp = os.date("%Y.%m.%d-%H.%M.%S") + local filename = user.screenshot_dir..timestamp..".screenshot.png" + -- local filename = user.screenshot_dir.."screenshot"..timestamp..".png" + local maim_args = "-u -b 3 -m 5" + local icon = icons.screenshot + + local prefix + if delay then + prefix = "sleep "..tostring(delay).." && " + else + prefix = "" + end + + if action == "full" then + cmd = prefix.."maim "..maim_args.." "..filename + print(filename) + awful.spawn.easy_async_with_shell(cmd, function(_, __, ___, ____) + naughty.notify({ title = "Screenshot", message = "Screenshot taken", icon = icon }) + end) + elseif action == "selection" then + cmd = "maim "..maim_args.." -s "..filename + naughty.notify({ title = "Screenshot", message = "Select area to capture.", icon = icon }) + awful.spawn.easy_async_with_shell(cmd, function(_, __, ___, exit_code) + if exit_code == 0 then + naughty.notify({ title = "Screenshot", message = "Selection captured", icon = icon }) + end + end) + elseif action == "clipboard" then + naughty.notify({ title = "Screenshot", message = "Select area to copy to clipboard.", icon = icon }) + cmd = "maim "..maim_args.." -s /tmp/maim_clipboard && xclip -selection clipboard -t image/png /tmp/maim_clipboard && rm /tmp/maim_clipboard" + awful.spawn.easy_async_with_shell(cmd, function(_, __, ___, exit_code) + if exit_code == 0 then + naughty.notify({ title = "Screenshot", message = "Copied selection to clipboard", icon = icon }) + end + end) + elseif action == "browse" then + awful.spawn.with_shell("cd "..user.screenshot_dir.." && feh $(ls -t)") + elseif action == "gimp" then + awful.spawn.with_shell("cd "..user.screenshot_dir.." && gimp $(ls -t | head -n1)") + naughty.notify({ message = "Opening last screenshot with GIMP", icon = icon }) + end + +end + +local prompt_font = beautiful.prompt_font or "sans bold 8" +function helpers.prompt(action, textbox, prompt, callback) + if action == "run" then + awful.prompt.run { + prompt = prompt, + -- prompt = "Run: ", + textbox = textbox, + font = prompt_font, + done_callback = callback, + exe_callback = awful.spawn, + completion_callback = awful.completion.shell, + history_path = awful.util.get_cache_dir() .. "/history" + } + elseif action == "web_search" then + awful.prompt.run { + prompt = prompt, + -- prompt = 'Web search: ', + textbox = textbox, + font = prompt_font, + history_path = awful.util.get_cache_dir() .. "/history_web", + done_callback = callback, + exe_callback = function(input) + if not input or #input == 0 then return end + awful.spawn(user.web_search_cmd.."\""..input.."\"") + naughty.notify { title = "Searching the web for", text = input, icon = icons.firefox } + end + } + end +end + +function helpers.run_or_raise(match, move, spawn_cmd, spawn_args) + local matcher = function (c) + return awful.rules.match(c, match) + end + + -- Find and raise + local found = false + for c in awful.client.iterate(matcher) do + found = true + c.minimized = false + if move then + c:move_to_tag(mouse.screen.selected_tag) + client.focus = c + c:raise() + else + c:jump_to() + end + + -- -- Return if found + -- return + -- -- This would normally work, but some terminals (*cough* termite) + -- -- create 2 instances of the same class, for just one window. + -- -- So it is not reliable. We will use the helper variable "found" + -- -- instead in order to determine if we have raised the window. + end + + -- Spawn if not found + if not found then + awful.spawn(spawn_cmd, spawn_args) + end +end + + +function helpers.toggle_scratchpad() + local screen = awful.screen.focused() + + -- Get rid of it if it is focused + local cf = client.focus + if cf and cf.class == "scratchpad" then + -- 1. Minimize scratchpad + cf.minimized = true + -- 2. Move scratchpad to "Miscellaneous" tag + -- local tag = screen.tags[10] + -- if tag then + -- client.focus:move_to_tag(tag) + -- end + else + helpers.run_or_raise({class = "scratchpad"}, true, "scratchpad") + end +end + +function helpers.toggle_night_mode() + local cmd = "pgrep redshift > /dev/null && (pkill redshift && echo 'OFF') || (echo 'ON' && redshift -l 0:0 -t 3700:3700 -r &>/dev/null &)" + awful.spawn.easy_async_with_shell(cmd, function(out) + if out:match('ON') then + naughty.notify({ title = "Night mode", message = "Activated!" }) + else + naughty.notify({ title = "Night mode", message = "Deactivated!" }) + end + end) +end + +function helpers.float_and_resize(c, width, height) + c.width = width + c.height = height + awful.placement.centered(c,{honor_workarea=true, honor_padding = true}) + awful.client.property.set(c, 'floating_geometry', c:geometry()) + c.floating = true + c:raise() +end + return helpers diff --git a/config/awesome/themes/skyfall/icons/alarm.png b/config/awesome/icons/drops/alarm.png similarity index 100% rename from config/awesome/themes/skyfall/icons/alarm.png rename to config/awesome/icons/drops/alarm.png diff --git a/config/awesome/themes/skyfall/icons/alarm_off.png b/config/awesome/icons/drops/alarm_off.png similarity index 100% rename from config/awesome/themes/skyfall/icons/alarm_off.png rename to config/awesome/icons/drops/alarm_off.png diff --git a/config/awesome/themes/skyfall/icons/alert.png b/config/awesome/icons/drops/alert.png similarity index 100% rename from config/awesome/themes/skyfall/icons/alert.png rename to config/awesome/icons/drops/alert.png diff --git a/config/awesome/themes/skyfall/icons/appearance.png b/config/awesome/icons/drops/appearance.png similarity index 100% rename from config/awesome/themes/skyfall/icons/appearance.png rename to config/awesome/icons/drops/appearance.png diff --git a/config/awesome/themes/skyfall/icons/battery.png b/config/awesome/icons/drops/battery.png similarity index 100% rename from config/awesome/themes/skyfall/icons/battery.png rename to config/awesome/icons/drops/battery.png diff --git a/config/awesome/themes/skyfall/icons/battery_charging.png b/config/awesome/icons/drops/battery_charging.png similarity index 100% rename from config/awesome/themes/skyfall/icons/battery_charging.png rename to config/awesome/icons/drops/battery_charging.png diff --git a/config/awesome/themes/skyfall/icons/cpu.png b/config/awesome/icons/drops/cpu.png similarity index 100% rename from config/awesome/themes/skyfall/icons/cpu.png rename to config/awesome/icons/drops/cpu.png diff --git a/config/awesome/themes/skyfall/icons/discord.png b/config/awesome/icons/drops/discord.png similarity index 100% rename from config/awesome/themes/skyfall/icons/discord.png rename to config/awesome/icons/drops/discord.png diff --git a/config/awesome/themes/skyfall/icons/editor.png b/config/awesome/icons/drops/editor.png similarity index 100% rename from config/awesome/themes/skyfall/icons/editor.png rename to config/awesome/icons/drops/editor.png diff --git a/config/awesome/themes/skyfall/icons/exit.png b/config/awesome/icons/drops/exit.png similarity index 100% rename from config/awesome/themes/skyfall/icons/exit.png rename to config/awesome/icons/drops/exit.png diff --git a/config/awesome/themes/skyfall/icons/files.png b/config/awesome/icons/drops/files.png similarity index 100% rename from config/awesome/themes/skyfall/icons/files.png rename to config/awesome/icons/drops/files.png diff --git a/config/awesome/themes/skyfall/icons/firefox.png b/config/awesome/icons/drops/firefox.png similarity index 100% rename from config/awesome/themes/skyfall/icons/firefox.png rename to config/awesome/icons/drops/firefox.png diff --git a/config/awesome/themes/skyfall/icons/lutris.png b/config/awesome/icons/drops/games.png similarity index 100% rename from config/awesome/themes/skyfall/icons/lutris.png rename to config/awesome/icons/drops/games.png diff --git a/config/awesome/themes/skyfall/icons/gimp.png b/config/awesome/icons/drops/gimp.png similarity index 100% rename from config/awesome/themes/skyfall/icons/gimp.png rename to config/awesome/icons/drops/gimp.png diff --git a/config/awesome/themes/skyfall/icons/home.png b/config/awesome/icons/drops/home.png similarity index 100% rename from config/awesome/themes/skyfall/icons/home.png rename to config/awesome/icons/drops/home.png diff --git a/config/awesome/themes/skyfall/icons/keyboard.png b/config/awesome/icons/drops/keyboard.png similarity index 100% rename from config/awesome/themes/skyfall/icons/keyboard.png rename to config/awesome/icons/drops/keyboard.png diff --git a/config/awesome/themes/skyfall/icons/lock.png b/config/awesome/icons/drops/lock.png similarity index 100% rename from config/awesome/themes/skyfall/icons/lock.png rename to config/awesome/icons/drops/lock.png diff --git a/config/awesome/themes/skyfall/icons/mail.png b/config/awesome/icons/drops/mail.png similarity index 100% rename from config/awesome/themes/skyfall/icons/mail.png rename to config/awesome/icons/drops/mail.png diff --git a/config/awesome/themes/skyfall/icons/manual.png b/config/awesome/icons/drops/manual.png similarity index 100% rename from config/awesome/themes/skyfall/icons/manual.png rename to config/awesome/icons/drops/manual.png diff --git a/config/awesome/themes/skyfall/icons/music.png b/config/awesome/icons/drops/music.png similarity index 100% rename from config/awesome/themes/skyfall/icons/music.png rename to config/awesome/icons/drops/music.png diff --git a/config/awesome/themes/skyfall/icons/muted.png b/config/awesome/icons/drops/muted.png similarity index 100% rename from config/awesome/themes/skyfall/icons/muted.png rename to config/awesome/icons/drops/muted.png diff --git a/config/awesome/themes/skyfall/icons/playerctl_next.png b/config/awesome/icons/drops/playerctl_next.png similarity index 100% rename from config/awesome/themes/skyfall/icons/playerctl_next.png rename to config/awesome/icons/drops/playerctl_next.png diff --git a/config/awesome/themes/skyfall/icons/playerctl_prev.png b/config/awesome/icons/drops/playerctl_prev.png similarity index 100% rename from config/awesome/themes/skyfall/icons/playerctl_prev.png rename to config/awesome/icons/drops/playerctl_prev.png diff --git a/config/awesome/themes/skyfall/icons/playerctl_toggle.png b/config/awesome/icons/drops/playerctl_toggle.png similarity index 100% rename from config/awesome/themes/skyfall/icons/playerctl_toggle.png rename to config/awesome/icons/drops/playerctl_toggle.png diff --git a/config/awesome/themes/skyfall/icons/poweroff.png b/config/awesome/icons/drops/poweroff.png similarity index 100% rename from config/awesome/themes/skyfall/icons/poweroff.png rename to config/awesome/icons/drops/poweroff.png diff --git a/config/awesome/themes/skyfall/icons/ram.png b/config/awesome/icons/drops/ram.png similarity index 100% rename from config/awesome/themes/skyfall/icons/ram.png rename to config/awesome/icons/drops/ram.png diff --git a/config/awesome/themes/skyfall/icons/reboot.png b/config/awesome/icons/drops/reboot.png similarity index 100% rename from config/awesome/themes/skyfall/icons/reboot.png rename to config/awesome/icons/drops/reboot.png diff --git a/config/awesome/themes/skyfall/icons/reddit.png b/config/awesome/icons/drops/reddit.png similarity index 100% rename from config/awesome/themes/skyfall/icons/reddit.png rename to config/awesome/icons/drops/reddit.png diff --git a/config/awesome/themes/skyfall/icons/redshift.png b/config/awesome/icons/drops/redshift.png similarity index 100% rename from config/awesome/themes/skyfall/icons/redshift.png rename to config/awesome/icons/drops/redshift.png diff --git a/config/awesome/themes/skyfall/icons/screenshot.png b/config/awesome/icons/drops/screenshot.png similarity index 100% rename from config/awesome/themes/skyfall/icons/screenshot.png rename to config/awesome/icons/drops/screenshot.png diff --git a/config/awesome/themes/skyfall/icons/search.png b/config/awesome/icons/drops/search.png similarity index 100% rename from config/awesome/themes/skyfall/icons/search.png rename to config/awesome/icons/drops/search.png diff --git a/config/awesome/themes/skyfall/icons/start.png b/config/awesome/icons/drops/start.png similarity index 100% rename from config/awesome/themes/skyfall/icons/start.png rename to config/awesome/icons/drops/start.png diff --git a/config/awesome/themes/skyfall/icons/steam.png b/config/awesome/icons/drops/steam.png similarity index 100% rename from config/awesome/themes/skyfall/icons/steam.png rename to config/awesome/icons/drops/steam.png diff --git a/config/awesome/themes/skyfall/icons/submenu.png b/config/awesome/icons/drops/submenu.png similarity index 100% rename from config/awesome/themes/skyfall/icons/submenu.png rename to config/awesome/icons/drops/submenu.png diff --git a/config/awesome/themes/skyfall/icons/suspend.png b/config/awesome/icons/drops/suspend.png similarity index 100% rename from config/awesome/themes/skyfall/icons/suspend.png rename to config/awesome/icons/drops/suspend.png diff --git a/config/awesome/themes/skyfall/icons/telegram.png b/config/awesome/icons/drops/telegram.png similarity index 100% rename from config/awesome/themes/skyfall/icons/telegram.png rename to config/awesome/icons/drops/telegram.png diff --git a/config/awesome/themes/skyfall/icons/temperature.png b/config/awesome/icons/drops/temperature.png similarity index 100% rename from config/awesome/themes/skyfall/icons/temperature.png rename to config/awesome/icons/drops/temperature.png diff --git a/config/awesome/themes/skyfall/icons/terminal.png b/config/awesome/icons/drops/terminal.png similarity index 100% rename from config/awesome/themes/skyfall/icons/terminal.png rename to config/awesome/icons/drops/terminal.png diff --git a/config/awesome/themes/skyfall/icons/volume.png b/config/awesome/icons/drops/volume.png similarity index 100% rename from config/awesome/themes/skyfall/icons/volume.png rename to config/awesome/icons/drops/volume.png diff --git a/config/awesome/themes/skyfall/icons/youtube.png b/config/awesome/icons/drops/youtube.png similarity index 100% rename from config/awesome/themes/skyfall/icons/youtube.png rename to config/awesome/icons/drops/youtube.png diff --git a/config/awesome/icons/init.lua b/config/awesome/icons/init.lua new file mode 100644 index 0000000..5b316ac --- /dev/null +++ b/config/awesome/icons/init.lua @@ -0,0 +1,96 @@ +local gears = require("gears") + +local function file_exists(path) + -- Try to open it + local f = io.open(path) + if f then + f:close() + return true + end + return false +end + +local icons = {} + +-- TODO layout icons +-- TODO tag icons +-- Available icons +local icon_names = { + "playerctl_toggle", + "playerctl_prev", + "playerctl_next", + "stats", + "search", + "volume", + "muted", + "mpd", + "firefox", + "youtube", + "reddit", + "discord", + "telegram", + "steam", + "games", + "files", + "manual", + "keyboard", + "appearance", + "editor", + "redshift", + "gimp", + "terminal", + "mail", + "music", + "temperature", + "battery", + "battery_charging", + "cpu", + "compositor", + "start", + "ram", + "screenshot", + "home", + "alarm", + "alarm_off", + "alert", + "submenu", + -- Weather icons + "cloud", + "dcloud", + "ncloud", + "sun", + "star", + "rain", + "snow", + "mist", + "storm", + "whatever", + -- Exit screen icons + "exit", + "poweroff", + "reboot", + "suspend", + "lock", +} + +-- Path to icons +local p + +-- Assumes all the icon files end in .png +-- Which they should if you need transparency +local function set_icon(icon_name) + local i = p..icon_name..".png" + icons[icon_name] = i +end + +-- Set all the icon variables +function icons.init(theme_name) + -- Set the path to icons + p = gears.filesystem.get_configuration_dir().."icons/"..theme_name.."/" + + for i = 1, #icon_names do + set_icon(icon_names[i]) + end +end + +return icons diff --git a/config/awesome/themes/lovelace/icons/alarm.png b/config/awesome/icons/linebit/alarm.png similarity index 100% rename from config/awesome/themes/lovelace/icons/alarm.png rename to config/awesome/icons/linebit/alarm.png diff --git a/config/awesome/themes/lovelace/icons/appearance.png b/config/awesome/icons/linebit/appearance.png similarity index 100% rename from config/awesome/themes/lovelace/icons/appearance.png rename to config/awesome/icons/linebit/appearance.png diff --git a/config/awesome/themes/lovelace/icons/battery.png b/config/awesome/icons/linebit/battery.png similarity index 100% rename from config/awesome/themes/lovelace/icons/battery.png rename to config/awesome/icons/linebit/battery.png diff --git a/config/awesome/themes/lovelace/icons/battery_charging.png b/config/awesome/icons/linebit/battery_charging.png similarity index 100% rename from config/awesome/themes/lovelace/icons/battery_charging.png rename to config/awesome/icons/linebit/battery_charging.png diff --git a/config/awesome/themes/lovelace/weather/cloud.png b/config/awesome/icons/linebit/cloud.png similarity index 100% rename from config/awesome/themes/lovelace/weather/cloud.png rename to config/awesome/icons/linebit/cloud.png diff --git a/config/awesome/themes/lovelace/icons/compositor.png b/config/awesome/icons/linebit/compositor.png similarity index 100% rename from config/awesome/themes/lovelace/icons/compositor.png rename to config/awesome/icons/linebit/compositor.png diff --git a/config/awesome/themes/lovelace/icons/cpu.png b/config/awesome/icons/linebit/cpu.png similarity index 100% rename from config/awesome/themes/lovelace/icons/cpu.png rename to config/awesome/icons/linebit/cpu.png diff --git a/config/awesome/themes/lovelace/weather/dcloud.png b/config/awesome/icons/linebit/dcloud.png similarity index 100% rename from config/awesome/themes/lovelace/weather/dcloud.png rename to config/awesome/icons/linebit/dcloud.png diff --git a/config/awesome/themes/lovelace/icons/discord.png b/config/awesome/icons/linebit/discord.png similarity index 100% rename from config/awesome/themes/lovelace/icons/discord.png rename to config/awesome/icons/linebit/discord.png diff --git a/config/awesome/themes/lovelace/icons/editor.png b/config/awesome/icons/linebit/editor.png similarity index 100% rename from config/awesome/themes/lovelace/icons/editor.png rename to config/awesome/icons/linebit/editor.png diff --git a/config/awesome/themes/lovelace/icons/exit.png b/config/awesome/icons/linebit/exit.png similarity index 100% rename from config/awesome/themes/lovelace/icons/exit.png rename to config/awesome/icons/linebit/exit.png diff --git a/config/awesome/themes/lovelace/icons/files.png b/config/awesome/icons/linebit/files.png similarity index 100% rename from config/awesome/themes/lovelace/icons/files.png rename to config/awesome/icons/linebit/files.png diff --git a/config/awesome/themes/lovelace/icons/firefox.png b/config/awesome/icons/linebit/firefox.png similarity index 100% rename from config/awesome/themes/lovelace/icons/firefox.png rename to config/awesome/icons/linebit/firefox.png diff --git a/config/awesome/themes/lovelace/icons/lutris.png b/config/awesome/icons/linebit/games.png similarity index 100% rename from config/awesome/themes/lovelace/icons/lutris.png rename to config/awesome/icons/linebit/games.png diff --git a/config/awesome/themes/lovelace/icons/gimp.png b/config/awesome/icons/linebit/gimp.png similarity index 100% rename from config/awesome/themes/lovelace/icons/gimp.png rename to config/awesome/icons/linebit/gimp.png diff --git a/config/awesome/themes/lovelace/icons/home.png b/config/awesome/icons/linebit/home.png similarity index 100% rename from config/awesome/themes/lovelace/icons/home.png rename to config/awesome/icons/linebit/home.png diff --git a/config/awesome/themes/lovelace/icons/keyboard.png b/config/awesome/icons/linebit/keyboard.png similarity index 100% rename from config/awesome/themes/lovelace/icons/keyboard.png rename to config/awesome/icons/linebit/keyboard.png diff --git a/config/awesome/themes/lovelace/icons/lock.png b/config/awesome/icons/linebit/lock.png similarity index 100% rename from config/awesome/themes/lovelace/icons/lock.png rename to config/awesome/icons/linebit/lock.png diff --git a/config/awesome/icons/linebit/logout.png b/config/awesome/icons/linebit/logout.png new file mode 100644 index 0000000..356eaea Binary files /dev/null and b/config/awesome/icons/linebit/logout.png differ diff --git a/config/awesome/icons/linebit/logout1.png b/config/awesome/icons/linebit/logout1.png new file mode 100644 index 0000000..df99ddc Binary files /dev/null and b/config/awesome/icons/linebit/logout1.png differ diff --git a/config/awesome/themes/lovelace/icons/mail.png b/config/awesome/icons/linebit/mail.png similarity index 100% rename from config/awesome/themes/lovelace/icons/mail.png rename to config/awesome/icons/linebit/mail.png diff --git a/config/awesome/themes/lovelace/icons/manual.png b/config/awesome/icons/linebit/manual.png similarity index 100% rename from config/awesome/themes/lovelace/icons/manual.png rename to config/awesome/icons/linebit/manual.png diff --git a/config/awesome/themes/lovelace/weather/mist.png b/config/awesome/icons/linebit/mist.png similarity index 100% rename from config/awesome/themes/lovelace/weather/mist.png rename to config/awesome/icons/linebit/mist.png diff --git a/config/awesome/themes/lovelace/icons/music.png b/config/awesome/icons/linebit/music.png similarity index 100% rename from config/awesome/themes/lovelace/icons/music.png rename to config/awesome/icons/linebit/music.png diff --git a/config/awesome/themes/lovelace/icons/muted.png b/config/awesome/icons/linebit/muted.png similarity index 100% rename from config/awesome/themes/lovelace/icons/muted.png rename to config/awesome/icons/linebit/muted.png diff --git a/config/awesome/themes/lovelace/weather/ncloud.png b/config/awesome/icons/linebit/ncloud.png similarity index 100% rename from config/awesome/themes/lovelace/weather/ncloud.png rename to config/awesome/icons/linebit/ncloud.png diff --git a/config/awesome/themes/lovelace/icons/playerctl_next.png b/config/awesome/icons/linebit/playerctl_next.png similarity index 100% rename from config/awesome/themes/lovelace/icons/playerctl_next.png rename to config/awesome/icons/linebit/playerctl_next.png diff --git a/config/awesome/themes/lovelace/icons/playerctl_prev.png b/config/awesome/icons/linebit/playerctl_prev.png similarity index 100% rename from config/awesome/themes/lovelace/icons/playerctl_prev.png rename to config/awesome/icons/linebit/playerctl_prev.png diff --git a/config/awesome/themes/lovelace/icons/playerctl_toggle.png b/config/awesome/icons/linebit/playerctl_toggle.png similarity index 100% rename from config/awesome/themes/lovelace/icons/playerctl_toggle.png rename to config/awesome/icons/linebit/playerctl_toggle.png diff --git a/config/awesome/themes/lovelace/icons/poweroff.png b/config/awesome/icons/linebit/poweroff.png similarity index 100% rename from config/awesome/themes/lovelace/icons/poweroff.png rename to config/awesome/icons/linebit/poweroff.png diff --git a/config/awesome/themes/lovelace/weather/rain.png b/config/awesome/icons/linebit/rain.png similarity index 100% rename from config/awesome/themes/lovelace/weather/rain.png rename to config/awesome/icons/linebit/rain.png diff --git a/config/awesome/themes/lovelace/icons/ram.png b/config/awesome/icons/linebit/ram.png similarity index 100% rename from config/awesome/themes/lovelace/icons/ram.png rename to config/awesome/icons/linebit/ram.png diff --git a/config/awesome/themes/lovelace/icons/reboot.png b/config/awesome/icons/linebit/reboot.png similarity index 100% rename from config/awesome/themes/lovelace/icons/reboot.png rename to config/awesome/icons/linebit/reboot.png diff --git a/config/awesome/themes/lovelace/icons/reddit.png b/config/awesome/icons/linebit/reddit.png similarity index 100% rename from config/awesome/themes/lovelace/icons/reddit.png rename to config/awesome/icons/linebit/reddit.png diff --git a/config/awesome/themes/lovelace/icons/redshift.png b/config/awesome/icons/linebit/redshift.png similarity index 100% rename from config/awesome/themes/lovelace/icons/redshift.png rename to config/awesome/icons/linebit/redshift.png diff --git a/config/awesome/themes/lovelace/icons/screenshot.png b/config/awesome/icons/linebit/screenshot.png similarity index 100% rename from config/awesome/themes/lovelace/icons/screenshot.png rename to config/awesome/icons/linebit/screenshot.png diff --git a/config/awesome/themes/lovelace/icons/search.png b/config/awesome/icons/linebit/search.png similarity index 100% rename from config/awesome/themes/lovelace/icons/search.png rename to config/awesome/icons/linebit/search.png diff --git a/config/awesome/themes/lovelace/weather/snow.png b/config/awesome/icons/linebit/snow.png similarity index 100% rename from config/awesome/themes/lovelace/weather/snow.png rename to config/awesome/icons/linebit/snow.png diff --git a/config/awesome/themes/lovelace/weather/star.png b/config/awesome/icons/linebit/star.png similarity index 100% rename from config/awesome/themes/lovelace/weather/star.png rename to config/awesome/icons/linebit/star.png diff --git a/config/awesome/themes/lovelace/icons/start.png b/config/awesome/icons/linebit/start.png similarity index 100% rename from config/awesome/themes/lovelace/icons/start.png rename to config/awesome/icons/linebit/start.png diff --git a/config/awesome/themes/lovelace/icons/steam.png b/config/awesome/icons/linebit/steam.png similarity index 100% rename from config/awesome/themes/lovelace/icons/steam.png rename to config/awesome/icons/linebit/steam.png diff --git a/config/awesome/themes/lovelace/weather/storm.png b/config/awesome/icons/linebit/storm.png similarity index 100% rename from config/awesome/themes/lovelace/weather/storm.png rename to config/awesome/icons/linebit/storm.png diff --git a/config/awesome/themes/lovelace/icons/submenu.png b/config/awesome/icons/linebit/submenu.png similarity index 100% rename from config/awesome/themes/lovelace/icons/submenu.png rename to config/awesome/icons/linebit/submenu.png diff --git a/config/awesome/themes/lovelace/weather/sun.png b/config/awesome/icons/linebit/sun.png similarity index 100% rename from config/awesome/themes/lovelace/weather/sun.png rename to config/awesome/icons/linebit/sun.png diff --git a/config/awesome/themes/lovelace/icons/suspend.png b/config/awesome/icons/linebit/suspend.png similarity index 100% rename from config/awesome/themes/lovelace/icons/suspend.png rename to config/awesome/icons/linebit/suspend.png diff --git a/config/awesome/themes/lovelace/icons/telegram.png b/config/awesome/icons/linebit/telegram.png similarity index 100% rename from config/awesome/themes/lovelace/icons/telegram.png rename to config/awesome/icons/linebit/telegram.png diff --git a/config/awesome/themes/lovelace/icons/temperature.png b/config/awesome/icons/linebit/temperature.png similarity index 100% rename from config/awesome/themes/lovelace/icons/temperature.png rename to config/awesome/icons/linebit/temperature.png diff --git a/config/awesome/themes/lovelace/icons/terminal.png b/config/awesome/icons/linebit/terminal.png similarity index 100% rename from config/awesome/themes/lovelace/icons/terminal.png rename to config/awesome/icons/linebit/terminal.png diff --git a/config/awesome/themes/lovelace/icons/volume.png b/config/awesome/icons/linebit/volume.png similarity index 100% rename from config/awesome/themes/lovelace/icons/volume.png rename to config/awesome/icons/linebit/volume.png diff --git a/config/awesome/themes/lovelace/icons/volume1.png b/config/awesome/icons/linebit/volume1.png similarity index 100% rename from config/awesome/themes/lovelace/icons/volume1.png rename to config/awesome/icons/linebit/volume1.png diff --git a/config/awesome/themes/lovelace/weather/whatever.png b/config/awesome/icons/linebit/whatever.png similarity index 100% rename from config/awesome/themes/lovelace/weather/whatever.png rename to config/awesome/icons/linebit/whatever.png diff --git a/config/awesome/themes/lovelace/icons/youtube.png b/config/awesome/icons/linebit/youtube.png similarity index 100% rename from config/awesome/themes/lovelace/icons/youtube.png rename to config/awesome/icons/linebit/youtube.png diff --git a/config/awesome/keys.lua b/config/awesome/keys.lua index 18e681c..024653a 100644 --- a/config/awesome/keys.lua +++ b/config/awesome/keys.lua @@ -2,8 +2,6 @@ local awful = require("awful") local naughty = require("naughty") local gears = require("gears") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi local helpers = require("helpers") @@ -21,24 +19,27 @@ keys.desktopbuttons = gears.table.join( mymainmenu:hide() sidebar.visible = false naughty.destroy_all_notifications() - local function double_tap() - uc = awful.client.urgent.get() - -- If there is no urgent client, go back to last tag - if uc == nil then - awful.tag.history.restore() - else - awful.client.urgent.jumpto() - end + uc = awful.client.urgent.get() + -- If there is no urgent client, go back to last tag + if uc == nil then + awful.tag.history.restore() + else + awful.client.urgent.jumpto() + end end helpers.single_double_tap(function() end, double_tap) end), - awful.button({ }, 3, function () mymainmenu:toggle() end), + + -- Right click - Show app drawer + -- awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 3, function () + app_drawer_show() + end), -- Middle button - Toggle start scren awful.button({ }, 2, function () start_screen_show() - -- sidebar.visible = not sidebar.visible end), -- Scrolling - Switch tags @@ -46,8 +47,8 @@ keys.desktopbuttons = gears.table.join( awful.button({ }, 5, awful.tag.viewnext), -- Side buttons - Control volume - awful.button({ }, 9, function () awful.spawn.with_shell("volume-control.sh up") end), - awful.button({ }, 8, function () awful.spawn.with_shell("volume-control.sh down") end) + awful.button({ }, 9, function () helpers.volume_control(5) end), + awful.button({ }, 8, function () helpers.volume_control(-5) end) -- Side buttons - Minimize and restore minimized client -- awful.button({ }, 8, function() @@ -69,13 +70,39 @@ keys.desktopbuttons = gears.table.join( -- {{{ Key bindings keys.globalkeys = gears.table.join( --awful.key({ superkey, }, "s", hotkeys_popup.show_help, - --{description="show help", group="awesome"}), + --{description="show help", group="awesome"}), --awful.key({ superkey, }, "comma", awful.tag.viewprev, - --{description = "view previous", group = "tag"}), + --{description = "view previous", group = "tag"}), --awful.key({ superkey, }, "period", awful.tag.viewnext, - --{description = "view next", group = "tag"}), + --{description = "view next", group = "tag"}), - -- Focus client by direction + -- Focus client by direction (hjkl keys) + awful.key({ superkey }, "j", + function() + awful.client.focus.bydirection("down") + if client.focus then client.focus:raise() end + end, + {description = "focus down", group = "client"}), + awful.key({ superkey }, "k", + function() + awful.client.focus.bydirection("up") + if client.focus then client.focus:raise() end + end, + {description = "focus up", group = "client"}), + awful.key({ superkey }, "h", + function() + awful.client.focus.bydirection("left") + if client.focus then client.focus:raise() end + end, + {description = "focus left", group = "client"}), + awful.key({ superkey }, "l", + function() + awful.client.focus.bydirection("right") + if client.focus then client.focus:raise() end + end, + {description = "focus right", group = "client"}), + + -- Focus client by direction (arrow keys) awful.key({ superkey }, "Down", function() awful.client.focus.bydirection("down") @@ -100,32 +127,23 @@ keys.globalkeys = gears.table.join( if client.focus then client.focus:raise() end end, {description = "focus right", group = "client"}), + -- Focus client by index (cycle through clients) - awful.key({ superkey }, "j", + -- Double tap: choose client with rofi + awful.key({ superkey }, "Tab", function () awful.client.focus.byidx( 1) end, {description = "focus next by index", group = "client"} ), - awful.key({ superkey }, "k", + awful.key({ superkey, shiftkey }, "Tab", function () awful.client.focus.byidx(-1) end, {description = "focus previous by index", group = "client"} ), - -- Focus client by index (cycle through clients) - awful.key({ superkey }, "Tab", - function () - awful.client.focus.byidx( 1) - end, - {description = "focus next by index", group = "client"} - ), - awful.key({ superkey, shiftkey }, "Tab", - function () - awful.client.focus.byidx(-1) - end, - {description = "focus previous by index", group = "client"} - ), + + -- Gap control awful.key({ superkey, shiftkey }, "minus", function () awful.tag.incgap(5, nil) @@ -143,81 +161,49 @@ keys.globalkeys = gears.table.join( function () local clients = awful.screen.focused().clients for _, c in pairs(clients) do - c:kill() + c:kill() end end, {description = "kill all visible clients for the current tag", group = "gaps"} ), - -- Main menu - awful.key({ superkey, shiftkey }, "v", function () mymainmenu:show() end, - {description = "show main menu", group = "awesome"}), - -- Logout, Shutdown, Restart, Suspend, Lock - awful.key({ superkey, }, "Escape", - function () - exit_screen_show() - end, - {description = "exit", group = "awesome"}), + -- Resize focused client or layout factor + -- (Arrow keys) + awful.key({ superkey, ctrlkey }, "Down", function (c) + helpers.resize_dwim(client.focus, "down") + end), + awful.key({ superkey, ctrlkey }, "Up", function (c) + helpers.resize_dwim(client.focus, "up") + end), + awful.key({ superkey, ctrlkey }, "Left", function (c) + helpers.resize_dwim(client.focus, "left") + end), + awful.key({ superkey, ctrlkey }, "Right", function (c) + helpers.resize_dwim(client.focus, "right") + end), + -- (Vim keys) + awful.key({ superkey, ctrlkey }, "j", function (c) + helpers.resize_dwim(client.focus, "down") + end), + awful.key({ superkey, ctrlkey }, "k", function (c) + helpers.resize_dwim(client.focus, "up") + end), + awful.key({ superkey, ctrlkey }, "h", function (c) + helpers.resize_dwim(client.focus, "left") + end), + awful.key({ superkey, ctrlkey }, "l", function (c) + helpers.resize_dwim(client.focus, "right") + end), - -- Layout manipulation - awful.key({ superkey, shiftkey }, "j", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( 0, 40, 0, 0) - helpers.move_to_edge(c, "down") - else - --awful.client.swap.byidx( 1) - awful.client.swap.bydirection("down", c, nil) - - end - end, - --{description = "swap with next client by index", group = "client"}), - {description = "swap with direction down", group = "client"}), - awful.key({ superkey, shiftkey }, "Down", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - helpers.move_to_edge(c, "down") - else - awful.client.swap.bydirection("down", c, nil) - - end - end, - {description = "swap with direction down", group = "client"}), - awful.key({ superkey, shiftkey }, "k", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( 0, -40, 0, 0) - helpers.move_to_edge(c, "up") - else - --awful.client.swap.byidx( -1) - awful.client.swap.bydirection("up", c, nil) - end - end, - {description = "swap with direction up", group = "client"}), - awful.key({ superkey, shiftkey }, "Up", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( 0, -40, 0, 0) - helpers.move_to_edge(c, "up") - else - --awful.client.swap.byidx( -1) - awful.client.swap.bydirection("up", c, nil) - end - end, - {description = "swap with direction up", group = "client"}), -- No need for these (single screen setup) --awful.key({ superkey, ctrlkey }, "j", function () awful.screen.focus_relative( 1) end, - --{description = "focus the next screen", group = "screen"}), + --{description = "focus the next screen", group = "screen"}), --awful.key({ superkey, ctrlkey }, "k", function () awful.screen.focus_relative(-1) end, - --{description = "focus the previous screen", group = "screen"}), + --{description = "focus the previous screen", group = "screen"}), + + -- Urgent or Undo: + -- Jump to urgent client or (if there is no such client) go back + -- to the last tag awful.key({ superkey, }, "u", function () uc = awful.client.urgent.get() @@ -228,7 +214,8 @@ keys.globalkeys = gears.table.join( awful.client.urgent.jumpto() end end, - {description = "jump to urgent client", group = "client"}), + {description = "jump to urgent client", group = "client"}), + awful.key({ superkey, }, "z", function () awful.client.focus.history.previous() @@ -242,430 +229,406 @@ keys.globalkeys = gears.table.join( awful.tag.history.restore() end, {description = "go back", group = "tag"}), - -- Standard program - awful.key({ superkey, }, "Return", function () awful.spawn(terminal) end, - {description = "open a terminal", group = "launcher"}), + + -- Spawn terminal + awful.key({ superkey }, "Return", function () awful.spawn(user.terminal) end, + {description = "open a terminal", group = "launcher"}), -- Spawn floating terminal awful.key({ superkey, shiftkey }, "Return", function() - awful.spawn(floating_terminal, {floating = true}) - -- awful.spawn(terminal, {floating = true}) + awful.spawn(user.floating_terminal, {floating = true}) end, - {description = "spawn floating terminal", group = "launcher"}), + {description = "spawn floating terminal", group = "launcher"}), + + -- Reload Awesome awful.key({ superkey, shiftkey }, "r", awesome.restart, - {description = "reload awesome", group = "awesome"}), - -- awful.key({ superkey, shiftkey }, "x", awesome.quit, - -- {description = "quit awesome", group = "awesome"}), - awful.key({ superkey, ctrlkey }, "h", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: resize client - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, dpi(-20), 0) - else - awful.tag.incmwfact(-0.05) - end - end, - {description = "decrease master width factor", group = "layout"}), - awful.key({ superkey, ctrlkey }, "Left", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: resize client - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, dpi(-20), 0) - else - awful.tag.incmwfact(-0.05) - end - end, - {description = "decrease master width factor", group = "layout"}), - awful.key({ superkey, ctrlkey }, "l", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: resize client - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, dpi(20), 0) - else - awful.tag.incmwfact( 0.05) - end - end, - {description = "increase master width factor", group = "layout"}), - awful.key({ superkey, ctrlkey }, "Right", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: resize client - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, dpi(20), 0) - else - awful.tag.incmwfact( 0.05) - end - end, - {description = "increase master width factor", group = "layout"}), - awful.key({ superkey, shiftkey }, "h", - function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( -40, 0, 0, 0) - helpers.move_to_edge(c, "left") - else - awful.client.swap.bydirection("left", c, nil) - end - end, - {description = "swap with direction left", group = "client"}), - awful.key({ superkey, shiftkey }, "Left", - function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( -40, 0, 0, 0) - helpers.move_to_edge(c, "left") - else - awful.client.swap.bydirection("left", c, nil) - end - end, - {description = "swap with direction left", group = "client"}), - awful.key({ superkey, shiftkey }, "l", - function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( 40, 0, 0, 0) - helpers.move_to_edge(c, "right") - else - awful.client.swap.bydirection("right", c, nil) - end - end, - {description = "swap with direction right", group = "client"}), - awful.key({ superkey, shiftkey }, "Right", - function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client to edge - if c ~= nil and (current_layout == "floating" or c.floating) then - --c:relative_move( 40, 0, 0, 0) - helpers.move_to_edge(c, "right") - else - awful.client.swap.bydirection("right", c, nil) - end - end, - {description = "swap with direction right", group = "client"}), - awful.key({ superkey }, "h", - function () - awful.tag.incnmaster( 1, nil, true) - end, - {description = "increase the number of master clients", group = "layout"}), - awful.key({ superkey }, "l", - function () - awful.tag.incnmaster(-1, nil, true) - end, - {description = "decrease the number of master clients", group = "layout"}), - awful.key({ superkey, shiftkey, ctrlkey }, "h", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client - if c ~= nil and (current_layout == "floating" or c.floating) then - c:relative_move( dpi(-20), 0, 0, 0) - else - awful.tag.incncol( 1, nil, true) - end - end, - {description = "increase the number of columns", group = "layout"}), - awful.key({ superkey, shiftkey, ctrlkey }, "Left", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client - if c ~= nil and (current_layout == "floating" or c.floating) then - c:relative_move( dpi(-20), 0, 0, 0) - else + {description = "reload awesome", group = "awesome"}), + + -- Quit Awesome + -- Logout, Shutdown, Restart, Suspend, Lock + awful.key({ superkey, shiftkey }, "x", + function () + exit_screen_show() + end, + {description = "quit awesome", group = "awesome"}), + awful.key({ superkey }, "Escape", + function () + exit_screen_show() + end, + {description = "quit awesome", group = "awesome"}), + + -- Number of master clients + awful.key({ superkey, altkey }, "h", + function () + awful.tag.incnmaster( 1, nil, true) + end, + {description = "increase the number of master clients", group = "layout"}), + awful.key({ superkey, altkey }, "l", + function () + awful.tag.incnmaster(-1, nil, true) + end, + {description = "decrease the number of master clients", group = "layout"}), + awful.key({ superkey, altkey }, "Left", + function () + awful.tag.incnmaster( 1, nil, true) + end, + {description = "increase the number of master clients", group = "layout"}), + awful.key({ superkey, altkey }, "Right", + function () + awful.tag.incnmaster(-1, nil, true) + end, + {description = "decrease the number of master clients", group = "layout"}), + + -- Number of columns + awful.key({ superkey, altkey }, "k", + function () awful.tag.incncol( 1, nil, true) - end - end, - {description = "increase the number of columns", group = "layout"}), - awful.key({ superkey, shiftkey, ctrlkey }, "l", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client - if c ~= nil and (current_layout == "floating" or c.floating) then - c:relative_move( dpi(20), 0, 0, 0) - else - awful.tag.incncol(-1, nil, true) - end - end), - awful.key({ superkey, shiftkey, ctrlkey }, "Right", function () - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - local c = client.focus - -- Floating: move client - if c ~= nil and (current_layout == "floating" or c.floating) then - c:relative_move( dpi(20), 0, 0, 0) - else - awful.tag.incncol(-1, nil, true) - end - end), + end, + {description = "increase the number of columns", group = "layout"}), + awful.key({ superkey, altkey }, "j", + function () + awful.tag.incncol( -1, nil, true) + end, + {description = "decrease the number of columns", group = "layout"}), + awful.key({ superkey, altkey }, "Up", + function () + awful.tag.incncol( 1, nil, true) + end, + {description = "increase the number of columns", group = "layout"}), + awful.key({ superkey, altkey }, "Down", + function () + awful.tag.incncol( -1, nil, true) + end, + {description = "decrease the number of columns", group = "layout"}), + + --awful.key({ superkey, }, "space", function () awful.layout.inc( 1) end, - --{description = "select next", group = "layout"}), + --{description = "select next", group = "layout"}), --awful.key({ superkey, shiftkey }, "space", function () awful.layout.inc(-1) end, - --{description = "select previous", group = "layout"}), + --{description = "select previous", group = "layout"}), awful.key({ superkey, shiftkey }, "n", - function () - local c = awful.client.restore() - -- Focus restored client - if c then - client.focus = c - c:raise() - end - end, - {description = "restore minimized", group = "client"}), + function () + local c = awful.client.restore() + -- Focus restored client + if c then + client.focus = c + c:raise() + end + end, + {description = "restore minimized", group = "client"}), -- Prompt --awful.key({ superkey }, "d", function () awful.screen.focused().mypromptbox:run() end, - --{description = "run prompt", group = "launcher"}), + --{description = "run prompt", group = "launcher"}), + -- Run program (d for dmenu ;) awful.key({ superkey }, "d", - function() - awful.spawn.with_shell("rofi -show combi") - end, - {description = "rofi launcher", group = "launcher"}), - - -- Run lua code - --awful.key({ superkey }, "r", - --function () - --awful.prompt.run { - --prompt = " Lua: ", - --textbox = awful.screen.focused().mypromptbox.widget, - --exe_callback = awful.util.eval, - --history_path = awful.util.get_cache_dir() .. "/history_eval" - --} - --end, - --{description = "lua execute prompt", group = "awesome"}), + function() + awful.spawn.with_shell("rofi -matching fuzzy -show combi") + end, + {description = "rofi launcher", group = "launcher"}), -- Dismiss notifications awful.key( { ctrlkey }, "space", function() naughty.destroy_all_notifications() - end, - {description = "dismiss notification", group = "notifications"}), + end, + {description = "dismiss notification", group = "notifications"}), -- Menubar --awful.key({ superkey, ctrlkey }, "b", function() menubar.show() end, - --{description = "show the menubar", group = "launcher"}), + --{description = "show the menubar", group = "launcher"}), -- Brightness awful.key( { }, "XF86MonBrightnessDown", - function() - -- awful.spawn.with_shell("xbacklight -dec 10") - awful.spawn.easy_async_with_shell("xbacklight -dec 10", function() - awesome.emit_signal("brightness_changed") - end) - end, - {description = "decrease brightness", group = "brightness"}), + function() + awful.spawn.with_shell("light -U 10") + end, + {description = "decrease brightness", group = "brightness"}), awful.key( { }, "XF86MonBrightnessUp", - function() - -- awful.spawn.with_shell("xbacklight -inc 10") - awful.spawn.easy_async_with_shell("xbacklight -inc 10", function() - awesome.emit_signal("brightness_changed") - end) - end, - {description = "increase brightness", group = "brightness"}), + function() + awful.spawn.with_shell("light -A 10") + end, + {description = "increase brightness", group = "brightness"}), + + -- Volume Control with volume keys + awful.key( { }, "XF86AudioMute", + function() + helpers.volume_control(0) + end, + {description = "(un)mute volume", group = "volume"}), + awful.key( { }, "XF86AudioLowerVolume", + function() + helpers.volume_control(-5) + end, + {description = "lower volume", group = "volume"}), + awful.key( { }, "XF86AudioRaiseVolume", + function() + helpers.volume_control(5) + end, + {description = "raise volume", group = "volume"}), + + -- Volume Control with alt+F1/F2/F3 + awful.key( { altkey }, "F1", + function() + helpers.volume_control(0) + end, + {description = "(un)mute volume", group = "volume"}), + awful.key( { altkey }, "F2", + function() + helpers.volume_control(-5) + end, + {description = "lower volume", group = "volume"}), + awful.key( { altkey }, "F3", + function() + helpers.volume_control(5) + end, + {description = "raise volume", group = "volume"}), + + + -- Classic Alt+F4 behavior + awful.key({ altkey }, "F4", function (c) c:kill() end, + {description = "close", group = "client"}), + + -- Microphone (V for voice) + awful.key( { superkey }, "v", + function() + awful.spawn.with_shell("amixer -D pulse sset Capture toggle &> /dev/null") + end, + {description = "(un)mute microphone", group = "volume"}), - -- Volume Control - awful.key( { }, "XF86AudioMute", function() - awful.spawn.with_shell("volume-control.sh toggle") - end, - {description = "(un)mute volume", group = "volume"}), - awful.key( { }, "XF86AudioLowerVolume", function() - awful.spawn.with_shell("volume-control.sh down") - end, - {description = "lower volume", group = "volume"}), - awful.key( { }, "XF86AudioRaiseVolume", function() - awful.spawn.with_shell("volume-control.sh up") - end, - {description = "raise volume", group = "volume"}), -- Screenshots - awful.key( { }, "Print", function() awful.spawn.with_shell("screenshot.sh") end, - {description = "take full screenshot", group = "screenshots"}), - awful.key( { superkey, shiftkey }, "c", function() awful.spawn.with_shell("screenshot.sh -s") end, - {description = "select area to capture", group = "screenshots"}), - awful.key( { superkey, ctrlkey }, "c", function() awful.spawn.with_shell("screenshot.sh -c") end, - {description = "select area to copy to clipboard", group = "screenshots"}), - awful.key( { superkey }, "Print", function() awful.spawn.with_shell("screenshot.sh -b") end, - {description = "browse screenshots", group = "screenshots"}), - awful.key( { superkey, shiftkey }, "Print", function() awful.spawn.with_shell("screenshot.sh -e") end, - {description = "edit most recent screenshot with gimp", group = "screenshots"}), + awful.key( { }, "Print", function() helpers.screenshot("full") end, + {description = "take full screenshot", group = "screenshots"}), + awful.key( { superkey, shiftkey }, "c", function() helpers.screenshot("selection") end, + {description = "select area to capture", group = "screenshots"}), + awful.key( { superkey, ctrlkey }, "c", function() helpers.screenshot("clipboard") end, + {description = "select area to copy to clipboard", group = "screenshots"}), + awful.key( { superkey }, "Print", function() helpers.screenshot("browse") end, + {description = "browse screenshots", group = "screenshots"}), + awful.key( { superkey, shiftkey }, "Print", function() helpers.screenshot("gimp") end, + {description = "edit most recent screenshot with gimp", group = "screenshots"}), + -- Toggle tray visibility - awful.key({ superkey }, "=", function () - awful.screen.focused().traybox.visible = not awful.screen.focused().traybox.visible - end, - {description = "toggle tray visibility", group = "awesome"}), - -- Media keys - awful.key({ superkey }, "period", function() awful.spawn.with_shell("mpc next") end, - {description = "next song", group = "media"}), - awful.key({ superkey }, "comma", function() awful.spawn.with_shell("mpc prev") end, - {description = "previous song", group = "media"}), - awful.key({ superkey }, "space", function() awful.spawn.with_shell("mpc toggle") end, - {description = "toggle pause/play", group = "media"}), + awful.key({ superkey }, "=", + function () + toggle_tray() + end, + {description = "toggle tray visibility", group = "awesome"}), + + -- Media + awful.key({ superkey }, "period", function() awful.spawn.with_shell("mpc -q next") end, + {description = "next song", group = "media"}), + awful.key({ superkey }, "comma", function() awful.spawn.with_shell("mpc -q prev") end, + {description = "previous song", group = "media"}), + awful.key({ superkey }, "space", function() awful.spawn.with_shell("mpc -q toggle") end, + {description = "toggle pause/play", group = "media"}), awful.key({ superkey, shiftkey }, "period", function() awful.spawn.with_shell("mpvc next") end, - {description = "mpv next song", group = "media"}), + {description = "mpv next song", group = "media"}), awful.key({ superkey, shiftkey }, "comma", function() awful.spawn.with_shell("mpvc prev") end, - {description = "mpv previous song", group = "media"}), + {description = "mpv previous song", group = "media"}), awful.key({ superkey, shiftkey}, "space", function() awful.spawn.with_shell("mpvc toggle") end, - {description = "mpv toggle pause/play", group = "media"}), + {description = "mpv toggle pause/play", group = "media"}), awful.key({ superkey }, "F8", function() awful.spawn.with_shell("mpvc quit") end, - {description = "mpv quit", group = "media"}), + {description = "mpv quit", group = "media"}), + awful.key({ superkey }, "F7", function() awful.spawn.with_shell("freeze firefox") end, - {description = "send STOP signal to all firefox processes", group = "other"}), + {description = "send STOP signal to all firefox processes", group = "other"}), awful.key({ superkey, shiftkey }, "F7", function() awful.spawn.with_shell("freeze -u firefox") end, - {description = "send CONT signal to all firefox processes", group = "other"}), - awful.key({ superkey }, "F6", function() awful.spawn.with_shell("i3lock") end, - {description = "lock screen", group = "other"}), - awful.key({ superkey }, "q", function() - helpers.toggle_scratchpad() - end, - {description = "scratchpad", group = "launcher"}), - -- Set max layout - awful.key({ superkey }, "w", function() + {description = "send CONT signal to all firefox processes", group = "other"}), + + awful.key({ superkey }, "q", function() helpers.toggle_scratchpad() end, + {description = "scratchpad", group = "launcher"}), + + -- Max layout + -- Single tap: Set max layout + -- Double tap: Also disable floating for ALL visible clients in the tag + awful.key({ superkey }, "w", + function() awful.layout.set(awful.layout.suit.max) - end, - {description = "set max layout", group = "tag"}), - -- Set tiled layout - awful.key({ superkey }, "s", function() - awful.layout.set(awful.layout.suit.tile) - end, - {description = "set tiled layout", group = "tag"}), + helpers.single_double_tap( + nil, + function() + local clients = awful.screen.focused().clients + for _, c in pairs(clients) do + c.floating = false + end + end + ) + end, + {description = "set max layout", group = "tag"}), + -- Tiling + -- Single tap: Set tiled layout + -- Double tap: Also disable floating for ALL visible clients in the tag + awful.key({ superkey }, "s", + function() + awful.layout.set(awful.layout.suit.tile) + helpers.single_double_tap( + nil, + function() + local clients = awful.screen.focused().clients + for _, c in pairs(clients) do + c.floating = false + end + end + ) + end, + {description = "set tiled layout", group = "tag"}), -- Set floating layout awful.key({ superkey, shiftkey }, "s", function() awful.layout.set(awful.layout.suit.floating) - end, - {description = "set floating layout", group = "tag"}), + end, + {description = "set floating layout", group = "tag"}), + -- Start screen awful.key({ superkey }, "F1", function() start_screen_show() - end, - {description = "show start screen", group = "awesome"}), + end, + {description = "start screen", group = "custom"}), + + -- App drawer + awful.key({ superkey }, "a", function() + app_drawer_show() + end, + {description = "App drawer", group = "custom"}), + -- Pomodoro timer - awful.key({ superkey }, "slash", function() - awful.spawn.with_shell("pomodoro") - end, - {description = "pomodoro", group = "launcher"}), + awful.key({ superkey }, "slash", function() awful.spawn.with_shell("pomodoro") end, + {description = "pomodoro", group = "launcher"}), + -- Spawn ranger in a terminal - awful.key({ superkey }, "F2", function() awful.spawn(terminal .. " -e ranger") end, - {description = "ranger", group = "launcher"}), - -- Spawn ncmpcpp in a terminal - awful.key({ superkey }, "F3", function() awful.spawn(terminal .. " -e ncmpcpp") end, - {description = "ncmpcpp", group = "launcher"}), + awful.key({ superkey }, "F2", function() awful.spawn(user.terminal .. " -e ranger") end, + {description = "ranger", group = "launcher"}), + + -- Run or raise music client (ncmpcpp in a terminal) + awful.key({ superkey }, "F3", + function() helpers.run_or_raise({class = "music"}, true, user.music_client) end, + {description = "music client", group = "launcher"}), + -- Spawn cava in a terminal - awful.key({ superkey, shiftkey }, "F4", function() awful.spawn(terminal .. " -e cava") end, - {description = "cava", group = "launcher"}), + awful.key({ superkey }, "F4", function() awful.spawn("visualizer") end, + {description = "cava", group = "launcher"}), + -- Spawn ncmpcpp in a terminal, with a special visualizer config - awful.key({ superkey }, "F4", function() awful.spawn(terminal .. " -e 'ncmpcpp -c ~/.config/ncmpcpp/config_visualizer -s visualizer'") end, - {description = "ncmpcpp", group = "launcher"}), + awful.key({ superkey, shiftkey }, "F4", function() awful.spawn(user.terminal .. " -e 'ncmpcpp -c ~/.config/ncmpcpp/config_visualizer -s visualizer'") end, + {description = "ncmpcpp", group = "launcher"}), + + -- Network dialog: nmapplet rofi frontend + awful.key({ superkey }, "F11", function() awful.spawn("networks-rofi") end, + {description = "spawn network dialog", group = "launcher"}), -- Toggle sidebar awful.key({ superkey }, "grave", function() sidebar.visible = not sidebar.visible end, - {description = "show or hide sidebar", group = "awesome"}), - -- Toggle wibar + {description = "show or hide sidebar", group = "awesome"}), + -- Toggle wibar(s) awful.key({ superkey, shiftkey }, "b", - function() - local s = awful.screen.focused() - s.mywibox.visible = not s.mywibox.visible - if beautiful.wibar_detached then - s.useless_wibar.visible = not s.useless_wibar.visible - end - end, - {description = "show or hide wibar", group = "awesome"}), - -- Editor + function() + toggle_wibars() + end, + {description = "show or hide wibar(s)", group = "awesome"}), + -- Run or raise editor + awful.key({ superkey }, "e", + function() + helpers.run_or_raise({class = 'editor'}, false, user.editor) + end, + {description = "editor", group = "launcher"}), + -- Quick edit file awful.key({ superkey, shiftkey }, "e", function() - awful.spawn(editor_cmd) + awful.spawn.with_shell("~/scr/Rofi/rofi_edit") end, - {description = "editor", group = "launcher"}), - -- Quick edit file - awful.key({ superkey }, "e", function() awful.spawn.with_shell("~/scr/Rofi/rofi_edit") end, - {description = "quick edit", group = "launcher"}), + {description = "quick edit file", group = "launcher"}), -- mpvtube awful.key({ superkey }, "y", function() awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") end, - {description = "mpvtube", group = "launcher"}), + {description = "mpvtube", group = "launcher"}), -- mpvtube song awful.key({ superkey, shiftkey }, "y", function() awful.spawn.with_shell("~/scr/info/mpv-query.sh") end, - {description = "show mpv media title", group = "launcher"}), + {description = "show mpv media title", group = "launcher"}), -- Spawn file manager - awful.key({ superkey, shiftkey }, "f", function() awful.spawn(filemanager, {floating = true}) end, - {description = "file manager", group = "launcher"}), + awful.key({ superkey, shiftkey }, "f", function() awful.spawn(user.file_manager, {floating = true}) end, + {description = "file manager", group = "launcher"}), -- Spawn htop in a terminal - awful.key({ superkey }, "p", function() awful.spawn(terminal .. " -e htop") end, - {description = "htop", group = "launcher"}) + awful.key({ superkey }, "p", + function() + awful.spawn(user.terminal .. " -e htop") + end, + {description = "htop", group = "launcher"}) ) keys.clientkeys = gears.table.join( - -- Move floating client (relative) - awful.key({ superkey, shiftkey }, "Down", function (c) c:relative_move( 0, 40, 0, 0) end), - awful.key({ superkey, shiftkey }, "Up", function (c) c:relative_move( 0, -40, 0, 0) end), - awful.key({ superkey, shiftkey }, "Left", function (c) c:relative_move(-40, 0, 0, 0) end), - awful.key({ superkey, shiftkey }, "Right", function (c) c:relative_move( 40, 0, 0, 0) end), - -- Center client - awful.key({ superkey }, "c", function (c) - awful.placement.centered(c,{honor_workarea=true}) - --awful.placement.centered(c,nil) + -- Move to edge or swap by direction + awful.key({ superkey, shiftkey }, "Down", function (c) + helpers.move_client_dwim(c, "down") end), - -- Resize client - awful.key({ superkey, ctrlkey }, "j", function (c) - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, 0, dpi(20)) - else - awful.client.incwfact(0.05) - end + awful.key({ superkey, shiftkey }, "Up", function (c) + helpers.move_client_dwim(c, "up") end), - awful.key({ superkey, ctrlkey }, "Down", function (c) - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, 0, dpi(20)) - else - awful.client.incwfact(0.05) - end + awful.key({ superkey, shiftkey }, "Left", function (c) + helpers.move_client_dwim(c, "left") end), - awful.key({ superkey, ctrlkey }, "k", function (c) - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, 0, dpi(-20)) - else - awful.client.incwfact(-0.05) - end + awful.key({ superkey, shiftkey }, "Right", function (c) + helpers.move_client_dwim(c, "right") end), - awful.key({ superkey, ctrlkey }, "Up", function (c) - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout == "floating" or c.floating == true then - c:relative_move( 0, 0, 0, dpi(-20)) - else - awful.client.incwfact(-0.05) - end + awful.key({ superkey, shiftkey }, "j", function (c) + helpers.move_client_dwim(c, "down") end), + awful.key({ superkey, shiftkey }, "k", function (c) + helpers.move_client_dwim(c, "up") + end), + awful.key({ superkey, shiftkey }, "h", function (c) + helpers.move_client_dwim(c, "left") + end), + awful.key({ superkey, shiftkey }, "l", function (c) + helpers.move_client_dwim(c, "right") + end), + + -- Single tap: Center client + -- Double tap: Center client + Floating + Resize + awful.key({ superkey }, "c", function (c) + awful.placement.centered(c, {honor_workarea = true, honor_padding = true}) + helpers.single_double_tap( + nil, + function () + helpers.float_and_resize(c, screen_width * 0.65, screen_height * 0.9) + end + ) + end), + + -- Relative move client awful.key({ superkey, shiftkey, ctrlkey }, "j", function (c) - -- Relative move - c:relative_move(0, dpi(20), 0, 0) - end), - awful.key({ superkey, shiftkey, ctrlkey }, "Down", function (c) - -- Relative move c:relative_move(0, dpi(20), 0, 0) end), awful.key({ superkey, shiftkey, ctrlkey }, "k", function (c) - -- Relative move c:relative_move(0, dpi(-20), 0, 0) end), + awful.key({ superkey, shiftkey, ctrlkey }, "h", function (c) + c:relative_move(dpi(-20), 0, 0, 0) + end), + awful.key({ superkey, shiftkey, ctrlkey }, "l", function (c) + c:relative_move(dpi( 20), 0, 0, 0) + end), + awful.key({ superkey, shiftkey, ctrlkey }, "Down", function (c) + c:relative_move(0, dpi(20), 0, 0) + end), awful.key({ superkey, shiftkey, ctrlkey }, "Up", function (c) - -- Relative move c:relative_move(0, dpi(-20), 0, 0) end), - -- Toggle titlebar (for focused client only) + awful.key({ superkey, shiftkey, ctrlkey }, "Left", function (c) + c:relative_move(dpi(-20), 0, 0, 0) + end), + awful.key({ superkey, shiftkey, ctrlkey }, "Right", function (c) + c:relative_move(dpi( 20), 0, 0, 0) + end), + + -- Toggle titlebars (for focused client only) awful.key({ superkey, }, "t", function (c) -- Don't toggle if titlebars are used as borders if not beautiful.titlebars_imitate_borders then - awful.titlebar.toggle(c) + decorations.toggle(c) + -- awful.titlebar.toggle(c) end end, {description = "toggle titlebar", group = "client"}), - -- Toggle titlebar (for all visible clients in selected tag) + -- Toggle titlebars (for all visible clients in selected tag) awful.key({ superkey, shiftkey }, "t", function (c) --local s = awful.screen.focused() @@ -673,11 +636,13 @@ keys.clientkeys = gears.table.join( for _, c in pairs(clients) do -- Don't toggle if titlebars are used as borders if not beautiful.titlebars_imitate_borders then - awful.titlebar.toggle(c) + -- awful.titlebar.toggle(c) + decorations.toggle(c) end end end, {description = "toggle titlebar", group = "client"}), + -- Toggle fullscreen awful.key({ superkey, }, "f", function (c) @@ -685,71 +650,73 @@ keys.clientkeys = gears.table.join( c:raise() end, {description = "toggle fullscreen", group = "client"}), - -- Resize and set floating - Predetermined size according to screen + -- F for focused view awful.key({ superkey, ctrlkey }, "f", function (c) - c.width = screen_width * 0.7 - c.height = screen_height * 0.75 - c.floating = true - awful.placement.centered(c,{honor_workarea=true}) - c:raise() + helpers.float_and_resize(c, screen_width * 0.7, screen_height * 0.75) end, {description = "focus mode", group = "client"}), -- V for vertical view awful.key({ superkey, ctrlkey }, "v", - function (c) - c.width = screen_width * 0.45 - c.height = screen_height * 0.90 - c.floating = true - awful.placement.centered(c,{honor_workarea=true}) - c:raise() - end, - {description = "focus mode", group = "client"}), + function (c) + helpers.float_and_resize(c, screen_width * 0.45, screen_height * 0.90) + end, + {description = "focus mode", group = "client"}), -- T for tiny window awful.key({ superkey, ctrlkey }, "t", function (c) - c.width = screen_width * 0.3 - c.height = screen_height * 0.35 - c.floating = true - awful.placement.centered(c,{honor_workarea=true}) - c:raise() + helpers.float_and_resize(c, screen_width * 0.3, screen_height * 0.35) end, {description = "tiny mode", group = "client"}), - -- N for normal window + -- N for normal size (good for terminals) awful.key({ superkey, ctrlkey }, "n", function (c) - c.width = screen_width * 0.45 - c.height = screen_height * 0.5 - c.floating = true - awful.placement.centered(c,{honor_workarea=true}) - c:raise() + helpers.float_and_resize(c, screen_width * 0.45, screen_height * 0.5) end, {description = "normal mode", group = "client"}), - awful.key({ superkey, shiftkey }, "q", function (c) c:kill() end, - {description = "close", group = "client"}), - --awful.key({ superkey, ctrlkey }, "space", awful.client.floating.toggle , - -- Toggle floating + + -- Close client + awful.key({ superkey, shiftkey }, "q", function (c) c:kill() end, + {description = "close", group = "client"}), + awful.key({ altkey }, "F4", function (c) c:kill() end, + {description = "close", group = "client"}), + + -- Toggle floating client awful.key({ superkey, ctrlkey }, "space", function(c) - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout ~= "floating" then + local layout_is_floating = (awful.layout.get(mouse.screen) == awful.layout.suit.floating) + if not layout_is_floating then awful.client.floating.toggle() end - --c:raise() + c:raise() end, {description = "toggle floating", group = "client"}), + + -- Set master awful.key({ superkey, ctrlkey }, "Return", function (c) c:swap(awful.client.getmaster()) end, - {description = "move to master", group = "client"}), - awful.key({ superkey, }, "o", function (c) c:move_to_screen() end, - {description = "move to screen", group = "client"}), + {description = "move to master", group = "client"}), + + -- Change client opacity + awful.key({ superkey }, "o", + function (c) + c.opacity = c.opacity - 0.1 + end, + {description = "decrease client opacity", group = "client"}), + awful.key({ superkey, shiftkey }, "o", + function (c) + c.opacity = c.opacity + 0.1 + end, + {description = "increase client opacity", group = "client"}), + -- P for pin: keep on top OR sticky -- On top - awful.key({ superkey, shiftkey }, "p", function (c) c.ontop = not c.ontop end, - {description = "toggle keep on top", group = "client"}), + awful.key({ superkey, shiftkey }, "p", function (c) c.ontop = not c.ontop end, + {description = "toggle keep on top", group = "client"}), -- Sticky - awful.key({ superkey, ctrlkey }, "p", function (c) c.sticky = not c.sticky end, - {description = "toggle sticky", group = "client"}), + awful.key({ superkey, ctrlkey }, "p", function (c) c.sticky = not c.sticky end, + {description = "toggle sticky", group = "client"}), + -- Minimize awful.key({ superkey, }, "n", function (c) @@ -758,6 +725,8 @@ keys.clientkeys = gears.table.join( c.minimized = true end , {description = "minimize", group = "client"}), + + -- Maximize awful.key({ superkey, }, "m", function (c) c.maximized = not c.maximized @@ -786,74 +755,64 @@ for i = 1, ntags do keys.globalkeys = gears.table.join(keys.globalkeys, -- View tag only. awful.key({ superkey }, "#" .. i + 9, - function () - local screen = awful.screen.focused() - local tag = screen.tags[i] - local current_tag = screen.selected_tag - -- Tag back and forth: - -- If you try to focus the same tag you are at, - -- go back to the previous tag. - -- Useful for quick switching after for example - -- checking an incoming chat message at tag 2 - -- and coming back to your work at tag 1 - if tag then - if tag == current_tag then - awful.tag.history.restore() - else - tag:view_only() - end - end - -- Simple tag view - --if tag then - --tag:view_only() - --end - end, - {description = "view tag #"..i, group = "tag"}), + function () + -- Tag back and forth + helpers.tag_back_and_forth(i) + + -- Simple tag view + -- local tag = mouse.screen.tags[i] + -- if tag then + -- tag:view_only() + -- end + end, + {description = "view tag #"..i, group = "tag"}), -- Toggle tag display. awful.key({ superkey, ctrlkey }, "#" .. i + 9, - function () - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then - awful.tag.viewtoggle(tag) - end - end, - {description = "toggle tag #" .. i, group = "tag"}), + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + awful.tag.viewtoggle(tag) + end + end, + {description = "toggle tag #" .. i, group = "tag"}), + -- Move client to tag. awful.key({ superkey, shiftkey }, "#" .. i + 9, - function () - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then - client.focus:move_to_tag(tag) - end - end - end, - {description = "move focused client to tag #"..i, group = "tag"}), + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, + {description = "move focused client to tag #"..i, group = "tag"}), + -- Move all visible clients to tag and focus that tag awful.key({ superkey, altkey }, "#" .. i + 9, - function () - local tag = client.focus.screen.tags[i] - local clients = awful.screen.focused().clients - if tag then - for _, c in pairs(clients) do - c:move_to_tag(tag) - end - tag:view_only() + function () + local tag = client.focus.screen.tags[i] + local clients = awful.screen.focused().clients + if tag then + for _, c in pairs(clients) do + c:move_to_tag(tag) end - end, - {description = "move all visible clients to tag #"..i, group = "tag"}), + tag:view_only() + end + end, + {description = "move all visible clients to tag #"..i, group = "tag"}), -- Toggle tag on focused client. awful.key({ superkey, ctrlkey, shiftkey }, "#" .. i + 9, - function () - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then - client.focus:toggle_tag(tag) - end - end - end, - {description = "toggle focused client on tag #" .. i, group = "tag"}) + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:toggle_tag(tag) + end + end + end, + {description = "toggle focused client on tag #" .. i, group = "tag"}) ) end @@ -863,9 +822,87 @@ keys.clientbuttons = gears.table.join( awful.button({ superkey }, 1, awful.mouse.client.move), awful.button({ superkey }, 2, function (c) c:kill() end), awful.button({ superkey }, 3, function(c) + client.focus = c + c:raise() awful.mouse.client.resize(c) + -- awful.mouse.resize(c, nil, {jump_to_corner=true}) + end), + + -- Superkey + scrolling = Change client opacity + awful.button({ superkey }, 4, function(c) + c.opacity = c.opacity + 0.1 + end), + awful.button({ superkey }, 5, function(c) + c.opacity = c.opacity - 0.1 end) ) + +-- Mouse buttons on the tasklist +keys.tasklist_buttons = gears.table.join( + awful.button({ }, 1, + function (c) + if c == client.focus then + c.minimized = true + else + -- Without this, the following + -- :isvisible() makes no sense + c.minimized = false + if not c:isvisible() and c.first_tag then + c.first_tag:view_only() + end + -- This will also un-minimize + -- the client, if needed + client.focus = c + c:raise() + end + end), + -- Middle mouse button closes the window + awful.button({ }, 2, function (c) c:kill() end), + awful.button({ }, 3, function (c) c.minimized = true end), + awful.button({ }, 4, function () + awful.client.focus.byidx(-1) + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(1) + end), + + -- Side button up - toggle floating + awful.button({ }, 9, function(c) + -- c:raise() + c.floating = not c.floating + end), + -- Side button down - toggle ontop + awful.button({ }, 8, function() + -- c:raise() + c.ontop = not c.ontop + end) +) + +-- Mouse buttons on a tag of the taglist widget +keys.taglist_buttons = gears.table.join( + awful.button({ }, 1, function(t) + t:view_only() + end), + awful.button({ modkey }, 1, function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end), + -- awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ }, 3, function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end), + awful.button({ modkey }, 3, function(t) + if client.focus then + client.focus:toggle_tag(t) + end + end), + awful.button({ }, 4, function(t) awful.tag.viewprev(t.screen) end), + awful.button({ }, 5, function(t) awful.tag.viewnext(t.screen) end) +) + -- }}} -- Set keys diff --git a/config/awesome/noodle/app_drawer.lua b/config/awesome/noodle/app_drawer.lua new file mode 100644 index 0000000..debb385 --- /dev/null +++ b/config/awesome/noodle/app_drawer.lua @@ -0,0 +1,263 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +local naughty = require("naughty") + +local helpers = require("helpers") + +-- Appearance +-- Helper function that creates buttons given a text symbol, color, hover_color +-- and the command to run on click. +local function create_button(symbol, color, hover_color, cmd) + local icon = wibox.widget { + markup = helpers.colorize_text(symbol, color), + align = "center", + valign = "center", + font = "icomoon 50", + forced_width = dpi(180), + forced_height = dpi(200), + widget = wibox.widget.textbox + } + + -- Press "animation" + icon:connect_signal("button::press", function(_, _, __, button) + if button == 3 then + icon.markup = helpers.colorize_text(symbol, hover_color.."55") + end + end) + icon:connect_signal("button::release", function () + icon.markup = helpers.colorize_text(symbol, hover_color) + end) + + -- Hover "animation" + icon:connect_signal("mouse::enter", function () + icon.markup = helpers.colorize_text(symbol, hover_color) + end) + icon:connect_signal("mouse::leave", function () + icon.markup = helpers.colorize_text(symbol, color) + end) + + -- Change cursor on hover + helpers.add_hover_cursor(icon, "hand1") + + -- Adds mousebinds if cmd is provided + if cmd then + icon:buttons(gears.table.join( + awful.button({ }, 1, function () + cmd() + end), + awful.button({ }, 3, function () + cmd() + end) + )) + end + + return icon +end + +-- Commands +local browser_command = function () + awful.spawn(user.browser, {switchtotag = true}) +end +local file_manager_command = function () + awful.spawn(user.file_manager) +end +local telegram_command = function () + helpers.run_or_raise({class = 'TelegramDesktop'}, false, "telegram") +end +local discord_command = function () + -- Run or raise Discord running on the browser, spawned with Chromium browser's app mode + helpers.run_or_raise({instance = 'discordapp.com__channels_@me'}, false, "chromium-browser --app=\"https://discordapp.com/channels/@me\"") + -- Run or raise Discord app + -- helpers.run_or_raise({class = 'discord'}, false, "discord") +end +local mail_command = function () + helpers.run_or_raise({class = 'email'}, false, user.email_client, {switchtotag = true}) +end +local gimp_command = function () + helpers.run_or_raise({class = 'Gimp'}, false, "gimp") +end +local steam_command = function () + helpers.run_or_raise({class = 'Steam'}, false, "steam") +end +local lutris_command = function () + helpers.run_or_raise({class = 'Lutris'}, false, "lutris", {switchtotag = true}) +end +local youtube_command = function () + awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") +end +local networks_command = function () + awful.spawn.with_shell("~/bin/networks-rofi") +end +local passwords_command = function () + helpers.run_or_raise({class = 'keepassxc'}, true, "keepassxc") +end + +local performance_mode_command = function () + awful.spawn.with_shell("performance_mode") +end + +local night_mode_command = function () + helpers.toggle_night_mode() +end + +local record_command = function () + awful.spawn.with_shell("screenrec.sh") +end + +-- I only use emacs for org mode :) +-- (Remacs is a rewrite of emacs in Rust) +local org_command = function () + helpers.run_or_raise({class = 'Remacs'}, false, "remacs") +end + +-- Create app buttons +local browser = create_button("", beautiful.xcolor3, beautiful.xcolor11, browser_command) +local discord = create_button("", beautiful.xcolor5, beautiful.xcolor13, discord_command) +local telegram = create_button("", beautiful.xcolor4, beautiful.xcolor12, telegram_command) +local mail = create_button("", beautiful.xcolor6, beautiful.xcolor14, mail_command) +local files = create_button("", beautiful.xcolor3, beautiful.xcolor11, file_manager_command) +local gimp = create_button("", beautiful.xcolor5, beautiful.xcolor13, gimp_command) +local youtube = create_button("", beautiful.xcolor1, beautiful.xcolor9, youtube_command) +local networks = create_button("", beautiful.xcolor3, beautiful.xcolor11, networks_command) +local passwords = create_button("", beautiful.xcolor1, beautiful.xcolor9, passwords_command) +local night_mode = create_button("", beautiful.xcolor1, beautiful.xcolor9, night_mode_command) +local record = create_button("", beautiful.xcolor4, beautiful.xcolor12, record_command) +local lutris = create_button("", beautiful.xcolor6, beautiful.xcolor14, lutris_command) +local steam = create_button("", beautiful.xcolor2, beautiful.xcolor10, steam_command) +local org = create_button("", beautiful.xcolor2, beautiful.xcolor10, org_command) +local performance = create_button("", beautiful.xcolor5, beautiful.xcolor13, performance_mode_command) + +local restart_awesome = create_button("", beautiful.xcolor4, beautiful.xcolor12) +restart_awesome:buttons(gears.table.join( + awful.button({ }, 1, awesome.restart) +)) + +-- Create the widget +app_drawer = wibox({visible = false, ontop = true, type = "dock"}) +awful.placement.maximize(app_drawer) + +app_drawer.bg = "#00000000" +-- app_drawer.bg = beautiful.app_drawer_bg or beautiful.xbackground or "#111111" +app_drawer.fg = beautiful.app_drawer_fg or beautiful.xforeground or "#FEFEFE" + +local app_drawer_grabber +function app_drawer_hide() + awful.keygrabber.stop(app_drawer_grabber) + app_drawer.visible = false +end + +function app_drawer_show() + -- naughty.notify({text = "starting the keygrabber"}) + app_drawer_grabber = awful.keygrabber.run(function(_, key, event) + local invalid_key = false + + -- naughty.notify({ title = event, text = key }) + -- if event == "press" and key == "Alt_L" or key == "Alt_R" then + -- naughty.notify({ title = "you pressed alt" }) + -- end + -- if event == "release" and key == "Alt_L" or key == "Alt_R" then + -- naughty.notify({ title = "you released alt" }) + -- end + + if event == "release" then return end + + if key == 'w' then + browser_command() + elseif key == 'f' then + file_manager_command() + elseif key == 't' then + telegram_command() + elseif key == 'd' then + discord_command() + elseif key == 'm' then + mail_command() + elseif key == 'y' then + youtube_command() + elseif key == 'o' then + org_command() + elseif key == 'p' then + passwords_command() + elseif key == 'g' then + gimp_command() + elseif key == 'r' then + record_command() + elseif key == 'l' then + lutris_command() + elseif key == 's' then + steam_command() + elseif key == 'n' then + networks_command() + elseif key == 'x' then + night_mode_command() + elseif key == 'z' then + performance_mode_command() + else + invalid_key = true + end + + if not invalid_key or key == 'Escape' then + app_drawer_hide() + end + end) + + app_drawer.visible = true +end + +app_drawer:buttons(gears.table.join( + -- Left click - Hide app_drawer + awful.button({ }, 1, function () + app_drawer_hide() + end), + -- Middle click - Hide app_drawer + awful.button({ }, 2, function () + app_drawer_hide() + end) +)) + +local function create_stripe(widgets, bg) + local buttons = wibox.widget { + -- spacing = dpi(20), + layout = wibox.layout.fixed.horizontal + } + + for _, widget in ipairs(widgets) do + buttons:add(widget) + end + + local stripe = wibox.widget { + { + nil, + { + nil, + buttons, + expand = "none", + layout = wibox.layout.align.horizontal + }, + expand = "none", + layout = wibox.layout.align.vertical + }, + bg = bg, + widget = wibox.container.background + } + + return stripe +end + +app_drawer:setup { + -- Background + { + -- Stripes + create_stripe({browser, youtube, discord, telegram}, "#00000000"), + create_stripe({mail, org, files, passwords}, beautiful.xcolor8.."20"), + create_stripe({gimp, record, lutris, steam}, beautiful.xcolor8.."40"), + create_stripe({networks, night_mode, performance, restart_awesome}, beautiful.xcolor8.."60"), + layout = wibox.layout.flex.vertical + }, + bg = beautiful.xbackground, + -- bg = beautiful.xbackground.."AA", + -- bg = "#00000000", + widget = wibox.container.background +} + diff --git a/config/awesome/noodle/battery.lua b/config/awesome/noodle/battery.lua deleted file mode 100644 index 1277759..0000000 --- a/config/awesome/noodle/battery.lua +++ /dev/null @@ -1,49 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local wibox = require("wibox") -local beautiful = require("beautiful") - --- Configuration -local update_interval = 30 -- in seconds - -local battery = wibox.widget{ - text = "battery widget", - align = 'center', - valign = 'center', - widget = wibox.widget.textbox -} - --- Mouse control --- battery:buttons(gears.table.join( --- -- --- awful.button({ }, 1, function () --- end), --- -- --- awful.button({ }, 2, function () --- end), --- -- --- awful.button({ }, 3, function () --- end), --- -- --- awful.button({ }, 4, function () --- end), --- awful.button({ }, 5, function () --- end) --- )) - -local function update_widget(bat) - battery.markup = bat .. "%" -end - -local bat_script = [[ - bash -c ' - upower -i $(upower -e | grep BAT) | grep percentage - ']] - -awful.widget.watch(bat_script, update_interval, function(widget, stdout) - local bat = stdout:match(':%s*(.*)..') - -- bat = string.gsub(bat, '^%s*(.-)%s*$', '%1') - update_widget(bat) -end) - -return battery diff --git a/config/awesome/noodle/battery_bar.lua b/config/awesome/noodle/battery_bar.lua index 55b6be8..3127235 100644 --- a/config/awesome/noodle/battery_bar.lua +++ b/config/awesome/noodle/battery_bar.lua @@ -1,17 +1,11 @@ -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -- Set colors local active_color = beautiful.battery_bar_active_color or "#5AA3CC" local background_color = beautiful.battery_bar_background_color or "#222222" --- Configuration -local update_interval = 30 -- in seconds - local battery_bar = wibox.widget{ max_value = 100, value = 50, @@ -30,36 +24,8 @@ local battery_bar = wibox.widget{ widget = wibox.widget.progressbar, } --- Mouse control --- battery_bar:buttons(gears.table.join( --- -- --- awful.button({ }, 1, function () --- end), --- -- --- awful.button({ }, 2, function () --- end), --- -- --- awful.button({ }, 3, function () --- end), --- -- --- awful.button({ }, 4, function () --- end), --- awful.button({ }, 5, function () --- end) --- )) - -local function update_widget(bat) - battery_bar.value = tonumber(bat) -end - -local bat_script = [[ - bash -c " - upower -i $(upower -e | grep BAT) | grep percentage | awk '{print $2}' - "]] - -awful.widget.watch(bat_script, update_interval, function(widget, stdout) - local bat = stdout:gsub("%%", "") - update_widget(bat) +awesome.connect_signal("evil::battery", function(value) + battery_bar.value = value end) return battery_bar diff --git a/config/awesome/noodle/brightness_bar.lua b/config/awesome/noodle/brightness_bar.lua index cf5ebbb..ded5ee9 100644 --- a/config/awesome/noodle/brightness_bar.lua +++ b/config/awesome/noodle/brightness_bar.lua @@ -1,9 +1,6 @@ -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -- Set colors local active_color = beautiful.brightness_bar_active_color or "#5AA3CC" @@ -27,38 +24,8 @@ local brightness_bar = wibox.widget{ widget = wibox.widget.progressbar, } --- Mouse control --- brightness_bar:buttons(gears.table.join( --- -- --- awful.button({ }, 1, function () --- end), --- -- --- awful.button({ }, 2, function () --- end), --- -- --- awful.button({ }, 3, function () --- end), --- -- --- awful.button({ }, 4, function () --- end), --- awful.button({ }, 5, function () --- end) --- )) - -local function update_widget() - awful.spawn.easy_async_with_shell("xbacklight -get", function(out) - -- Remove trailing whitespaces - -- out = out:gsub('^%s*(.-)%s*$', '%1') - -- host_text.markup = helpers.colorize_text("@"..out, xcolor8) - brightness_bar.value = tonumber(out) - end) -end - --- Signals -awesome.connect_signal("brightness_changed", function () - update_widget() +awesome.connect_signal("evil::brightness", function (value) + brightness_bar.value = value end) -update_widget() - return brightness_bar diff --git a/config/awesome/noodle/cpu_bar.lua b/config/awesome/noodle/cpu_bar.lua index e5d0223..5d41607 100644 --- a/config/awesome/noodle/cpu_bar.lua +++ b/config/awesome/noodle/cpu_bar.lua @@ -2,69 +2,34 @@ local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -- Set colors local active_color = beautiful.cpu_bar_active_color or "#5AA3CC" local background_color = beautiful.cpu_bar_background_color or "#222222" --- Configuration -local update_interval = 5 -- in seconds - local cpu_bar = wibox.widget{ - max_value = 100, - value = 50, - forced_height = dpi(10), - margins = { - top = dpi(8), - bottom = dpi(8), - }, - forced_width = dpi(200), - shape = gears.shape.rounded_bar, - bar_shape = gears.shape.rounded_bar, - color = active_color, - background_color = background_color, - border_width = 0, - border_color = beautiful.border_color, - widget = wibox.widget.progressbar, + max_value = 100, + value = 50, + forced_height = dpi(10), + margins = { + top = dpi(8), + bottom = dpi(8), + }, + forced_width = dpi(200), + shape = gears.shape.rounded_bar, + bar_shape = gears.shape.rounded_bar, + color = active_color, + background_color = background_color, + border_width = 0, + border_color = beautiful.border_color, + widget = wibox.widget.progressbar, } --- Mouse control --- cpu_bar:buttons(gears.table.join( --- -- --- awful.button({ }, 1, function () --- end), --- -- --- awful.button({ }, 2, function () --- end), --- -- --- awful.button({ }, 3, function () --- end), --- -- --- awful.button({ }, 4, function () --- end), --- awful.button({ }, 5, function () --- end) --- )) - -local function update_widget(cpu_idle) - -- Use this if you want to display usage percentage - -- cpu_bar.value = 100 - cpu_idle - - -- Use this if you want to display idle percentage - cpu_bar.value = tonumber(cpu_idle) -end - -local cpu_idle_script = [[ - bash -c " - vmstat 1 2 | tail -1 | awk '{printf \"%d\", $15}' - "]] - -awful.widget.watch(cpu_idle_script, update_interval, function(widget, stdout) - local cpu_idle = stdout - cpu_idle = string.gsub(cpu_idle, '^%s*(.-)%s*$', '%1') - update_widget(cpu_idle) +awesome.connect_signal("evil::cpu", function(value) + -- Use this if you want to display usage percentage + -- cpu_bar.value = value + -- Use this if you want to display idle percentage + cpu_bar.value = tonumber(100 - value) end) return cpu_bar diff --git a/config/awesome/noodle/desktop_control.lua b/config/awesome/noodle/desktop_control.lua index ec95e52..078e8fb 100644 --- a/config/awesome/noodle/desktop_control.lua +++ b/config/awesome/noodle/desktop_control.lua @@ -18,7 +18,7 @@ desktop_control:buttons(gears.table.join( end), -- Right click - Show clients in the current tag with rofi awful.button({ }, 3, function () - awful.spawn.with_shell("rofi -show windowcd") + awful.spawn.with_shell("rofi -matching fuzzy -show windowcd") end), -- Middle click - Close focused client awful.button({ }, 2, function () @@ -49,12 +49,12 @@ desktop_control:buttons(gears.table.join( )) local function update_widget() - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout == "max" then + local current_layout = awful.layout.get(mouse.screen) + if current_layout == awful.layout.suit.max then desktop_control.image = max_icon - elseif current_layout == "tile" then + elseif current_layout == awful.layout.suit.tile then desktop_control.image = tile_icon - elseif current_layout == "floating" then + elseif current_layout == awful.layout.suit.floating then desktop_control.image = floating_icon else desktop_control.image = tile_icon diff --git a/config/awesome/noodle/desktop_mode_widget.lua b/config/awesome/noodle/desktop_mode_widget.lua index b55ade0..088e90a 100644 --- a/config/awesome/noodle/desktop_mode_widget.lua +++ b/config/awesome/noodle/desktop_mode_widget.lua @@ -28,7 +28,8 @@ desktop_mode_widget:buttons(gears.table.join( awful.button({ }, 1, function () --switch_modes() if client.focus ~= nil then - awful.titlebar.toggle(c) + decorations.toggle(c) + -- awful.titlebar.toggle(c) end end), -- Right click: Toggle titlebars in all visible clients @@ -37,7 +38,8 @@ desktop_mode_widget:buttons(gears.table.join( for _, c in pairs(clients) do -- Don't toggle if titlebars are used as borders if not beautiful.titlebars_imitate_borders then - awful.titlebar.toggle(c) + decorations.toggle(c) + -- awful.titlebar.toggle(c) end end end), @@ -49,42 +51,17 @@ desktop_mode_widget:buttons(gears.table.join( end) )) -function switch_modes() - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) - if current_layout == "floating" then - local clients = awful.screen.focused().clients - for _, c in pairs(clients) do - -- Don't hide if titlebars are used as borders - if not beautiful.titlebars_imitate_borders then - awful.titlebar.hide(c) - end - end - awful.layout.set(awful.layout.suit.tile) - else - --elseif current_layout == "tile" then - local clients = awful.screen.focused().clients - for _, c in pairs(clients) do - awful.titlebar.show(c) - end - -- Delay so that the windows will first be resized properly - -- by the tiling layout - gears.timer.delayed_call(function() - awful.layout.set(awful.layout.suit.floating) - end) - end -end - local function update_widget() - local current_layout = awful.layout.getname(awful.layout.get(awful.screen.focused())) + local current_layout = awful.layout.get(mouse.screen) local color local txt - if current_layout == "max" then + if current_layout == awful.layout.suit.max then color = max_color txt = max_text - elseif current_layout == "tile" then + elseif current_layout == awful.layout.suit.tile then color = tile_color txt = tile_text - elseif current_layout == "floating" then + elseif current_layout == awful.layout.suit.floating then color = floating_color txt = floating_text else diff --git a/config/awesome/noodle/disk.lua b/config/awesome/noodle/disk.lua index 5f64e3f..29bdf0a 100644 --- a/config/awesome/noodle/disk.lua +++ b/config/awesome/noodle/disk.lua @@ -13,39 +13,21 @@ local disk = wibox.widget{ widget = wibox.widget.textbox } --- Mouse control --- disk:buttons(gears.table.join( --- -- --- awful.button({ }, 1, function () --- end), --- -- --- awful.button({ }, 2, function () --- end), --- -- --- awful.button({ }, 3, function () --- end), --- -- --- awful.button({ }, 4, function () --- end), --- awful.button({ }, 5, function () --- end) --- )) - local function update_widget(disk_space) - disk.markup = disk_space .. "B free" + disk.markup = disk_space .. "B free" end -- Use /dev/sdXY according to your setup local disk_script = [[ - bash -c " - df -k -h /dev/sda2 | tail -1 | awk '{print $4}' - "]] +bash -c " +df -k -h /dev/sda1 | tail -1 | awk '{print $4}' +"]] awful.widget.watch(disk_script, update_interval, function(widget, stdout) - local disk_space = stdout - -- Remove trailing white space - disk_space = string.gsub(disk_space, '^%s*(.-)%s*$', '%1') - update_widget(disk_space) + local disk_space = stdout + -- Remove trailing white space + disk_space = string.gsub(disk_space, '^%s*(.-)%s*$', '%1') + update_widget(disk_space) end) return disk diff --git a/config/awesome/noodle/exit_screen.lua b/config/awesome/noodle/exit_screen.lua index 2d77cdf..3339eba 100644 --- a/config/awesome/noodle/exit_screen.lua +++ b/config/awesome/noodle/exit_screen.lua @@ -2,35 +2,35 @@ local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") +-- local naughty = require("naughty") local helpers = require("helpers") local pad = helpers.pad -local keygrabber = require("awful.keygrabber") -- Appearance -local icon_size = beautiful.exit_screen_icon_size or 140 +local icon_size = beautiful.exit_screen_icon_size or dpi(140) local text_font = beautiful.exit_screen_font or "sans 14" -- Commands local poweroff_command = function() - awful.spawn.with_shell("poweroff") - awful.keygrabber.stop(exit_screen_grabber) + awful.spawn.with_shell("poweroff") + -- awful.keygrabber.stop(exit_screen_grabber) end local reboot_command = function() - awful.spawn.with_shell("reboot") - awful.keygrabber.stop(exit_screen_grabber) + awful.spawn.with_shell("reboot") + -- awful.keygrabber.stop(exit_screen_grabber) end local suspend_command = function() - awful.spawn.with_shell("systemctl suspend") - -- awful.spawn.with_shell("i3lock & systemctl suspend") - exit_screen_hide() + exit_screen_hide() + lock_screen_show() + awful.spawn.with_shell("systemctl suspend") end local exit_command = function() - awesome.quit() + awesome.quit() end local lock_command = function() - awful.spawn.with_shell("i3lock") - exit_screen_hide() + lock_screen_show() + exit_screen_hide() end local username = os.getenv("USER") @@ -38,7 +38,7 @@ local username = os.getenv("USER") local goodbye_widget = wibox.widget.textbox("Goodbye " .. username:sub(1,1):upper()..username:sub(2)) goodbye_widget.font = "sans 70" -local poweroff_icon = wibox.widget.imagebox(beautiful.poweroff_icon) +local poweroff_icon = wibox.widget.imagebox(icons.poweroff) poweroff_icon.resize = true poweroff_icon.forced_width = icon_size poweroff_icon.forced_height = icon_size @@ -46,30 +46,30 @@ local poweroff_text = wibox.widget.textbox("Poweroff") poweroff_text.font = text_font local poweroff = wibox.widget{ - { - nil, - poweroff_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - pad(1), - poweroff_text, - pad(1), - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical + { + nil, + poweroff_icon, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + { + pad(1), + poweroff_text, + pad(1), + expand = "none", + layout = wibox.layout.align.horizontal + }, + -- forced_width = 100, + layout = wibox.layout.fixed.vertical } poweroff:buttons(gears.table.join( - awful.button({ }, 1, function () - poweroff_command() - end) + awful.button({ }, 1, function () + poweroff_command() + end) )) -local reboot_icon = wibox.widget.imagebox(beautiful.reboot_icon) +local reboot_icon = wibox.widget.imagebox(icons.reboot) reboot_icon.resize = true reboot_icon.forced_width = icon_size reboot_icon.forced_height = icon_size @@ -77,30 +77,30 @@ local reboot_text = wibox.widget.textbox("Reboot") reboot_text.font = text_font local reboot = wibox.widget{ - { - nil, - reboot_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - reboot_text, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical + { + nil, + reboot_icon, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + { + nil, + reboot_text, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + -- forced_width = 100, + layout = wibox.layout.fixed.vertical } reboot:buttons(gears.table.join( - awful.button({ }, 1, function () - reboot_command() - end) + awful.button({ }, 1, function () + reboot_command() + end) )) -local suspend_icon = wibox.widget.imagebox(beautiful.suspend_icon) +local suspend_icon = wibox.widget.imagebox(icons.suspend) suspend_icon.resize = true suspend_icon.forced_width = icon_size suspend_icon.forced_height = icon_size @@ -108,31 +108,31 @@ local suspend_text = wibox.widget.textbox("Suspend") suspend_text.font = text_font local suspend = wibox.widget{ - { - nil, - suspend_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - suspend_text, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical + { + nil, + suspend_icon, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + { + nil, + suspend_text, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + -- forced_width = 100, + layout = wibox.layout.fixed.vertical } suspend:buttons(gears.table.join( - awful.button({ }, 1, function () - suspend_command() - end) + awful.button({ }, 1, function () + suspend_command() + end) )) -local exit_icon = wibox.widget.imagebox(beautiful.exit_icon) +local exit_icon = wibox.widget.imagebox(icons.exit) exit_icon.resize = true exit_icon.forced_width = icon_size exit_icon.forced_height = icon_size @@ -140,30 +140,30 @@ local exit_text = wibox.widget.textbox("Exit") exit_text.font = text_font local exit = wibox.widget{ - { - nil, - exit_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - exit_text, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical + { + nil, + exit_icon, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + { + nil, + exit_text, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + -- forced_width = 100, + layout = wibox.layout.fixed.vertical } exit:buttons(gears.table.join( - awful.button({ }, 1, function () - exit_command() - end) + awful.button({ }, 1, function () + exit_command() + end) )) -local lock_icon = wibox.widget.imagebox(beautiful.lock_icon) +local lock_icon = wibox.widget.imagebox(icons.lock) lock_icon.resize = true lock_icon.forced_width = icon_size lock_icon.forced_height = icon_size @@ -171,35 +171,32 @@ local lock_text = wibox.widget.textbox("Lock") lock_text.font = text_font local lock = wibox.widget{ - { - nil, - lock_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - pad(1), - lock_text, - pad(1), - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical + { + nil, + lock_icon, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + { + pad(1), + lock_text, + pad(1), + expand = "none", + layout = wibox.layout.align.horizontal + }, + -- forced_width = 100, + layout = wibox.layout.fixed.vertical } lock:buttons(gears.table.join( - awful.button({ }, 1, function () - lock_command() - end) + awful.button({ }, 1, function () + lock_command() + end) )) --- Get screen geometry -local screen_width = awful.screen.focused().geometry.width -local screen_height = awful.screen.focused().geometry.height - -- Create the widget -exit_screen = wibox({x = 0, y = 0, visible = false, ontop = true, type = "dock", height = screen_height, width = screen_width}) +exit_screen = wibox({visible = false, ontop = true, type = "dock"}) +awful.placement.maximize(exit_screen) exit_screen.bg = beautiful.exit_screen_bg or beautiful.wibar_bg or "#111111" exit_screen.fg = beautiful.exit_screen_fg or beautiful.wibar_fg or "#FEFEFE" @@ -212,79 +209,81 @@ exit_screen.fg = beautiful.exit_screen_fg or beautiful.wibar_fg or "#FEFEFE" local exit_screen_grabber function exit_screen_hide() - awful.keygrabber.stop(exit_screen_grabber) - exit_screen.visible = false + awful.keygrabber.stop(exit_screen_grabber) + exit_screen.visible = false end function exit_screen_show() - exit_screen_grabber = awful.keygrabber.run(function(_, key, event) - if event == "release" then return end + -- naughty.notify({text = "starting the keygrabber"}) + exit_screen_grabber = awful.keygrabber.run(function(_, key, event) + if event == "release" then return end - if key == 's' then - suspend_command() - -- 'e' for exit - elseif key == 'e' then - exit_command() - elseif key == 'l' then - lock_command() - elseif key == 'p' then - poweroff_command() - elseif key == 'r' then - reboot_command() - elseif key == 'Escape' or key == 'q' or key == 'x' then - exit_screen_hide() - -- else awful.keygrabber.stop(exit_screen_grabber) - end - end) - exit_screen.visible = true + if key == 's' then + suspend_command() + -- 'e' for exit + elseif key == 'e' then + exit_command() + elseif key == 'l' then + lock_command() + elseif key == 'p' then + poweroff_command() + elseif key == 'r' then + reboot_command() + elseif key == 'Escape' or key == 'q' or key == 'x' then + -- naughty.notify({text = "Cancel"}) + exit_screen_hide() + -- else awful.keygrabber.stop(exit_screen_grabber) + end + end) + exit_screen.visible = true end exit_screen:buttons(gears.table.join( - -- Middle click - Hide exit_screen - awful.button({ }, 2, function () - exit_screen_hide() - end), - -- Right click - Hide exit_screen - awful.button({ }, 3, function () - exit_screen_hide() - end) + -- Middle click - Hide exit_screen + awful.button({ }, 2, function () + exit_screen_hide() + end), + -- Right click - Hide exit_screen + awful.button({ }, 3, function () + exit_screen_hide() + end) )) -- Item placement exit_screen:setup { - nil, - { + nil, { - nil, - goodbye_widget, - nil, - expand = "none", - layout = wibox.layout.align.horizontal + { + nil, + goodbye_widget, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + }, + { + nil, + { + -- { + poweroff, + pad(3), + reboot, + pad(3), + suspend, + pad(3), + exit, + pad(3), + lock, + layout = wibox.layout.fixed.horizontal + -- }, + -- widget = exit_screen_box + }, + nil, + expand = "none", + layout = wibox.layout.align.horizontal + -- layout = wibox.layout.fixed.horizontal + }, + layout = wibox.layout.fixed.vertical }, - { - nil, - { - -- { - poweroff, - pad(3), - reboot, - pad(3), - suspend, - pad(3), - exit, - pad(3), - lock, - layout = wibox.layout.fixed.horizontal - -- }, - -- widget = exit_screen_box - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - -- layout = wibox.layout.fixed.horizontal - }, - layout = wibox.layout.fixed.vertical - }, - nil, - expand = "none", - layout = wibox.layout.align.vertical + nil, + expand = "none", + layout = wibox.layout.align.vertical } diff --git a/config/awesome/noodle/exit_screen_v2.lua b/config/awesome/noodle/exit_screen_v2.lua new file mode 100644 index 0000000..b7a6050 --- /dev/null +++ b/config/awesome/noodle/exit_screen_v2.lua @@ -0,0 +1,186 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +-- local naughty = require("naughty") + +local helpers = require("helpers") +local pad = helpers.pad + +-- Appearance +-- icomoon symbols +local icon_font = "icomoon bold 45" +local poweroff_text_icon = "" +local reboot_text_icon = "" +local suspend_text_icon = "" +local exit_text_icon = "" +-- local exit_text_icon = "" +-- local poweroff_text_icon = "" +-- local reboot_text_icon = "" +-- local suspend_text_icon = "" +-- local exit_text_icon = "" +local lock_text_icon = "" + +-- Typicons symbols +-- local icon_font = "Typicons 90" +-- local poweroff_text_icon = "" +-- local reboot_text_icon = "" +-- local suspend_text_icon = "" +-- local exit_text_icon = "" +-- local lock_text_icon = "" + +local button_bg = beautiful.xcolor0 +local button_size = dpi(120) + + +-- Commands +local poweroff_command = function() + awful.spawn.with_shell("poweroff") +end +local reboot_command = function() + awful.spawn.with_shell("reboot") +end +local suspend_command = function() + lock_screen_show() + awful.spawn.with_shell("systemctl suspend") +end +local exit_command = function() + awesome.quit() +end +local lock_command = function() + lock_screen_show() +end + +-- Helper function that generates the clickable buttons +local create_button = function(symbol, hover_color, text, command) + local icon = wibox.widget { + forced_height = button_size, + forced_width = button_size, + align = "center", + valign = "center", + font = icon_font, + text = symbol, + -- markup = helpers.colorize_text(symbol, color), + widget = wibox.widget.textbox() + } + + local button = wibox.widget { + { + nil, + icon, + expand = "none", + layout = wibox.layout.align.horizontal + }, + forced_height = button_size, + forced_width = button_size, + border_width = dpi(8), + border_color = button_bg, + shape = helpers.rrect(dpi(20)), + bg = button_bg, + widget = wibox.container.background + } + + -- Bind left click to run the command + button:buttons(gears.table.join( + awful.button({ }, 1, function () + command() + end) + )) + + -- Change color on hover + button:connect_signal("mouse::enter", function () + icon.markup = helpers.colorize_text(icon.text, hover_color) + button.border_color = hover_color + end) + button:connect_signal("mouse::leave", function () + icon.markup = helpers.colorize_text(icon.text, beautiful.xforeground) + button.border_color = button_bg + end) + + -- Use helper function to change the cursor on hover + helpers.add_hover_cursor(button, "hand1") + + return button +end + +-- Create the buttons +local poweroff = create_button(poweroff_text_icon, beautiful.xcolor1, "Poweroff", poweroff_command) +local reboot = create_button(reboot_text_icon, beautiful.xcolor2, "Reboot", reboot_command) +local suspend = create_button(suspend_text_icon, beautiful.xcolor3, "Suspend", suspend_command) +local exit = create_button(exit_text_icon, beautiful.xcolor4, "Exit", exit_command) +local lock = create_button(lock_text_icon, beautiful.xcolor5, "Lock", lock_command) + +-- Create the exit screen wibox +exit_screen = wibox({visible = false, ontop = true, type = "dock"}) +awful.placement.maximize(exit_screen) + +exit_screen.bg = beautiful.exit_screen_bg or beautiful.wibar_bg or "#111111" +exit_screen.fg = beautiful.exit_screen_fg or beautiful.wibar_fg or "#FEFEFE" + +local exit_screen_grabber +function exit_screen_hide() + awful.keygrabber.stop(exit_screen_grabber) + exit_screen.visible = false +end +function exit_screen_show() + exit_screen_grabber = awful.keygrabber.run(function(_, key, event) + -- Ignore case + key = key:lower() + + if event == "release" then return end + + if key == 's' then + suspend_command() + exit_screen_hide() + -- 'e' for exit + elseif key == 'e' then + exit_command() + elseif key == 'l' then + exit_screen_hide() + lock_command() + elseif key == 'p' then + poweroff_command() + elseif key == 'r' then + reboot_command() + elseif key == 'escape' or key == 'q' or key == 'x' then + exit_screen_hide() + end + end) + exit_screen.visible = true +end + +exit_screen:buttons(gears.table.join( + -- Left click - Hide exit_screen + awful.button({ }, 1, function () + exit_screen_hide() + end), + -- Middle click - Hide exit_screen + awful.button({ }, 2, function () + exit_screen_hide() + end), + -- Right click - Hide exit_screen + awful.button({ }, 3, function () + exit_screen_hide() + end) +)) + +-- Item placement +exit_screen:setup { + nil, + { + nil, + { + poweroff, + reboot, + suspend, + exit, + lock, + spacing = dpi(50), + layout = wibox.layout.fixed.horizontal + }, + expand = "none", + layout = wibox.layout.align.horizontal + }, + expand = "none", + layout = wibox.layout.align.vertical +} diff --git a/config/awesome/noodle/icon_taglist.lua b/config/awesome/noodle/icon_taglist.lua deleted file mode 100644 index 693d105..0000000 --- a/config/awesome/noodle/icon_taglist.lua +++ /dev/null @@ -1,141 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local beautiful = require("beautiful") -local wibox = require("wibox") -local naughty = require("naughty") -local capi = { screen = screen, client = client } - -local ntags = 10 -local s = awful.screen.focused() -local tag_icons = {} --- Create imageboxes and set their buttons -for i = 1, ntags do - table.insert(tag_icons, wibox.widget.imagebox()) - tag_icons[i]:buttons( - gears.table.join( - -- Left click - Tag back and forth - awful.button({ }, 1, function () - local current_tag = s.selected_tag - local clicked_tag = s.tags[i] - if clicked_tag == current_tag then - awful.tag.history.restore() - else - clicked_tag:view_only() - end - -- naughty.notify({ text = tostring(i) }) - end), - -- Right click - Move focused client to tag - awful.button({ }, 3, function () - local clicked_tag = s.tags[i] - if client.focus then - client.focus:move_to_tag(clicked_tag) - end - end) - )) -end - -local icon_taglist = wibox.widget{ - tag_icons[1], - tag_icons[2], - tag_icons[3], - tag_icons[4], - tag_icons[5], - tag_icons[6], - tag_icons[7], - tag_icons[8], - tag_icons[9], - tag_icons[10], - layout = wibox.layout.fixed.horizontal -} - -icon_taglist:buttons( -gears.table.join( - -- Scroll - Cycle through tags - awful.button({ }, 4, function () - awful.tag.viewprev() - end), - awful.button({ }, 5, function () - awful.tag.viewnext() - end) -)) - - --- Shorter names (eg. f = focused) to save space -local f, u, o, e; --- Set fallback values if needed -if beautiful.taglist_icons_focused then - f = beautiful.taglist_icons_focused - u = beautiful.taglist_icons_urgent - o = beautiful.taglist_icons_occupied - e = beautiful.taglist_icons_empty -else - -- Fallback values (very useless ones though) - local i = beautiful.awesome_icon - f = {i, i, i, i, i, i, i, i, i, i} - u = f - o = f - e = f -end - - -local function update_widget() - for i = 1, ntags do - local tag_clients - if s.tags[i] then - tag_clients = s.tags[i]:clients() - end - if s.tags[i] and s.tags[i].selected then - tag_icons[i].image = f[i] - elseif s.tags[i] and s.tags[i].urgent then - tag_icons[i].image = u[i] - elseif tag_clients and #tag_clients > 0 then - tag_icons[i].image = o[i] - else - tag_icons[i].image = e[i] - end - end -end - --- Signals ---icon_taglist:connect_signal("mouse::enter", function () - --awful.spawn.with_shell("notify-send hello") ---end) ---icon_taglist:connect_signal("mouse::leave", function () - --awful.spawn.with_shell("notify-send bye") ---end) - -client.connect_signal("unmanage", function(c) - update_widget() -end) -client.connect_signal("untagged", function(c) - update_widget() -end) -client.connect_signal("tagged", function(c) - update_widget() -end) -client.connect_signal("screen", function(c) - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::selected", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::hide", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::activated", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::screen", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::index", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::urgent", function () - update_widget() -end) ---capi.screen.connect_signal("removed", function(s) - -- instances[get_screen(s)] = nil - -- end) - -return icon_taglist diff --git a/config/awesome/noodle/lock_screen.lua b/config/awesome/noodle/lock_screen.lua new file mode 100644 index 0000000..1b5ec32 --- /dev/null +++ b/config/awesome/noodle/lock_screen.lua @@ -0,0 +1,281 @@ +-- Disclaimer: +-- This lock screen was not designed with security in mind. There is +-- no guarantee that it will protect you against someone that wants to +-- gain access to your computer. +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +local naughty = require("naughty") + +local helpers = require("helpers") + +local password = user.lock_screen_password or "" + +local lock_screen_symbol = "" +local lock_screen_fail_symbol = "" +local lock_animation_icon = wibox.widget { + -- Set forced size to prevent flickering when the icon rotates + forced_height = dpi(80), + forced_width = dpi(80), + font = "icomoon 40", + align = "center", + valign = "center", + widget = wibox.widget.textbox(lock_screen_symbol) +} + +-- A dummy textbox needed to get user input. +-- It will not be visible anywhere. +local some_textbox = wibox.widget.textbox() + +-- Create the lock screen wibox +-- Set the type to "splash" and set all "splash" windows to be blurred in your +-- compositor configuration file +lock_screen = wibox({visible = false, ontop = true, type = "splash"}) +awful.placement.maximize(lock_screen) + +lock_screen.bg = beautiful.lock_screen_bg or beautiful.exit_screen_bg or beautiful.wibar_bg or "#111111" +lock_screen.fg = beautiful.lock_screen_fg or beautiful.exit_screen_fg or beautiful.wibar_fg or "#FEFEFE" + +-- Items +local day_of_the_week = wibox.widget { + -- Fancy font + font = "Scriptina Bold 80", + -- Set forced width in order to keep it from getting cut off + forced_width = dpi(1000), + align = "center", + valign = "center", + widget = wibox.widget.textclock("%A") +} + +local function update_dotw() + day_of_the_week.markup = helpers.colorize_text(day_of_the_week.text, beautiful.xcolor3) +end +update_dotw() +day_of_the_week:connect_signal("widget::redraw_needed", function () + update_dotw() +end) + +local month = wibox.widget { + font = "San Francisco Display Heavy 100", + align = "center", + valign = "center", + widget = wibox.widget.textclock("%B %d") +} + +local function update_month() + month.markup = helpers.colorize_text(month.text:upper(), beautiful.xforeground.."25") +end + +update_month() +month:connect_signal("widget::redraw_needed", function () + update_month() +end) + + +-- Month + Day of the week stacked on top of each other +local fancy_date = wibox.widget { + month, + day_of_the_week, + -- Set forced width in order to keep it from getting cut off + forced_width = dpi(1000), + layout = wibox.layout.stack +} + +local time = { + { + font = "sans bold 16", + widget = wibox.widget.textclock("%H") + }, + { + font = "sans 16", + widget = wibox.widget.textclock("%M") + }, + spacing = dpi(2), + layout = wibox.layout.fixed.horizontal +} + +-- Lock animation +local lock_animation_widget_rotate = wibox.container.rotate() + +local arc = function() + return function(cr, width, height) + gears.shape.arc(cr, width, height, dpi(5), 0, math.pi/2, true, true) + end +end + +local lock_animation_arc = wibox.widget { + shape = arc(), + bg = "#00000000", + forced_width = dpi(100), + forced_height = dpi(100), + widget = wibox.container.background +} + +local lock_animation_widget = { + { + lock_animation_arc, + widget = lock_animation_widget_rotate + }, + lock_animation_icon, + layout = wibox.layout.stack +} + +-- Lock helper functions +local characters_entered = 0 +local function reset() + characters_entered = 0; + lock_animation_icon.markup = helpers.colorize_text(lock_screen_symbol, beautiful.xcolor7) + lock_animation_widget_rotate.direction = "north" + lock_animation_arc.bg = "#00000000" +end + +local function fail() + characters_entered = 0; + lock_animation_icon.text = lock_screen_fail_symbol + lock_animation_widget_rotate.direction = "north" + lock_animation_arc.bg = "#00000000" +end + +local animation_colors = { + -- Rainbow sequence =) + beautiful.xcolor1, + beautiful.xcolor5, + beautiful.xcolor4, + beautiful.xcolor6, + beautiful.xcolor2, + beautiful.xcolor3, +} + +local animation_directions = {"north", "west", "south", "east"} + +-- Function that "animates" every key press +local function key_animation(char_inserted) + local color + local direction = animation_directions[(characters_entered % 4) + 1] + if char_inserted then + color = animation_colors[(characters_entered % 6) + 1] + lock_animation_icon.text = lock_screen_symbol + else + if characters_entered == 0 then + reset() + else + color = beautiful.xcolor7 .. "55" + end + end + + lock_animation_arc.bg = color + lock_animation_widget_rotate.direction = direction +end + +-- Get input from user +local function grab_password() + awful.prompt.run { + hooks = { + -- Custom escape behaviour: Do not cancel input with Escape + -- Instead, this will just clear any input received so far. + {{ }, 'Escape', + function(_) + reset() + grab_password() + end + } + }, + keypressed_callback = function(mod, key, cmd) + -- Only count single character keys (thus preventing + -- "Shift", "Escape", etc from triggering the animation) + if #key == 1 then + characters_entered = characters_entered + 1 + key_animation(true) + elseif key == "BackSpace" then + if characters_entered > 0 then + characters_entered = characters_entered - 1 + end + key_animation(false) + end + + -- Debug + -- naughty.notify { title = 'You pressed:', text = key } + end, + exe_callback = function(input) + -- Check input + if input == password then + -- YAY + reset() + lock_screen.visible = false + else + -- NAY + fail() + grab_password() + end + end, + textbox = some_textbox, + } +end + +function lock_screen_show() + lock_screen.visible = true + grab_password() +end + +-- Item placement +lock_screen:setup { + -- Horizontal centering + nil, + { + -- Vertical centering + nil, + { + { + { + -- Date + { + month, + day_of_the_week, + layout = wibox.layout.stack + }, + { + nil, + { + -- Small circle + { + forced_height = dpi(5), + forced_width = dpi(5), + shape = gears.shape.circle, + bg = beautiful.xcolor3, + widget = wibox.container.background + }, + -- Time + time, + -- Small circle + { + forced_height = dpi(5), + forced_width = dpi(5), + shape = gears.shape.circle, + bg = beautiful.xcolor3, + widget = wibox.container.background + }, + spacing = dpi(4), + layout = wibox.layout.fixed.horizontal + }, + expand = "none", + layout = wibox.layout.align.horizontal + }, + spacing = dpi(20), + -- spacing = dpi(10), + layout = wibox.layout.fixed.vertical + }, + lock_animation_widget, + spacing = dpi(40), + layout = wibox.layout.fixed.vertical + + }, + bottom = dpi(60), + widget = wibox.container.margin + }, + expand = "none", + layout = wibox.layout.align.vertical + }, + expand = "none", + layout = wibox.layout.align.horizontal +} diff --git a/config/awesome/noodle/mpd_song.lua b/config/awesome/noodle/mpd_song.lua index 5ab7d83..4c018b7 100644 --- a/config/awesome/noodle/mpd_song.lua +++ b/config/awesome/noodle/mpd_song.lua @@ -1,140 +1,54 @@ --- NOTE: --- This widget runs a script in the background --- When awesome restarts, its process will remain alive! --- Don't worry though! The cleanup script that runs in rc.lua takes care of it :) - -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local naughty = require("naughty") -- Set colors local title_color = beautiful.mpd_song_title_color or beautiful.wibar_fg local artist_color = beautiful.mpd_song_artist_color or beautiful.wibar_fg local paused_color = beautiful.mpd_song_paused_color or beautiful.normal_fg --- Set notification icon path -local notification_icon = beautiful.music_icon - local mpd_title = wibox.widget{ - text = "---------", - align = "center", - valign = "center", - widget = wibox.widget.textbox + text = "---------", + align = "center", + valign = "center", + widget = wibox.widget.textbox } local mpd_artist = wibox.widget{ - text = "---------", - align = "center", - valign = "center", - widget = wibox.widget.textbox + text = "---------", + align = "center", + valign = "center", + widget = wibox.widget.textbox } -- Main widget local mpd_song = wibox.widget{ - mpd_title, - mpd_artist, - layout = wibox.layout.fixed.vertical + mpd_title, + mpd_artist, + layout = wibox.layout.fixed.vertical } --- Mouse control --- mpd_song:buttons(gears.table.join( --- -- --- awful.button({ }, 1, function () --- end), --- -- --- awful.button({ }, 2, function () --- end), --- -- --- awful.button({ }, 3, function () --- end), --- -- --- awful.button({ }, 4, function () --- end), --- awful.button({ }, 5, function () --- end) --- )) - local artist_fg local artist_bg - -local last_notification_id -local function send_notification(artist, title) - notification = naughty.notify({ - -- title = "Now playing:", - -- text = title .. " -- " .. artist, - title = title, - text = artist, - icon = notification_icon, - -- width = 360, - -- height = 90, - -- icon_size = 60, - timeout = 4, - replaces_id = last_notification_id - }) - last_notification_id = notification.id -end - -local function update_widget() - -- awful.spawn.easy_async({"sh", "-c", "mpc"}, - awful.spawn.easy_async({"mpc", "-f", "[[%artist%@@%title%@]]"}, - function(stdout) - -- naughty.notify({text = stdout}) - -- local artist = stdout:match('(.*)-.*$') - -- artist = string.gsub(artist, '^%s*(.-)%s*$', '%1') - -- local title = stdout:match('- (.*)%[') - -- title = string.gsub(title, '^%s*(.-)%s*$', '%1') - local artist = stdout:match('(.*)@@') - local title = stdout:match('@@(.*)@') - title = string.gsub(title, '^%s*(.-)%s*$', '%1') - local status = stdout:match('%[(.*)%]') - status = string.gsub(status, '^%s*(.-)%s*$', '%1') - if status == "paused" then +awesome.connect_signal("evil::mpd", function(artist, title, status) + if status == "paused" then artist_fg = paused_color title_fg = paused_color - else + else artist_fg = artist_color title_fg = title_color - if sidebar.visible == false then - send_notification(artist, title) - end - end + end - -- Escape &'s - title = string.gsub(title, "&", "&") - artist = string.gsub(artist, "&", "&") + -- Escape &'s + title = string.gsub(title, "&", "&") + artist = string.gsub(artist, "&", "&") - -- naughty.notify({text = artist .. " - " .. title}) - mpd_title.markup = + mpd_title.markup = "" .. title .. "" - mpd_artist.markup = + mpd_artist.markup = "" .. artist .. "" - end - ) - -end - --- Signals --- mpd_song:connect_signal("mouse::enter", function () --- blablabla() --- end) - -update_widget() - -local mpd_script = [[ - bash -c ' - mpc idleloop player - ']] - -awful.spawn.with_line_callback(mpd_script, { - stdout = function(line) - -- naughty.notify { text = "LINE:"..line } - update_widget() - end -}) - +end) return mpd_song diff --git a/config/awesome/noodle/ram_bar.lua b/config/awesome/noodle/ram_bar.lua index 53dc54c..1db23ca 100644 --- a/config/awesome/noodle/ram_bar.lua +++ b/config/awesome/noodle/ram_bar.lua @@ -1,49 +1,32 @@ -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -- Set colors local active_color = beautiful.ram_bar_active_color or "#5AA3CC" local background_color = beautiful.ram_bar_background_color or "#222222" --- Configuration -local update_interval = 20 -- in seconds - local ram_bar = wibox.widget{ - max_value = 100, - value = 50, - forced_height = dpi(10), - margins = { - top = dpi(8), - bottom = dpi(8), - }, - forced_width = dpi(200), - shape = gears.shape.rounded_bar, - bar_shape = gears.shape.rounded_bar, - color = active_color, - background_color = background_color, - border_width = 0, - border_color = beautiful.border_color, - widget = wibox.widget.progressbar, + max_value = 100, + value = 50, + forced_height = dpi(10), + margins = { + top = dpi(8), + bottom = dpi(8), + }, + forced_width = dpi(200), + shape = gears.shape.rounded_bar, + bar_shape = gears.shape.rounded_bar, + color = active_color, + background_color = background_color, + border_width = 0, + border_color = beautiful.border_color, + widget = wibox.widget.progressbar, } -local function update_widget(used_ram_percentage) - ram_bar.value = used_ram_percentage -end - -local used_ram_script = [[ - bash -c " - free -m | grep 'Mem:' | awk '{printf \"%d@@%d@\", $7, $2}' - "]] - -awful.widget.watch(used_ram_script, update_interval, function(widget, stdout) - local available = stdout:match('(.*)@@') - local total = stdout:match('@@(.*)@') - local used_ram_percentage = (total - available) / total * 100 - update_widget(used_ram_percentage) +awesome.connect_signal("evil::ram", function(used, total) + local used_ram_percentage = (used / total) * 100 + ram_bar.value = used_ram_percentage end) return ram_bar diff --git a/config/awesome/noodle/sidebar.lua b/config/awesome/noodle/sidebar.lua index 99ebdba..6f7c7ce 100644 --- a/config/awesome/noodle/sidebar.lua +++ b/config/awesome/noodle/sidebar.lua @@ -2,8 +2,6 @@ local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi local helpers = require("helpers") local pad = helpers.pad @@ -14,8 +12,32 @@ local icon_size = dpi(36) local progress_bar_width = dpi(215) -- local progress_bar_margins = dpi(9) +-- Helper function that changes the appearance of progress bars and their icons +-- Create horizontal rounded bars +local function format_progress_bar(bar, icon) + icon.forced_height = icon_size + icon.forced_width = icon_size + icon.resize = true + bar.forced_width = progress_bar_width + bar.shape = gears.shape.rounded_bar + bar.bar_shape = gears.shape.rounded_bar + + local w = wibox.widget{ + nil, + { + icon, + bar, + spacing = dpi(10), + layout = wibox.layout.fixed.horizontal + }, + expand = "none", + layout = wibox.layout.align.horizontal + } + return w +end + -- Item configuration -local exit_icon = wibox.widget.imagebox(beautiful.poweroff_icon) +local exit_icon = wibox.widget.imagebox(icons.poweroff) exit_icon.resize = true exit_icon.forced_width = icon_size exit_icon.forced_height = icon_size @@ -23,17 +45,18 @@ local exit_text = wibox.widget.textbox("Exit") exit_text.font = "sans 14" local exit = wibox.widget{ - exit_icon, - exit_text, - layout = wibox.layout.fixed.horizontal + exit_icon, + exit_text, + layout = wibox.layout.fixed.horizontal } exit:buttons(gears.table.join( - awful.button({ }, 1, function () - exit_screen_show() - sidebar.visible = false - end) + awful.button({ }, 1, function () + exit_screen_show() + sidebar.visible = false + end) )) +-- Weather widget with image icons -- local weather_widget = require("noodle.weather") -- local weather_widget_icon = weather_widget:get_all_children()[1] -- weather_widget_icon.forced_width = icon_size @@ -41,217 +64,129 @@ exit:buttons(gears.table.join( -- local weather_widget_text = weather_widget:get_all_children()[2] -- weather_widget_text.font = "sans 14" --- Dummy weather_widget for testing --- (avoid making requests with every awesome restart) --- local weather_widget = wibox.widget.textbox("[i] bla bla bla!") +-- Weather widget with text icons +local weather_widget = require("noodle.text_weather") +local weather_widget_icon = weather_widget:get_all_children()[1] +weather_widget_icon.font = "Typicons 25" +local weather_widget_text = weather_widget:get_all_children()[2] +weather_widget_text.font = "sans 14" --- local weather = wibox.widget{ --- nil, --- weather_widget, --- nil, --- layout = wibox.layout.align.horizontal, --- expand = "none" --- } - -local temperature_icon = wibox.widget.imagebox(beautiful.temperature_icon) -temperature_icon.resize = true -temperature_icon.forced_width = icon_size -temperature_icon.forced_height = icon_size -local temperature_bar = require("noodle.temperature_bar") -temperature_bar.forced_width = progress_bar_width --- temperature_bar.margins.top = progress_bar_margins --- temperature_bar.margins.bottom = progress_bar_margins -local temperature = wibox.widget{ - nil, - { - temperature_icon, - pad(1), - temperature_bar, - pad(1), - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal +local weather = wibox.widget{ + nil, + weather_widget, + nil, + layout = wibox.layout.align.horizontal, + expand = "none" } + + +local temperature_icon = wibox.widget.imagebox(icons.temperature) +local temperature_bar = require("noodle.temperature_bar") +local temperature = format_progress_bar(temperature_bar, temperature_icon) temperature:buttons( - gears.table.join( - awful.button({ }, 1, function () - -- local matcher = function (c) - -- return awful.rules.match(c, {name = 'watch sensors'}) - -- end - -- awful.client.run_or_raise(terminal .." -e 'watch sensors'", matcher) - awful.spawn(terminal .. " -e 'watch sensors'", {floating = true}) - end) + gears.table.join( + awful.button({ }, 1, function () + helpers.run_or_raise({class = 'sensors'}, false, user.terminal.." --class sensors -e watch sensors") + end) )) -local battery_icon = wibox.widget.imagebox(beautiful.battery_icon) -battery_icon.resize = true -battery_icon.forced_width = icon_size -battery_icon.forced_height = icon_size -awesome.connect_signal( - "charger_plugged", function(c) - battery_icon.image = beautiful.battery_charging_icon -end) -awesome.connect_signal( - "charger_unplugged", function(c) - battery_icon.image = beautiful.battery_icon +local battery_icon = wibox.widget.imagebox(icons.battery) +awesome.connect_signal("evil::charger", function(plugged) + if plugged then + battery_icon.image = icons.battery_charging + else + battery_icon.image = icons.battery + end end) local battery_bar = require("noodle.battery_bar") -battery_bar.forced_width = progress_bar_width --- battery_bar.margins.top = progress_bar_margins --- battery_bar.margins.bottom = progress_bar_margins -local battery = wibox.widget{ - nil, - { - battery_icon, - pad(1), - battery_bar, - pad(1), - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal -} +local battery = format_progress_bar(battery_bar, battery_icon) -local cpu_icon = wibox.widget.imagebox(beautiful.cpu_icon) -cpu_icon.resize = true -cpu_icon.forced_width = icon_size -cpu_icon.forced_height = icon_size +local cpu_icon = wibox.widget.imagebox(icons.cpu) local cpu_bar = require("noodle.cpu_bar") -cpu_bar.forced_width = progress_bar_width --- cpu_bar.margins.top = progress_bar_margins --- cpu_bar.margins.bottom = progress_bar_margins -local cpu = wibox.widget{ - nil, - { - cpu_icon, - pad(1), - cpu_bar, - pad(1), - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal -} +local cpu = format_progress_bar(cpu_bar, cpu_icon) cpu:buttons( - gears.table.join( - awful.button({ }, 1, function () - local matcher = function (c) - return awful.rules.match(c, {name = 'htop'}) - end - awful.client.run_or_raise(terminal .." -e htop", matcher) - end), - awful.button({ }, 3, function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Lxtask'}) - end - awful.client.run_or_raise("lxtask", matcher) - end) + gears.table.join( + awful.button({ }, 1, function () + helpers.run_or_raise({class = 'htop'}, false, user.terminal.." --class htop -e htop") + end), + awful.button({ }, 3, function () + helpers.run_or_raise({class = 'Lxtask'}, false, "lxtask") + end) )) -local ram_icon = wibox.widget.imagebox(beautiful.ram_icon) -ram_icon.resize = true -ram_icon.forced_width = icon_size -ram_icon.forced_height = icon_size +local ram_icon = wibox.widget.imagebox(icons.ram) local ram_bar = require("noodle.ram_bar") -ram_bar.forced_width = progress_bar_width --- ram_bar.margins.top = progress_bar_margins --- ram_bar.margins.bottom = progress_bar_margins -local ram = wibox.widget{ - nil, - { - ram_icon, - pad(1), - ram_bar, - pad(1), - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal -} +local ram = format_progress_bar(ram_bar, ram_icon) ram:buttons( - gears.table.join( - awful.button({ }, 1, function () - local matcher = function (c) - return awful.rules.match(c, {name = 'htop'}) - end - awful.client.run_or_raise(terminal .." -e htop", matcher) - end), - awful.button({ }, 3, function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Lxtask'}) - end - awful.client.run_or_raise("lxtask", matcher) - end) + gears.table.join( + awful.button({ }, 1, function () + helpers.run_or_raise({class = 'htop'}, false, user.terminal.." --class htop -e htop") + end), + awful.button({ }, 3, function () + helpers.run_or_raise({class = 'Lxtask'}, false, "lxtask") + end) )) -local playerctl_toggle_icon = wibox.widget.imagebox(beautiful.playerctl_toggle_icon) --- local playerctl_toggle_icon = wibox.widget.imagebox(beautiful.playerctl_toggle_icon) +local playerctl_toggle_icon = wibox.widget.imagebox(icons.playerctl_toggle) playerctl_toggle_icon.resize = true playerctl_toggle_icon.forced_width = playerctl_button_size playerctl_toggle_icon.forced_height = playerctl_button_size playerctl_toggle_icon:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc toggle") - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("mpvc toggle") - end), - awful.button({ }, 8, function () - sidebar.visible = false - awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") - end), - awful.button({ }, 9, function () - awful.spawn.with_shell("~/scr/info/mpv-query.sh") - end) + awful.button({ }, 1, function () + awful.spawn.with_shell("mpc -q toggle") + end), + awful.button({ }, 3, function () + awful.spawn.with_shell("mpvc toggle") + end), + awful.button({ }, 8, function () + sidebar.visible = false + awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") + end), + awful.button({ }, 9, function () + awful.spawn.with_shell("~/scr/info/mpv-query.sh") + end) )) -local playerctl_prev_icon = wibox.widget.imagebox(beautiful.playerctl_prev_icon) +local playerctl_prev_icon = wibox.widget.imagebox(icons.playerctl_prev) playerctl_prev_icon.resize = true playerctl_prev_icon.forced_width = playerctl_button_size playerctl_prev_icon.forced_height = playerctl_button_size playerctl_prev_icon:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc prev") - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("mpvc prev") - end) + awful.button({ }, 1, function () + awful.spawn.with_shell("mpc -q prev") + end), + awful.button({ }, 3, function () + awful.spawn.with_shell("mpvc prev") + end) )) -local playerctl_next_icon = wibox.widget.imagebox(beautiful.playerctl_next_icon) +local playerctl_next_icon = wibox.widget.imagebox(icons.playerctl_next) playerctl_next_icon.resize = true playerctl_next_icon.forced_width = playerctl_button_size playerctl_next_icon.forced_height = playerctl_button_size playerctl_next_icon:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc next") - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("mpvc next") - end) + awful.button({ }, 1, function () + awful.spawn.with_shell("mpc -q next") + end), + awful.button({ }, 3, function () + awful.spawn.with_shell("mpvc next") + end) )) local playerctl_buttons = wibox.widget { - nil, - { - playerctl_prev_icon, - pad(1), - playerctl_toggle_icon, - pad(1), - playerctl_next_icon, - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal, + nil, + { + playerctl_prev_icon, + playerctl_toggle_icon, + playerctl_next_icon, + spacing = dpi(10), + layout = wibox.layout.fixed.horizontal + }, + expand = "none", + layout = wibox.layout.align.horizontal, } local time = wibox.widget.textclock("%H %M") @@ -272,6 +207,28 @@ fancy_date.align = "center" fancy_date.valign = "center" fancy_date.font = "sans italic 11" +local fancy_time_widget = wibox.widget.textclock("%H%M") +fancy_time_widget.markup = fancy_time_widget.text:sub(1,2) .. "" .. fancy_time_widget.text:sub(3,4) .. "" +fancy_time_widget:connect_signal("widget::redraw_needed", function () + fancy_time_widget.markup = fancy_time_widget.text:sub(1,2) .. "" .. fancy_time_widget.text:sub(3,4) .. "" +end) +fancy_time_widget.align = "center" +fancy_time_widget.valign = "center" +fancy_time_widget.font = "sans 55" +local fancy_time_decoration = wibox.widget.textbox() +-- local decoration_string = "------------------------" +local decoration_string = "──────  ──────" +fancy_time_decoration.markup = ""..decoration_string.."" +fancy_time_decoration.font = "sans 18" +fancy_time_decoration.align = "center" +fancy_time_decoration.valign = "top" + +local fancy_time = { + fancy_time_widget, + fancy_time_decoration, + layout = wibox.layout.fixed.vertical, +} + local mpd_song = require("noodle.mpd_song") local mpd_widget_children = mpd_song:get_all_children() local mpd_title = mpd_widget_children[1] @@ -282,52 +239,52 @@ mpd_artist.font = "sans 11" -- Set forced height in order to limit the widgets to one line. -- Might need to be adjusted depending on the font. mpd_title.forced_height = dpi(24) -mpd_artist.forced_height = dpi(16) +mpd_artist.forced_height = dpi(18) mpd_song:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc toggle") - end), - awful.button({ }, 3, function () - -- Spawn music terminal - awful.spawn("music_terminal") - end), - awful.button({ }, 4, function () - awful.spawn.with_shell("mpc prev") - end), - awful.button({ }, 5, function () - awful.spawn.with_shell("mpc next") - end) + awful.button({ }, 1, function () + awful.spawn.with_shell("mpc -q toggle") + end), + awful.button({ }, 3, function () + -- Spawn music terminal + awful.spawn(user.music_client) + end), + awful.button({ }, 4, function () + awful.spawn.with_shell("mpc -q prev") + end), + awful.button({ }, 5, function () + awful.spawn.with_shell("mpc -q next") + end) )) local disk_space = require("noodle.disk") disk_space.font = "sans 14" -local disk_icon = wibox.widget.imagebox(beautiful.files_icon) +local disk_icon = wibox.widget.imagebox(icons.files) disk_icon.resize = true disk_icon.forced_width = icon_size disk_icon.forced_height = icon_size local disk = wibox.widget{ - nil, - { - disk_icon, - disk_space, - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal + nil, + { + disk_icon, + disk_space, + layout = wibox.layout.fixed.horizontal + }, + nil, + expand = "none", + layout = wibox.layout.align.horizontal } disk:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn(filemanager, {floating = true}) - end), - awful.button({ }, 3, function () - awful.spawn(filemanager .. " /data", {floating = true}) - end) + awful.button({ }, 1, function () + awful.spawn(user.file_manager, {floating = true}) + end), + awful.button({ }, 3, function () + awful.spawn(user.file_manager .. " /data", {floating = true}) + end) )) -local search_icon = wibox.widget.imagebox(beautiful.search_icon) +local search_icon = wibox.widget.imagebox(icons.search) search_icon.resize = true search_icon.forced_width = icon_size search_icon.forced_height = icon_size @@ -335,67 +292,51 @@ local search_text = wibox.widget.textbox("Search") search_text.font = "sans 14" local search = wibox.widget{ - search_icon, - search_text, - layout = wibox.layout.fixed.horizontal + search_icon, + search_text, + layout = wibox.layout.fixed.horizontal } search:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("rofi -show combi") - sidebar.visible = false - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("rofi -show run") - sidebar.visible = false - end) + awful.button({ }, 1, function () + awful.spawn.with_shell("rofi -matching fuzzy -show combi") + sidebar.visible = false + end), + awful.button({ }, 3, function () + awful.spawn.with_shell("rofi -matching fuzzy -show run") + sidebar.visible = false + end) )) -local volume_icon = wibox.widget.imagebox(beautiful.volume_icon) -volume_icon.resize = true -volume_icon.forced_width = icon_size -volume_icon.forced_height = icon_size +local volume_icon = wibox.widget.imagebox(icons.volume) local volume_bar = require("noodle.volume_bar") -volume_bar.forced_width = progress_bar_width --- volume_bar.shape = gears.shape.circle --- volume_bar.margins.top = progress_bar_margins --- volume_bar.margins.bottom = progress_bar_margins -local volume = wibox.widget{ - nil, - { - volume_icon, - pad(1), - volume_bar, - pad(1), - layout = wibox.layout.fixed.horizontal - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal -} +local volume = format_progress_bar(volume_bar, volume_icon) volume:buttons(gears.table.join( - -- Left click - Mute / Unmute - awful.button({ }, 1, function () - awful.spawn.with_shell("volume-control.sh toggle") - end), - -- Right click - Run or raise pavucontrol - awful.button({ }, 3, function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Pavucontrol'}) - end - awful.client.run_or_raise("pavucontrol", matcher) - end), - -- Scroll - Increase / Decrease volume - awful.button({ }, 4, function () - awful.spawn.with_shell("volume-control.sh up") - end), - awful.button({ }, 5, function () - awful.spawn.with_shell("volume-control.sh down") - end) + -- Left click - Mute / Unmute + awful.button({ }, 1, function () + helpers.volume_control(0) + end), + -- Right click - Run or raise pavucontrol + awful.button({ }, 3, function () + helpers.run_or_raise({class = 'Pavucontrol'}, true, "pavucontrol") + end), + -- Scroll - Increase / Decrease volume + awful.button({ }, 4, function () + helpers.volume_control(5) + end), + awful.button({ }, 5, function () + helpers.volume_control(-5) + end) )) +-- Add clickable effects on some widgets +helpers.add_hover_cursor(cpu, "hand1") +helpers.add_hover_cursor(ram, "hand1") +helpers.add_hover_cursor(temperature, "hand1") +helpers.add_hover_cursor(volume, "hand1") + -- Create the sidebar -sidebar = wibox({x = 0, y = 0, visible = false, ontop = true, type = "dock"}) +sidebar = wibox({visible = false, ontop = true, type = "dock"}) sidebar.bg = beautiful.sidebar_bg or beautiful.wibar_bg or "#111111" sidebar.fg = beautiful.sidebar_fg or beautiful.wibar_fg or "#FFFFFF" sidebar.opacity = beautiful.sidebar_opacity or 1 @@ -404,117 +345,113 @@ sidebar.width = beautiful.sidebar_width or dpi(300) sidebar.y = beautiful.sidebar_y or 0 local radius = beautiful.sidebar_border_radius or 0 if beautiful.sidebar_position == "right" then - sidebar.x = awful.screen.focused().geometry.width - sidebar.width - sidebar.shape = helpers.prrect(radius, true, false, false, true) + awful.placement.right(sidebar) + sidebar.shape = helpers.prrect(radius, true, false, false, true) else - sidebar.x = beautiful.sidebar_x or 0 - sidebar.shape = helpers.prrect(radius, false, true, true, false) + awful.placement.left(sidebar) + sidebar.shape = helpers.prrect(radius, false, true, true, false) end -- sidebar.shape = helpers.rrect(radius) sidebar:buttons(gears.table.join( - -- Middle click - Hide sidebar - awful.button({ }, 2, function () - sidebar.visible = false - end) - -- Right click - Hide sidebar - -- awful.button({ }, 3, function () - -- sidebar.visible = false - -- -- mymainmenu:show() - -- end) + -- Middle click - Hide sidebar + awful.button({ }, 2, function () + sidebar.visible = false + end) + -- Right click - Hide sidebar + -- awful.button({ }, 3, function () + -- sidebar.visible = false + -- -- mymainmenu:show() + -- end) )) -- Hide sidebar when mouse leaves -if beautiful.sidebar_hide_on_mouse_leave then - sidebar:connect_signal("mouse::leave", function () - sidebar.visible = false - end) +if user.sidebar_hide_on_mouse_leave then + sidebar:connect_signal("mouse::leave", function () + sidebar.visible = false + end) end -- Activate sidebar by moving the mouse at the edge of the screen -if beautiful.sidebar_hide_on_mouse_leave then - local sidebar_activator = wibox({y = sidebar.y, width = 1, visible = true, ontop = false, opacity = 0, below = true}) - sidebar_activator.height = sidebar.height - -- sidebar_activator.height = sidebar.height - beautiful.wibar_height - sidebar_activator:connect_signal("mouse::enter", function () - sidebar.visible = true - end) +if user.sidebar_show_on_mouse_screen_edge then + local sidebar_activator = wibox({y = sidebar.y, width = 1, visible = true, ontop = false, opacity = 0, below = true}) + sidebar_activator.height = sidebar.height + sidebar_activator:connect_signal("mouse::enter", function () + sidebar.visible = true + end) - if beautiful.sidebar_position == "right" then - sidebar_activator.x = awful.screen.focused().geometry.width - sidebar_activator.width - else - sidebar_activator.x = 0 - end + if beautiful.sidebar_position == "right" then + awful.placement.right(sidebar_activator) + else + awful.placement.left(sidebar_activator) + end - sidebar_activator:buttons( - gears.table.join( - -- awful.button({ }, 2, function () - -- start_screen_show() - -- -- sidebar.visible = not sidebar.visible - -- end), - awful.button({ }, 4, function () - awful.tag.viewprev() - end), - awful.button({ }, 5, function () - awful.tag.viewnext() - end) - )) + sidebar_activator:buttons( + gears.table.join( + awful.button({ }, 4, function () + awful.tag.viewprev() + end), + awful.button({ }, 5, function () + awful.tag.viewnext() + end) + )) end -- Item placement sidebar:setup { - { ----------- TOP GROUP ----------- - pad(1), - pad(1), - time, - date, - pad(1), - fancy_date, - -- pad(1), - -- weather, - pad(1), - pad(1), - layout = wibox.layout.fixed.vertical - }, - { ----------- MIDDLE GROUP ----------- - playerctl_buttons, - { - -- Put some padding at the left and right edge so that - -- it looks better with extremely long titles/artists - pad(2), - mpd_song, - pad(2), - layout = wibox.layout.align.horizontal, + { ----------- TOP GROUP ----------- + pad(1), + pad(1), + -- fancy_time, + time, + date, + pad(1), + weather, + pad(1), + pad(1), + layout = wibox.layout.fixed.vertical }, - pad(1), - pad(1), - volume, - cpu, - temperature, - ram, - battery, - pad(1), - disk, - pad(1), - pad(1), - layout = wibox.layout.fixed.vertical - }, - { ----------- BOTTOM GROUP ----------- - { -- Search and exit screen - nil, - { - search, - pad(5), - exit, - pad(2), - layout = wibox.layout.fixed.horizontal - }, - nil, - layout = wibox.layout.align.horizontal, - expand = "none" + { ----------- MIDDLE GROUP ----------- + playerctl_buttons, + { + -- Put some margins at the left and right edge so that + -- it looks better with extremely long titles/artists + mpd_song, + left = dpi(10), + right = dpi(10), + widget = wibox.container.margin + }, + pad(1), + pad(1), + volume, + cpu, + temperature, + ram, + battery, + pad(1), + disk, + pad(1), + pad(1), + layout = wibox.layout.fixed.vertical + -- layout = wibox.layout.fixed.vertical }, - pad(1), - layout = wibox.layout.fixed.vertical - }, - layout = wibox.layout.align.vertical, - -- expand = "none" + { ----------- BOTTOM GROUP ----------- + nil, + { + { + search, + exit, + spacing = dpi(50), + layout = wibox.layout.fixed.horizontal + }, + left = dpi(20), + right = dpi(20), + bottom = dpi(20), + widget = wibox.container.margin + }, + nil, + layout = wibox.layout.align.horizontal, + expand = "none" + }, + layout = wibox.layout.align.vertical, + -- expand = "none" } diff --git a/config/awesome/noodle/start_screen.lua b/config/awesome/noodle/start_screen.lua index 9088a80..c2b9537 100644 --- a/config/awesome/noodle/start_screen.lua +++ b/config/awesome/noodle/start_screen.lua @@ -2,8 +2,6 @@ local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi local naughty = require("naughty") local keygrabber = require("awful.keygrabber") @@ -20,19 +18,29 @@ local screen_width = awful.screen.focused().geometry.width local screen_height = awful.screen.focused().geometry.height -- Create the widget -start_screen = wibox({x = 0, y = 0, visible = false, ontop = true, type = "dock", height = screen_height, width = screen_width}) +start_screen = wibox({visible = false, ontop = true, type = "dock"}) +awful.placement.maximize(start_screen) start_screen.bg = beautiful.start_screen_bg or beautiful.exit_screen_bg or beautiful.wibar_bg or "#111111" start_screen.fg = beautiful.start_screen_fg or beautiful.exit_screen_fg or beautiful.wibar_fg or "#FEFEFE" start_screen:buttons(gears.table.join( - -- Middle click - Hide start_screen - awful.button({ }, 2, function () - start_screen_hide() - end) + -- Left click - Hide start_screen + awful.button({ }, 1, function () + start_screen_hide() + end), + -- Middle click - Hide start_screen + awful.button({ }, 2, function () + start_screen_hide() + end), + -- Right click - Hide start_screen + awful.button({ }, 3, function () + start_screen_hide() + end) )) -- Helper function that puts a widget inside a box with a specified background color +-- TODO also accept buttons and signals? -- Invisible margins are added so that the boxes created with this function are evenly separated -- The widget_to_be_boxed is vertically and horizontally centered inside the box local function create_boxed_widget(widget_to_be_boxed, width, height, bg_color) @@ -41,8 +49,6 @@ local function create_boxed_widget(widget_to_be_boxed, width, height, bg_color) box_container.forced_height = height box_container.forced_width = width box_container.shape = helpers.rrect(box_radius) - -- box_container.shape = helpers.prrect(20, true, true, true, true) - -- box_container.shape = helpers.prrect(30, true, true, false, true) local boxed_widget = wibox.widget { -- Add margins @@ -56,11 +62,9 @@ local function create_boxed_widget(widget_to_be_boxed, width, height, bg_color) nil, -- The actual widget goes here widget_to_be_boxed, - nil, layout = wibox.layout.align.vertical, expand = "none" }, - nil, layout = wibox.layout.align.horizontal, expand = "none" }, @@ -74,12 +78,13 @@ local function create_boxed_widget(widget_to_be_boxed, width, height, bg_color) return boxed_widget end + + -- User widget local user_picture_container = wibox.container.background() user_picture_container.shape = gears.shape.circle --- user_picture_container.shape = helpers.prrect(30, true, true, false, true) -user_picture_container.forced_height = dpi(130) -user_picture_container.forced_width = dpi(130) +user_picture_container.forced_height = dpi(140) +user_picture_container.forced_width = dpi(140) local user_picture = wibox.widget { wibox.widget.imagebox(os.getenv("HOME").."/.config/awesome/profile.png"), widget = user_picture_container @@ -118,23 +123,25 @@ local user_box = create_boxed_widget(user, dpi(300), dpi(340), beautiful.xbackgr -- Create the calendar local styles = {} styles.month = { padding = 20, - fg_color = beautiful.xcolor7, - bg_color = beautiful.xbackground.."00", - border_width = 0, + fg_color = beautiful.xcolor7, + bg_color = beautiful.xbackground.."00", + border_width = 0, } styles.normal = {} styles.focus = { fg_color = beautiful.xcolor1, - bg_color = beautiful.xcolor5.."00", - markup = function(t) return '' .. t .. '' end, + bg_color = beautiful.xcolor5.."00", + markup = function(t) return '' .. t .. '' end, + -- markup = function(t) return '' .. t .. '' end, } styles.header = { fg_color = beautiful.xcolor7, - bg_color = beautiful.xcolor1.."00", - markup = function(t) return '' .. t .. '' end, + bg_color = beautiful.xcolor1.."00", + -- markup = function(t) return '' .. t .. '' end, + markup = function(t) return '' .. t .. '' end, } styles.weekday = { fg_color = beautiful.xcolor7, - bg_color = beautiful.xcolor1.."00", - padding = 3, - markup = function(t) return '' .. t .. '' end, + bg_color = beautiful.xcolor1.."00", + padding = 3, + markup = function(t) return '' .. t .. '' end, } local function decorate_cell(widget, flag, date) if flag=='monthheader' and not styles.monthheader then @@ -144,15 +151,12 @@ local function decorate_cell(widget, flag, date) if props.markup and widget.get_text and widget.set_markup then widget:set_markup(props.markup(widget:get_text())) end - -- Change bg color for weekends - -- local d = {year=date.year, month=(date.month or 1), day=(date.day or 1)} - -- local weekday = tonumber(os.date('%w', os.time(d))) - -- local default_bg = (weekday==0 or weekday==6) and beautiful.xcolor6 or beautiful.xcolor14 - + local d = {year=date.year, month=(date.month or 1), day=(date.day or 1)} + local weekday = tonumber(os.date('%w', os.time(d))) local default_fg = beautiful.xcolor7 local default_bg = beautiful.xcolor0.."00" - + -- local default_bg = (weekday==0 or weekday==6) and beautiful.xcolor6 or beautiful.xcolor14 local ret = wibox.widget { { widget, @@ -171,7 +175,7 @@ end calendar_widget = wibox.widget { date = os.date('*t'), - font = "sans 16", + font = "sans 14", long_weekdays = false, spacing = dpi(3), fn_embed = decorate_cell, @@ -180,30 +184,31 @@ calendar_widget = wibox.widget { local current_month = os.date('*t').month calendar_widget:buttons(gears.table.join( - -- Left Click - Reset date to current date - awful.button({ }, 1, function () - calendar_widget.date = os.date('*t') - end), - -- Scroll - Move to previous or next month - awful.button({ }, 4, function () - new_calendar_month = calendar_widget.date.month - 1 - if new_calendar_month == current_month then - calendar_widget.date = os.date('*t') - else - calendar_widget.date = {month = new_calendar_month, year = calendar_widget.date.year} - end - end), - awful.button({ }, 5, function () - new_calendar_month = calendar_widget.date.month + 1 - if new_calendar_month == current_month then - calendar_widget.date = os.date('*t') - else - calendar_widget.date = {month = new_calendar_month, year = calendar_widget.date.year} - end - end) + -- Left Click - Reset date to current date + awful.button({ }, 1, function () + calendar_widget.date = os.date('*t') + end), + -- Scroll - Move to previous or next month + awful.button({ }, 4, function () + new_calendar_month = calendar_widget.date.month - 1 + if new_calendar_month == current_month then + calendar_widget.date = os.date('*t') + else + calendar_widget.date = {month = new_calendar_month, year = calendar_widget.date.year} + end + end), + awful.button({ }, 5, function () + new_calendar_month = calendar_widget.date.month + 1 + if new_calendar_month == current_month then + calendar_widget.date = os.date('*t') + else + calendar_widget.date = {month = new_calendar_month, year = calendar_widget.date.year} + end + end) )) local calendar_box = create_boxed_widget(calendar_widget, dpi(300), dpi(400), beautiful.xbackground) +-- local calendar_box = create_boxed_widget(calendar, 380, 540, beautiful.xcolor0) -- Time widget local hours = wibox.widget.textclock("%H ") @@ -235,6 +240,10 @@ day_of_the_week.align = "center" day_of_the_week.valign = "center" day_of_the_week.align = "center" day_of_the_week.valign = "center" +-- day_of_the_week.markup = "" .. day_of_the_week.text .. "" +-- day_of_the_week:connect_signal("widget::redraw_needed", function () +-- day_of_the_week.markup = "" .. day_of_the_week.text .. "" +-- end) local day_of_the_month = wibox.widget.textclock("%d") day_of_the_month.font = "sans bold 30" day_of_the_month.fg = beautiful.xcolor0 @@ -265,20 +274,18 @@ local function create_bookmark(name, path) local bookmark = wibox.widget.textbox() bookmark.font = "sans bold 16" + -- bookmark.text = wibox.widget.textbox(name:sub(1,1):upper()..name:sub(2)) bookmark.markup = helpers.colorize_text(name, original_color) bookmark.align = "center" bookmark.valign = "center" -- Buttons - bookmark:buttons( - gears.table.join( + bookmark:buttons(gears.table.join( awful.button({ }, 1, function () - awful.spawn.with_shell(filemanager.." "..path) - start_screen_hide() + awful.spawn.with_shell(user.file_manager.." "..path) end), awful.button({ }, 3, function () - awful.spawn.with_shell(terminal.." -e 'ranger' "..path) - start_screen_hide() + awful.spawn.with_shell(user.terminal.." -e 'ranger' "..path) end) )) @@ -290,7 +297,7 @@ local function create_bookmark(name, path) bookmark.markup = helpers.colorize_text(name, original_color) end) - helpers.add_clickable_effect(bookmark) + helpers.add_hover_cursor(bookmark, "hand1") return bookmark end @@ -317,21 +324,22 @@ local function create_url(name, path) local url = wibox.widget.textbox() url.font = "sans bold 16" + -- url.text = wibox.widget.textbox(name:sub(1,1):upper()..name:sub(2)) url.markup = helpers.colorize_text(name, original_color) url.align = "center" url.valign = "center" -- Buttons url:buttons( - gears.table.join( - awful.button({ }, 1, function () - awful.spawn(browser.." "..path) - start_screen_hide() - end), - awful.button({ }, 3, function () - awful.spawn(browser.." -new-window "..path) - start_screen_hide() - end) + gears.table.join( + awful.button({ }, 1, function () + awful.spawn(user.browser.." "..path) + start_screen_hide() + end), + awful.button({ }, 3, function () + awful.spawn(user.browser.." -new-window "..path) + start_screen_hide() + end) )) -- Hover effect @@ -342,7 +350,7 @@ local function create_url(name, path) url.markup = helpers.colorize_text(name, original_color) end) - helpers.add_clickable_effect(url) + helpers.add_hover_cursor(url, "hand1") return url end @@ -359,13 +367,14 @@ local urls = wibox.widget { local urls_box = create_boxed_widget(urls, dpi(200), dpi(180), beautiful.xbackground) -- Fortune -local fortune_command = "fortune -n 140 -s computers" +local fortune_command = "fortune -n 140 -s" +-- local fortune_command = "fortune -n 140 -s computers" local fortune = wibox.widget.textbox() fortune.font = "sans 12" local fortune_update_interval = 3600 awful.widget.watch(fortune_command, fortune_update_interval, function(widget, stdout) -- Remove trailing whitespaces - stdout = stdout:gsub('^%s*(.-)%s*$', '%1') + -- stdout = stdout:gsub('^%s*(.-)%s*$', '%1') fortune.markup = ""..stdout.."" end) @@ -376,22 +385,22 @@ local fortune_widget = wibox.widget { widget = wibox.container.margin } + local fortune_box = create_boxed_widget(fortune_widget, dpi(300), dpi(140), beautiful.xbackground) fortune_box:buttons(gears.table.join( - -- Left click - New fortune - awful.button({ }, 1, function () - awful.spawn.easy_async_with_shell(fortune_command, function(out) - -- Remove trailing whitespaces - out = out:gsub('^%s*(.-)%s*$', '%1') - fortune.markup = ""..out.."" - end) - end) + -- Left click - New fortune + awful.button({ }, 1, function () + awful.spawn.easy_async_with_shell(fortune_command, function(out) + -- Remove trailing whitespaces + out = out:gsub('^%s*(.-)%s*$', '%1') + fortune.markup = ""..out.."" + end) + end) )) -helpers.add_clickable_effect(fortune_box) +helpers.add_hover_cursor(fortune_box, "hand1") local icon_size = dpi(40) - -local brightness_icon = wibox.widget.imagebox(beautiful.redshift_icon) +local brightness_icon = wibox.widget.imagebox(icons.redshift) brightness_icon.resize = true brightness_icon.forced_width = icon_size brightness_icon.forced_height = icon_size @@ -410,34 +419,28 @@ local brightness = wibox.widget { local brightness_box = create_boxed_widget(brightness, dpi(300), dpi(80), beautiful.xbackground) brightness_box:buttons( - gears.table.join( - -- Left click - Toggle redshift - awful.button({ }, 1, function () - awful.spawn.with_shell("flux") - end), - -- Right click - Reset brightness (Set to max) - awful.button({ }, 3, function () - awful.spawn.easy_async_with_shell("xbacklight -set 100", function() - awesome.emit_signal("brightness_changed") + gears.table.join( + -- Left click - Toggle redshift + awful.button({ }, 1, function () + helpers.toggle_night_mode() + end), + -- Right click - Reset brightness (Set to max) + awful.button({ }, 3, function () + awful.spawn.with_shell("light -S 100") + end), + -- Scroll up - Increase brightness + awful.button({ }, 4, function () + awful.spawn.with_shell("light -A 10") + end), + -- Scroll down - Decrease brightness + awful.button({ }, 5, function () + awful.spawn.with_shell("light -U 10") end) - end), - -- Scroll up - Increase brightness - awful.button({ }, 4, function () - awful.spawn.easy_async_with_shell("xbacklight -inc 10", function() - awesome.emit_signal("brightness_changed") - end) - end), - -- Scroll down - Decrease brightness - awful.button({ }, 5, function () - awful.spawn.easy_async_with_shell("xbacklight -dec 10", function() - awesome.emit_signal("brightness_changed") - end) - end) )) -helpers.add_clickable_effect(brightness_box) +helpers.add_hover_cursor(brightness_box, "hand1") -local notification_state = wibox.widget.imagebox(beautiful.alarm_icon) +local notification_state = wibox.widget.imagebox(icons.alarm) notification_state.resize = true notification_state.forced_width = icon_size notification_state.forced_height = icon_size @@ -445,24 +448,24 @@ notification_state.forced_height = icon_size -- notification_state.font = "Material Design Icons 30" local function update_notification_state_icon() if naughty.is_suspended() then - notification_state.image = beautiful.alarm_off_icon + notification_state.image = icons.alarm_off else - notification_state.image = beautiful.alarm_icon + notification_state.image = icons.alarm end end update_notification_state_icon() local notification_state_box = create_boxed_widget(notification_state, dpi(150), dpi(78), beautiful.xbackground) notification_state_box:buttons(gears.table.join( - -- Left click - Toggle notification state - awful.button({ }, 1, function () - naughty.toggle() - update_notification_state_icon() - end) + -- Left click - Toggle notification state + awful.button({ }, 1, function () + naughty.toggle() + update_notification_state_icon() + end) )) -helpers.add_clickable_effect(notification_state_box) +helpers.add_hover_cursor(notification_state_box, "hand1") -local screenshot = wibox.widget.imagebox(beautiful.screenshot_icon) +local screenshot = wibox.widget.imagebox(icons.screenshot) screenshot.resize = true screenshot.forced_width = icon_size screenshot.forced_height = icon_size @@ -470,18 +473,18 @@ screenshot.forced_height = icon_size -- screenshot.font = "Material Design Icons 30" local screenshot_box = create_boxed_widget(screenshot, dpi(150), dpi(78), beautiful.xbackground) screenshot_box:buttons(gears.table.join( - -- Left click - Take screenshot - awful.button({ }, 1, function () - awful.spawn.with_shell("screenshot.sh") - end), - -- Right click - Take screenshot in 5 seconds - awful.button({ }, 3, function () - naughty.notify({title = "Say cheese!", text = "Taking shot in 5 seconds", timeout = 4, icon = beautiful.screenshot_icon}) - awful.spawn.with_shell("sleep 5 && screenshot.sh") - end) + -- Left click - Take screenshot + awful.button({ }, 1, function () + helpers.screenshot("full") + end), + -- Right click - Take screenshot in 5 seconds + awful.button({ }, 3, function () + naughty.notify({title = "Say cheese!", text = "Taking shot in 5 seconds", timeout = 4, icon = icons.screenshot}) + helpers.screenshot("full", 5) + end) )) -helpers.add_clickable_effect(screenshot_box) +helpers.add_hover_cursor(screenshot_box, "hand1") -- Item placement start_screen:setup { @@ -533,18 +536,20 @@ start_screen:setup { local start_screen_grabber function start_screen_hide() - awful.keygrabber.stop(start_screen_grabber) - start_screen.visible = false + awful.keygrabber.stop(start_screen_grabber) + start_screen.visible = false end local original_cursor = "left_ptr" function start_screen_show() -- Fix cursor sometimes turning into "hand1" right after showing the start_screen - local w = _G.mouse.current_wibox + -- Sigh... This fix does not always work + local w = mouse.current_wibox if w then w.cursor = original_cursor end + -- naughty.notify({text = "starting the keygrabber"}) start_screen_grabber = awful.keygrabber.run(function(_, key, event) if event == "release" then return end -- Press Escape or q or F1 to hide it diff --git a/config/awesome/noodle/tag_notifications.lua b/config/awesome/noodle/tag_notifications.lua deleted file mode 100644 index ee65954..0000000 --- a/config/awesome/noodle/tag_notifications.lua +++ /dev/null @@ -1,48 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local wibox = require("wibox") -local naughty = require("naughty") -local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi - -local last_notification_id --- local screen_height = mouse.screen.geometry.height -local function send_notification(notification_title, notification_text, notification_icon, notification_timeout) - notification = naughty.notify({ - title = notification_title, - text = notification_text, - icon = notification_icon, - width = dpi(220), - -- height = dpi(75), - position = "top_middle", - icon_size = dpi(50), - timeout = notification_timeout or 1.5, - replaces_id = last_notification_id - }) - last_notification_id = notification.id -end - -local s = awful.screen.focused() - --- Notification for changing tags --- awful.tag.attached_connect_signal(s, "property::selected", function () --- local t = s.selected_tag --- if t then --- send_notification( "You are on: ","Tag " .. t.index, beautiful.taglist_icons_empty[t.index]) --- end --- end) - --- Notification for urgent clients that appear -awful.tag.attached_connect_signal(s, "property::urgent", function (t) - send_notification("Urgent client:", "Tag ".. t.index, beautiful.alert_icon, 4) -end) - --- Notification for tag layout change -awful.tag.attached_connect_signal(s, "property::layout", function () - local l = awful.layout.get(s) - if l then - local name = awful.layout.getname(l) - send_notification("Layout:", name, beautiful["layout_"..name]) - end -end) diff --git a/config/awesome/noodle/temperature.lua b/config/awesome/noodle/temperature.lua deleted file mode 100644 index 83bdc01..0000000 --- a/config/awesome/noodle/temperature.lua +++ /dev/null @@ -1,33 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local wibox = require("wibox") -local beautiful = require("beautiful") - --- Configuration -local update_interval = 15 -- in seconds - -local temperature = wibox.widget{ - text = "?? °C", - align = 'center', - valign = 'center', - widget = wibox.widget.textbox -} - -local function update_widget(temp) - temperature.markup = temp - -- temperature.markup = temp .. "°C" -end - -local temp_script = [[ - bash -c " - sensors | grep Package | awk '{print $4}' | cut -c 2-3,6-8 - "]] - -awful.widget.watch(temp_script, update_interval, function(widget, stdout) - -- local temp = stdout:match('+(.*)%.%d...(.*)%(') - local temp = stdout - temp = string.gsub(temp, '^%s*(.-)%s*$', '%1') - update_widget(temp) -end) - -return temperature diff --git a/config/awesome/noodle/temperature_bar.lua b/config/awesome/noodle/temperature_bar.lua index 943d7ea..9b28d03 100644 --- a/config/awesome/noodle/temperature_bar.lua +++ b/config/awesome/noodle/temperature_bar.lua @@ -1,17 +1,11 @@ -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -- Set colors local active_color = beautiful.temperature_bar_active_color or "#5AA3CC" local background_color = beautiful.temperature_bar_background_color or "#222222" --- Configuration -local update_interval = 15 -- in seconds - local temperature_bar = wibox.widget{ max_value = 100, value = 50, @@ -30,18 +24,8 @@ local temperature_bar = wibox.widget{ widget = wibox.widget.progressbar, } -local function update_widget(temp) - temperature_bar.value = tonumber(temp) -end - -local temp_script = [[ - bash -c " - sensors | grep Package | awk '{print $4}' | cut -c 2-3 - "]] - -awful.widget.watch(temp_script, update_interval, function(widget, stdout) - local temp = stdout - update_widget(temp) +awesome.connect_signal("evil::temperature", function(value) + temperature_bar.value = value end) return temperature_bar diff --git a/config/awesome/noodle/text_exit_screen.lua b/config/awesome/noodle/text_exit_screen.lua deleted file mode 100644 index b68c4bc..0000000 --- a/config/awesome/noodle/text_exit_screen.lua +++ /dev/null @@ -1,290 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local wibox = require("wibox") -local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi - -local helpers = require("helpers") -local pad = helpers.pad -local keygrabber = require("awful.keygrabber") - --- Appearance -local icon_size = beautiful.exit_screen_icon_size or 140 -local text_font = beautiful.exit_screen_font or "sans 14" -local icon_font = "Typicons 90" -local poweroff_text_icon = "" -local reboot_text_icon = "" -local suspend_text_icon = "" -local exit_text_icon = "" -local lock_text_icon = "" - --- Commands -local poweroff_command = function() - awful.spawn.with_shell("poweroff") - awful.keygrabber.stop(exit_screen_grabber) -end -local reboot_command = function() - awful.spawn.with_shell("reboot") - awful.keygrabber.stop(exit_screen_grabber) -end -local suspend_command = function() - awful.spawn.with_shell("systemctl suspend") - -- awful.spawn.with_shell("i3lock & systemctl suspend") - exit_screen_hide() -end -local exit_command = function() - awesome.quit() -end -local lock_command = function() - awful.spawn.with_shell("i3lock") - exit_screen_hide() -end - -local username = os.getenv("USER") --- Capitalize username -local goodbye_widget = wibox.widget.textbox("Goodbye " .. username:sub(1,1):upper()..username:sub(2)) -goodbye_widget.font = "sans 70" - -local poweroff_icon = wibox.widget.textbox(poweroff_text_icon) -poweroff_icon.font = icon_font -poweroff_icon.markup = helpers.colorize_text(poweroff_icon.text, beautiful.xcolor1) -local poweroff_text = wibox.widget.textbox("Poweroff") -poweroff_text.font = text_font - -local poweroff = wibox.widget{ - { - nil, - poweroff_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - pad(1), - poweroff_text, - pad(1), - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical -} -poweroff:buttons(gears.table.join( - awful.button({ }, 1, function () - poweroff_command() - end) -)) - -local reboot_icon = wibox.widget.textbox(reboot_text_icon) -reboot_icon.font = icon_font -reboot_icon.markup = helpers.colorize_text(reboot_icon.text, beautiful.xcolor2) -local reboot_text = wibox.widget.textbox("Reboot") -reboot_text.font = text_font - -local reboot = wibox.widget{ - { - nil, - reboot_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - reboot_text, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical -} -reboot:buttons(gears.table.join( - awful.button({ }, 1, function () - reboot_command() - end) -)) - -local suspend_icon = wibox.widget.textbox(suspend_text_icon) -suspend_icon.font = icon_font -suspend_icon.markup = helpers.colorize_text(suspend_icon.text, beautiful.xcolor3) -local suspend_text = wibox.widget.textbox("Suspend") -suspend_text.font = text_font - -local suspend = wibox.widget{ - { - nil, - suspend_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - suspend_text, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical -} -suspend:buttons(gears.table.join( - awful.button({ }, 1, function () - suspend_command() - end) -)) - - -local exit_icon = wibox.widget.textbox(exit_text_icon) -exit_icon.font = icon_font -exit_icon.markup = helpers.colorize_text(exit_icon.text, beautiful.xcolor4) -local exit_text = wibox.widget.textbox("Exit") -exit_text.font = text_font - -local exit = wibox.widget{ - { - nil, - exit_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - exit_text, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical -} -exit:buttons(gears.table.join( - awful.button({ }, 1, function () - exit_command() - end) -)) - -local lock_icon = wibox.widget.textbox(lock_text_icon) -lock_icon.font = icon_font -lock_icon.markup = helpers.colorize_text(lock_icon.text, beautiful.xcolor5) -local lock_text = wibox.widget.textbox("Lock") -lock_text.font = text_font - -local lock = wibox.widget{ - { - nil, - lock_icon, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - pad(1), - lock_text, - pad(1), - expand = "none", - layout = wibox.layout.align.horizontal - }, - -- forced_width = 100, - layout = wibox.layout.fixed.vertical -} -lock:buttons(gears.table.join( - awful.button({ }, 1, function () - lock_command() - end) -)) - --- Get screen geometry -local screen_width = awful.screen.focused().geometry.width -local screen_height = awful.screen.focused().geometry.height - --- Create the widget -exit_screen = wibox({x = 0, y = 0, visible = false, ontop = true, type = "dock", height = screen_height, width = screen_width}) - -exit_screen.bg = beautiful.exit_screen_bg or beautiful.wibar_bg or "#111111" -exit_screen.fg = beautiful.exit_screen_fg or beautiful.wibar_fg or "#FEFEFE" - --- Create an container box --- local exit_screen_box = wibox.container.background() --- exit_screen_box.bg = exit_screen.bg --- exit_screen_box.shape = gears.shape.rounded_rect --- exit_screen_box.shape_border_radius = 20 - -local exit_screen_grabber -function exit_screen_hide() - awful.keygrabber.stop(exit_screen_grabber) - exit_screen.visible = false -end -function exit_screen_show() - exit_screen_grabber = awful.keygrabber.run(function(_, key, event) - if event == "release" then return end - - if key == 's' then - suspend_command() - -- 'e' for exit - elseif key == 'e' then - exit_command() - elseif key == 'l' then - lock_command() - elseif key == 'p' then - poweroff_command() - elseif key == 'r' then - reboot_command() - elseif key == 'Escape' or key == 'q' or key == 'x' then - exit_screen_hide() - -- else awful.keygrabber.stop(exit_screen_grabber) - end - end) - exit_screen.visible = true -end - -exit_screen:buttons(gears.table.join( - -- Middle click - Hide exit_screen - awful.button({ }, 2, function () - exit_screen_hide() - end), - -- Right click - Hide exit_screen - awful.button({ }, 3, function () - exit_screen_hide() - end) -)) - --- Item placement -exit_screen:setup { - nil, - { - { - nil, - goodbye_widget, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - }, - { - nil, - { - -- { - poweroff, - reboot, - suspend, - exit, - lock, - spacing = dpi(70), - layout = wibox.layout.fixed.horizontal - -- }, - -- widget = exit_screen_box - }, - nil, - expand = "none", - layout = wibox.layout.align.horizontal - -- layout = wibox.layout.fixed.horizontal - }, - layout = wibox.layout.fixed.vertical - }, - nil, - expand = "none", - layout = wibox.layout.align.vertical -} diff --git a/config/awesome/noodle/text_taglist.lua b/config/awesome/noodle/text_taglist.lua deleted file mode 100644 index a8c5e4b..0000000 --- a/config/awesome/noodle/text_taglist.lua +++ /dev/null @@ -1,156 +0,0 @@ -local awful = require("awful") -local gears = require("gears") -local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -local wibox = require("wibox") -local naughty = require("naughty") -local capi = { screen = screen, client = client } - -local helpers = require("helpers") - -local ntags = 10 -local s = awful.screen.focused() -local tag_text = {} - --- Create textboxes and set their buttons -for i = 1, ntags do - table.insert(tag_text, wibox.widget.textbox()) - tag_text[i]:buttons( - gears.table.join( - -- Left click - Tag back and forth - awful.button({ }, 1, function () - local current_tag = s.selected_tag - local clicked_tag = s.tags[i] - if clicked_tag == current_tag then - awful.tag.history.restore() - else - clicked_tag:view_only() - end - -- naughty.notify({ text = tostring(i) }) - end), - -- Right click - Move focused client to tag - awful.button({ }, 3, function () - local clicked_tag = s.tags[i] - if client.focus then - client.focus:move_to_tag(clicked_tag) - end - end) - )) - tag_text[i].font = beautiful.taglist_text_font - -- So that glyphs of different width always take up the same space in the taglist - tag_text[i].forced_width = dpi(25) - tag_text[i].align = "center" - tag_text[i].valign = "center" -end - -local text_taglist = wibox.widget{ - tag_text[1], - tag_text[2], - tag_text[3], - tag_text[4], - tag_text[5], - tag_text[6], - tag_text[7], - tag_text[8], - tag_text[9], - tag_text[10], - layout = wibox.layout.fixed.horizontal -} - -text_taglist:buttons( -gears.table.join( - -- Middle click - Show clients in current tag - awful.button({ }, 2, function () - awful.spawn.with_shell("rofi -show windowcd") - end), - -- Scroll - Cycle through tags - awful.button({ }, 4, function () - awful.tag.viewprev() - end), - awful.button({ }, 5, function () - awful.tag.viewnext() - end) -)) - --- Shorter names (eg. tf = text_focused) to save space -local tf, tu, to, te, tcf, tcu, tco, tce; --- Set fallback values if needed -if beautiful.taglist_text_focused then - tf = beautiful.taglist_text_focused - tu = beautiful.taglist_text_urgent - to = beautiful.taglist_text_occupied - te = beautiful.taglist_text_empty - cf = beautiful.taglist_text_color_focused - cu = beautiful.taglist_text_color_urgent - co = beautiful.taglist_text_color_occupied - ce = beautiful.taglist_text_color_empty -else - -- Fallback values - tf = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"} - tu = tf - to = tf - te = tf - - local ff = beautiful.fg_focus - local fu = beautiful.fg_urgent - local fo = beautiful.fg_normal - local fe = beautiful.fg_minimize - - cf = {ff, ff, ff, ff, ff, ff, ff, ff, ff, ff} - cu = {fu, fu, fu, fu, fu, fu, fu, fu, fu, fu} - co = {fo, fo, fo, fo, fo, fo, fo, fo, fo, fo} - ce = {fe, fe, fe, fe, fe, fe, fe, fe, fe, fe} -end - -local function update_widget() - for i = 1, ntags do - local tag_clients - if s.tags[i] then - tag_clients = s.tags[i]:clients() - end - if s.tags[i] and s.tags[i].selected then - tag_text[i].markup = helpers.colorize_text(tf[i], cf[i]) - elseif s.tags[i] and s.tags[i].urgent then - tag_text[i].markup = helpers.colorize_text(tu[i], cu[i]) - elseif tag_clients and #tag_clients > 0 then - tag_text[i].markup = helpers.colorize_text(to[i], co[i]) - else - tag_text[i].markup = helpers.colorize_text(te[i], ce[i]) - end - end -end - - -client.connect_signal("unmanage", function(c) - update_widget() -end) -client.connect_signal("untagged", function(c) - update_widget() -end) -client.connect_signal("tagged", function(c) - update_widget() -end) -client.connect_signal("screen", function(c) - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::selected", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::hide", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::activated", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::screen", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::index", function () - update_widget() -end) -awful.tag.attached_connect_signal(s, "property::urgent", function () - update_widget() -end) - -return text_taglist diff --git a/config/awesome/noodle/text_weather.lua b/config/awesome/noodle/text_weather.lua index a8eace2..c327f81 100644 --- a/config/awesome/noodle/text_weather.lua +++ b/config/awesome/noodle/text_weather.lua @@ -1,42 +1,49 @@ -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -local naughty = require("naughty") local helpers = require("helpers") --- Configuration --- Get your key and find your city id at https://openweathermap.org/ --- You will need to make an account! -local key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -local city_id = "yyyyyy" -local units = "metric" -local symbol = "°C" --- Don't update too often, because your requests might get blocked for 24 hours -local update_interval = 1200 -- in seconds +local weather_temperature_symbol +if user.weather_units == "metric" then + weather_temperature_symbol = "°C" +elseif user.weather_units == "imperial" then + weather_temperature_symbol = "°F" +end -- Text icons -local sun_icon = "" -local moon_icon = "" -local dcloud_icon = "" -local ncloud_icon = "" -local cloud_icon = "" -local rain_icon = "" -local storm_icon = "" -local snow_icon = "" -local mist_icon = "" -local whatever_icon = "" +-- 'Typicons' font +-- local sun_icon = "" +-- local moon_icon = "" +-- local dcloud_icon = "" +-- local ncloud_icon = "" +-- local cloud_icon = "" +-- local rain_icon = "" +-- local storm_icon = "" +-- local snow_icon = "" +-- local mist_icon = "" +-- local whatever_icon = "" -local weather_text = wibox.widget{ +-- 'Icomoon' font (filled variant) +local sun_icon = "" +local moon_icon = "" +local dcloud_icon = "" +local ncloud_icon = "" +local cloud_icon = "" +local rain_icon = "" +local storm_icon = "" +local snow_icon = "" +local mist_icon = "" +local whatever_icon = "" + +local weather_description = wibox.widget{ + -- text = "Weather unavailable", text = "Loading weather...", -- align = 'center', valign = 'center', + -- font = "sans 14", widget = wibox.widget.textbox } -local weather_icon = wibox.widget.textbox() local weather_icon = wibox.widget{ text = whatever_icon, -- align = 'center', @@ -44,70 +51,61 @@ local weather_icon = wibox.widget{ widget = wibox.widget.textbox } -local weather = wibox.widget{ - weather_icon, - weather_text, - spacing = dpi(8), - layout = wibox.layout.fixed.horizontal +local weather_temperature = wibox.widget{ + text = " ", + -- align = 'center', + valign = 'center', + widget = wibox.widget.textbox } -local function update_widget(icon_code, weather_details) - -- Set icon - if string.find(icon_code, "01d") then - weather_icon.markup = helpers.colorize_text(sun_icon, beautiful.xcolor3) - elseif string.find(icon_code, "01n") then - weather_icon.markup = helpers.colorize_text(moon_icon, beautiful.xcolor4) - elseif string.find(icon_code, "02d") then - weather_icon.markup = helpers.colorize_text(dcloud_icon, beautiful.xcolor3) - elseif string.find(icon_code, "02n") then - weather_icon.markup = helpers.colorize_text(ncloud_icon, beautiful.xcolor6) - elseif string.find(icon_code, "03") or string.find(icon_code, "04") then - weather_icon.markup = helpers.colorize_text(cloud_icon, beautiful.xcolor1) - elseif string.find(icon_code, "09") or string.find(icon_code, "10") then - weather_icon.markup = helpers.colorize_text(rain_icon, beautiful.xcolor4) - elseif string.find(icon_code, "11") then - weather_icon.markup = helpers.colorize_text(storm_icon, beautiful.xcolor1) - elseif string.find(icon_code, "13") then - weather_icon.markup = helpers.colorize_text(snow_icon, beautiful.xcolor6) - elseif string.find(icon_code, "50") or string.find(icon_code, "40") then - weather_icon.markup = helpers.colorize_text(mist_icon, beautiful.xcolor7) - else - weather_icon.markup = helpers.colorize_text(whatever_icon, beautiful.xcolor2) - end +local weather = wibox.widget{ + weather_icon, + weather_description, + weather_temperature, + spacing = dpi(8), + layout = wibox.layout.fixed.horizontal +} - -- Set text -- - -- Replace -0 with 0 degrees - weather_details = string.gsub(weather_details, '%-0', '0') - -- Capitalize first letter of the description - weather_details = weather_details:sub(1,1):upper()..weather_details:sub(2) - weather_text.markup = weather_details -end +awesome.connect_signal("evil::weather", function(temperature, description, icon_code) + local icon + local color + -- Set icon and color depending on icon_code + if string.find(icon_code, "01d") then + icon = sun_icon + color = beautiful.xcolor3 + elseif string.find(icon_code, "01n") then + icon = moon_icon + color = beautiful.xcolor4 + elseif string.find(icon_code, "02d") then + icon = dcloud_icon + color = beautiful.xcolor3 + elseif string.find(icon_code, "02n") then + icon = ncloud_icon + color = beautiful.xcolor6 + elseif string.find(icon_code, "03") or string.find(icon_code, "04") then + icon = cloud_icon + color = beautiful.xcolor1 + elseif string.find(icon_code, "09") or string.find(icon_code, "10") then + icon = rain_icon + color = beautiful.xcolor4 + elseif string.find(icon_code, "11") then + icon = storm_icon + color = beautiful.xcolor1 + elseif string.find(icon_code, "13") then + icon = snow_icon + color = beautiful.xcolor6 + elseif string.find(icon_code, "50") or string.find(icon_code, "40") then + icon = mist_icon + color = beautiful.xcolor5 + else + icon = whatever_icon + color = beautiful.xcolor2 + end -local weather_details_script = [[ - bash -c ' - KEY="]]..key..[[" - CITY="]]..city_id..[[" - UNITS="]]..units..[[" - SYMBOL="]]..symbol..[[" - - weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID=$KEY&id=$CITY&units=$UNITS") - - if [ ! -z "$weather" ]; then - weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) - weather_icon=$(echo "$weather" | jq -r ".weather[].icon" | head -1) - weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1) - - echo "$weather_icon" "$weather_description" "$weather_temp$SYMBOL" - else - echo "... Info unavailable" - fi -']] - -awful.widget.watch(weather_details_script, update_interval, function(widget, stdout) - local icon_code = string.sub(stdout, 1, 3) - local weather_details = string.sub(stdout, 5) - weather_details = string.gsub(weather_details, '^%s*(.-)%s*$', '%1') - update_widget(icon_code, weather_details) + weather_icon.markup = helpers.colorize_text(icon, color) + weather_description.markup = description + weather_temperature.markup = temperature + -- weather_temperature.markup = helpers.colorize_text(tostring(temperature)..weather_temperature_symbol, color) end) return weather diff --git a/config/awesome/noodle/volume_bar.lua b/config/awesome/noodle/volume_bar.lua index cb7b5f5..fb4b3e7 100644 --- a/config/awesome/noodle/volume_bar.lua +++ b/config/awesome/noodle/volume_bar.lua @@ -1,14 +1,6 @@ --- NOTE: --- This widget runs a script in the background --- When awesome restarts, its process will remain alive! --- Don't worry though! The cleanup script that runs in rc.lua takes care of it :) - -local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi -- Set colors local active_color = beautiful.volume_bar_active_color or "#5AA3CC" @@ -21,8 +13,8 @@ local volume_bar = wibox.widget{ value = 50, forced_height = dpi(10), margins = { - top = dpi(8), - bottom = dpi(8), + top = dpi(8), + bottom = dpi(8), }, forced_width = dpi(200), shape = gears.shape.rounded_bar, @@ -34,39 +26,18 @@ local volume_bar = wibox.widget{ widget = wibox.widget.progressbar, } -local function update_widget() - awful.spawn.easy_async({"sh", "-c", "pactl list sinks"}, - function(stdout) - local volume = stdout:match('(%d+)%% /') - local muted = stdout:match('Mute:(%s+)[yes]') - local fill_color - local bg_color - if muted ~= nil then +awesome.connect_signal("evil::volume", function(volume, muted) + local bg_color + if muted then fill_color = muted_color bg_color = muted_background_color - else + else fill_color = active_color bg_color = active_background_color - end - volume_bar.value = tonumber(volume) - volume_bar.color = fill_color - volume_bar.background_color = bg_color end - ) -end - -update_widget() - --- Sleeps until pactl detects an event (volume up/down/toggle mute) -local volume_script = [[ - bash -c ' - pactl subscribe 2> /dev/null | grep --line-buffered "sink #0" - ']] - -awful.spawn.with_line_callback(volume_script, { - stdout = function(line) - update_widget() - end -}) + volume_bar.value = volume + volume_bar.color = fill_color + volume_bar.background_color = bg_color +end) return volume_bar diff --git a/config/awesome/noodle/weather.lua b/config/awesome/noodle/weather.lua index a7092f0..d95acf9 100644 --- a/config/awesome/noodle/weather.lua +++ b/config/awesome/noodle/weather.lua @@ -4,92 +4,57 @@ local wibox = require("wibox") local beautiful = require("beautiful") local naughty = require("naughty") --- Configuration --- Get your key and find your city id at https://openweathermap.org/ --- You will need to make an account! -local key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -local city_id = "yyyyyy" -local units = "metric" -local symbol = "°C" --- Don't update too often, because your requests might get blocked for 24 hours -local update_interval = 1200 -- in seconds +local weather_temperature_symbol +if user.weather_units == "metric" then + weather_temperature_symbol = "°C" +elseif user.weather_units == "imperial" then + weather_temperature_symbol = "°F" +end local weather_text = wibox.widget{ - text = "Loading...", + text = "Weather unavailable", -- align = 'center', valign = 'center', -- font = "sans 14", widget = wibox.widget.textbox } -local weather_icon = wibox.widget.imagebox(beautiful.whatever_icon) +local weather_icon = wibox.widget.imagebox(icons.whatever) weather_icon.resize = true weather_icon.forced_width = 40 weather_icon.forced_height = 40 local weather = wibox.widget{ - weather_icon, - weather_text, - layout = wibox.layout.fixed.horizontal + weather_icon, + weather_text, + layout = wibox.layout.fixed.horizontal } -local function update_widget(icon_code, weather_details) - -- Set icon - if string.find(icon_code, "01d") then - weather_icon.image = beautiful.sun_icon - elseif string.find(icon_code, "01n") then - weather_icon.image = beautiful.star_icon - elseif string.find(icon_code, "02d") then - weather_icon.image = beautiful.dcloud_icon - elseif string.find(icon_code, "02n") then - weather_icon.image = beautiful.ncloud_icon - elseif string.find(icon_code, "03") or string.find(icon_code, "04") then - weather_icon.image = beautiful.cloud_icon - elseif string.find(icon_code, "09") or string.find(icon_code, "10") then - weather_icon.image = beautiful.rain_icon - elseif string.find(icon_code, "11") then - weather_icon.image = beautiful.storm_icon - elseif string.find(icon_code, "13") then - weather_icon.image = beautiful.snow_icon - elseif string.find(icon_code, "50") or string.find(icon_code, "40") then - weather_icon.image = beautiful.mist_icon - else - weather_icon.image = beautiful.whatever_icon - end +awesome.connect_signal("evil::weather", function(temperature, description, icon_code) + -- Set icon + if string.find(icon_code, "01d") then + weather_icon.image = icons.sun + elseif string.find(icon_code, "01n") then + weather_icon.image = icons.star + elseif string.find(icon_code, "02d") then + weather_icon.image = icons.dcloud + elseif string.find(icon_code, "02n") then + weather_icon.image = icons.ncloud + elseif string.find(icon_code, "03") or string.find(icon_code, "04") then + weather_icon.image = icons.cloud + elseif string.find(icon_code, "09") or string.find(icon_code, "10") then + weather_icon.image = icons.rain + elseif string.find(icon_code, "11") then + weather_icon.image = icons.storm + elseif string.find(icon_code, "13") then + weather_icon.image = icons.snow + elseif string.find(icon_code, "50") or string.find(icon_code, "40") then + weather_icon.image = icons.mist + else + weather_icon.image = icons.whatever + end - -- Set text -- - -- Replace -0 with 0 degrees - weather_details = string.gsub(weather_details, '%-0', '0') - -- Capitalize first letter of the description - weather_details = weather_details:sub(1,1):upper()..weather_details:sub(2) - weather_text.markup = weather_details -end - -local weather_details_script = [[ - bash -c ' - KEY="]]..key..[[" - CITY="]]..city_id..[[" - UNITS="]]..units..[[" - SYMBOL="]]..symbol..[[" - - weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID=$KEY&id=$CITY&units=$UNITS") - - if [ ! -z "$weather" ]; then - weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) - weather_icon=$(echo "$weather" | jq -r ".weather[].icon" | head -1) - weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1) - - echo "$weather_icon" "$weather_description" "$weather_temp$SYMBOL" - else - echo "... Info unavailable" - fi -']] - -awful.widget.watch(weather_details_script, update_interval, function(widget, stdout) - local icon_code = string.sub(stdout, 1, 3) - local weather_details = string.sub(stdout, 5) - weather_details = string.gsub(weather_details, '^%s*(.-)%s*$', '%1') - update_widget(icon_code, weather_details) + weather_text.markup = description.." "..tostring(temperature)..weather_temperature_symbol end) return weather diff --git a/config/awesome/notifications.lua b/config/awesome/notifications.lua new file mode 100644 index 0000000..d86327b --- /dev/null +++ b/config/awesome/notifications.lua @@ -0,0 +1,313 @@ +local awful = require("awful") +local wibox = require("wibox") +local gears = require("gears") +local beautiful = require("beautiful") +local naughty = require("naughty") + +local helpers = require("helpers") + +-- Icon size +-- naughty.config.defaults['icon_size'] = beautiful.notification_icon_size + +-- Timeouts +naughty.config.defaults.timeout = 5 +naughty.config.presets.low.timeout = 2 +naughty.config.presets.critical.timeout = 12 + +-- -- Apply theme variables +naughty.config.padding = beautiful.notification_padding +naughty.config.spacing = beautiful.notification_spacing +naughty.config.defaults.margin = beautiful.notification_margin +naughty.config.defaults.border_width = beautiful.notification_border_width + +naughty.config.presets.normal = { + font = beautiful.notification_font, + fg = beautiful.notification_fg, + -- bg = beautiful.notification_bg, + border_width = beautiful.notification_border_width, + margin = beautiful.notification_margin, + position = beautiful.notification_position +} + +naughty.config.presets.low = { + font = beautiful.notification_font, + fg = beautiful.notification_fg, + -- bg = beautiful.notification_bg, + border_width = beautiful.notification_border_width, + margin = beautiful.notification_margin, + position = beautiful.notification_position +} + +naughty.config.presets.ok = naughty.config.presets.low +naughty.config.presets.info = naughty.config.presets.low +naughty.config.presets.warn = naughty.config.presets.normal + +naughty.config.presets.critical = { + font = beautiful.notification_font, + fg = beautiful.notification_crit_fg, + -- bg = beautiful.notification_crit_bg, + border_width = beautiful.notification_border_width, + margin = beautiful.notification_margin, + position = beautiful.notification_position +} + +local rainbow_stripe = wibox.widget { + { + bg = beautiful.xcolor1, + widget = wibox.container.background + }, + { + bg = beautiful.xcolor5, + widget = wibox.container.background + }, + { + bg = beautiful.xcolor4, + widget = wibox.container.background + }, + { + bg = beautiful.xcolor6, + widget = wibox.container.background + }, + { + bg = beautiful.xcolor2, + widget = wibox.container.background + }, + { + bg = beautiful.xcolor3, + widget = wibox.container.background + }, + layout = wibox.layout.flex.horizontal +} + +-- For antialiasing +-- The real background color is set in the widget_template +local notification_bg = beautiful.notification_bg +beautiful.notification_bg = "#00000000" + +-- Template +-- =================================================================== +naughty.connect_signal("request::display", function(n) + + -- Debugging + -- print(n.title) + -- print(n.message) + + -- Custom icon widget + -- It can be used instead of naughty.widget.icon if you prefer your icon to be + -- a textbox instead of an image. However, you have to determine its + -- text/markup value from the notification before creating the + -- naughty.layout.box. + local custom_notification_icon = wibox.widget { + font = "icomoon 14", + -- font = "icomoon bold 40", + align = "center", + valign = "center", + widget = wibox.widget.textbox + } + + + -- Default symbol and color + local symbol = "" + local color = beautiful.xforeground + + -- Try to detect the notification source and change the symbol and/or color ccordingly + if n.title == "Telegram" then + symbol = "" + elseif n.title == "Volume" then + symbol = "" + n.title = "" + elseif n.title == "Screenshot" then + -- symbol = "" + symbol = "" + n.title = "" + elseif n.title == "Performance mode" then + symbol = "" + elseif n.title == "Night mode" then + symbol = "" + elseif n.title:match('Connection') then + symbol = "" + elseif n.title == "Battery status" then + -- symbol = "" + symbol = "" + elseif n.title == "Charger status" then + symbol = "" + n.title = "" + elseif n.title:match('YouTube') then + -- symbol = "" + -- symbol = "" + symbol = "" + end + + naughty.layout.box { + notification = n, + type = "splash", + -- For antialiasing: The real shape is set in widget_template + shape = gears.shape.rectangle, + border_width = beautiful.notification_border_width, + border_color = beautiful.notification_border_color, + -- position = beautiful.notification_position, + -- placement = awful.placement.bottom, + -- offset = beautiful.useless_gap * 2, + widget_template = { + { + { + { + { + -- { + -- naughty.widget.icon, + { + { + { + markup = helpers.colorize_text(symbol, color), + widget = custom_notification_icon, + }, + margins = beautiful.notification_margin, + widget = wibox.container.margin, + }, + bg = beautiful.xcolor0, + widget = wibox.container.background, + }, + { + rainbow_stripe, + forced_height = dpi(4), + -- shape = gears.shape.rounded_bar, + widget = wibox.container.background + }, + { + { + { + { + align = "center", + widget = naughty.widget.title, + }, + { + align = "center", + widget = naughty.widget.message, + }, + -- spacing = dpi(4), + layout = wibox.layout.fixed.vertical, + }, + margins = beautiful.notification_margin, + widget = wibox.container.margin, + }, + bg = notification_bg, + widget = wibox.container.background, + }, + -- naughty.list.actions, + -- spacing = dpi(4), + layout = wibox.layout.fixed.vertical, + -- }, + -- margins = beautiful.notification_margin, + -- widget = wibox.container.margin, + }, + bg = "#00000000", + id = "background_role", + widget = naughty.container.background, + }, + strategy = "min", + width = dpi(160), + widget = wibox.container.constraint, + }, + strategy = "max", + width = beautiful.notification_max_width or dpi(500), + widget = wibox.container.constraint, + }, + -- Anti-aliasing container + bg = notification_bg, + -- bg = "#00000000", + -- This will be the anti-aliased shape of the notification + shape = helpers.rrect(beautiful.notification_border_radius), + widget = wibox.container.background + } + } + +end) + +-- naughty.disconnect_signal("request::display", naughty.default_notification_handler) + +-- Battery notifications +-- =================================================================== + +-- Helper variables +local charger_plugged = true +local battery_full_already_notified = true +local battery_low_already_notified = false +local battery_critical_already_notified = false + +local last_notification +local function send_notification(title, text, icon, timeout) + local args = { + title = title, + text = text, + icon = icon, + timeout = timeout, + } + if last_notification and not last_notification.is_expired then + last_notification.title = args.title + last_notification.text = args.text + last_notification.icon = args.icon + else + last_notification = naughty.notification(args) + end + + last_notification = notification +end + +-- Full / Low / Critical notifications +awesome.connect_signal("evil::battery", function(battery) + local text + local icon + local timeout + if not charger_plugged then + icon = icons.battery + if battery < 6 and not battery_critical_already_notified then + battery_critical_already_notified = true + text = helpers.colorize_text("CRITICAL", beautiful.xcolor9) + timeout = 0 + elseif battery < 16 and not battery_low_already_notified then + battery_low_already_notified = true + text = helpers.colorize_text("Low", beautiful.xcolor11) + timeout = 6 + end + else + icon = icons.battery_charging + if battery > 99 and not battery_full_already_notified then + battery_full_already_notified = true + text = helpers.colorize_text("Full", beautiful.xcolor10) + timeout = 6 + end + end + + -- If text has been initialized, then we need to send a + -- notification + if text then + send_notification("Battery status", text, icon, timeout) + end +end) + +-- Charger notifications +local charger_first_time = true +awesome.connect_signal("evil::charger", function(plugged) + charger_plugged = plugged + local text + local icon + -- TODO if charger is plugged and battery is full, then set + -- battery_full_already_notified to true + if plugged then + battery_critical_already_notified = false + battery_low_already_notified = false + text = "Plugged" + icon = icons.battery_charging + else + battery_full_already_notified = false + text = "Unplugged" + icon = icons.battery + end + + -- Do not send a notification the first time (when AwesomeWM (re)starts) + if charger_first_time then + charger_first_time = false + else + send_notification("Charger status", text, icon, 3) + end +end) diff --git a/config/awesome/rc.lua b/config/awesome/rc.lua index 071be08..9bf93b4 100644 --- a/config/awesome/rc.lua +++ b/config/awesome/rc.lua @@ -1,11 +1,11 @@ --[[ - ___ ___ ___ ___ ___ ___ ___ - /\ \ /\__\ /\ \ /\ \ /\ \ /\__\ /\ \ - /::\ \ /:/\__\ /::\ \ /::\ \ /::\ \ /::L_L_ /::\ \ - /::\:\__\ /:/:/\__\ /::\:\__\ /\:\:\__\ /:/\:\__\ /:/L:\__\ /::\:\__\ - \/\::/ / \::/:/ / \:\:\/ / \:\:\/__/ \:\/:/ / \/_/:/ / \:\:\/ / - /:/ / \::/ / \:\/ / \::/ / \::/ / /:/ / \:\/ / - \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ +___ ___ ___ ___ ___ ___ ___ +/\ \ /\__\ /\ \ /\ \ /\ \ /\__\ /\ \ +/::\ \ /:/\__\ /::\ \ /::\ \ /::\ \ /::L_L_ /::\ \ +/::\:\__\ /:/:/\__\ /::\:\__\ /\:\:\__\ /:/\:\__\ /:/L:\__\ /::\:\__\ +\/\::/ / \::/:/ / \:\:\/ / \:\:\/__/ \:\/:/ / \/_/:/ / \:\:\/ / +/:/ / \::/ / \:\/ / \::/ / \::/ / /:/ / \:\/ / +\/__/ \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ --]] @@ -13,81 +13,73 @@ local theme_collection = { "manta", -- 1 -- "lovelace", -- 2 -- "skyfall", -- 3 -- + "ephemeral", -- 4 -- } -- Change this number to use a different theme -local theme_name = theme_collection[3] +local theme_name = theme_collection[4] ----------------------------------------------- +-- =================================================================== local bar_theme_collection = { "manta", -- 1 -- Taglist, client counter, date, time, layout "lovelace", -- 2 -- Start button, taglist, layout "skyfall", -- 3 -- Weather, taglist, window buttons, pop-up tray + "ephemeral", -- 4 -- Taglist, start button, tasklist, and more buttons } -- Change this number to use a different bar theme -local bar_theme_name = bar_theme_collection[3] +local bar_theme_name = bar_theme_collection[4] --------------------------------------------------------------------------------- +-- =================================================================== + +local icon_theme_collection = { + "linebit", -- 1 -- + "drops", -- 2 -- +} + +-- Change this number to use a different icon theme +local icon_theme_name = icon_theme_collection[2] + +-- =================================================================== -- Jit --pcall(function() jit.on() end) +-- Initialization +-- =================================================================== -- Theme handling library local beautiful = require("beautiful") --- Themes define colours, icons, font and wallpapers. +-- Themes define colours, icons, font and wallpapers local theme_dir = os.getenv("HOME") .. "/.config/awesome/themes/" beautiful.init( theme_dir .. theme_name .. "/theme.lua" ) --beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") +local xresources = require("beautiful.xresources") +-- Make dpi function global +dpi = xresources.apply_dpi --- Standard awesome library local gears = require("gears") local awful = require("awful") -require("awful.autofocus") --- Widget and layout library local wibox = require("wibox") +require("awful.autofocus") + -- Default notification library local naughty = require("naughty") -local menubar = require("menubar") +local menubar = require("menubar") local hotkeys_popup = require("awful.hotkeys_popup").widget require("awful.hotkeys_popup.keys") --- ~~ Noodle Cleanup Script ~~ --- Some of my widgets (mpd, volume) rely on scripts that have to be --- run persistently in the background. --- They sleep until mpd/volume state changes, in an infinite loop. --- As a result when awesome restarts, they keep running in background, along with the new ones that are created after the restart. --- This script cleans up the old processes. -awful.spawn.with_shell("~/.config/awesome/awesome-cleanup.sh") - --- {{{ Initialize stuff - --- Basic (required) -local helpers = require("helpers") -local keys = require("keys") -local titlebars = require("titlebars") - --- Extra features -local bars = require("bar_themes."..bar_theme_name) -local sidebar = require("noodle.sidebar") -local exit_screen = require("noodle.text_exit_screen") --- local exit_screen = require("noodle.exit_screen") -local start_screen = require("noodle.start_screen") --- local tag_notifications = require("noodle.tag_notifications") - --- Third party --- local radical = require("radical") --- }}} - --- {{{ Error handling +-- Error handling +-- =================================================================== -- Check if awesome encountered an error during startup and fell back to -- another config (This code will only ever execute for the fallback config) if awesome.startup_errors then - naughty.notify({ preset = naughty.config.presets.critical, - title = "Oops, there were errors during startup!", - text = awesome.startup_errors }) + naughty.notify({ + preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors + }) end -- Handle runtime errors after startup @@ -104,26 +96,133 @@ do in_error = false end) end --- }}} --- {{{ Variable definitions -terminal = "xst" --- Some terminals do not respect spawn callbacks -floating_terminal = "xst -c fst" -- clients with class "fst" are set to be floating (check awful.rules below) -browser = "firefox" -filemanager = "nemo" -tmux = terminal .. " -e tmux new " -editor = "vim" ---editor = os.getenv("EDITOR") or "nano" -editor_cmd = terminal.." -e "..editor.." " +-- Variable definitions +-- =================================================================== +-- User variables and preferences +user = { + -- >> Default applications << + terminal = "kitty -1", + floating_terminal = "kitty -1", + browser = "firefox", + file_manager = "nemo", + tmux = "kitty -1 -e tmux new", + editor = "kitty -1 --class editor -e vim", + -- editor = "emacs", + + -- >> Search << + -- web_search_cmd = "exo-open https://duckduckgo.com/?q=" + web_search_cmd = "xdg-open https://duckduckgo.com/?q=", + -- web_search_cmd = "exo-open https://www.google.com/search?q=" + + -- >> Music << + music_client = "kitty -1 --class music -e ncmpcpp", + + -- TODO + -- >> Screenshots << + -- Make sure the directory exists! + screenshot_dir = os.getenv("HOME") .. "/Pictures/Screenshots/", + + -- >> Email << + email_client = "kitty -1 --class email -e neomutt", + + -- >> Anti-aliasing << + -- ------------------ + -- Requires a compositor to be running. + -- ------------------ + -- Currently this works if you set your titlebar position to "top", but it + -- is trivial to make it work for any titlebar position. + -- ------------------ + -- This setting only affects clients, but you can "manually" apply + -- anti-aliasing to other wiboxes. Check out the notification + -- widget_template in notifications.lua for an example. + -- ------------------ + -- If anti_aliasing is set to true, the top titlebar corners are + -- antialiased and a small titlebar is also added at the bottom in order to + -- round the bottom corners. + -- If anti_aliasing set to false, the client shape will STILL be rounded, + -- just without anti-aliasing, according to your theme's border_radius + -- variable. + -- ------------------ + anti_aliasing = true, + + -- >> Sidebar << + sidebar_hide_on_mouse_leave = true, + sidebar_show_on_mouse_screen_edge = true, + + -- >> Lock screen << + -- You can set this to whatever you want or leave it empty in + -- order to unlock with just the Enter key. + lock_screen_password = "awesome", + -- lock_screen_password = "", + + -- >> Weather << + -- Get your key and find your city id at + -- https://openweathermap.org/ + -- (You will need to make an account!) + openweathermap_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + openweathermap_city_id = "yyyyyy", + -- Use "metric" for Celcius, "imperial" for Fahrenheit + weather_units = "metric", +} + +-- Features +-- =================================================================== +-- Basic +-- ================ +-- Load icon theme +icons = require("icons") +icons.init(icon_theme_name) +-- Helper functions +-- What would I do without them? +local helpers = require("helpers") +-- Keybinds and mousebinds +local keys = require("keys") +-- Titlebars +-- (most of the anti-aliasing magic happens here) +require("titlebars") +-- Notification settings +require("notifications") + +-- Extras +-- ============== +-- Statusbar(s) +require("bars."..bar_theme_name) + +-- Sidebar +local sidebar = require("noodle.sidebar") + +-- Exit screen +-- local exit_screen = require("noodle.exit_screen") +local exit_screen = require("noodle.exit_screen_v2") + +-- Start screen +-- Have not used/tested it in a long time. +-- Some things might not work properly. +-- local start_screen = require("noodle.start_screen") + +-- Lock screen +-- Make sure to configure your password in the 'user' section above +local lock_screen = require("noodle.lock_screen") + +-- App drawer +local app_drawer = require("noodle.app_drawer") + +-- Daemons +-- Most widgets that display system info depend on evil +require("evil") + +-- =================================================================== +-- =================================================================== -- Get screen geometry screen_width = awful.screen.focused().geometry.width screen_height = awful.screen.focused().geometry.height +-- Layouts +-- =================================================================== -- Table of layouts to cover with awful.layout.inc, order matters. awful.layout.layouts = { - -- I only ever use these 3 awful.layout.suit.tile, awful.layout.suit.floating, awful.layout.suit.max, @@ -141,131 +240,37 @@ awful.layout.layouts = { --awful.layout.suit.corner.sw, --awful.layout.suit.corner.se, } --- }}} --- {{{ Notifications --- TODO: some options are not respected when the notification is created --- through lib-notify. Naughty works as expected. --- Icon size -naughty.config.defaults['icon_size'] = beautiful.notification_icon_size - --- Timeouts -naughty.config.defaults.timeout = 5 -naughty.config.presets.low.timeout = 2 -naughty.config.presets.critical.timeout = 12 - --- Apply theme variables -naughty.config.padding = beautiful.notification_padding -naughty.config.spacing = beautiful.notification_spacing -naughty.config.defaults.margin = beautiful.notification_margin -naughty.config.defaults.border_width = beautiful.notification_border_width - -naughty.config.presets.normal = { - font = beautiful.notification_font, - fg = beautiful.notification_fg, - bg = beautiful.notification_bg, - border_width = beautiful.notification_border_width, - margin = beautiful.notification_margin, - position = beautiful.notification_position -} - -naughty.config.presets.low = { - font = beautiful.notification_font, - fg = beautiful.notification_fg, - bg = beautiful.notification_bg, - border_width = beautiful.notification_border_width, - margin = beautiful.notification_margin, - position = beautiful.notification_position -} - -naughty.config.presets.ok = naughty.config.presets.low -naughty.config.presets.info = naughty.config.presets.low -naughty.config.presets.warn = naughty.config.presets.normal - -naughty.config.presets.critical = { - font = beautiful.notification_font, - fg = beautiful.notification_crit_fg, - bg = beautiful.notification_crit_bg, - border_width = beautiful.notification_border_width, - margin = beautiful.notification_margin, - position = beautiful.notification_position -} - --- }}} - --- {{{ Menu +-- Menu +-- =================================================================== -- Create a launcher widget and a main menu myawesomemenu = { - { "hotkeys", function() return false, hotkeys_popup.show_help end, beautiful.keyboard_icon}, - { "restart", awesome.restart, beautiful.reboot_icon }, - { "quit", function() exit_screen_show() end, beautiful.poweroff_icon} + { "hotkeys", function() return false, hotkeys_popup.show_help end, icons.keyboard}, + { "restart", awesome.restart, icons.reboot }, + { "quit", function() exit_screen_show() end, icons.poweroff} } -mymainmenu = awful.menu({ items = { - { "awesome", myawesomemenu, beautiful.home_icon }, - { "firefox", browser, beautiful.firefox_icon }, - { "terminal", terminal, beautiful.terminal_icon }, - { "files", filemanager, beautiful.files_icon }, - { "search", "rofi -show combi", beautiful.search_icon }, - { "discord", - function () - local matcher = function (c) - return awful.rules.match(c, {class = 'discord'}) - end - awful.client.run_or_raise("discord", matcher) - end, - beautiful.discord_icon }, - { "telegram", - function () - local matcher = function (c) - return awful.rules.match(c, {class = 'TelegramDesktop'}) - end - awful.client.run_or_raise("telegram", matcher) - end, - beautiful.telegram_icon }, - { "mail", - function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Thunderbird'}) - end - awful.client.run_or_raise("thunderbird", matcher) - end, - beautiful.mail_icon }, - { "gimp", - function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Gimp'}) - end - awful.client.run_or_raise("gimp", matcher) - end, - beautiful.gimp_icon }, - { "appearance", "lxappearance", beautiful.appearance_icon }, - { "games", - function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Lutris'}) - end - awful.client.run_or_raise("lutris", matcher) - end, - beautiful.lutris_icon }, - { "steam", - function () - local matcher = function (c) - return awful.rules.match(c, {class = 'Steam'}) - end - awful.client.run_or_raise("steam", matcher) - end, - beautiful.steam_icon }, -} +mymainmenu = awful.menu({ + items = { + { "awesome", myawesomemenu, icons.home }, + { "firefox", user.browser, icons.firefox }, + { "terminal", user.terminal, icons.terminal }, + { "files", user.file_manager, icons.files }, + { "search", "rofi -matching fuzzy -show combi", icons.search }, + } }) -mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, -menu = mymainmenu }) --- Menubar configuration -menubar.utils.terminal = terminal -- Set the terminal for applications that require it --- }}} +mylauncher = awful.widget.launcher({ + image = beautiful.awesome_icon, + menu = mymainmenu +}) +-- Menubar configuration +menubar.utils.terminal = user.terminal -- Set the terminal for applications that require it + +-- Wallpaper +-- =================================================================== local function set_wallpaper(s) -- Wallpaper if beautiful.wallpaper then @@ -275,8 +280,9 @@ local function set_wallpaper(s) wallpaper = wallpaper(s) end - -- Method 1: Built in function - --gears.wallpaper.maximized(wallpaper, s, true) + -- Method 1: Built in wallpaper function + -- gears.wallpaper.fit(wallpaper, s, true) + -- gears.wallpaper.maximized(wallpaper, s, true) -- Method 2: Set theme's wallpaper with feh --awful.spawn.with_shell("feh --bg-fill " .. wallpaper) @@ -289,464 +295,593 @@ end -- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) screen.connect_signal("property::geometry", set_wallpaper) +-- Tags +-- =================================================================== awful.screen.connect_for_each_screen(function(s) -- Wallpaper set_wallpaper(s) -- Each screen has its own tag table. - -- Tag layouts local l = awful.layout.suit -- Alias to save time :) - -- local layouts = { l.max, l.floating, l.max, l.max , l.tile, - -- l.max, l.max, l.max, l.floating, l.tile} - local layouts = { l.max, l.max, l.max, l.tile , l.tile, - l.max, l.max, l.max, l.tile, l.max} + -- Tag layouts + local layouts = { + l.max, + l.max, + l.max, + l.max, + l.tile, + l.max, + l.max, + l.max, + l.tile, + l.max + } -- Tag names local tagnames = beautiful.tagnames or { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" } - - -- Create tags - awful.tag.add(tagnames[1], { - layout = layouts[1], - screen = s, - selected = true, - }) - awful.tag.add(tagnames[2], { - layout = layouts[2], - screen = s, - }) - awful.tag.add(tagnames[3], { - layout = layouts[3], - screen = s, - }) - awful.tag.add(tagnames[4], { - layout = layouts[4], - master_width_factor = 0.6, - screen = s, - }) - awful.tag.add(tagnames[5], { - layout = layouts[5], - master_width_factor = 0.65, - screen = s, - }) - awful.tag.add(tagnames[6], { - layout = layouts[6], - screen = s, - }) - awful.tag.add(tagnames[7], { - layout = layouts[7], - screen = s, - }) - awful.tag.add(tagnames[8], { - layout = layouts[8], - screen = s, - }) - awful.tag.add(tagnames[9], { - layout = layouts[9], - screen = s, - }) - awful.tag.add(tagnames[10], { - layout = layouts[10], - screen = s, - }) - -- Create all tags at once (without seperate configuration for each tag) - -- awful.tag(tagnames, s, layouts) + awful.tag(tagnames, s, layouts) + + -- Create tags with seperate configuration for each tag + -- awful.tag.add(tagnames[1], { + -- layout = layouts[1], + -- screen = s, + -- selected = true, + -- }) + -- awful.tag.add(tagnames[2], { + -- layout = layouts[2], + -- screen = s, + -- }) + -- awful.tag.add(tagnames[3], { + -- layout = layouts[3], + -- screen = s, + -- }) + -- awful.tag.add(tagnames[4], { + -- layout = layouts[4], + -- -- master_width_factor = 0.6, + -- screen = s, + -- }) + -- awful.tag.add(tagnames[5], { + -- layout = layouts[5], + -- -- master_width_factor = 0.65, + -- screen = s, + -- }) + -- awful.tag.add(tagnames[6], { + -- layout = layouts[6], + -- screen = s, + -- }) + -- awful.tag.add(tagnames[7], { + -- layout = layouts[7], + -- screen = s, + -- }) + -- awful.tag.add(tagnames[8], { + -- layout = layouts[8], + -- screen = s, + -- }) + -- awful.tag.add(tagnames[9], { + -- layout = layouts[9], + -- screen = s, + -- }) + -- awful.tag.add(tagnames[10], { + -- layout = layouts[10], + -- screen = s, + -- }) + end) --- {{{ Rules +-- Determines how floating clients should be placed +local client_placement_f = awful.placement.no_overlap + awful.placement.no_offscreen + +-- Rules +-- =================================================================== -- Rules to apply to new clients (through the "manage" signal). awful.rules.rules = { - -- All clients will match this rule. - { rule = { }, - properties = { border_width = beautiful.border_width, + { + -- All clients will match this rule. + rule = { }, + properties = { + border_width = beautiful.border_width, border_color = beautiful.border_normal, focus = awful.client.focus.filter, raise = true, keys = keys.clientkeys, buttons = keys.clientbuttons, - screen = awful.screen.preferred, + -- screen = awful.screen.preferred, + screen = awful.screen.focused, size_hints_honor = false, honor_workarea = true, honor_padding = true, - placement = awful.placement.no_overlap+awful.placement.no_offscreen } + -- placement = awful.placement.no_overlap+awful.placement.no_offscreen }, + callback = function (c) + if not awesome.startup then + -- If the layout is floating or there are no other visible clients + -- Apply placement function + if awful.layout.get(mouse.screen) ~= awful.layout.suit.floating or #mouse.screen.clients == 1 then + awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + else + client_placement_f(c, {honor_padding = true, honor_workarea=true, margins = beautiful.useless_gap * 2}) + end + + -- Hide titlebars if required by the theme + if not beautiful.titlebars_enabled then + decorations.hide(c) + -- awful.titlebar.hide(c) + end + + end + end + }, -- Add titlebars to normal clients and dialogs - { rule_any = { type = { "normal", "dialog" } - }, properties = { titlebars_enabled = true }, + { + rule_any = { type = { "normal", "dialog" } }, + properties = { titlebars_enabled = true } }, -- Floating clients - { rule_any = { - instance = { - "DTA", -- Firefox addon DownThemAll. - "copyq", -- Includes session name in class. + { + rule_any = { + instance = { + "DTA", -- Firefox addon DownThemAll. + "copyq", -- Includes session name in class. + "floating_terminal", + }, + class = { + "mpv", + "Gpick", + "Lxappearance", + "Nm-connection-editor", + "File-roller", + "fst", + }, + name = { + "Event Tester", -- xev + }, + role = { + "AlarmWindow", + "pop-up", + "GtkFileChooserDialog", + "conversation", + }, + type = { + "dialog", + } }, - class = { - "mpv", - "Gpick", - "Lxappearance", - "Nm-connection-editor", - "File-roller", - "fst", - }, - name = { - "Event Tester", -- xev - }, - role = { - "AlarmWindow", -- Thunderbird's calendar. - "pop-up", -- e.g. Google Chrome's (detached) Developer Tools. - }, - type = { - "dialog", - } - }, properties = { floating = true, ontop = false }}, + properties = { floating = true, ontop = false } + }, -- Fullscreen clients - { rule_any = { - class = { - "dota2", - "Terraria.bin.x86", - "dontstarve_steam", + { + rule_any = { + class = { + "dota2", + "Terraria.bin.x86", + "dontstarve_steam", + }, }, - }, properties = { fullscreen = true }}, + properties = { fullscreen = true } + }, -- Centered clients - { rule_any = { - type = { - "dialog", + { + rule_any = { + type = { + "dialog", + }, + class = { + "Steam", + "discord", + }, + role = { + "GtkFileChooserDialog", + "conversation", + } }, - class = { - "Steam", - "discord", - }, - role = { - "GtkFileChooserDialog", - "conversation", - } - }, properties = {}, - callback = function (c) - awful.placement.centered(c,{honor_workarea=true}) - end + properties = {}, + callback = function (c) + awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + end }, -- "Switch to tag" -- These clients make you switch to their tag when they appear - { rule_any = { - class = { - -- "Firefox", - -- "Chromium-browser", - -- "qutebrowser", + { + rule_any = { + class = { + -- "Firefox", + -- "Chromium-browser", + -- "qutebrowser", + }, }, - }, properties = { switchtotag = true }}, + properties = { switchtotag = true } + }, -- Titlebars OFF (explicitly) -- Titlebars of these clients will be hidden regardless of the theme setting - { rule_any = { - class = { - "qutebrowser", - "Sublime_text", - "Subl3", - --"discord", - --"TelegramDesktop", - "Firefox", - "Steam", - "Lutris", - "Chromium", - "Thunderbird", + { + rule_any = { + class = { + "qutebrowser", + "Sublime_text", + "Subl3", + --"discord", + --"TelegramDesktop", + "Firefox", + "Steam", + "Lutris", + "Chromium", + -- "Thunderbird", + }, }, - }, properties = {}, - callback = function (c) - if not beautiful.titlebars_imitate_borders then - awful.titlebar.hide(c) + properties = {}, + callback = function (c) + if not beautiful.titlebars_imitate_borders then + decorations.hide(c) + -- awful.titlebar.hide(c) + end end - end }, - -- Titlebars ON (explicitly) -- Titlebars of these clients will be shown regardless of the theme setting - { rule_any = { - class = { - --"???", + { + rule_any = { + class = { + --"???", + }, + type = { + "dialog", + }, + role = { + "conversation", + } }, - type = { - "dialog", - }, - role = { - "conversation", - } - }, properties = {}, - callback = function (c) - awful.titlebar.show(c) - end + properties = {}, + callback = function (c) + decorations.show(c) + -- awful.titlebar.show(c) + end }, -- Skip taskbar - { rule_any = { - class = { - --"feh", + { + rule_any = { + class = { + --"feh", + }, }, - }, properties = { skip_taskbar = true } + properties = { skip_taskbar = true } }, -- Fixed terminal geometry - { rule_any = { - class = { - "Termite", - "mpvtube", - "kitty", - "st-256color", - "st", - "URxvt", - }, - }, properties = { width = screen_width * 0.45, height = screen_height * 0.5 } + { + rule_any = { + class = { + "Alacritty", + "Termite", + "mpvtube", + "kitty", + "st-256color", + "st", + "URxvt", + }, }, + properties = { width = screen_width * 0.45, height = screen_height * 0.5 } + }, + -- Visualizer + { + rule_any = { class = { "Visualizer" } }, + properties = { + floating = true, + maximized_horizontal = true, + sticky = true, + ontop = false, + skip_taskbar = true, + below = true, + focusable = false, + height = screen_height * 0.40, + opacity = 0.6 + }, + callback = function (c) + decorations.hide(c) + awful.placement.bottom(c) + end + }, + + -- File chooser dialog + { + rule_any = { role = { "GtkFileChooserDialog" } }, + properties = { floating = true, width = screen_width * 0.55, height = screen_height * 0.65 } + }, -- Pavucontrol - { rule_any = { - class = { - "Pavucontrol", - }, - }, properties = { floating = true, width = screen_width * 0.45, height = screen_height * 0.8 } + { + rule_any = { class = { "Pavucontrol" } }, + properties = { floating = true, width = screen_width * 0.45, height = screen_height * 0.8 } }, -- Galculator - { rule_any = { - class = { - "Galculator", - }, - }, - except_any = { - type = { "dialog" } - }, - properties = { floating = true, width = screen_width * 0.2, height = screen_height * 0.4 } + { + rule_any = { class = { "Galculator" } }, + except_any = { type = { "dialog" } }, + properties = { floating = true, width = screen_width * 0.2, height = screen_height * 0.4 } }, -- File managers - { rule_any = { - class = { - "Nemo", - "Thunar" + { + rule_any = { + class = { + "Nemo", + "Thunar" + }, }, - }, - except_any = { - type = { "dialog" } - }, - properties = { floating = true, width = screen_width * 0.55, height = screen_height * 0.75} + except_any = { + type = { "dialog" } + }, + properties = { floating = true, width = screen_width * 0.45, height = screen_height * 0.55} }, -- Rofi configuration -- Needed only if option "-normal-window" is used - { rule_any = { - class = { - "Rofi", - }, - }, properties = { skip_taskbar = true, floating = true, ontop = true, sticky = true }, - callback = function (c) - awful.placement.centered(c,{honor_workarea=true}) - if not beautiful.titlebars_imitate_borders then - awful.titlebar.hide(c) - end - end - }, + -- { + -- rule_any = { + -- class = { + -- "Rofi", + -- }, + -- }, + -- properties = { skip_taskbar = true, floating = true, ontop = true, sticky = true }, + -- callback = function (c) + -- awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + -- if not beautiful.titlebars_imitate_borders then + -- awful.titlebar.hide(c) + -- end + -- end + -- }, -- Screenruler - { rule_any = { - class = { - "Screenruler", - }, - }, properties = { border_width = 0, floating = true, ontop = true }, - callback = function (c) - awful.titlebar.hide(c) - awful.placement.centered(c,{honor_workarea=true}) - end + { + rule_any = { class = { "Screenruler" } }, + properties = { border_width = 0, floating = true, ontop = true }, + callback = function (c) + -- awful.titlebar.hide(c) + decorations.hide(c) + awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + end }, + -- Keepass + { + rule_any = { class = { "keepassxc" } }, + properties = { floating = true, width = screen_width * 0.7, height = screen_height * 0.75}, + }, + + -- Scratchpad - { rule_any = { - class = { - "scratchpad", + { + rule_any = { + instance = { "scratchpad" }, + class = { "scratchpad" }, + icon_name = { "scratchpad_urxvt" }, }, - }, properties = { tag = awful.screen.focused().tags[10], skip_taskbar = false, floating = true, ontop = false, minimized = true, sticky = false, width = screen_width * 0.7, height = screen_height * 0.75}, - callback = function (c) - awful.placement.centered(c,{honor_workarea=true}) - gears.timer.delayed_call(function() - c.urgent = false - end) - end + properties = { + skip_taskbar = false, + floating = true, + ontop = false, + minimized = true, + sticky = false, + width = screen_width * 0.7, + height = screen_height * 0.75 + }, + callback = function (c) + awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + gears.timer.delayed_call(function() + c.urgent = false + end) + end }, - -- Music clients - { rule_any = { - class = { - "music", + -- Music clients (usually a terminal running ncmpcpp) + { + rule_any = { + class = { + "music", + }, + instance = { + "music", + }, + name = { + "Music Terminal", + }, }, - name = { - "Music Terminal", + properties = { + floating = true, + width = screen_width * 0.35, + height = screen_height * 0.55 }, - }, properties = { floating = true, width = screen_width * 0.3, height = screen_height * 0.7}, - -- callback = function (c) - -- awful.placement.centered(c,{honor_workarea=true}) - -- end }, -- Image viewers - { rule_any = { - class = { - "feh", - "Sxiv", + { + rule_any = { + class = { + "feh", + "Sxiv", + }, }, - -- }, properties = { floating = true }, - }, properties = { floating = true, width = screen_width * 0.7, height = screen_height * 0.75}, - callback = function (c) - awful.placement.centered(c,{honor_workarea=true}) - end + properties = { + floating = true, + width = screen_width * 0.7, + height = screen_height * 0.75 + }, + callback = function (c) + awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + end }, -- Steam guard - { rule = { name = "Steam Guard - Computer Authorization Required" }, - properties = { floating = true }, - callback = function (c) - -- gears.timer.delayed_call(function() - -- awful.placement.centered(c,{honor_workarea=true}) - -- end) - end + { + rule = { name = "Steam Guard - Computer Authorization Required" }, + properties = { floating = true }, + -- callback = function (c) + -- gears.timer.delayed_call(function() + -- awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + -- end) + -- end }, --------------------------------------------- -- Start application on specific workspace -- --------------------------------------------- -- Browsing - { rule_any = { - class = { - "Firefox", - "qutebrowser", + { + rule_any = { + class = { + "Firefox", + "qutebrowser", + }, }, except_any = { role = { "GtkFileChooserDialog" }, type = { "dialog" } }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[1] } }, + properties = { screen = 1, tag = awful.screen.focused().tags[1] }, + }, -- Games - { rule_any = { - class = { - "dota2", - "Terraria.bin.x86", - "dontstarve_steam", - "Wine", + { + rule_any = { + class = { + "dota2", + "Terraria.bin.x86", + "dontstarve_steam", + "Wine", + }, }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[2] } }, + properties = { screen = 1, tag = awful.screen.focused().tags[2] } + }, -- Chatting - { rule_any = { - class = { - "Chromium", - "discord", - "TelegramDesktop", - "Signal", - "TeamSpeak 3", + { + rule_any = { + class = { + "Chromium", + "discord", + "TelegramDesktop", + "Signal", + "Slack", + "TeamSpeak 3", + }, }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[3], floating = false } }, + properties = { screen = 1, tag = awful.screen.focused().tags[3], floating = false } + }, -- Editing - -- { rule_any = { - -- class = { - -- "Emacs", - -- "Subl3", - -- }, - -- }, properties = { screen = 1, tag = awful.screen.focused().tags[4] } }, + { + rule_any = { + class = { + "editor", + -- "Emacs", + -- "Subl3", + }, + }, + properties = { screen = 1, tag = awful.screen.focused().tags[4] } + }, -- Photo editing - { rule_any = { - class = { - "Gimp", - "Inkscape", + { + rule_any = { + class = { + "Gimp", + "Inkscape", + }, }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[6] } }, + properties = { screen = 1, tag = awful.screen.focused().tags[6] } + }, -- Mail - { rule_any = { - class = { - "Thunderbird", + { + rule_any = { + class = { + "email", + }, + instance = { + "email", + }, }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[7] } }, + properties = { screen = 1, tag = awful.screen.focused().tags[7] } + }, - -- Gaming clients - { rule_any = { - class = { - "Steam", - "battle.net.exe", - "Lutris", + -- Game clients/launchers + { + rule_any = { + class = { + "Steam", + "battle.net.exe", + "Lutris", + }, }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[8] } }, + properties = { screen = 1, tag = awful.screen.focused().tags[8] } + }, -- Media - { rule_any = { - class = { - "mpvtube", - -- "mpv", + { + rule_any = { + class = { + "mpvtube", + -- "mpv", + }, + icon_name = { + "mpvtube", + }, }, - }, properties = { screen = 1, tag = awful.screen.focused().tags[9] }, - callback = function (c) - -- awful.placement.centered(c,{honor_workarea=true}) - gears.timer.delayed_call(function() - c.urgent = false - end) - end -}, - --- Miscellaneous -{ rule_any = { - class = { - "Deluge", - "VirtualBox Manager", + properties = { screen = 1, floating = false, tag = awful.screen.focused().tags[9] }, + callback = function (c) + -- awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) + gears.timer.delayed_call(function() + c.urgent = false + end) + end + }, + + -- Miscellaneous + -- All clients that I want out of my way when they are running + { + rule_any = { + class = { + "Transmission", + "Deluge", + "VirtualBox Manager", + }, + }, + properties = { screen = 1, tag = awful.screen.focused().tags[10] } }, -}, properties = { screen = 1, tag = awful.screen.focused().tags[10] } }, } --- }}} +-- (Rules end here) .................................................. +-- =================================================================== --- {{{ Signals +-- Signals +-- =================================================================== -- Signal function to execute when a new client appears. client.connect_signal("manage", function (c) -- Set every new window as a slave, -- i.e. put it at the end of others instead of setting it master. if not awesome.startup then awful.client.setslave(c) end - if awesome.startup and - not c.size_hints.user_position - and not c.size_hints.program_position then - -- Prevent clients from being unreachable after screen count changes. - awful.placement.no_offscreen(c) - end + -- if awesome.startup + -- and not c.size_hints.user_position + -- and not c.size_hints.program_position then + -- -- Prevent clients from being unreachable after screen count changes. + -- awful.placement.no_offscreen(c) + -- awful.placement.no_overlap(c) + -- end end) - --- Hide titlebars if required by the theme -client.connect_signal("manage", function (c) - if not beautiful.titlebars_enabled then - awful.titlebar.hide(c) - end -end) - --- If the layout is not floating, every floating client that appears is centered --- If the layout is floating, and there is no other client visible, center it -client.connect_signal("manage", function (c) - if not awesome.startup then - if awful.layout.get(mouse.screen) ~= awful.layout.suit.floating then - awful.placement.centered(c,{honor_workarea=true}) - else if #mouse.screen.clients == 1 then - awful.placement.centered(c,{honor_workarea=true}) - end - end - end -end) - -- Enable sloppy focus, so that focus follows mouse. +-- Can be toggled with a keybind (check keys.lua) --client.connect_signal("mouse::enter", function(c) -- if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier -- and awful.client.focus.filter(c) then @@ -754,26 +889,41 @@ end) -- end --end) --- Rounded corners -if beautiful.border_radius ~= 0 then - client.connect_signal("manage", function (c, startup) - if not c.fullscreen then - c.shape = helpers.rrect(beautiful.border_radius) - end - end) +-- Apply rounded corners to clients +-- (If antialiasing is enabled, the rounded corners are applied in +-- titlebars.lua) +if not user.anti_aliasing then + if beautiful.border_radius ~= 0 then + client.connect_signal("manage", function (c, startup) + if not c.fullscreen and not c.maximized then + c.shape = helpers.rrect(beautiful.border_radius) + end + end) - -- Fullscreen & maximised clients should not have rounded corners - local function no_round_corners (c) - if c.fullscreen or c.maximized then - c.shape = helpers.rect() - else - c.shape = helpers.rrect(beautiful.border_radius) + -- Fullscreen and maximized clients should not have rounded corners + local function no_round_corners (c) + if c.fullscreen or c.maximized then + c.shape = gears.shape.rectangle + else + c.shape = helpers.rrect(beautiful.border_radius) + end end + + client.connect_signal("property::fullscreen", no_round_corners) + client.connect_signal("property::maximized", no_round_corners) + + beautiful.snap_shape = helpers.rrect(beautiful.border_radius * 2) + else + beautiful.snap_shape = gears.shape.rectangle end +end - client.connect_signal("property::fullscreen", no_round_corners) - client.connect_signal("property::maximized", no_round_corners) +if beautiful.taglist_item_roundness ~= 0 then + beautiful.taglist_shape = helpers.rrect(beautiful.taglist_item_roundness) +end +if beautiful.notification_border_radius ~= 0 then + beautiful.notification_shape = helpers.rrect(beautiful.notification_border_radius) end -- When a client starts up in fullscreen, resize it to cover the fullscreen a short moment later @@ -789,134 +939,77 @@ client.connect_signal("manage", function(c) end end) --- Center client when floating property changes +-- Center client when floating property changes (a-la i3) --client.connect_signal("property::floating", function(c) ---awful.placement.centered(c,{honor_workarea=true}) +--awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) --end) --- Apply shapes --- beautiful.notification_shape = helpers.infobubble(beautiful.notification_border_radius) -beautiful.notification_shape = helpers.rrect(beautiful.notification_border_radius) -beautiful.snap_shape = helpers.rrect(beautiful.border_radius * 2) -beautiful.taglist_shape = helpers.rrect(beautiful.taglist_item_roundness) - -client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +if beautiful.border_width > 0 then + client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) + client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +end -- Set mouse resize mode (live or after) awful.mouse.resize.set_mode("live") --- Floating: restore geometry -tag.connect_signal('property::layout', -function(t) +-- Restore geometry for floating clients +-- (for example after swapping from tiling mode to floating mode) +-- ============================================================== +tag.connect_signal('property::layout', function(t) for k, c in ipairs(t:clients()) do if awful.layout.get(mouse.screen) == awful.layout.suit.floating then - -- Geometry x = 0 and y = 0 most probably means that the - -- clients have been spawned in a non floating layout, and thus - -- they don't have their floating_geometry set properly. + -- Geometry x = 0 and y = 0 most probably means that the client's + -- floating_geometry has not been set yet. -- If that is the case, don't change their geometry + -- TODO does this affect clients that are really placed in 0,0 ? local cgeo = awful.client.property.get(c, 'floating_geometry') - if cgeo ~= nil then - if not (cgeo.x == 0 and cgeo.y == 0) then - c:geometry(awful.client.property.get(c, 'floating_geometry')) - end + if cgeo and not (cgeo.x == 0 and cgeo.y == 0) then + c:geometry(awful.client.property.get(c, 'floating_geometry')) end --c:geometry(awful.client.property.get(c, 'floating_geometry')) end end -end -) +end) -client.connect_signal('manage', -function(c) +client.connect_signal('manage', function(c) if awful.layout.get(mouse.screen) == awful.layout.suit.floating then awful.client.property.set(c, 'floating_geometry', c:geometry()) end -end -) +end) -client.connect_signal('property::geometry', -function(c) +client.connect_signal('property::geometry', function(c) if awful.layout.get(mouse.screen) == awful.layout.suit.floating then awful.client.property.set(c, 'floating_geometry', c:geometry()) end -end -) +end) +-- ============================================================== +-- ============================================================== -- Make rofi able to unminimize minimized clients -client.connect_signal("request::activate", -function(c, context, hints) +client.connect_signal("request::activate", function(c, context, hints) if not awesome.startup then if c.minimized then c.minimized = false end awful.ewmh.activate(c, context, hints) end -end -) +end) -- Disconnect the client ability to request different size and position -- client.disconnect_signal("request::geometry", awful.ewmh.client_geometry_requests) --- Battery notifications --- The signals are sent by a udev rule. -local last_battery_notification_id -awesome.connect_signal( - "charger_plugged", function(c) - notification = naughty.notify({ - title = "Juice status:", - text = "Your battery is charging!", - icon = beautiful.battery_charging_icon, - timeout = 3, - replaces_id = last_battery_notification_id - }) - last_battery_notification_id = notification.id -end) -awesome.connect_signal( - "charger_unplugged", function(c) - notification = naughty.notify({ - title = "Juice status:", - text = "Your battery is discharging!", - icon = beautiful.battery_icon, - timeout = 3, - replaces_id = last_battery_notification_id - }) - last_battery_notification_id = notification.id -end) -awesome.connect_signal( - "battery_full", function(c) - notification = naughty.notify({ - title = "Juice status:", - text = "Full! Your tank is topped up!", - icon = beautiful.battery_icon, - timeout = 3, - replaces_id = last_battery_notification_id - }) - last_battery_notification_id = notification.id -end) -awesome.connect_signal( - "battery_low", function(c) - notification = naughty.notify({ - title = "Juice status:", - text = "Low. Running out of juice soon!", - icon = beautiful.battery_icon, - timeout = 5, - replaces_id = last_battery_notification_id - }) - last_battery_notification_id = notification.id -end) -awesome.connect_signal( - "battery_critical", function(c) - notification = naughty.notify({ - title = "Juice status:", - text = "Critical! Where is the cable?!", - icon = beautiful.battery_icon, - timeout = 0, - replaces_id = last_battery_notification_id - }) - last_battery_notification_id = notification.id -end) - -- Startup applications +-- Runs your autostart.sh script, which should include all the commands you +-- would like to run every time AwesomeWM restarts +-- =================================================================== awful.spawn.with_shell( os.getenv("HOME") .. "/.config/awesome/autostart.sh") --- }}} + +-- Garbage collection +-- Enable for lower memory consumption +-- =================================================================== + +-- collectgarbage("setpause", 160) +-- collectgarbage("setstepmul", 400) + +-- collectgarbage("setpause", 110) +-- collectgarbage("setstepmul", 1000) diff --git a/config/awesome/themes/ephemeral/layout/floating.png b/config/awesome/themes/ephemeral/layout/floating.png new file mode 100644 index 0000000..6f535f4 Binary files /dev/null and b/config/awesome/themes/ephemeral/layout/floating.png differ diff --git a/config/awesome/themes/ephemeral/layout/max.png b/config/awesome/themes/ephemeral/layout/max.png new file mode 100644 index 0000000..abe112e Binary files /dev/null and b/config/awesome/themes/ephemeral/layout/max.png differ diff --git a/config/awesome/themes/ephemeral/layout/tile.png b/config/awesome/themes/ephemeral/layout/tile.png new file mode 100644 index 0000000..254e8ae Binary files /dev/null and b/config/awesome/themes/ephemeral/layout/tile.png differ diff --git a/config/awesome/themes/ephemeral/theme.lua b/config/awesome/themes/ephemeral/theme.lua new file mode 100644 index 0000000..0db356a --- /dev/null +++ b/config/awesome/themes/ephemeral/theme.lua @@ -0,0 +1,419 @@ +local wibox = require("wibox") +local gears = require("gears") +local theme_name = "ephemeral" +local theme_assets = require("beautiful.theme_assets") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi +local gfs = require("gears.filesystem") +local themes_path = gfs.get_themes_dir() +local layout_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/layout/" +local titlebar_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/titlebar/" +local taglist_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/taglist/" +local tip = titlebar_icon_path --alias to save time/space +local xrdb = xresources.get_current_theme() +-- local theme = dofile(themes_path.."default/theme.lua") +local theme = {} + +-- theme.tip = titlebar_icon_path -- NOT local so that scripts can access it + +-- This is used to make it easier to align the panels in specific monitor positions +local awful = require("awful") +local screen_width = awful.screen.focused().geometry.width +local screen_height = awful.screen.focused().geometry.height + +-- Set theme wallpaper. +-- It won't change anything if you are using feh to set the wallpaper like I do. +theme.wallpaper = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/wallpaper.jpg" +-- A blurred version of your wallpaper would be nice +theme.wallpaper_lock = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/wallpaper_lock.jpg" + +-- Set the theme font. This is the font that will be used by default in menus, bars, titlebars etc. +-- theme.font = "sans 11" +theme.font = "monospace 11" + +-- Get colors from .Xresources and set fallback colors +theme.xbackground = xrdb.background or "#1D1F28" +theme.xforeground = xrdb.foreground or "#FDFDFD" +theme.xcolor0 = xrdb.color0 or "#282A36" +theme.xcolor1 = xrdb.color1 or "#F37F97" +theme.xcolor2 = xrdb.color2 or "#5ADECD" +theme.xcolor3 = xrdb.color3 or "#F2A272" +theme.xcolor4 = xrdb.color4 or "#8897F4" +theme.xcolor5 = xrdb.color5 or "#C574DD" +theme.xcolor6 = xrdb.color6 or "#79E6F3" +theme.xcolor7 = xrdb.color7 or "#FDFDFD" +theme.xcolor8 = xrdb.color8 or "#414458" +theme.xcolor9 = xrdb.color9 or "#FF4971" +theme.xcolor10 = xrdb.color10 or "#18E3C8" +theme.xcolor11 = xrdb.color11 or "#FF8037" +theme.xcolor12 = xrdb.color12 or "#556FFF" +theme.xcolor13 = xrdb.color13 or "#B043D1" +theme.xcolor14 = xrdb.color14 or "#3FDCEE" +theme.xcolor15 = xrdb.color15 or "#BEBEC1" + +-- This is how to get other .Xresources values (beyond colors 0-15, or custom variables) +-- local cool_color = awesome.xrdb_get_value("", "color16") + +theme.bg_dark = theme.xbackground +theme.bg_normal = theme.xcolor0 +theme.bg_focus = theme.xcolor8 +theme.bg_urgent = theme.xcolor8 +theme.bg_minimize = theme.xcolor8 +theme.bg_systray = theme.xcolor8 + +theme.fg_normal = theme.xcolor8 +theme.fg_focus = theme.xcolor4 +theme.fg_urgent = theme.xcolor3 +theme.fg_minimize = theme.xcolor8 + +-- Gaps +theme.useless_gap = dpi(5) +-- This could be used to manually determine how far away from the +-- screen edge the bars / notifications should be. +theme.screen_margin = dpi(5) + +-- Borders +theme.border_width = dpi(0) +-- theme.border_color = theme.xcolor0 +theme.border_normal = theme.xbackground +theme.border_focus = theme.xbackground +-- Rounded corners +theme.border_radius = dpi(6) + +-- Titlebars +-- (Titlebar items can be customized in titlebars.lua) +theme.titlebars_enabled = true +theme.titlebar_size = dpi(32) +theme.titlebar_title_enabled = false +theme.titlebar_font = "sans bold 9" +-- Window title alignment: left, right, center +theme.titlebar_title_align = "center" +-- Titlebar position: top, bottom, left, right +theme.titlebar_position = "top" +-- Use 4 titlebars around the window to imitate borders +theme.titlebars_imitate_borders = false +theme.titlebar_bg = theme.xcolor0 +-- theme.titlebar_bg = theme.xbackground +-- theme.titlebar_bg_focus = theme.xcolor12 +-- theme.titlebar_bg_normal = theme.xcolor8 +theme.titlebar_fg_focus = theme.xbackground +theme.titlebar_fg_normal = theme.xcolor8 +--theme.titlebar_fg = theme.xcolor7 + +-- Notifications +-- ============================ +-- Note: Some of these options are ignored by my custom +-- notification widget_template +-- ============================ +-- Position: bottom_left, bottom_right, bottom_middle, +-- top_left, top_right, top_middle +theme.notification_position = "top_right" +theme.notification_border_width = dpi(0) +theme.notification_border_radius = theme.border_radius +theme.notification_border_color = theme.xcolor10 +theme.notification_bg = theme.xbackground +-- theme.notification_bg = theme.xcolor8 +theme.notification_fg = theme.xforeground +theme.notification_crit_bg = theme.xbackground +theme.notification_crit_fg = theme.xcolor1 +theme.notification_icon_size = dpi(60) +-- theme.notification_height = dpi(80) +-- theme.notification_width = dpi(300) +theme.notification_margin = dpi(16) +theme.notification_opacity = 1 +theme.notification_font = "sans 12" +theme.notification_padding = theme.screen_margin * 2 +theme.notification_spacing = theme.screen_margin * 2 + +-- Edge snap +theme.snap_shape = gears.shape.rectangle +theme.snap_bg = theme.xforeground +theme.snap_border_width = dpi(3) + +-- Tag names +theme.tagnames = { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", +} + +-- Widget separator +theme.separator_text = "|" +--theme.separator_text = " :: " +--theme.separator_text = " • " +-- theme.separator_text = " •• " +theme.separator_fg = theme.xcolor8 + +-- Wibar(s) +-- (Bar items can be customized in bar_themes/.lua) +-- Keep in mind that these settings could be ignored by the bar theme +theme.wibar_position = "bottom" +theme.wibar_height = dpi(32) +theme.wibar_fg = theme.xcolor7 +theme.wibar_bg = theme.xbackground +--theme.wibar_opacity = 0.7 +theme.wibar_border_color = theme.xcolor0 +theme.wibar_border_width = dpi(0) +theme.wibar_border_radius = dpi(0) +--theme.wibar_width = screen_width - theme.screen_margin * 4 -theme.wibar_border_width * 2 +theme.wibar_width = dpi(700) +--theme.wibar_x = screen_width / 2 - theme.wibar_width - theme.screen_margin * 2 +--theme.wibar_x = theme.screen_margin * 2 +--theme.wibar_x = screen_width - theme.wibar_width - theme.wibar_border_width * 2 - theme.screen_margin * 2 +--theme.wibar_y = theme.screen_margin * 2 + +theme.prefix_fg = theme.xcolor8 + + --There are other variable sets + --overriding the default one when + --defined, the sets are: + --taglist_[bg|fg]_[focus|urgent|occupied|empty|volatile] + --tasklist_[bg|fg]_[focus|urgent] + --titlebar_[bg|fg]_[normal|focus] + --tooltip_[font|opacity|fg_color|bg_color|border_width|border_color] + --mouse_finder_[color|timeout|animate_timeout|radius|factor] + --prompt_[fg|bg|fg_cursor|bg_cursor|font] + --hotkeys_[bg|fg|border_width|border_color|shape|opacity|modifiers_fg|label_bg|label_fg|group_margin|font|description_font] + --Example: +--theme.taglist_bg_focus = "#ff0000" + + --Tasklist +theme.tasklist_font = "sans medium 8" +theme.tasklist_disable_icon = true +theme.tasklist_plain_task_name = true +theme.tasklist_bg_focus = theme.xcolor0 +theme.tasklist_fg_focus = theme.xforeground +theme.tasklist_bg_normal = "#00000000" +theme.tasklist_fg_normal = theme.xforeground.."77" +theme.tasklist_bg_minimize = "#00000000" +theme.tasklist_fg_minimize = theme.xcolor8 +-- theme.tasklist_font_minimized = "sans italic 8" +theme.tasklist_bg_urgent = theme.xbackground +theme.tasklist_fg_urgent = theme.xcolor3 +theme.tasklist_spacing = dpi(0) +theme.tasklist_align = "center" + +-- Sidebar +-- (Sidebar items can be customized in sidebar.lua) +theme.sidebar_bg = theme.xbackground +theme.sidebar_fg = theme.xcolor7 +theme.sidebar_opacity = 1 +theme.sidebar_position = "left" -- left or right +theme.sidebar_width = dpi(300) +theme.sidebar_height = screen_height +theme.sidebar_x = 0 +theme.sidebar_y = 0 +theme.sidebar_border_radius = 0 +-- theme.sidebar_border_radius = theme.border_radius + +-- Exit screen +theme.exit_screen_bg = theme.xcolor0 .. "CC" +theme.exit_screen_fg = theme.xcolor7 +theme.exit_screen_font = "sans 20" +theme.exit_screen_icon_size = dpi(180) + +-- Lock screen +theme.lock_screen_bg = theme.xcolor0 .. "CC" +theme.lock_screen_fg = theme.xcolor7 + +-- Icon taglist +local ntags = 10 +theme.taglist_icons_empty = {} +theme.taglist_icons_occupied = {} +theme.taglist_icons_focused = {} +theme.taglist_icons_urgent = {} +-- table.insert(tag_icons, tag) +for i = 1, ntags do + theme.taglist_icons_empty[i] = taglist_icon_path .. tostring(i) .. "_empty.png" + theme.taglist_icons_occupied[i] = taglist_icon_path .. tostring(i) .. "_occupied.png" + theme.taglist_icons_focused[i] = taglist_icon_path .. tostring(i) .. "_focused.png" + theme.taglist_icons_urgent[i] = taglist_icon_path .. tostring(i) .. "_urgent.png" +end + +-- Noodle Text Taglist +theme.taglist_text_font = "icomoon 15" +-- theme.taglist_text_font = "sans bold 15" +theme.taglist_text_empty = {"","","","","","","","","",""} +theme.taglist_text_occupied = {"","","","","","","","","",""} +theme.taglist_text_focused = {"","","","","","","","","",""} +theme.taglist_text_urgent = {"+","+","+","+","+","+","+","+","+","+"} + + +theme.taglist_text_color_empty = { theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60", theme.xforeground.."60" } + +theme.taglist_text_color_occupied = { theme.xcolor1, theme.xcolor2, theme.xcolor3, theme.xcolor4, theme.xcolor5, theme.xcolor6, theme.xcolor1, theme.xcolor2, theme.xcolor3, theme.xcolor4 } +theme.taglist_text_color_focused = { theme.xcolor1, theme.xcolor2, theme.xcolor3, theme.xcolor4, theme.xcolor5, theme.xcolor6, theme.xcolor1, theme.xcolor2, theme.xcolor3, theme.xcolor4 } +theme.taglist_text_color_urgent = { theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7, theme.xcolor7 } + +-- Prompt +theme.prompt_fg = theme.xcolor12 + +-- Text Taglist (default) +theme.taglist_font = "monospace bold 9" +theme.taglist_bg_focus = theme.xbackground +theme.taglist_fg_focus = theme.xcolor12 +theme.taglist_bg_occupied = theme.xbackground +theme.taglist_fg_occupied = theme.xcolor8 +theme.taglist_bg_empty = theme.xbackground +theme.taglist_fg_empty = theme.xbackground +theme.taglist_bg_urgent = theme.xbackground +theme.taglist_fg_urgent = theme.xcolor3 +theme.taglist_disable_icon = true +theme.taglist_spacing = dpi(0) +theme.taglist_item_roundness = dpi(25) +-- Generate taglist squares: +local taglist_square_size = dpi(0) +theme.taglist_squares_sel = theme_assets.taglist_squares_sel( + taglist_square_size, theme.fg_focus +) +theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( + taglist_square_size, theme.fg_normal +) + +-- Variables set for theming the menu: +-- theme.menu_submenu_icon = icons.submenu +theme.menu_height = dpi(35) +theme.menu_width = dpi(180) +theme.menu_bg_normal = theme.xcolor0 +theme.menu_fg_normal= theme.xcolor7 +theme.menu_bg_focus = theme.xcolor8 .. "55" +theme.menu_fg_focus= theme.xcolor7 +theme.menu_border_width = dpi(0) +theme.menu_border_color = theme.xcolor0 + +-- You can add as many variables as +-- you wish and access them by using +-- beautiful.variable in your rc.lua +--theme.bg_widget = "#cc0000" + +-- Titlebar buttons +-- Define the images to load +theme.titlebar_close_button_normal = tip .. "close_normal.svg" +theme.titlebar_close_button_focus = tip .. "close_focus.svg" +theme.titlebar_minimize_button_normal = tip .. "minimize_normal.svg" +theme.titlebar_minimize_button_focus = tip .. "minimize_focus.svg" +theme.titlebar_ontop_button_normal_inactive = tip .. "ontop_normal_inactive.svg" +theme.titlebar_ontop_button_focus_inactive = tip .. "ontop_focus_inactive.svg" +theme.titlebar_ontop_button_normal_active = tip .. "ontop_normal_active.svg" +theme.titlebar_ontop_button_focus_active = tip .. "ontop_focus_active.svg" +theme.titlebar_sticky_button_normal_inactive = tip .. "sticky_normal_inactive.svg" +theme.titlebar_sticky_button_focus_inactive = tip .. "sticky_focus_inactive.svg" +theme.titlebar_sticky_button_normal_active = tip .. "sticky_normal_active.svg" +theme.titlebar_sticky_button_focus_active = tip .. "sticky_focus_active.svg" +theme.titlebar_floating_button_normal_inactive = tip .. "floating_normal_inactive.svg" +theme.titlebar_floating_button_focus_inactive = tip .. "floating_focus_inactive.svg" +theme.titlebar_floating_button_normal_active = tip .. "floating_normal_active.svg" +theme.titlebar_floating_button_focus_active = tip .. "floating_focus_active.svg" +theme.titlebar_maximized_button_normal_inactive = tip .. "maximized_normal_inactive.svg" +theme.titlebar_maximized_button_focus_inactive = tip .. "maximized_focus_inactive.svg" +theme.titlebar_maximized_button_normal_active = tip .. "maximized_normal_active.svg" +theme.titlebar_maximized_button_focus_active = tip .. "maximized_focus_active.svg" +-- (hover) +theme.titlebar_close_button_normal_hover = tip .. "close_normal_hover.svg" +theme.titlebar_close_button_focus_hover = tip .. "close_focus_hover.svg" +theme.titlebar_minimize_button_normal_hover = tip .. "minimize_normal_hover.svg" +theme.titlebar_minimize_button_focus_hover = tip .. "minimize_focus_hover.svg" +theme.titlebar_ontop_button_normal_inactive_hover = tip .. "ontop_normal_inactive_hover.svg" +theme.titlebar_ontop_button_focus_inactive_hover = tip .. "ontop_focus_inactive_hover.svg" +theme.titlebar_ontop_button_normal_active_hover = tip .. "ontop_normal_active_hover.svg" +theme.titlebar_ontop_button_focus_active_hover = tip .. "ontop_focus_active_hover.svg" +theme.titlebar_sticky_button_normal_inactive_hover = tip .. "sticky_normal_inactive_hover.svg" +theme.titlebar_sticky_button_focus_inactive_hover = tip .. "sticky_focus_inactive_hover.svg" +theme.titlebar_sticky_button_normal_active_hover = tip .. "sticky_normal_active_hover.svg" +theme.titlebar_sticky_button_focus_active_hover = tip .. "sticky_focus_active_hover.svg" +theme.titlebar_floating_button_normal_inactive_hover = tip .. "floating_normal_inactive_hover.svg" +theme.titlebar_floating_button_focus_inactive_hover = tip .. "floating_focus_inactive_hover.svg" +theme.titlebar_floating_button_normal_active_hover = tip .. "floating_normal_active_hover.svg" +theme.titlebar_floating_button_focus_active_hover = tip .. "floating_focus_active_hover.svg" +theme.titlebar_maximized_button_normal_inactive_hover = tip .. "maximized_normal_inactive_hover.svg" +theme.titlebar_maximized_button_focus_inactive_hover = tip .. "maximized_focus_inactive_hover.svg" +theme.titlebar_maximized_button_normal_active_hover = tip .. "maximized_normal_active_hover.svg" +theme.titlebar_maximized_button_focus_active_hover = tip .. "maximized_focus_active_hover.svg" + +-- You can use your own layout icons like this: +theme.layout_fairh = layout_icon_path .. "fairh.png" +theme.layout_fairv = layout_icon_path .. "fairv.png" +theme.layout_floating = layout_icon_path .. "floating.png" +theme.layout_magnifier = layout_icon_path .. "magnifier.png" +theme.layout_max = layout_icon_path .. "max.png" +theme.layout_fullscreen = layout_icon_path .. "fullscreen.png" +theme.layout_tilebottom = layout_icon_path .. "tilebottom.png" +theme.layout_tileleft = layout_icon_path .. "tileleft.png" +theme.layout_tile = layout_icon_path .. "tile.png" +theme.layout_tiletop = layout_icon_path .. "tiletop.png" +theme.layout_spiral = layout_icon_path .. "spiral.png" +theme.layout_dwindle = layout_icon_path .. "dwindle.png" +theme.layout_cornernw = layout_icon_path .. "cornernw.png" +theme.layout_cornerne = layout_icon_path .. "cornerne.png" +theme.layout_cornersw = layout_icon_path .. "cornersw.png" +theme.layout_cornerse = layout_icon_path .. "cornerse.png" + +-- Recolor layout icons +--theme = theme_assets.recolor_layout(theme, theme.xcolor1) + +-- Noodle widgets customization -- +-- Desktop mode widget variables +-- Symbols    +-- theme.desktop_mode_color_floating = theme.xcolor4 +-- theme.desktop_mode_color_tile = theme.xcolor3 +-- theme.desktop_mode_color_max = theme.xcolor1 +-- theme.desktop_mode_text_floating = "f" +-- theme.desktop_mode_text_tile = "t" +-- theme.desktop_mode_text_max = "m" + +-- Minimal tasklist widget variables +theme.minimal_tasklist_visible_clients_color = theme.xcolor4 +theme.minimal_tasklist_visible_clients_text = "" +theme.minimal_tasklist_hidden_clients_color = theme.xcolor7 +theme.minimal_tasklist_hidden_clients_text = "" + +-- Mpd song +theme.mpd_song_title_color = theme.xcolor7 +theme.mpd_song_artist_color = theme.xcolor7 +theme.mpd_song_paused_color = theme.xcolor8 + +-- Volume bar +theme.volume_bar_active_color = theme.xcolor6 +theme.volume_bar_active_background_color = theme.xcolor0 +theme.volume_bar_muted_color = theme.xcolor8 +theme.volume_bar_muted_background_color = theme.xcolor0 + +-- Temperature bar +theme.temperature_bar_active_color = theme.xcolor1 +theme.temperature_bar_background_color = theme.xcolor0 + +-- Battery bar +theme.battery_bar_active_color = theme.xcolor5 +theme.battery_bar_background_color = theme.xcolor0 + +-- CPU bar +theme.cpu_bar_active_color = theme.xcolor2 +theme.cpu_bar_background_color = theme.xcolor0 + +-- RAM bar +theme.ram_bar_active_color = theme.xcolor4 +theme.ram_bar_background_color = theme.xcolor0 + +-- Brightness bar +theme.brightness_bar_active_color = theme.xcolor3 +theme.brightness_bar_background_color = theme.xcolor0 + +-- Generate Awesome icon: +theme.awesome_icon = theme_assets.awesome_icon( + theme.menu_height, theme.bg_focus, theme.fg_focus +) + +-- Define the icon theme for application icons. If not set then the icons +-- from /usr/share/icons and /usr/share/icons/hicolor will be used. +theme.icon_theme = "/usr/share/icons/Numix" + +return theme + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/config/awesome/themes/ephemeral/titlebar/close_focus.svg b/config/awesome/themes/ephemeral/titlebar/close_focus.svg new file mode 100644 index 0000000..cc0afd8 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/close_focus.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/close_focus_hover.svg b/config/awesome/themes/ephemeral/titlebar/close_focus_hover.svg new file mode 100644 index 0000000..1b36690 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/close_focus_hover.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/close_normal.svg b/config/awesome/themes/ephemeral/titlebar/close_normal.svg new file mode 100644 index 0000000..23bc06b --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/close_normal.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/close_normal_hover.svg b/config/awesome/themes/ephemeral/titlebar/close_normal_hover.svg new file mode 100644 index 0000000..1b36690 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/close_normal_hover.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_focus_active.svg b/config/awesome/themes/ephemeral/titlebar/floating_focus_active.svg new file mode 100644 index 0000000..02d847a --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_focus_active.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_focus_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/floating_focus_active_hover.svg new file mode 100644 index 0000000..0d6f5a4 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_focus_active_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_focus_inactive.svg b/config/awesome/themes/ephemeral/titlebar/floating_focus_inactive.svg new file mode 100644 index 0000000..02d847a --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_focus_inactive.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_focus_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/floating_focus_inactive_hover.svg new file mode 100644 index 0000000..0d6f5a4 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_focus_inactive_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_normal_active.svg b/config/awesome/themes/ephemeral/titlebar/floating_normal_active.svg new file mode 100644 index 0000000..0bfa73b --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_normal_active.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_normal_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/floating_normal_active_hover.svg new file mode 100644 index 0000000..0d6f5a4 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_normal_active_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_normal_inactive.svg b/config/awesome/themes/ephemeral/titlebar/floating_normal_inactive.svg new file mode 100644 index 0000000..0bfa73b --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_normal_inactive.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/floating_normal_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/floating_normal_inactive_hover.svg new file mode 100644 index 0000000..0d6f5a4 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/floating_normal_inactive_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_focus_active.svg b/config/awesome/themes/ephemeral/titlebar/maximized_focus_active.svg new file mode 100644 index 0000000..ea482a0 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_focus_active.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_focus_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/maximized_focus_active_hover.svg new file mode 100644 index 0000000..8ae8898 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_focus_active_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_focus_inactive.svg b/config/awesome/themes/ephemeral/titlebar/maximized_focus_inactive.svg new file mode 100644 index 0000000..ea482a0 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_focus_inactive.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_focus_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/maximized_focus_inactive_hover.svg new file mode 100644 index 0000000..8ae8898 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_focus_inactive_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_normal_active.svg b/config/awesome/themes/ephemeral/titlebar/maximized_normal_active.svg new file mode 100644 index 0000000..253c259 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_normal_active.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_normal_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/maximized_normal_active_hover.svg new file mode 100644 index 0000000..8ae8898 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_normal_active_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_normal_inactive.svg b/config/awesome/themes/ephemeral/titlebar/maximized_normal_inactive.svg new file mode 100644 index 0000000..253c259 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_normal_inactive.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/maximized_normal_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/maximized_normal_inactive_hover.svg new file mode 100644 index 0000000..8ae8898 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/maximized_normal_inactive_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/minimize_focus.svg b/config/awesome/themes/ephemeral/titlebar/minimize_focus.svg new file mode 100644 index 0000000..5ab83d3 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/minimize_focus.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/minimize_focus_hover.svg b/config/awesome/themes/ephemeral/titlebar/minimize_focus_hover.svg new file mode 100644 index 0000000..4c398ce --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/minimize_focus_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/minimize_normal.svg b/config/awesome/themes/ephemeral/titlebar/minimize_normal.svg new file mode 100644 index 0000000..eeee053 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/minimize_normal.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/minimize_normal_hover.svg b/config/awesome/themes/ephemeral/titlebar/minimize_normal_hover.svg new file mode 100644 index 0000000..4c398ce --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/minimize_normal_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_focus_active.svg b/config/awesome/themes/ephemeral/titlebar/ontop_focus_active.svg new file mode 100644 index 0000000..8f35879 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_focus_active.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_focus_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/ontop_focus_active_hover.svg new file mode 100644 index 0000000..7deb8f9 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_focus_active_hover.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_focus_inactive.svg b/config/awesome/themes/ephemeral/titlebar/ontop_focus_inactive.svg new file mode 100644 index 0000000..8f35879 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_focus_inactive.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_focus_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/ontop_focus_inactive_hover.svg new file mode 100644 index 0000000..7deb8f9 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_focus_inactive_hover.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_normal_active.svg b/config/awesome/themes/ephemeral/titlebar/ontop_normal_active.svg new file mode 100644 index 0000000..1f43790 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_normal_active.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_normal_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/ontop_normal_active_hover.svg new file mode 100644 index 0000000..7deb8f9 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_normal_active_hover.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_normal_inactive.svg b/config/awesome/themes/ephemeral/titlebar/ontop_normal_inactive.svg new file mode 100644 index 0000000..1f43790 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_normal_inactive.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/ontop_normal_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/ontop_normal_inactive_hover.svg new file mode 100644 index 0000000..7deb8f9 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/ontop_normal_inactive_hover.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_focus_active.svg b/config/awesome/themes/ephemeral/titlebar/sticky_focus_active.svg new file mode 100644 index 0000000..519f4d9 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_focus_active.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_focus_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/sticky_focus_active_hover.svg new file mode 100644 index 0000000..c038b96 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_focus_active_hover.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_focus_inactive.svg b/config/awesome/themes/ephemeral/titlebar/sticky_focus_inactive.svg new file mode 100644 index 0000000..519f4d9 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_focus_inactive.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_focus_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/sticky_focus_inactive_hover.svg new file mode 100644 index 0000000..c038b96 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_focus_inactive_hover.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_normal_active.svg b/config/awesome/themes/ephemeral/titlebar/sticky_normal_active.svg new file mode 100644 index 0000000..02d8a45 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_normal_active.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_normal_active_hover.svg b/config/awesome/themes/ephemeral/titlebar/sticky_normal_active_hover.svg new file mode 100644 index 0000000..c038b96 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_normal_active_hover.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_normal_inactive.svg b/config/awesome/themes/ephemeral/titlebar/sticky_normal_inactive.svg new file mode 100644 index 0000000..02d8a45 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_normal_inactive.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/ephemeral/titlebar/sticky_normal_inactive_hover.svg b/config/awesome/themes/ephemeral/titlebar/sticky_normal_inactive_hover.svg new file mode 100644 index 0000000..c038b96 --- /dev/null +++ b/config/awesome/themes/ephemeral/titlebar/sticky_normal_inactive_hover.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/config/awesome/themes/lovelace/theme.lua b/config/awesome/themes/lovelace/theme.lua index cb74e10..485a7c9 100644 --- a/config/awesome/themes/lovelace/theme.lua +++ b/config/awesome/themes/lovelace/theme.lua @@ -14,10 +14,8 @@ local xresources = require("beautiful.xresources") local dpi = xresources.apply_dpi local gfs = require("gears.filesystem") local themes_path = gfs.get_themes_dir() -local icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/icons/" local layout_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/layout/" local titlebar_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/titlebar/" -local weather_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/weather/" local taglist_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/taglist/" local tip = titlebar_icon_path --alias to save time/space local xrdb = xresources.get_current_theme() @@ -124,7 +122,7 @@ theme.notification_bg = theme.xbackground theme.notification_fg = theme.xcolor7 theme.notification_crit_bg = urgent_color theme.notification_crit_fg = theme.xcolor0 -theme.notification_icon_size = dpi(100) +theme.notification_icon_size = dpi(60) -- theme.notification_height = dpi(80) -- theme.notification_width = dpi(300) theme.notification_margin = dpi(15) @@ -134,14 +132,8 @@ theme.notification_padding = theme.screen_margin * 2 theme.notification_spacing = theme.screen_margin * 2 -- Edge snap -theme.snap_bg = theme.bg_focus -if theme.border_width == 0 then - theme.snap_border_width = dpi(8) -else - theme.snap_border_width = dpi(theme.border_width * 2) -end --- Doesnt work with 4.2, need awesome-git? ---theme.snapper_gap = theme.useless_gap +theme.snap_bg = theme.xforeground +theme.snap_border_width = dpi(4) -- Tag names theme.tagnames = { @@ -167,7 +159,6 @@ theme.separator_fg = theme.xcolor8 -- Wibar(s) -- (Bar items can be customized in bars.lua) theme.wibar_position = "bottom" -theme.wibar_detached = false theme.wibar_height = dpi(45) theme.wibar_fg = theme.xcolor7 theme.wibar_bg = theme.xcolor0 .. "00" @@ -224,8 +215,6 @@ theme.sidebar_width = dpi(300) theme.sidebar_height = screen_height theme.sidebar_y = 0 theme.sidebar_border_radius = dpi(0) -theme.sidebar_hide_on_mouse_leave = true -theme.sidebar_show_on_mouse_edge = true -- Exit screen theme.exit_screen_bg = theme.xcolor0 .. "CC" @@ -233,63 +222,6 @@ theme.exit_screen_fg = theme.xcolor7 theme.exit_screen_font = "sans 20" theme.exit_screen_icon_size = dpi(180) --- Other icons (mostly used in sidebar and menu) -theme.playerctl_toggle_icon = icon_path .. "playerctl_toggle.png" -theme.playerctl_prev_icon = icon_path .. "playerctl_prev.png" -theme.playerctl_next_icon = icon_path .. "playerctl_next.png" -theme.stats_icon = icon_path .. "stats.png" -theme.search_icon = icon_path .. "search.png" -theme.volume_icon = icon_path .. "volume.png" -theme.muted_icon = icon_path .. "muted.png" -theme.mpd_icon = icon_path .. "mpd.png" -theme.firefox_icon = icon_path .. "firefox.png" -theme.youtube_icon = icon_path .. "youtube.png" -theme.reddit_icon = icon_path .. "reddit.png" -theme.discord_icon = icon_path .. "discord.png" -theme.telegram_icon = icon_path .. "telegram.png" -theme.steam_icon = icon_path .. "steam.png" -theme.lutris_icon = icon_path .. "lutris.png" -theme.files_icon = icon_path .. "files.png" -theme.manual_icon = icon_path .. "manual.png" -theme.keyboard_icon = icon_path .. "keyboard.png" -theme.appearance_icon = icon_path .. "appearance.png" -theme.editor_icon = icon_path .. "editor.png" -theme.redshift_icon = icon_path .. "redshift.png" -theme.gimp_icon = icon_path .. "gimp.png" -theme.terminal_icon = icon_path .. "terminal.png" -theme.mail_icon = icon_path .. "mail.png" -theme.music_icon = icon_path .. "music.png" -theme.temperature_icon = icon_path .. "temperature.png" -theme.battery_icon = icon_path .. "battery.png" -theme.battery_charging_icon = icon_path .. "battery_charging.png" -theme.cpu_icon = icon_path .. "cpu.png" -theme.compositor_icon = icon_path .. "compositor.png" -theme.start_icon = icon_path .. "start.png" -theme.ram_icon = icon_path .. "ram.png" -theme.screenshot_icon = icon_path .. "screenshot.png" -theme.home_icon = icon_path .. "home.png" -theme.alarm_icon = icon_path .. "alarm.png" - --- Weather icons -theme.cloud_icon = weather_icon_path .. "cloud.png" -theme.dcloud_icon = weather_icon_path .. "dcloud.png" -theme.ncloud_icon = weather_icon_path .. "ncloud.png" -theme.sun_icon = weather_icon_path .. "sun.png" -theme.star_icon = weather_icon_path .. "star.png" -theme.rain_icon = weather_icon_path .. "rain.png" -theme.snow_icon = weather_icon_path .. "snow.png" -theme.mist_icon = weather_icon_path .. "mist.png" -theme.storm_icon = weather_icon_path .. "storm.png" -theme.whatever_icon = weather_icon_path .. "whatever.png" - --- Exit screen icons -theme.exit_icon = icon_path .. "exit.png" -theme.poweroff_icon = icon_path .. "poweroff.png" -theme.reboot_icon = icon_path .. "reboot.png" -theme.suspend_icon = icon_path .. "suspend.png" -theme.lock_icon = icon_path .. "lock.png" --- theme.hibernate_icon = icon_path .. "hibernate.png" - -- Icon taglist local ntags = 10 theme.taglist_icons_empty = {} @@ -304,6 +236,20 @@ for i = 1, ntags do theme.taglist_icons_urgent[i] = taglist_icon_path .. tostring(i) .. "_urgent.png" end +-- Noodle Text Taglist +theme.taglist_text_font = "Typicons 11" +theme.taglist_text_empty = {"","","","","","","","","",""} +theme.taglist_text_occupied = {"","","","","","","","","",""} +theme.taglist_text_focused = {"","","","","","","","","",""} +theme.taglist_text_urgent = {"","","","","","","","","",""} +-- theme.taglist_text_urgent = {"","","","","","","","","",""} +-- theme.taglist_text_urgent = {"","","","","","","","","",""} + +theme.taglist_text_color_empty = { theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0, theme.xcolor0 } +theme.taglist_text_color_occupied = { theme.xcolor1.."55", theme.xcolor2.."55", theme.xcolor3.."55", theme.xcolor4.."55", theme.xcolor5.."55", theme.xcolor6.."55", theme.xcolor1.."55", theme.xcolor2.."55", theme.xcolor3.."55", theme.xcolor4.."55" } +theme.taglist_text_color_focused = { theme.xcolor1, theme.xcolor2, theme.xcolor3, theme.xcolor4, theme.xcolor5, theme.xcolor6, theme.xcolor1, theme.xcolor2, theme.xcolor3, theme.xcolor4 } +theme.taglist_text_color_urgent = { theme.xcolor9, theme.xcolor10, theme.xcolor11, theme.xcolor12, theme.xcolor13, theme.xcolor14, theme.xcolor9, theme.xcolor10, theme.xcolor11, theme.xcolor12 } + -- Prompt theme.prompt_fg = accent_color @@ -332,7 +278,7 @@ theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( ) -- Variables set for theming the menu: -theme.menu_submenu_icon = icon_path.."submenu.png" +-- theme.menu_submenu_icon = icon_path.."submenu.png" theme.menu_height = dpi(35) theme.menu_width = dpi(180) theme.menu_bg_normal = theme.xcolor0 diff --git a/config/awesome/themes/manta/theme.lua b/config/awesome/themes/manta/theme.lua index 6657e98..52021d8 100644 --- a/config/awesome/themes/manta/theme.lua +++ b/config/awesome/themes/manta/theme.lua @@ -1,11 +1,3 @@ --- _ _ _ _ --- | |__ _____ _| (_) | _____ --- | '_ \ / _ \ \/ / | | |/ / _ \ --- | |_) | (_) > <| | | < __/ --- |_.__/ \___/_/\_\_|_|_|\_\___| --- --- A *box lookalike - local theme_assets = require("beautiful.theme_assets") local xresources = require("beautiful.xresources") local dpi = xresources.apply_dpi @@ -159,7 +151,6 @@ theme.separator_fg = theme.xcolor8 -- Wibar -- (The panel items can be customized in rc.lua) theme.wibar_position = "bottom" -theme.wibar_detached = true theme.wibar_height = dpi(40) theme.wibar_fg = theme.xcolor0 theme.wibar_bg = theme.xcolor7 @@ -174,24 +165,6 @@ theme.wibar_width = 885 --theme.wibar_x = screen_width - theme.wibar_width - theme.wibar_border_width * 2 - theme.screen_margin * 2 --theme.wibar_y = theme.screen_margin * 2 --- Another wibar (optional) -theme.wibar_alt_enabled = false ---theme.wibar_alt_position = "bottom" -theme.wibar_alt_position = "left" --fake position so it does not increase screen margin -theme.wibar_alt_detached = false -theme.wibar_alt_height = dpi(40) -theme.wibar_alt_fg = theme.xcolor7 -theme.wibar_alt_bg = theme.xcolor0 ---theme.wibar_alt_opacity = 0.7 -theme.wibar_alt_border_color = theme.xcolor0 -theme.wibar_alt_border_width = 0 -theme.wibar_alt_border_radius = theme.border_radius -theme.wibar_alt_width = 420 -theme.wibar_alt_x = screen_width / 2 + theme.screen_margin ---theme.wibar_alt_x = screen_width - theme.wibar_alt_width - theme.wibar_alt_border_width * 2 - theme.screen_margin * 2 -theme.wibar_alt_y = theme.screen_margin * 2 ---theme.wibar_alt_y = screen_height - theme.screen_margin * 2 - theme.wibar_alt_height - theme.wibar_alt_border_width * 2 - -- Widgets theme.prefix_fg = theme.xcolor8 diff --git a/config/awesome/themes/manta/titlebar/close_focus.svg b/config/awesome/themes/manta/titlebar/close_focus.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/close_focus.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/close_focus_hover.svg b/config/awesome/themes/manta/titlebar/close_focus_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/close_focus_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/close_normal.svg b/config/awesome/themes/manta/titlebar/close_normal.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/close_normal.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/close_normal_hover.svg b/config/awesome/themes/manta/titlebar/close_normal_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/close_normal_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_focus_active.svg b/config/awesome/themes/manta/titlebar/floating_focus_active.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/floating_focus_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/floating_focus_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/floating_focus_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_focus_inactive.svg b/config/awesome/themes/manta/titlebar/floating_focus_inactive.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/floating_focus_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/floating_focus_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/floating_focus_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_normal_active.svg b/config/awesome/themes/manta/titlebar/floating_normal_active.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/floating_normal_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/floating_normal_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/floating_normal_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_normal_inactive.svg b/config/awesome/themes/manta/titlebar/floating_normal_inactive.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/floating_normal_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/floating_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/floating_normal_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/floating_normal_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_active.svg b/config/awesome/themes/manta/titlebar/maximized_focus_active.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_focus_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/maximized_focus_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_focus_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_inactive.svg b/config/awesome/themes/manta/titlebar/maximized_focus_inactive.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_focus_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/maximized_focus_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_focus_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_active.svg b/config/awesome/themes/manta/titlebar/maximized_normal_active.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_normal_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/maximized_normal_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_normal_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_inactive.svg b/config/awesome/themes/manta/titlebar/maximized_normal_inactive.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_normal_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/maximized_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/maximized_normal_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/maximized_normal_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/minimize_focus.svg b/config/awesome/themes/manta/titlebar/minimize_focus.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/minimize_focus.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/minimize_focus_hover.svg b/config/awesome/themes/manta/titlebar/minimize_focus_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/minimize_focus_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/minimize_normal.svg b/config/awesome/themes/manta/titlebar/minimize_normal.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/minimize_normal.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/minimize_normal_hover.svg b/config/awesome/themes/manta/titlebar/minimize_normal_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/minimize_normal_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_active.svg b/config/awesome/themes/manta/titlebar/ontop_focus_active.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_focus_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/ontop_focus_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_focus_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_inactive.svg b/config/awesome/themes/manta/titlebar/ontop_focus_inactive.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_focus_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/ontop_focus_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_focus_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_active.svg b/config/awesome/themes/manta/titlebar/ontop_normal_active.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_normal_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/ontop_normal_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_normal_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_inactive.svg b/config/awesome/themes/manta/titlebar/ontop_normal_inactive.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_normal_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/ontop_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/ontop_normal_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/ontop_normal_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_active.svg b/config/awesome/themes/manta/titlebar/sticky_focus_active.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_focus_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_active_hover.svg b/config/awesome/themes/manta/titlebar/sticky_focus_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_focus_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_inactive.svg b/config/awesome/themes/manta/titlebar/sticky_focus_inactive.svg deleted file mode 120000 index f5c599e..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_focus_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_focus.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_focus_inactive_hover.svg b/config/awesome/themes/manta/titlebar/sticky_focus_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_focus_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_active.svg b/config/awesome/themes/manta/titlebar/sticky_normal_active.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_normal_active.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_active_hover.svg b/config/awesome/themes/manta/titlebar/sticky_normal_active_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_normal_active_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_inactive.svg b/config/awesome/themes/manta/titlebar/sticky_normal_inactive.svg deleted file mode 120000 index a72934b..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_normal_inactive.svg +++ /dev/null @@ -1 +0,0 @@ -./button_normal.svg \ No newline at end of file diff --git a/config/awesome/themes/manta/titlebar/sticky_normal_inactive_hover.svg b/config/awesome/themes/manta/titlebar/sticky_normal_inactive_hover.svg deleted file mode 120000 index fb79269..0000000 --- a/config/awesome/themes/manta/titlebar/sticky_normal_inactive_hover.svg +++ /dev/null @@ -1 +0,0 @@ -./button_hover.svg \ No newline at end of file diff --git a/config/awesome/themes/skyfall/theme.lua b/config/awesome/themes/skyfall/theme.lua index 921503d..5dba524 100644 --- a/config/awesome/themes/skyfall/theme.lua +++ b/config/awesome/themes/skyfall/theme.lua @@ -4,10 +4,8 @@ local xresources = require("beautiful.xresources") local dpi = xresources.apply_dpi local gfs = require("gears.filesystem") local themes_path = gfs.get_themes_dir() -local icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/icons/" local layout_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/layout/" local titlebar_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/titlebar/" -local weather_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/weather/" local taglist_icon_path = os.getenv("HOME") .. "/.config/awesome/themes/" .. theme_name .. "/taglist/" local tip = titlebar_icon_path --alias to save time/space local xrdb = xresources.get_current_theme() @@ -124,6 +122,8 @@ if theme.border_width == 0 then else theme.snap_border_width = dpi(theme.border_width * 2) end +-- Doesnt work with 4.2, need awesome-git? +--theme.snapper_gap = theme.useless_gap -- Tag names theme.tagnames = { @@ -149,7 +149,7 @@ theme.separator_fg = theme.xcolor8 -- Wibar(s) -- (Bar items can be customized in bars.lua) theme.wibar_position = "bottom" -theme.wibar_detached = false +theme.wibar_ontop = false theme.wibar_height = dpi(35) theme.wibar_fg = theme.xcolor7 theme.wibar_bg = theme.xcolor0 @@ -205,8 +205,6 @@ theme.sidebar_x = 0 theme.sidebar_y = 0 theme.sidebar_border_radius = 0 -- theme.sidebar_border_radius = theme.border_radius -theme.sidebar_hide_on_mouse_leave = true -theme.sidebar_show_on_mouse_edge = true -- Exit screen theme.exit_screen_bg = theme.xcolor0 .. "CC" @@ -214,57 +212,6 @@ theme.exit_screen_fg = theme.xcolor7 theme.exit_screen_font = "sans 20" theme.exit_screen_icon_size = dpi(180) --- Other icons (mostly used in sidebar and menu) -theme.playerctl_toggle_icon = icon_path .. "playerctl_toggle.png" -theme.playerctl_prev_icon = icon_path .. "playerctl_prev.png" -theme.playerctl_next_icon = icon_path .. "playerctl_next.png" -theme.stats_icon = icon_path .. "stats.png" -theme.search_icon = icon_path .. "search.png" -theme.volume_icon = icon_path .. "volume.png" -theme.muted_icon = icon_path .. "muted.png" -theme.mpd_icon = icon_path .. "mpd.png" -theme.firefox_icon = icon_path .. "firefox.png" -theme.youtube_icon = icon_path .. "youtube.png" -theme.reddit_icon = icon_path .. "reddit.png" -theme.discord_icon = icon_path .. "discord.png" -theme.telegram_icon = icon_path .. "telegram.png" -theme.steam_icon = icon_path .. "steam.png" -theme.lutris_icon = icon_path .. "lutris.png" -theme.files_icon = icon_path .. "files.png" -theme.manual_icon = icon_path .. "manual.png" -theme.keyboard_icon = icon_path .. "keyboard.png" -theme.appearance_icon = icon_path .. "appearance.png" -theme.editor_icon = icon_path .. "editor.png" -theme.redshift_icon = icon_path .. "redshift.png" -theme.gimp_icon = icon_path .. "gimp.png" -theme.terminal_icon = icon_path .. "terminal.png" -theme.mail_icon = icon_path .. "mail.png" -theme.music_icon = icon_path .. "music.png" -theme.temperature_icon = icon_path .. "temperature.png" -theme.battery_icon = icon_path .. "battery.png" -theme.battery_charging_icon = icon_path .. "battery_charging.png" -theme.cpu_icon = icon_path .. "cpu.png" -theme.compositor_icon = icon_path .. "compositor.png" -theme.start_icon = icon_path .. "start.png" -theme.ram_icon = icon_path .. "ram.png" -theme.screenshot_icon = icon_path .. "screenshot.png" -theme.home_icon = icon_path .. "home.png" -theme.alarm_icon = icon_path .. "alarm.png" -theme.alarm_off_icon = icon_path .. "alarm_off.png" -theme.alert_icon = icon_path .. "alert.png" - --- Weather icons -theme.cloud_icon = weather_icon_path .. "cloud.png" -theme.dcloud_icon = weather_icon_path .. "dcloud.png" -theme.ncloud_icon = weather_icon_path .. "ncloud.png" -theme.sun_icon = weather_icon_path .. "sun.png" -theme.star_icon = weather_icon_path .. "star.png" -theme.rain_icon = weather_icon_path .. "rain.png" -theme.snow_icon = weather_icon_path .. "snow.png" -theme.mist_icon = weather_icon_path .. "mist.png" -theme.storm_icon = weather_icon_path .. "storm.png" -theme.whatever_icon = weather_icon_path .. "whatever.png" - -- Exit screen icons theme.exit_icon = icon_path .. "exit.png" theme.poweroff_icon = icon_path .. "poweroff.png" @@ -273,12 +220,13 @@ theme.suspend_icon = icon_path .. "suspend.png" theme.lock_icon = icon_path .. "lock.png" -- theme.hibernate_icon = icon_path .. "hibernate.png" --- Noodle Icon Taglist +-- Icon taglist local ntags = 10 theme.taglist_icons_empty = {} theme.taglist_icons_occupied = {} theme.taglist_icons_focused = {} theme.taglist_icons_urgent = {} +-- table.insert(tag_icons, tag) for i = 1, ntags do theme.taglist_icons_empty[i] = taglist_icon_path .. tostring(i) .. "_empty.png" theme.taglist_icons_occupied[i] = taglist_icon_path .. tostring(i) .. "_occupied.png" @@ -326,7 +274,7 @@ theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( ) -- Variables set for theming the menu: -theme.menu_submenu_icon = icon_path.."submenu.png" +-- theme.menu_submenu_icon = icon_path.."submenu.png" theme.menu_height = dpi(35) theme.menu_width = dpi(180) theme.menu_bg_normal = theme.xcolor0 @@ -406,6 +354,7 @@ theme.layout_cornerse = layout_icon_path .. "cornerse.png" -- Recolor layout icons --theme = theme_assets.recolor_layout(theme, theme.xcolor1) +-- Noodle widgets customization -- -- Desktop mode widget variables -- Symbols    -- theme.desktop_mode_color_floating = theme.xcolor4 diff --git a/config/awesome/themes/skyfall/weather/cloud.png b/config/awesome/themes/skyfall/weather/cloud.png deleted file mode 100644 index 5e8460c..0000000 Binary files a/config/awesome/themes/skyfall/weather/cloud.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/dcloud.png b/config/awesome/themes/skyfall/weather/dcloud.png deleted file mode 100644 index a196f98..0000000 Binary files a/config/awesome/themes/skyfall/weather/dcloud.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/horizon_chase.png b/config/awesome/themes/skyfall/weather/horizon_chase.png deleted file mode 100644 index 5e321b4..0000000 Binary files a/config/awesome/themes/skyfall/weather/horizon_chase.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/itransmission.png b/config/awesome/themes/skyfall/weather/itransmission.png deleted file mode 100644 index 9f64a5a..0000000 Binary files a/config/awesome/themes/skyfall/weather/itransmission.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/mist.png b/config/awesome/themes/skyfall/weather/mist.png deleted file mode 100644 index ab7f52b..0000000 Binary files a/config/awesome/themes/skyfall/weather/mist.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/ncloud.png b/config/awesome/themes/skyfall/weather/ncloud.png deleted file mode 100644 index 1e3f8e9..0000000 Binary files a/config/awesome/themes/skyfall/weather/ncloud.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/rain.png b/config/awesome/themes/skyfall/weather/rain.png deleted file mode 100644 index 771f756..0000000 Binary files a/config/awesome/themes/skyfall/weather/rain.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/snow.png b/config/awesome/themes/skyfall/weather/snow.png deleted file mode 100644 index d57f479..0000000 Binary files a/config/awesome/themes/skyfall/weather/snow.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/star.png b/config/awesome/themes/skyfall/weather/star.png deleted file mode 100644 index 9988aad..0000000 Binary files a/config/awesome/themes/skyfall/weather/star.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/storm.png b/config/awesome/themes/skyfall/weather/storm.png deleted file mode 100644 index 5a6ee91..0000000 Binary files a/config/awesome/themes/skyfall/weather/storm.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/sun.png b/config/awesome/themes/skyfall/weather/sun.png deleted file mode 100644 index 5bb260c..0000000 Binary files a/config/awesome/themes/skyfall/weather/sun.png and /dev/null differ diff --git a/config/awesome/themes/skyfall/weather/whatever.png b/config/awesome/themes/skyfall/weather/whatever.png deleted file mode 100644 index 562a3df..0000000 Binary files a/config/awesome/themes/skyfall/weather/whatever.png and /dev/null differ diff --git a/config/awesome/titlebars.lua b/config/awesome/titlebars.lua index a0e63cd..81d9fe9 100644 --- a/config/awesome/titlebars.lua +++ b/config/awesome/titlebars.lua @@ -1,34 +1,245 @@ local awful = require("awful") local gears = require("gears") local beautiful = require("beautiful") -local xresources = require("beautiful.xresources") -local dpi = xresources.apply_dpi local wibox = require("wibox") +-- todo remove +local naughty = require("naughty") + local helpers = require("helpers") local titlebars = {} -local pad = helpers.pad + +-- TODO: Need to add toggled appearance for sticky, floating, ontop and +-- maximized buttons + +-- Helper function that generates clickable buttons for windows +-- Useful for creating simple shaped buttons +local gen_button, gen_button_size, gen_button_margin +local gen_button_size = dpi(8) +local gen_button_margin = dpi(5) +local gen_button_color_unfocused = beautiful.xcolor8 +gen_button = function (c, color, hover_color, cmd) + local button = wibox.widget { + forced_height = gen_button_size, + forced_width = gen_button_size, + -- Initialize with the "unfocused" color + bg = gen_button_color_unfocused, + -- border_color = gen_button_color_unfocused, + -- border_width = dpi(2), + shape = gears.shape.circle, + widget = wibox.container.background() + } + + -- Instead of adding spacing between the buttons, we add margins + -- around them. That way it is more forgiving to click them + -- (especially if they are very small) + local button_widget = wibox.widget { + button, + margins = gen_button_margin, + widget = wibox.container.margin(), + } + button_widget:buttons(gears.table.join( + awful.button({ }, 1, function () + cmd(c) + end) + )) + + -- Hover "animation" + button_widget:connect_signal("mouse::enter", function () + button.bg = hover_color + -- button.border_color = hover_color + end) + button_widget:connect_signal("mouse::leave", function () + if c == client.focus then + button.bg = color + -- button.border_color = color + else + button.bg = gen_button_color_unfocused + -- button.border_color = gen_button_color_unfocused + end + end) + + -- Press "animation" + -- button_widget:connect_signal("button::press", function () + -- button.bg = color .. "55" + -- end) + -- button_widget:connect_signal("button::release", function () + -- if c == client.focus then + -- button.bg = hover_color + -- else + -- button.bg = gen_button_color_unfocused + -- end + -- end) + + -- Focus / unfocus + c:connect_signal("focus", function () + button.bg = color + -- button.border_color = color + end) + c:connect_signal("unfocus", function () + button.bg = gen_button_color_unfocused + -- button.border_color = gen_button_color_unfocused + end) + + return button_widget +end + + +-- Generates a client button created by a font glyph +gen_text_button = function (c, symbol, color, hover_color, cmd) + local button = wibox.widget { + align = "center", + valign = "center", + font = "Material Icons 9", + -- Initialize with the "unfocused" color + markup = helpers.colorize_text(symbol, gen_button_color_unfocused), + -- Increase the width of the textbox in order to make it easier to click. It does not affect the size of the symbol itself. + forced_width = gen_button_size + gen_button_margin * 2, + widget = wibox.widget.textbox + } + + button:buttons(gears.table.join( + awful.button({ }, 1, function () + cmd(c) + end) + )) + + -- Hover "animation" + button:connect_signal("mouse::enter", function () + button.markup = helpers.colorize_text(symbol, hover_color) + end) + button:connect_signal("mouse::leave", function () + if c == client.focus then + button.markup = helpers.colorize_text(symbol, color) + else + button.markup = helpers.colorize_text(symbol, gen_button_color_unfocused) + end + end) + + -- Focus / unfocus + c:connect_signal("focus", function () + button.markup = helpers.colorize_text(symbol, color) + end) + c:connect_signal("unfocus", function () + button.markup = helpers.colorize_text(symbol, gen_button_color_unfocused) + end) + + return button +end + + + +-- Functions for the generated buttons +local window_close +window_close = function (c) + c:kill() +end +local window_maximize = function (c) + c.maximized = not c.maximized + c:raise() +end +local window_minimize = function (c) + c.minimized = true +end +local window_sticky = function (c) + c.sticky = not c.sticky +end +local window_ontop = function (c) + c.ontop = not c.ontop +end +local window_floating = function (c) + c.floating = not c.floating +end + +-- For anti aliasing +-- ================= +-- Save the original beautiful values because they will have to be modified later +local titlebar_bg = beautiful.titlebar_bg +local titlebar_bg_focus = beautiful.titlebar_bg_focus +local titlebar_bg_normal = beautiful.titlebar_bg_normal + +local titlebar_container_shape +local wants_equal_padding +local anti_aliasing_padding = beautiful.border_radius * 2 +if user.anti_aliasing then + beautiful.titlebar_bg = "#00000000" + if beautiful.titlebar_bg_focus and beautiful.titlebar_bg_normal then + beautiful.titlebar_bg_focus = "#00000000" + beautiful.titlebar_bg_normal = "#00000000" + end + + -- Function that returns true or false depending on whether the + -- anti-aliasing titlebars should be added on all sides of a client or not. + -- Padding is added under the top titlebar, and also titlebars are added to + -- the left and right of the client in order to have equal padding on + -- all sides. However they are not necessary for the anti aliasing itself + -- and can be enabled or disabled per client in this function. + -- ------------------ + wants_equal_padding = function(c) + local class = c.class + if class == "kitty" or + class == "editor" or + class == "Nemo" or + class == "music" or + class == "email" or + class == "htop" or + class == "sensors" or + class == "battop" or + class == "mpvtube" or + class == "scratchpad" or + class == "Remacs" then + return true + else + return false + end + end + + -- Only adds 4 anti_aliased titlebars of the same size around the client + wants_only_borders = function(c) + local class = c.class + if class == "feh" or + class == "mpv" then + return true + else + return false + end + end + + -- titlebar_container_shape = function(radius, tl, tr, br, bl) + -- Function that returns a rounded shape according to a titlebar position + titlebar_container_shape = function(radius, position) + if position == "bottom" then + return function(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, false, false, true, true, radius) + end + elseif position == "left" then + return function(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, true, false, false, true, radius) + end + elseif position == "right" then + return function(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, false, true, true, false, radius) + end + else + return function(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, true, true, false, false, radius) + end + end + end +else + titlebar_container_shape = function() + return gears.shape.rectangle + end +end -- Mouse buttons titlebars.buttons = gears.table.join( -- Left button - move - -- (Double tap - Toggle maximize) -- A little BUGGY awful.button({ }, 1, function() local c = mouse.object_under_pointer() client.focus = c c:raise() awful.mouse.client.move(c) - - -- local function single_tap() - -- awful.mouse.client.move(c) - -- end - -- local function double_tap() - -- gears.timer.delayed_call(function() - -- c.maximized = not c.maximized - -- end) - -- end - -- helpers.single_double_tap(single_tap, double_tap) - -- helpers.single_double_tap(nil, double_tap) end), -- Middle button - close awful.button({ }, 2, function () @@ -43,11 +254,12 @@ titlebars.buttons = gears.table.join( awful.mouse.client.resize(c) -- awful.mouse.resize(c, nil, {jump_to_corner=true}) end), + -- Side button up - toggle floating awful.button({ }, 9, function() local c = mouse.object_under_pointer() client.focus = c c:raise() - --awful.placement.centered(c,{honor_workarea=true}) + --awful.placement.centered(c,{honor_padding = true, honor_workarea=true}) c.floating = not c.floating end), -- Side button down - toggle ontop @@ -63,52 +275,55 @@ titlebars.buttons = gears.table.join( awful.titlebar.enable_tooltip = false -- Buttons needed for custom MPD client titlebar -local playerctl_button_size = dpi(38) -local playerctl_toggle_icon = wibox.widget.imagebox(beautiful.playerctl_toggle_icon) -playerctl_toggle_icon.resize = true -playerctl_toggle_icon.forced_width = playerctl_button_size -playerctl_toggle_icon.forced_height = playerctl_button_size -playerctl_toggle_icon:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc toggle") - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("mpvc toggle") - end), - awful.button({ }, 8, function () - sidebar.visible = false - awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") - end), - awful.button({ }, 9, function () - awful.spawn.with_shell("~/scr/info/mpv-query.sh") - end) -)) +-- Disabled for now until I figure out a cleaner way to use them alongside +-- anti-aliasing +-- ============================================= +-- local playerctl_button_size = dpi(38) +-- local playerctl_toggle_icon = wibox.widget.imagebox(icons.playerctl_toggle) +-- playerctl_toggle_icon.resize = true +-- playerctl_toggle_icon.forced_width = playerctl_button_size +-- playerctl_toggle_icon.forced_height = playerctl_button_size +-- playerctl_toggle_icon:buttons(gears.table.join( +-- awful.button({ }, 1, function () +-- awful.spawn.with_shell("mpc -q toggle") +-- end), +-- awful.button({ }, 3, function () +-- awful.spawn.with_shell("mpvc toggle") +-- end), +-- awful.button({ }, 8, function () +-- sidebar.visible = false +-- awful.spawn.with_shell("~/scr/Rofi/rofi_mpvtube") +-- end), +-- awful.button({ }, 9, function () +-- awful.spawn.with_shell("~/scr/info/mpv-query.sh") +-- end) +-- )) -local playerctl_prev_icon = wibox.widget.imagebox(beautiful.playerctl_prev_icon) -playerctl_prev_icon.resize = true -playerctl_prev_icon.forced_width = playerctl_button_size -playerctl_prev_icon.forced_height = playerctl_button_size -playerctl_prev_icon:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc prev") - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("mpvc prev") - end) -)) +-- local playerctl_prev_icon = wibox.widget.imagebox(icons.playerctl_prev) +-- playerctl_prev_icon.resize = true +-- playerctl_prev_icon.forced_width = playerctl_button_size +-- playerctl_prev_icon.forced_height = playerctl_button_size +-- playerctl_prev_icon:buttons(gears.table.join( +-- awful.button({ }, 1, function () +-- awful.spawn.with_shell("mpc -q prev") +-- end), +-- awful.button({ }, 3, function () +-- awful.spawn.with_shell("mpvc prev") +-- end) +-- )) -local playerctl_next_icon = wibox.widget.imagebox(beautiful.playerctl_next_icon) -playerctl_next_icon.resize = true -playerctl_next_icon.forced_width = playerctl_button_size -playerctl_next_icon.forced_height = playerctl_button_size -playerctl_next_icon:buttons(gears.table.join( - awful.button({ }, 1, function () - awful.spawn.with_shell("mpc next") - end), - awful.button({ }, 3, function () - awful.spawn.with_shell("mpvc next") - end) -)) +-- local playerctl_next_icon = wibox.widget.imagebox(icons.playerctl_next) +-- playerctl_next_icon.resize = true +-- playerctl_next_icon.forced_width = playerctl_button_size +-- playerctl_next_icon.forced_height = playerctl_button_size +-- playerctl_next_icon:buttons(gears.table.join( +-- awful.button({ }, 1, function () +-- awful.spawn.with_shell("mpc -q next") +-- end), +-- awful.button({ }, 3, function () +-- awful.spawn.with_shell("mpvc next") +-- end) +-- )) -- Add a titlebar client.connect_signal("request::titlebars", function(c) @@ -123,98 +338,193 @@ client.connect_signal("request::titlebars", function(c) title_widget = wibox.widget.textbox("") end - local titlebar_item_layout - local titlebar_layout - if beautiful.titlebar_position == "left" or beautiful.titlebar_position == "right" then - titlebar_item_layout = wibox.layout.fixed.vertical - titlebar_layout = wibox.layout.align.vertical - else - titlebar_item_layout = wibox.layout.fixed.horizontal - titlebar_layout = wibox.layout.align.horizontal - end - -- Create 4 dummy titlebars around the window to imitate borders if beautiful.titlebars_imitate_borders then - helpers.create_titlebar(c, buttons, "top", beautiful.titlebar_size) - helpers.create_titlebar(c, buttons, "bottom", beautiful.titlebar_size) - helpers.create_titlebar(c, buttons, "left", beautiful.titlebar_size) - helpers.create_titlebar(c, buttons, "right", beautiful.titlebar_size) + awful.titlebar(c, {position = "top", size = beautiful.titlebar_size}) + awful.titlebar(c, {position = "bottom", size = beautiful.titlebar_size}) + awful.titlebar(c, {position = "right", size = beautiful.titlebar_size}) + awful.titlebar(c, {position = "left", size = beautiful.titlebar_size}) else -- Single titlebar - -- Custom titlebar for music terminal (usually ncmpcpp) - -- if c.class == "music" then - if c.class == "music" or c.name == "Music Terminal" then - -- title_widget = awful.titlebar.widget.titlewidget(c) - -- title_widget:set_align("left") - -- title_widget.font = "sans 9" - -- Music titlebar items - awful.titlebar(c, {font = beautiful.titlebar_font, position = "bottom", size = dpi(50)}) : setup { - nil, + -- ========================================= + -- ========================================= + -- === Custom titlebars disabled for now === + -- ========================================= + -- ========================================= + -- Custom titlebar for music terminal (usually ncmpcpp) + -- if c.class == "music" or c.instance == "music" or c.name == "Music Terminal" then + -- if c.class == "music" then + -- -- title_widget = awful.titlebar.widget.titlewidget(c) + -- -- title_widget:set_align("left") + -- -- title_widget.font = "sans 9" + + -- -- Music titlebar items + -- awful.titlebar(c, {font = beautiful.titlebar_font, position = "bottom", size = dpi(50), bg = beautiful.xcolor0}) : setup { + -- nil, + -- { + -- nil, + -- { -- Music player buttons + -- playerctl_prev_icon, + -- playerctl_toggle_icon, + -- playerctl_next_icon, + -- spacing = dpi(10), + -- layout = wibox.layout.fixed.horizontal + -- }, + -- nil, + -- expand = "none", + -- layout = wibox.layout.align.vertical, + -- }, + -- nil, + -- buttons = buttons, + -- expand = "none", + -- layout = wibox.layout.align.horizontal} + -- end + + local anti_aliasing_padding_color = beautiful.xbackground + -- if c.class == "feh" then + -- anti_aliasing_padding_color = beautiful.xforeground + -- else + -- anti_aliasing_padding_color = beautiful.xbackground + -- end + + -- Save these here in order to avoid re-evaluating them multiple times + local equal_padding = wants_equal_padding(c) + local only_borders = wants_only_borders(c) + + -- Top titlebar + local titlebar_container = wibox.widget { + shape = titlebar_container_shape(beautiful.border_radius, "top"), + bg = titlebar_bg, + widget = wibox.container.background + } + + awful.titlebar(c, {font = beautiful.titlebar_font, position = beautiful.titlebar_position, size = (user.anti_aliasing and equal_padding) and beautiful.titlebar_size + anti_aliasing_padding or (user.anti_aliasing and only_borders) and anti_aliasing_padding or beautiful.titlebar_size}) : setup { + { { nil, - { -- Music player buttons - playerctl_prev_icon, - pad(1), - playerctl_toggle_icon, - pad(1), - playerctl_next_icon, + { + buttons = buttons, + widget = title_widget + }, + { + -- AwesomeWM native buttons (images loaded from theme) + -- awful.titlebar.widget.minimizebutton(c), + -- awful.titlebar.widget.maximizedbutton(c), + -- awful.titlebar.widget.closebutton(c), + + -- Generated buttons + gen_button(c, beautiful.xcolor6, beautiful.xcolor14, window_minimize), + gen_button(c, beautiful.xcolor4, beautiful.xcolor12, window_maximize), + gen_text_button(c, "", beautiful.xcolor1, beautiful.xcolor9, window_close), + + -- Dummy widget to create spacing at the edge + { + forced_width = gen_button_margin, + layout = wibox.layout.fixed.horizontal + }, layout = wibox.layout.fixed.horizontal }, - nil, - expand = "none", - layout = wibox.layout.align.vertical, + visible = not only_borders, + forced_height = beautiful.titlebar_size, + layout = wibox.layout.align.horizontal }, - nil, - buttons = buttons, - expand = "none", - layout = wibox.layout.align.horizontal, - } - else -- Default window titlebar - awful.titlebar(c, {font = beautiful.titlebar_font, position = beautiful.titlebar_position, size = beautiful.titlebar_size}) : setup { - -- Titlebar items - { -- Left - -- In the presence of buttons, use padding to center the title if needed. - --pad(10), - -- Clickable buttons - --awful.titlebar.widget.closebutton (c), - --awful.titlebar.widget.maximizedbutton(c), - --awful.titlebar.widget.minimizebutton (c), - -- awful.titlebar.widget.ontopbutton (c), - -- awful.titlebar.widget.stickybutton (c), - -- awful.titlebar.widget.floatingbutton (c), - buttons = buttons, - --awful.titlebar.widget.iconwidget(c), + -- Padding + -- Only visible when equal padding is desired for the client + { + visible = user.anti_aliasing and equal_padding or only_borders, + buttons = user.anti_aliasing and only_borders and buttons, + -- bg = beautiful.xbackground, + bg = anti_aliasing_padding_color, + -- bg = only_borders and anti_aliasing_padding_color or beautiful.xbackground, + forced_height = anti_aliasing_padding, + widget = wibox.container.background + }, + layout = wibox.layout.fixed.vertical + }, + widget = titlebar_container + } - layout = titlebar_item_layout - }, - { -- Middle - --{ -- Title - --align = beautiful.titlebar_title_align, - --widget = title_widget - --}, - title_widget, - buttons = buttons, - layout = wibox.layout.flex.horizontal - }, - { -- Right - -- Clickable buttons - --awful.titlebar.widget.floatingbutton (c), - --awful.titlebar.widget.stickybutton (c), - --awful.titlebar.widget.ontopbutton (c), - -- awful.titlebar.widget.minimizebutton(c), - -- awful.titlebar.widget.maximizedbutton(c), - -- awful.titlebar.widget.closebutton (c), - --buttons = buttons, - -- In the presence of buttons, use padding to center the title if needed. - -- pad(1), - layout = titlebar_item_layout - --layout = wibox.layout.fixed.horizontal() - }, - layout = titlebar_layout - --layout = wibox.layout.align.horizontal + if user.anti_aliasing then + local bottom_titlebar_container = wibox.widget { + shape = titlebar_container_shape(beautiful.border_radius, "bottom"), + bg = titlebar_bg, + widget = wibox.container.background + } + + -- Add padding left and right if needed + if equal_padding or only_borders then + awful.titlebar(c, {font = beautiful.titlebar_font, position = "right", size = anti_aliasing_padding, bg = "#00000000"}) : setup { + buttons = titlebars.buttons, + bg = anti_aliasing_padding_color, + widget = wibox.container.background() + } + awful.titlebar(c, {font = beautiful.titlebar_font, position = "left", size = anti_aliasing_padding, bg = "#00000000"}) : setup { + buttons = titlebars.buttons, + bg = anti_aliasing_padding_color, + widget = wibox.container.background() + } + -- Change the color of the bottom titlebar + bottom_titlebar_container.bg = anti_aliasing_padding_color + else + -- Change the titlebar color depending on focus + if beautiful.titlebar_bg_focus and beautiful.titlebar_bg_normal then + c:connect_signal("focus", function () + titlebar_container.bg = titlebar_bg_focus + bottom_titlebar_container.bg = titlebar_bg_focus + end) + c:connect_signal("unfocus", function () + titlebar_container.bg = titlebar_bg_normal + bottom_titlebar_container.bg = titlebar_bg_normal + end) + end + end + + + -- Create an anti-aliased bottom titlebar in order to round the bottom corners + awful.titlebar(c, {font = beautiful.titlebar_font, position = "bottom", size = anti_aliasing_padding}) : setup { + widget = bottom_titlebar_container } end end end) +-- Wrappers around awful.titlebar.hide and show +decorations = {} +if user.anti_aliasing then + decorations.show = function(c) + if wants_equal_padding(c) or wants_only_borders(c) then + awful.titlebar.show(c, "left") + awful.titlebar.show(c, "right") + end + awful.titlebar.show(c, "top") + awful.titlebar.show(c, "bottom") + end + decorations.hide = function(c) + if wants_equal_padding(c) or wants_only_borders(c) then + awful.titlebar.hide(c, "left") + awful.titlebar.hide(c, "right") + end + awful.titlebar.hide(c, "top") + awful.titlebar.hide(c, "bottom") + end + decorations.toggle = function(c) + if wants_equal_padding(c) or wants_only_borders(c) then + awful.titlebar.toggle(c, "left") + awful.titlebar.toggle(c, "right") + end + awful.titlebar.toggle(c, "top") + awful.titlebar.toggle(c, "bottom") + end +else + decorations.show = function(c) + awful.titlebar.show(c, beautiful.titlebar_position) + end + decorations.hide = function(c) + awful.titlebar.hide(c, beautiful.titlebar_position) + end + decorations.toggle = function(c) + awful.titlebar.toggle(c, beautiful.titlebar_position) + end +end + return titlebars diff --git a/misc/gtk/ephemeral/COPYING b/misc/gtk/ephemeral/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/misc/gtk/ephemeral/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/misc/gtk/ephemeral/chrome/chrome-scrollbar.crx b/misc/gtk/ephemeral/chrome/chrome-scrollbar.crx new file mode 100644 index 0000000..e9be4cb Binary files /dev/null and b/misc/gtk/ephemeral/chrome/chrome-scrollbar.crx differ diff --git a/misc/gtk/ephemeral/chrome/chrome-theme.crx b/misc/gtk/ephemeral/chrome/chrome-theme.crx new file mode 100644 index 0000000..e417ef4 Binary files /dev/null and b/misc/gtk/ephemeral/chrome/chrome-theme.crx differ diff --git a/misc/gtk/ephemeral/cinnamon/assets/add-workspace-active.svg b/misc/gtk/ephemeral/cinnamon/assets/add-workspace-active.svg new file mode 100644 index 0000000..19ca5af --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/add-workspace-active.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/add-workspace-hover.svg b/misc/gtk/ephemeral/cinnamon/assets/add-workspace-hover.svg new file mode 100644 index 0000000..f173a53 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/add-workspace-hover.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/add-workspace.svg b/misc/gtk/ephemeral/cinnamon/assets/add-workspace.svg new file mode 100644 index 0000000..228f759 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/add-workspace.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/calendar-arrow-left.svg b/misc/gtk/ephemeral/cinnamon/assets/calendar-arrow-left.svg new file mode 100644 index 0000000..5a138f9 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/calendar-arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/calendar-arrow-right.svg b/misc/gtk/ephemeral/cinnamon/assets/calendar-arrow-right.svg new file mode 100644 index 0000000..9b10ed5 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/calendar-arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/checkbox-off.svg b/misc/gtk/ephemeral/cinnamon/assets/checkbox-off.svg new file mode 100644 index 0000000..30a1180 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/checkbox-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/checkbox.svg b/misc/gtk/ephemeral/cinnamon/assets/checkbox.svg new file mode 100644 index 0000000..1cb97ec --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/checkbox.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/close-window.svg b/misc/gtk/ephemeral/cinnamon/assets/close-window.svg new file mode 100644 index 0000000..590aaa2 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/close-window.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/corner-ripple.png b/misc/gtk/ephemeral/cinnamon/assets/corner-ripple.png new file mode 100644 index 0000000..35d95ff Binary files /dev/null and b/misc/gtk/ephemeral/cinnamon/assets/corner-ripple.png differ diff --git a/misc/gtk/ephemeral/cinnamon/assets/radiobutton-off.svg b/misc/gtk/ephemeral/cinnamon/assets/radiobutton-off.svg new file mode 100644 index 0000000..ffe58e0 --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/radiobutton-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/radiobutton.svg b/misc/gtk/ephemeral/cinnamon/assets/radiobutton.svg new file mode 100644 index 0000000..d867e0f --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/radiobutton.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/toggle-off.svg b/misc/gtk/ephemeral/cinnamon/assets/toggle-off.svg new file mode 100644 index 0000000..af8218e --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/toggle-off.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/toggle-on.svg b/misc/gtk/ephemeral/cinnamon/assets/toggle-on.svg new file mode 100644 index 0000000..f866cfa --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/assets/toggle-on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/cinnamon/assets/trash-icon.png b/misc/gtk/ephemeral/cinnamon/assets/trash-icon.png new file mode 100644 index 0000000..270fe2e Binary files /dev/null and b/misc/gtk/ephemeral/cinnamon/assets/trash-icon.png differ diff --git a/misc/gtk/ephemeral/cinnamon/cinnamon.css b/misc/gtk/ephemeral/cinnamon/cinnamon.css new file mode 100644 index 0000000..0c4215f --- /dev/null +++ b/misc/gtk/ephemeral/cinnamon/cinnamon.css @@ -0,0 +1,1894 @@ +.notification-button, .modal-dialog-button { + color: #F8F8F2; + background-color: #3D4C5F; + border-color: transparent; + box-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12); + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; + font-size: 10.5pt; + font-weight: 500; + min-height: 32px; + padding: 0 16px; + border-radius: 6px; +} + +.notification-button:focus, .modal-dialog-button:focus { + color: #F8F8F2; + text-shadow: none; + icon-shadow: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); +} + +.notification-button:hover, .modal-dialog-button:hover, .notification-button:checked, .modal-dialog-button:checked { + color: #F8F8F2; + background-color: #3D4C5F; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); + text-shadow: none; + icon-shadow: none; +} + +.notification-button:active, .modal-dialog-button:active { + color: #F8F8F2; + background-color: #6a7582; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.notification-button:insensitive, .modal-dialog-button:insensitive { + color: rgba(248, 248, 242, 0.5); + background-color: rgba(248, 248, 242, 0.04); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.notification-icon-button, .keyboard-key, .sound-player StButton { + color: #F8F8F2; + background-color: #3D4C5F; + border-color: transparent; + box-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12); + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; + min-height: 32px; + min-width: 32px; + padding: 6px; + border-radius: 6px; +} + +.notification-icon-button:focus, .keyboard-key:focus, .sound-player StButton:focus { + color: #F8F8F2; + text-shadow: none; + icon-shadow: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); +} + +.notification-icon-button:hover, .keyboard-key:hover, .sound-player StButton:hover, .notification-icon-button:checked, .keyboard-key:checked, .sound-player StButton:checked { + color: #F8F8F2; + background-color: #3D4C5F; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); + text-shadow: none; + icon-shadow: none; +} + +.notification-icon-button:active, .keyboard-key:active, .sound-player StButton:active { + color: #F8F8F2; + background-color: #6a7582; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.notification-icon-button:insensitive, .keyboard-key:insensitive, .sound-player StButton:insensitive { + color: rgba(248, 248, 242, 0.5); + background-color: rgba(248, 248, 242, 0.04); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.slider, .popup-slider-menu-item, .sound-player .slider { + height: 20px; + color: #BD99FF; + -slider-height: 2px; + -slider-background-color: rgba(248, 248, 242, 0.3); + -slider-border-color: transparent; + -slider-active-background-color: #BD99FF; + -slider-active-border-color: transparent; + -slider-border-width: 0; + -slider-handle-radius: 6px; +} + +.separator, .popup-separator-menu-item { + -gradient-height: 1px; + -gradient-start: rgba(0, 0, 0, 0.26); + -gradient-end: rgba(0, 0, 0, 0.26); + -margin-horizontal: 4px; + height: 1.5em; +} + +#notification StEntry, .run-dialog-entry, #menu-search-entry { + transition-duration: 100ms; + background-color: rgba(255, 255, 255, 0.04); + border-color: transparent; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); + width: 250px; + padding: 4px 8px; + border-radius: 6px 6px 0 0; + color: rgba(248, 248, 242, 0.7); + caret-color: rgba(248, 248, 242, 0.7); + selection-background-color: rgba(248, 248, 242, 0.3); + selected-color: #F8F8F2; +} + +#notification StEntry:focus, .run-dialog-entry:focus, #menu-search-entry:focus { + border-color: transparent; + box-shadow: inset 0 -2px #F8F8F2; + padding: 4px 8px; + border-width: 0; + color: #F8F8F2; +} + +.desklet-with-borders, .desklet-with-borders-and-header, .desklet-header, .photoframe-box { + color: #F8F8F2; + border: none; + padding: 12px; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5); +} + +.calendar-change-month-back, .calendar-change-month-forward { + width: 16px; + height: 16px; + border-radius: 999px; + transition-duration: 100ms; +} + +.calendar-change-month-back:active, .calendar-change-month-forward:active { + background-color: rgba(248, 248, 242, 0.3); +} + +.menu, .popup-combo-menu { + background-color: #323F4E; + border: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 6px; + color: #F8F8F2; + box-shadow: 14px 14px 14px rgba(0, 0, 0, 0.5); +} + +.menu-application-button-label:ltr, .menu-category-button-label:ltr { + padding-left: 4px; +} + +.menu-application-button-label:rtl, .menu-category-button-label:rtl { + padding-right: 4px; +} + +.show-processes-dialog-subject, .mount-question-dialog-subject { + font-weight: bold; + color: #F8F8F2; + padding-top: 10px; + padding-left: 17px; + padding-bottom: 6px; +} + +.show-processes-dialog-subject:rtl, .mount-question-dialog-subject:rtl { + padding-left: 0; + padding-right: 17px; +} + +.show-processes-dialog-description, .mount-question-dialog-description { + color: #F8F8F2; + padding-left: 17px; + width: 28em; +} + +.check-box StBin, .check-box:focus StBin { + width: 24px; + height: 24px; + padding: 4px; + border-radius: 100px; + background-image: url(assets/checkbox-off.svg); +} + +.radiobutton StBin, .radiobutton:focus StBin { + width: 20px; + height: 20px; + padding: 6px; + border-radius: 100px; + background-image: url(assets/radiobutton-off.svg); +} + +.tile-preview, .tile-hud { + background-color: rgba(0, 0, 0, 0.3); + border: 2px solid rgba(0, 0, 0, 0.26); +} + +.tile-preview.snap, .tile-hud.snap { + background-color: rgba(0, 0, 0, 0.3); + border: 2px solid #BD99FF; +} + +.overview-empty-placeholder, .info-osd, .workspace-osd, #LookingGlassDialog, .switcher-list, .modal-dialog, .osd-window { + color: #F8F8F2; + background-color: #323F4E; + border: none; + border-radius: 6px; + padding: 12px; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5); +} + +.overview-empty-placeholder, .info-osd, .workspace-osd { + font-size: 15pt; + font-weight: 500; + text-align: center; + padding: 8px 10px; +} + +stage { + font-size: 10.5pt; + font-weight: 400; + font-family: "M+ 1c", Roboto, Cantarell, Sans-Serif; + color: #F8F8F2; +} + +.cinnamon-link { + color: #6faaff; + font-style: italic; +} + +.cinnamon-link:hover { + color: #F8F8F2; +} + +.label-shadow { + color: transparent; +} + +StScrollBar { + padding: 0px; +} + +StScrollBar StButton#vhandle, StScrollBar StButton#hhandle { + background-color: rgba(248, 248, 242, 0.5); + border-radius: 100px; + margin: 4px; +} + +StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover { + background-color: rgba(248, 248, 242, 0.7); +} + +StScrollBar StBin#trough { + margin: 4px; + border-radius: 100px; + background-color: rgba(248, 248, 242, 0.12); +} + +StScrollView.vfade { + -st-vfade-offset: 32px; +} + +StScrollView.hfade { + -st-hfade-offset: 32px; +} + +StScrollView StScrollBar { + min-width: 16px; + min-height: 16px; +} + +#Tooltip { + font-size: 9pt; + font-weight: 400; + padding: 6px 8px; + color: #F8F8F2; + text-align: center; + border-radius: 6px; + background-color: rgba(50, 63, 78, 0.9); +} + +.menu { + min-width: 100px; + margin: 4px; +} + +.menu-top-box { + spacing: 5px; +} + +.menu-systembuttons-box { + padding: 10px; +} + +.popup-sub-menu { + background-color: #323F4E; +} + +.popup-menu-arrow { + icon-size: 1.14em; +} + +.popup-combo-menu { + padding: 8px; +} + +.popup-menu-content { + padding: 8px; +} + +.popup-menu-item { + padding: 0.4em 4px; + spacing: 0.4em; + transition-duration: 100ms; +} + +.popup-menu-item:active { + background-color: rgba(248, 248, 242, 0.3); + color: #F8F8F2; + transition-duration: 200ms; +} + +.popup-menu-item:insensitive { + color: rgba(248, 248, 242, 0.5); +} + +.popup-image-menu-item { + color: rgba(248, 248, 242, 0.7); +} + +.popup-combobox-item { + padding: 0.4em 4px; +} + +.popup-device-menu-item { + spacing: .5em; +} + +.popup-inactive-menu-item { + color: #F8F8F2; +} + +.popup-inactive-menu-item:insensitive { + color: rgba(248, 248, 242, 0.5); +} + +.popup-subtitle-menu-item { + font-size: 10.5pt; + font-weight: 500; +} + +.popup-menu-icon { + icon-size: 1.14em; +} + +.popup-alternating-menu-item:alternate { + font-size: 10.5pt; + font-weight: 500; +} + +.toggle-switch { + width: 40px; + height: 20px; +} + +.toggle-switch-us, .toggle-switch-intl { + background-image: url(assets/toggle-off.svg); +} + +.toggle-switch-us:checked, .toggle-switch-intl:checked { + background-image: url(assets/toggle-on.svg); +} + +.nm-menu-item-icons { + spacing: .5em; + icon-size: 1.14em; +} + +#panel { + color: rgba(248, 248, 242, 0.7); + background-color: black; + height: 2.5em; + width: 3.2em; +} + +#panel:highlight { + background-color: rgba(248, 248, 242, 0.3); +} + +.panel-dummy { + background-color: rgba(255, 0, 0, 0.6); +} + +.panel-dummy:entered { + background-color: rgba(0, 255, 0, 0.6); +} + +.panelLeft { + spacing: 4px; +} + +.panelLeft:dnd { + background-color: rgba(255, 0, 0, 0.6); +} + +.panelLeft:ltr { + padding-right: 4px; +} + +.panelLeft:rtl { + padding-left: 4px; +} + +.panelLeft.vertical { + padding: 0; +} + +.panelCenter { + spacing: 4px; +} + +.panelCenter:dnd { + background-color: rgba(0, 255, 0, 0.6); +} + +.panelCenter.vertical { + padding-left: 0; + padding-right: 0; +} + +.panelRight { + spacing: 4px; +} + +.panelRight:dnd { + background-color: rgba(0, 0, 255, 0.6); +} + +.panelRight:ltr { + padding-left: 0; + spacing: 0; +} + +.panelRight:rtl { + padding-right: 0; + spacing: 0; +} + +.panelRight.vertical { + padding: 0; +} + +.panel-top .window-list-item-box:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .window-list-item-box:active:hover, .panel-top .window-list-item-box:checked:hover, .panel-top .window-list-item-box:focus:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .grouped-window-list-item-box:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .grouped-window-list-item-box:active:hover, .panel-top .grouped-window-list-item-box:checked:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .grouped-window-list-item-box:focus:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .grouped-window-list-badge { + margin-top: 2px; +} + +.panel-top .workspace-switcher, .panel-top .workspace-graph, .panel-top .workspace-button { + padding: 1px 4px; +} + +.panel-top .workspace-graph:hover, .panel-top .workspace-button:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .applet-box { + padding: 0 4px; +} + +.panel-top .applet-box:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .panel-launchers .launcher:hover { + box-shadow: 0 3px 0 0 #BD99FF inset; +} + +.panel-top .applet-separator { + padding: 3px 4px; +} + +.panel-top .systray:hover { + box-shadow: 0 4px 0 0 #BD99FF inset; +} + +.panel-bottom .window-list-item-box:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .window-list-item-box:active:hover, .panel-bottom .window-list-item-box:checked:hover, .panel-bottom .window-list-item-box:focus:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .grouped-window-list-item-box:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .grouped-window-list-item-box:active:hover, .panel-bottom .grouped-window-list-item-box:checked:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .grouped-window-list-item-box:focus:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .workspace-switcher, .panel-bottom .workspace-graph, .panel-bottom .workspace-button { + padding: 1px 4px; +} + +.panel-bottom .workspace-graph:hover, .panel-bottom .workspace-button:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .applet-box { + padding: 0 4px; +} + +.panel-bottom .applet-box:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .panel-launchers .launcher:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.panel-bottom .applet-separator { + padding: 3px 4px; +} + +.panel-bottom .systray:hover { + box-shadow: 0 4px 0 0 #BD99FF inset; +} + +.panel-left .window-list-item-box:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .window-list-item-box:active:hover, .panel-left .window-list-item-box:checked:hover, .panel-left .window-list-item-box:focus:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .grouped-window-list-item-box:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .grouped-window-list-item-box:active:hover, .panel-left .grouped-window-list-item-box:checked:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .grouped-window-list-item-box:focus:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .grouped-window-list-badge { + margin-left: 2px; +} + +.panel-left .workspace-switcher, .panel-left .workspace-graph, .panel-left .workspace-button { + padding: 4px 1px; + min-height: 1.2em; +} + +.panel-left .workspace-graph:hover, .panel-left .workspace-button:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .applet-box { + padding: 4px 0; +} + +.panel-left .applet-box:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .panel-launchers .launcher:hover { + box-shadow: 3px 0 0 0 #BD99FF inset; +} + +.panel-left .applet-separator { + padding: 4px 3px; +} + +.panel-left .systray:hover { + box-shadow: 4px 0 0 0 #BD99FF inset; +} + +.panel-right .window-list-item-box:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .window-list-item-box:active:hover, .panel-right .window-list-item-box:checked:hover, .panel-right .window-list-item-box:focus:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .grouped-window-list-item-box:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .grouped-window-list-item-box:active:hover, .panel-right .grouped-window-list-item-box:checked:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .grouped-window-list-item-box:focus:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .workspace-switcher, .panel-right .workspace-graph, .panel-right .workspace-button { + padding: 4px 1px; + min-height: 1.2em; +} + +.panel-right .workspace-graph:hover, .panel-right .workspace-button:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .applet-box { + padding: 4px 0; +} + +.panel-right .applet-box:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .panel-launchers .launcher:hover { + box-shadow: -3px 0 0 0 #BD99FF inset; +} + +.panel-right .applet-separator { + padding: 4px 3px; +} + +.panel-right .systray:hover { + box-shadow: -4px 0 0 0 #BD99FF inset; +} + +.panel-status-button { + font-size: 10.5pt; + font-weight: 500; + -natural-hpadding: 4px; + -minimum-hpadding: 4px; + color: rgba(248, 248, 242, 0.7); +} + +.panel-status-button:hover { + color: #F8F8F2; +} + +.system-status-icon { + icon-size: 1.14em; + padding: 0; + spacing: 0; +} + +.system-status-icon.warning { + color: #ee9c11; +} + +.system-status-icon.error { + color: #ff8c3e; +} + +#overview { + spacing: 12px; +} + +.window-caption { + font-size: 9pt; + font-weight: 400; + background-color: rgba(0, 0, 0, 0.01); + color: rgba(248, 248, 242, 0.7); + padding: 4px 6px; + text-align: center; + height: 1.5em; + -cinnamon-caption-spacing: 12px; +} + +.window-caption#selected, .window-caption:focus { + color: #F8F8F2; + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.workspace-controls { + visible-height: 32px; +} + +.workspace-thumbnails-background { + color: rgba(248, 248, 242, 0.7); + background-color: rgba(255, 255, 255, 0.1); + border: none; + padding: 8px; + border-radius: 6px 0 0 6px; +} + +.workspace-thumbnails-background:rtl { + border-radius: 0 6px 6px 0; +} + +.workspace-thumbnails { + spacing: 32px; +} + +.workspace-add-button { + background-image: url(assets/add-workspace.svg); + height: 200px; + width: 35px; + transition-duration: shorter_duration; +} + +.workspace-add-button:hover { + background-image: url(assets/add-workspace-hover.svg); +} + +.workspace-add-button:active { + background-image: url(assets/add-workspace-active.svg); +} + +.workspace-close-button, .window-close { + background-image: url(assets/close-window.svg); + height: 32px; + width: 32px; + -cinnamon-close-overlap: 20px; +} + +.workspace-close-button:rtl, .window-close:rtl { + -st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); +} + +.window-border { + border: 1px solid rgba(0, 0, 0, 0.26); +} + +.window-close-area { + background-image: url(assets/trash-icon.png); + background-size: 100px; + background-color: rgba(0, 0, 0, 0.3); + border: 1px solid rgba(0, 0, 0, 0.26); + border-bottom-width: 0; + border-radius: 20px 20px 0 0; + height: 120px; + width: 400px; +} + +.expo-background { + background-color: black; +} + +.workspace-overview-background-shade { + background-color: black; +} + +.expo-workspace-thumbnail-frame { + border: 1px solid rgba(0, 0, 0, 0.26); +} + +.expo-workspace-thumbnail-frame#active { + border: 1px solid #BD99FF; +} + +#LookingGlassDialog { + spacing: 4px; + padding: 8px; +} + +.calendar { + padding: 4px 8px; + spacing-rows: 2px; + spacing-columns: 4px; +} + +.datemenu-date-label { + font-size: 15pt; + font-weight: 500; + height: 24px; + margin: 2px; + padding: 6px 16px; + border-radius: 6px; + color: #F8F8F2; + text-align: center; +} + +.datemenu-date-label:focus { + background-color: rgba(248, 248, 242, 0.12); +} + +.calendar-month-label { + font-size: 10.5pt; + font-weight: 500; + height: 16px; + margin: 2px; + padding: 6px 16px; + border-radius: 6px; + color: #F8F8F2; + text-align: center; +} + +.calendar-month-label:focus { + background-color: rgba(248, 248, 242, 0.12); +} + +.calendar-change-month-back { + background-image: url(assets/calendar-arrow-left.svg); +} + +.calendar-change-month-back:rtl { + background-image: url(assets/calendar-arrow-right.svg); +} + +.calendar-change-month-forward { + background-image: url(assets/calendar-arrow-right.svg); +} + +.calendar-change-month-forward:rtl { + background-image: url(assets/calendar-arrow-left.svg); +} + +.calendar-day-base { + font-size: 9pt; + font-weight: 400; + text-align: center; + width: 28px; + height: 28px; + padding: 0; + margin: 2px; + border-radius: 100px; +} + +.calendar-day-base:hover, .calendar-day-base:focus { + background-color: rgba(248, 248, 242, 0.3); +} + +.calendar-day-base:active { + color: white; + background-color: #BD99FF; + border-color: transparent; +} + +.calendar-week-number { + font-size: 9pt; + font-weight: 400; + width: 21px; + height: 28px; + margin: 2px; + padding: 0; + border-radius: 100px; + background-color: transparent; + color: rgba(248, 248, 242, 0.5); + text-align: center; +} + +.calendar-day-heading { + font-size: 9pt; + font-weight: 400; + width: 28px; + height: 21px; + margin: 2px; + padding: 0; + border-radius: 100px; + background-color: transparent; + color: rgba(248, 248, 242, 0.5); + text-align: center; +} + +.calendar-day { + border-width: 0; +} + +.calendar-day-top { + border-top-width: 0; +} + +.calendar-day-left { + border-left-width: 0; +} + +.calendar-nonwork-day { + color: #F8F8F2; +} + +.calendar-today { + font-weight: bold; + border: none; +} + +.calendar-day-with-events { + color: #6faaff; + font-weight: normal; + text-decoration: underline; + background-image: none; +} + +.calendar-other-month-day { + color: rgba(248, 248, 242, 0.3); + opacity: 0.5; +} + +.calendar-week-number { + width: 28px; + height: 21px; + margin: 2px; + padding: 7px 0 0; + border-radius: 100px; + background-color: transparent; + color: rgba(248, 248, 242, 0.5); + font-size: inherit; + font-weight: bold; + text-align: center; +} + +#notification { + background-color: #323F4E; + border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.26); + padding: 8px; + spacing-rows: 4px; + spacing-columns: 8px; + margin-from-right-edge-of-screen: 20px; + width: 34em; + color: #F8F8F2; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); +} + +#notification.multi-line-notification { + padding-bottom: 8px; +} + +#notification .url-highlighter { + link-color: #6faaff; +} + +.notification-with-image { + min-height: 159px; + color: #F8F8F2; +} + +#notification-scrollview { + max-height: 10em; +} + +#notification-scrollview > .top-shadow { + height: 1em; +} + +#notification-scrollview > .bottom-shadow { + height: 1em; +} + +#notification-scrollview:ltr > StScrollBar { + padding-left: 6px; +} + +#notification-scrollview:rtl > StScrollBar { + padding-right: 6px; +} + +#notification-body { + spacing: 4px; +} + +#notification-actions { + spacing: 8px; +} + +.notification-icon-button > StIcon { + icon-size: 1.5em; +} + +#altTabPopup { + padding: 8px; + spacing: 16px; +} + +.switcher-list { + transition-duration: 100ms; +} + +.switcher-list .item-box { + padding: 8px; + border-radius: 6px; +} + +.switcher-list .item-box:selected { + background-color: rgba(248, 248, 242, 0.12); +} + +.switcher-list .thumbnail-box { + padding: 2px; + spacing: 4px; +} + +.switcher-list .thumbnail { + width: 256px; +} + +.switcher-list .separator { + width: 1px; + background: rgba(0, 0, 0, 0.26); +} + +.switcher-list-item-container { + spacing: 8px; +} + +.thumbnail-scroll-gradient-left { + background-gradient-direction: horizontal; + background-gradient-start: #333333; + background-gradient-end: rgba(51, 51, 51, 0); + border-radius: 6px; + border-radius-topright: 0; + border-radius-bottomright: 0; + width: 60px; +} + +.thumbnail-scroll-gradient-right { + background-gradient-direction: horizontal; + background-gradient-start: rgba(51, 51, 51, 0); + background-gradient-end: #333333; + border-radius: 6px; + border-radius-topleft: 0; + border-radius-bottomleft: 0; + width: 60px; +} + +.switcher-arrow { + border-color: transparent; + color: rgba(248, 248, 242, 0.7); +} + +.switcher-arrow:highlighted { + color: #F8F8F2; +} + +.switcher-preview-backdrop { + background-color: black; +} + +.ripple-box { + width: 104px; + height: 104px; + background-image: url(assets/corner-ripple.png); + background-color: #BD99FF; + border-radius: 52px; +} + +.modal-dialog { + padding: 16px 20px; +} + +.modal-dialog-button-box { + spacing: 16px; +} + +.run-dialog-label { + color: rgba(248, 248, 242, 0.7); + padding-bottom: .4em; +} + +.run-dialog-error-label { + color: #ff8c3e; +} + +.run-dialog-error-box { + padding-top: 16px; + spacing: 6px; +} + +.run-dialog-completion-box { + padding-left: 15px; +} + +.run-dialog { + border-radius: 6px; + padding: 16px 20px; +} + +.lightbox { + background-color: rgba(0, 0, 0, 0.3); +} + +.cinnamon-mount-operation-icon { + icon-size: 4.8em; +} + +.mount-password-reask { + color: #ee9c11; +} + +.show-processes-dialog { + spacing: 24px; +} + +.mount-question-dialog { + spacing: 24px; +} + +.show-processes-dialog-description:rtl { + padding-right: 17px; +} + +.mount-question-dialog-description:rtl { + padding-right: 17px; +} + +.show-processes-dialog-app-list { + max-height: 200px; + padding-top: 24px; + padding-left: 49px; + padding-right: 32px; +} + +.show-processes-dialog-app-list:rtl { + padding-right: 49px; + padding-left: 32px; +} + +.show-processes-dialog-app-list-item { + color: #F8F8F2; +} + +.show-processes-dialog-app-list-item:hover { + color: #F8F8F2; +} + +.show-processes-dialog-app-list-item:ltr { + padding-right: 1em; +} + +.show-processes-dialog-app-list-item:rtl { + padding-left: 1em; +} + +.show-processes-dialog-app-list-item-icon:ltr { + padding-right: 17px; +} + +.show-processes-dialog-app-list-item-icon:rtl { + padding-left: 17px; +} + +.magnifier-zoom-region { + border: 3px solid rgba(0, 0, 0, 0.26); +} + +.magnifier-zoom-region.full-screen { + border-width: 0; +} + +#keyboard { + background-color: black; +} + +.keyboard-key { + font-size: 10.5pt; + font-weight: 500; +} + +.keyboard-layout { + spacing: 8px; + padding: 8px; +} + +.keyboard-row { + spacing: 16px; +} + +.keyboard-subkeys { + color: inherit; + padding: 5px; + -arrow-border-radius: 0; + -arrow-background-color: transparent; + -arrow-border-width: 0; + -arrow-border-color: transparent; + -arrow-base: 0; + -arrow-rise: 0; + -boxpointer-gap: 5px; + background-color: #323F4E; + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24); +} + +.menu-favorites-box { + padding: 8px; +} + +.menu-favorites-button { + padding: 0.4em 4px; +} + +.menu-favorites-button:hover { + background-color: rgba(248, 248, 242, 0.12); + border-radius: 6px; + color: #F8F8F2; +} + +.menu-categories-box { + padding: 8px; +} + +.menu-applications-inner-box { + padding: 8px; +} + +.menu-applications-outer-box { + padding: 8px; + border-radius: 6px; +} + +.menu-application-button { + padding: 0.4em 4px; +} + +.menu-application-button:highlighted { + font-weight: bold; +} + +.menu-application-button-selected { + padding: 0.4em 4px; + background-color: rgba(248, 248, 242, 0.12); + border-radius: 6px; + color: #F8F8F2; +} + +.menu-application-button-selected:highlighted { + font-weight: bold; +} + +.menu-category-button { + padding: 0.4em 4px; +} + +.menu-category-button-greyed { + padding: 0.4em 4px; + color: rgba(248, 248, 242, 0.7); + font-style: italic; +} + +.menu-category-button-selected { + padding: 0.4em 4px; + background-color: rgba(248, 248, 242, 0.12); + border-radius: 6px; + color: #F8F8F2; +} + +.menu-selected-app-box { + padding: 8px; + margin-bottom: 4px; + text-align: right; +} + +.menu-selected-app-box:rtl { + text-align: left; +} + +.menu-selected-app-title { + font-size: 9pt; + font-weight: 400; +} + +.menu-selected-app-description { + font-size: 9pt; + font-weight: 400; + max-width: 150px; +} + +.menu-search-box:ltr { + padding-left: 30px; + padding-bottom: 5px; + padding-top: 5px; +} + +.menu-search-box:rtl { + padding-right: 30px; + padding-bottom: 5px; + padding-top: 5px; +} + +.menu-search-entry-icon { + icon-size: 1em; + padding: 0 0; + color: rgba(248, 248, 242, 0.5); +} + +.window-list-box { + font-size: 9pt; + font-weight: 400; + spacing: 4px; + padding: 0 3px; +} + +.window-list-box.vertical { + spacing: 4px; + padding: 3px 0; +} + +.window-list-box:highlight { + background: rgba(248, 248, 242, 0.3); + color: #F8F8F2; +} + +.window-list-item-box { + background-color: rgba(0, 0, 0, 0.01); + transition-duration: 100ms; +} + +.window-list-item-box:hover { + color: #F8F8F2; +} + +.window-list-item-box:active, .window-list-item-box:checked, .window-list-item-box:focus { + background-color: rgba(248, 248, 242, 0.3); + color: #F8F8F2; +} + +.window-list-item-box:active:hover, .window-list-item-box:checked:hover, .window-list-item-box:focus:hover { + color: #F8F8F2; +} + +.window-list-item-box .progress { + background-color: #23bd86; +} + +.window-list-item-box.top StLabel, .window-list-item-box.bottom StLabel { + padding-left: 3px; +} + +.window-list-item-demands-attention { + background-color: #bd99ff; + color: rgba(248, 248, 242, 0.7); +} + +.window-list-preview { + background-color: #323F4E; + border-radius: 6px; + padding: 10px 15px; + spacing: 1em; + color: #F8F8F2; + box-shadow: 14px 14px 14px rgba(0, 0, 0, 0.5); +} + +.grouped-window-list-thumbnail-label { + padding-left: 3px; + padding-bottom: 6px; +} + +.grouped-window-list-number-label { + font-size: 9pt; + font-weight: 400; + z-index: 99; +} + +.grouped-window-list-list-button-label { + padding-left: 3px; +} + +.grouped-window-list-badge { + border-radius: 9999px; + background-color: #121f2e; +} + +.grouped-window-list-thumbnail-alert { + background: #ee9c11; +} + +.grouped-window-list-item-box { + background-color: rgba(0, 0, 0, 0.01); + transition-duration: 100ms; +} + +.grouped-window-list-item-box:hover { + color: #F8F8F2; +} + +.grouped-window-list-item-box:active, .grouped-window-list-item-box:checked { + background-color: rgba(248, 248, 242, 0.12); +} + +.grouped-window-list-item-box:active:hover, .grouped-window-list-item-box:checked:hover { + color: #F8F8F2; +} + +.grouped-window-list-item-box:focus { + background-color: rgba(248, 248, 242, 0.3); + color: #F8F8F2; +} + +.grouped-window-list-item-box:focus:hover { + color: #F8F8F2; +} + +.grouped-window-list-item-box .progress { + background-color: #23bd86; +} + +.grouped-window-list-item-demands-attention { + background-color: #bd99ff; + color: rgba(248, 248, 242, 0.7); +} + +.grouped-window-list-thumbnail-menu { + padding: 20px; + border: none; + border-radius: 6px; + color: rgba(248, 248, 242, 0.7); + background: none; +} + +.grouped-window-list-thumbnail-menu .item-box { + padding: 8px; + spacing: 2px; + border-radius: 6px; +} + +.grouped-window-list-thumbnail-menu .item-box:outlined { + border: 2px solid rgba(0, 0, 0, 0.26); + color: #F8F8F2; +} + +.grouped-window-list-thumbnail-menu .item-box:selected { + background: rgba(248, 248, 242, 0.12); + color: #F8F8F2; +} + +.grouped-window-list-thumbnail-menu .item-box > StBoxLayout:ltr { + margin: 1px 0 0 6px; +} + +.grouped-window-list-thumbnail-menu .item-box > StBoxLayout:rtl { + margin: 1px 6px 0 0; +} + +.grouped-window-list-thumbnail-menu .item-box > StBoxLayout StLabel { + padding-bottom: 2px; +} + +.grouped-window-list-thumbnail-menu .item-box > StButton:ltr { + margin: 1px 6px 0 0; +} + +.grouped-window-list-thumbnail-menu .item-box > StButton:rtl { + margin: 1px 0 0 6px; +} + +.grouped-window-list-thumbnail-menu .thumbnail-box { + padding: 2px; +} + +.grouped-window-list-thumbnail-menu .thumbnail { + width: 256px; +} + +.grouped-window-list-thumbnail-menu .separator { + width: 1px; + background: rgba(0, 0, 0, 0.26); +} + +.sound-player StButton:small { + min-width: 24px; + min-height: 24px; + padding: 4px; +} + +.sound-player StButton:small StIcon { + icon-size: 1em; +} + +.sound-player StButton StIcon { + icon-size: 1.5em; +} + +.sound-player .slider { + height: 5px; +} + +.sound-player StBoxLayout { + spacing: 0.5em; +} + +.sound-player > StBoxLayout { + padding: 5px; +} + +.sound-player-generic-coverart { + background: rgba(0, 0, 0, 0.2); +} + +.sound-player-overlay { + background-color: #323F4E; + min-width: 300px; + padding: 12px 16px; + spacing: 0.5em; + color: rgba(248, 248, 242, 0.7); +} + +.workspace-button { + background-color: #121f2e; + width: 2em; + height: 1em; + color: rgba(248, 248, 242, 0.7); + margin: 2px; +} + +.workspace-button:outlined { + background-color: rgba(248, 248, 242, 0.3); + color: #F8F8F2; +} + +.workspace-graph { + background-color: black; +} + +.workspace-graph .workspace { + background-color: #121f2e; + border: 1px solid rgba(0, 0, 0, 0.26); +} + +.workspace-graph .workspace:active { + background-color: rgba(248, 248, 242, 0.3); + border: 1px solid rgba(0, 0, 0, 0.26); +} + +.workspace-graph .workspace:active .windows { + -active-window-background: rgba(255, 255, 255, 0.8); + -active-window-border: rgba(0, 0, 0, 0.9); + -inactive-window-background: rgba(140, 140, 140, 0.8); + -inactive-window-border: rgba(0, 0, 0, 0.7); +} + +.workspace-graph .workspace .windows { + -active-window-background: rgba(140, 140, 140, 0.8); + -active-window-border: rgba(0, 0, 0, 0.7); + -inactive-window-background: rgba(140, 140, 140, 0.8); + -inactive-window-border: rgba(0, 0, 0, 0.7); +} + +.panel-launchers { + padding: 0 4px; + spacing: 4px; + transition-duration: 100ms; +} + +.panel-launchers .launcher { + background-color: rgba(0, 0, 0, 0.01); +} + +.panel-launchers.vertical { + padding: 4px 0; + spacing: 4px; +} + +.panel-launchers.vertical .launcher .icon-box { + padding-top: 0; +} + +.applet-separator-line, .applet-separator-line-vertical { + width: 2px; + background: rgba(248, 248, 242, 0.12); +} + +.applet-spacer:highlight { + background: rgba(255, 255, 255, 0.1); +} + +.applet-box { + background-color: rgba(0, 0, 0, 0.01); + color: rgba(248, 248, 242, 0.7); + transition-duration: 100ms; +} + +.applet-box:checked { + color: #F8F8F2; +} + +.applet-box:checked .applet-label { + color: #F8F8F2; +} + +.applet-box:hover { + color: #F8F8F2; +} + +.applet-box:hover .applet-label { + color: #F8F8F2; +} + +.applet-box:highlight { + background: rgba(248, 248, 242, 0.3); + color: #F8F8F2; +} + +.applet-box:highlight .applet-label { + color: #F8F8F2; +} + +.applet-label { + font-size: 10.5pt; + font-weight: 500; + color: rgba(248, 248, 242, 0.7); +} + +.applet-icon { + color: rgba(248, 248, 242, 0.7); + padding: 0; + spacing: 0; + icon-size: 22px; +} + +.desklet { + font-size: 9pt; + font-weight: 400; + color: #F8F8F2; + border: none; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5); + padding: 12px; + background-color: rgba(0, 0, 0, 0.3); + border-radius: 6px; +} + +.desklet-with-borders { + font-size: 9pt; + font-weight: 400; + background-color: #323F4E; + border-radius: 6px; +} + +.desklet-with-borders:highlight { + background-color: rgba(255, 255, 255, 0.1); +} + +.desklet-with-borders-and-header { + font-size: 9pt; + font-weight: 400; + background-color: #323F4E; + border-radius-bottomleft: 2px; + border-radius-bottomright: 2px; +} + +.desklet-with-borders-and-header:highlight { + background-color: rgba(255, 255, 255, 0.1); +} + +.desklet-header { + font-size: 15pt; + font-weight: 500; + background-color: #323F4E; + border-radius-topleft: 2px; + border-radius-topright: 2px; +} + +.desklet-header:highlight { + background-color: rgba(255, 255, 255, 0.1); +} + +.photoframe-box { + background-color: #323F4E; + border-radius: 6px; +} + +.photoframe-box:highlight { + background-color: rgba(255, 255, 255, 0.1); +} + +.desklet-drag-placeholder { + border: 2px solid #BD99FF; + background-color: rgba(0, 0, 0, 0.3); + border-radius: 6px; +} + +.launcher { + padding: 1px; +} + +.launcher .icon-box { + padding-top: 2px; +} + +.about-content { + min-width: 250px; + min-height: 150px; + spacing: 8px; + padding-bottom: 16px; +} + +.about-title { + font-size: 15pt; + font-weight: 500; +} + +.about-uuid { + font-size: 9pt; + font-weight: 400; +} + +.about-icon { + padding-right: 20px; +} + +.about-scrollBox { + border: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 6px; +} + +.about-scrollBox-innerBox { + padding: 1.2em; + spacing: 1.2em; +} + +.about-description { + padding-top: 4px; +} + +.about-version { + padding-left: 7px; +} + +.expo-workspaces-name-entry { + font-size: 10.5pt; + font-weight: 400; + background-color: rgba(0, 0, 0, 0.01); + color: rgba(248, 248, 242, 0.7); + padding: 4px 6px; + selection-background-color: rgba(248, 248, 242, 0.3); + selected-color: #F8F8F2; + caret-color: rgba(248, 248, 242, 0.7); + text-align: center; + height: 1.5em; + border-radius: 6px; + -cinnamon-caption-spacing: 12px; +} + +.expo-workspaces-name-entry#selected { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.3); +} + +.expo-workspaces-name-entry:focus { + color: #F8F8F2; + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.expo-workspaces-name-entry:hover { + box-shadow: 0 -3px 0 0 #BD99FF inset; +} + +.notification-applet-padding { + padding: .5em 1em; +} + +.notification-applet-container { + max-height: 100px; +} + +.check-box CinnamonGenericContainer { + spacing: 8px; +} + +.check-box:focus:checked StBin { + background-image: url(assets/checkbox.svg); +} + +.check-box:checked StBin { + background-image: url(assets/checkbox.svg); +} + +.radiobutton CinnamonGenericContainer { + spacing: 8px; +} + +.radiobutton:focus:checked StBin { + background-image: url(assets/radiobutton.svg); +} + +.radiobutton:checked StBin { + background-image: url(assets/radiobutton.svg); +} + +.flashspot { + background-color: #BD99FF; +} + +.osd-window { + spacing: 1em; + padding: 16px; +} + +.osd-window .level { + height: 0.7em; + border-radius: 0.3em; + background-color: rgba(248, 248, 242, 0.3); +} + +.osd-window .level-bar { + border-radius: 0.3em; + background-color: #BD99FF; +} + +.tile-hud:top { + border-top-width: 0; + border-radius: 0 0 10px 10px; +} + +.tile-hud:bottom { + border-bottom-width: 0; + border-radius: 6px 6px 0 0; +} + +.tile-hud:left { + border-left-width: 0; + border-radius: 0 10px 10px 0; +} + +.tile-hud:right { + border-right-width: 0; + border-radius: 10px 0 0 10px; +} + +.tile-hud:top-left { + border-top-width: 0; + border-left-width: 0; + border-radius: 0 0 10px 0; +} + +.tile-hud:top-right { + border-top-width: 0; + border-right-width: 0; + border-radius: 0 0 0 10px; +} + +.tile-hud:bottom-left { + border-bottom-width: 0; + border-left-width: 0; + border-radius: 0 10px 0 0; +} + +.tile-hud:bottom-right { + border-bottom-width: 0; + border-right-width: 0; + border-radius: 10px 0 0 0; +} + +.systray { + spacing: 4px; +} + +.user-box { + padding: 0.4em 1.3em; + spacing: 10px; +} + +.user-icon { + padding: 4px; + border: none; +} + +.user-label { + font-size: 10.5pt; + font-weight: 500; + color: #F8F8F2; +} diff --git a/misc/gtk/ephemeral/cinnamon/thumbnail.png b/misc/gtk/ephemeral/cinnamon/thumbnail.png new file mode 100644 index 0000000..ac66aa1 Binary files /dev/null and b/misc/gtk/ephemeral/cinnamon/thumbnail.png differ diff --git a/misc/gtk/ephemeral/gnome-shell/README.md b/misc/gtk/ephemeral/gnome-shell/README.md new file mode 100644 index 0000000..c25ca54 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/README.md @@ -0,0 +1,64 @@ +# How to change the GDM theme + +To change the GDM (lock/login screen) theme, you need to replace the system's _default_ GNOME Shell theme. + +## :warning: Cautions :warning: + +- If the replacement fails, your desktop environment will not work properly. So please **be careful** if doing this. +- When applying this, other third-party GNOME Shell themes would look broken until you restore to the original theme. +- If GNOME Shell has been updated and restored to the original theme, you will need to install this again. + +## Requirements + +- `glib-compile-resources` — The package name depends on the distro. + - `glib2` (Arch Linux) + - `glib2-devel` (Fedora, openSUSE, etc.) + - `libglib2.0-dev` (Debian, Ubuntu, etc.) +- `libxml2-utils` — Ubuntu users only. + +## Installation + +1. **Back up** the original theme file(s) first. If you are already using a custom GDM theme, skip this: + + ```sh + sudo cp -av /usr/share/gnome-shell/gnome-shell-theme.gresource{,~} + + # For Ubuntu 17.10 or 18.04, you also need the following: + sudo cp -av /usr/share/gnome-shell/theme/ubuntu.css{,~} + + # For Ubuntu 18.10, you also need the following: + sudo cp -av /usr/share/gnome-shell/theme/Yaru/gnome-shell.css{,~} + ``` + +2. Select a **GTK+** theme to decide which variant to install. +3. Replace the default theme file(s): + + ```sh + GTK_THEME=$(gsettings get org.gnome.desktop.interface gtk-theme | sed "s/'//g") + cd /usr/share/themes/${GTK_THEME}/gnome-shell + sudo glib-compile-resources --target=/usr/share/gnome-shell/gnome-shell-theme.gresource gnome-shell-theme.gresource.xml + + # For Ubuntu 17.10 or 18.04, you also need the following: + sudo cp -av gnome-shell.css /usr/share/gnome-shell/theme/ubuntu.css + + # For Ubuntu 18.10, you also need the following: + sudo cp -av gnome-shell.css /usr/share/gnome-shell/theme/Yaru/gnome-shell.css + ``` + +4. Reload the theme. If you are running GNOME Shell, press Alt + F2 then type `rt`. + +## Uninstallation + +1. Restore to the original theme file(s) from the backup: + + ```sh + sudo mv -av /usr/share/gnome-shell/gnome-shell-theme.gresource{~,} + + # For Ubuntu 17.10 or 18.04, you also need the following: + sudo mv -av /usr/share/gnome-shell/theme/ubuntu.css{~,} + + # For Ubuntu 18.10, you also need the following: + sudo mv -av /usr/share/gnome-shell/theme/Yaru/gnome-shell.css{~,} + ``` + +2. Reload the theme. If you are running GNOME Shell, press Alt + F2 then type `rt`. diff --git a/misc/gtk/ephemeral/gnome-shell/assets/calendar-arrow-left.svg b/misc/gtk/ephemeral/gnome-shell/assets/calendar-arrow-left.svg new file mode 100644 index 0000000..2545c0c --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/calendar-arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/calendar-arrow-right.svg b/misc/gtk/ephemeral/gnome-shell/assets/calendar-arrow-right.svg new file mode 100644 index 0000000..e14c54d --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/calendar-arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/checkbox-off.svg b/misc/gtk/ephemeral/gnome-shell/assets/checkbox-off.svg new file mode 100644 index 0000000..ce2ebec --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/checkbox-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/checkbox.svg b/misc/gtk/ephemeral/gnome-shell/assets/checkbox.svg new file mode 100644 index 0000000..1cb97ec --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/checkbox.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/close.svg b/misc/gtk/ephemeral/gnome-shell/assets/close.svg new file mode 100644 index 0000000..b0b02eb --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash-placeholder.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash-placeholder.svg new file mode 100644 index 0000000..729e4c1 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash-placeholder.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running1-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running1-focused.svg new file mode 100644 index 0000000..8da618f --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running1-focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running1.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running1.svg new file mode 100644 index 0000000..eb1dfce --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running1.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running2-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running2-focused.svg new file mode 100644 index 0000000..3d0bf5f --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running2-focused.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running2.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running2.svg new file mode 100644 index 0000000..1b85474 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running3-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running3-focused.svg new file mode 100644 index 0000000..40b5bba --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running3-focused.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running3.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running3.svg new file mode 100644 index 0000000..f4ac501 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running4-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running4-focused.svg new file mode 100644 index 0000000..e88c1c1 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running4-focused.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running4.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running4.svg new file mode 100644 index 0000000..8d43f2a --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/bottom-running4.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running1-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running1-focused.svg new file mode 100644 index 0000000..4d53988 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running1-focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running1.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running1.svg new file mode 100644 index 0000000..46f62c4 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running1.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running2-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running2-focused.svg new file mode 100644 index 0000000..3fcc095 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running2-focused.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running2.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running2.svg new file mode 100644 index 0000000..b7c77de --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running3-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running3-focused.svg new file mode 100644 index 0000000..5f4292b --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running3-focused.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running3.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running3.svg new file mode 100644 index 0000000..d6596a2 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running4-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running4-focused.svg new file mode 100644 index 0000000..4883b79 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running4-focused.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running4.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running4.svg new file mode 100644 index 0000000..8227655 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/left-running4.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running1-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running1-focused.svg new file mode 100644 index 0000000..57516fe --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running1-focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running1.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running1.svg new file mode 100644 index 0000000..aa50685 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running1.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running2-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running2-focused.svg new file mode 100644 index 0000000..a7d4c5f --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running2-focused.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running2.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running2.svg new file mode 100644 index 0000000..d9a8914 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running3-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running3-focused.svg new file mode 100644 index 0000000..456e82e --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running3-focused.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running3.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running3.svg new file mode 100644 index 0000000..62fc754 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running4-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running4-focused.svg new file mode 100644 index 0000000..ad0fb1e --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running4-focused.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running4.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running4.svg new file mode 100644 index 0000000..d58d178 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/right-running4.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running1-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running1-focused.svg new file mode 100644 index 0000000..5580e35 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running1-focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running1.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running1.svg new file mode 100644 index 0000000..340ac9f --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running1.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running2-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running2-focused.svg new file mode 100644 index 0000000..4cf03b0 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running2-focused.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running2.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running2.svg new file mode 100644 index 0000000..1be3960 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running3-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running3-focused.svg new file mode 100644 index 0000000..171c1dd --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running3-focused.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running3.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running3.svg new file mode 100644 index 0000000..ac93069 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running4-focused.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running4-focused.svg new file mode 100644 index 0000000..ea3d762 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running4-focused.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running4.svg b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running4.svg new file mode 100644 index 0000000..3f3c478 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/dash/top-running4.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/key-enter.svg b/misc/gtk/ephemeral/gnome-shell/assets/key-enter.svg new file mode 100644 index 0000000..286d8d8 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/key-enter.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/key-hide.svg b/misc/gtk/ephemeral/gnome-shell/assets/key-hide.svg new file mode 100644 index 0000000..fb4aa2e --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/key-hide.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/key-layout.svg b/misc/gtk/ephemeral/gnome-shell/assets/key-layout.svg new file mode 100644 index 0000000..5305076 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/key-layout.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/key-shift-latched-uppercase.svg b/misc/gtk/ephemeral/gnome-shell/assets/key-shift-latched-uppercase.svg new file mode 100644 index 0000000..b1028a9 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/key-shift-latched-uppercase.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/key-shift-uppercase.svg b/misc/gtk/ephemeral/gnome-shell/assets/key-shift-uppercase.svg new file mode 100644 index 0000000..36824f8 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/key-shift-uppercase.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/key-shift.svg b/misc/gtk/ephemeral/gnome-shell/assets/key-shift.svg new file mode 100644 index 0000000..24f1b86 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/key-shift.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/more-results.svg b/misc/gtk/ephemeral/gnome-shell/assets/more-results.svg new file mode 100644 index 0000000..66c163d --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/more-results.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/no-events.svg b/misc/gtk/ephemeral/gnome-shell/assets/no-events.svg new file mode 100644 index 0000000..ec436bc --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/no-events.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/no-notifications.svg b/misc/gtk/ephemeral/gnome-shell/assets/no-notifications.svg new file mode 100644 index 0000000..adfd378 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/no-notifications.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/process-working.svg b/misc/gtk/ephemeral/gnome-shell/assets/process-working.svg new file mode 100644 index 0000000..03bd956 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/process-working.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/toggle-off.svg b/misc/gtk/ephemeral/gnome-shell/assets/toggle-off.svg new file mode 100644 index 0000000..d7c9362 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/toggle-off.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/toggle-on.svg b/misc/gtk/ephemeral/gnome-shell/assets/toggle-on.svg new file mode 100644 index 0000000..f866cfa --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/toggle-on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/window-close-active.svg b/misc/gtk/ephemeral/gnome-shell/assets/window-close-active.svg new file mode 100644 index 0000000..735cce4 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/window-close-active.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/assets/window-close.svg b/misc/gtk/ephemeral/gnome-shell/assets/window-close.svg new file mode 100644 index 0000000..590aaa2 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/assets/window-close.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/misc/gtk/ephemeral/gnome-shell/extensions/workspaces-to-dock/workspaces-to-dock.css b/misc/gtk/ephemeral/gnome-shell/extensions/workspaces-to-dock/workspaces-to-dock.css new file mode 100644 index 0000000..a1a2da5 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/extensions/workspaces-to-dock/workspaces-to-dock.css @@ -0,0 +1,519 @@ +#workspacestodockTriggerSpacer { + background-color: none; +} + +#workspacestodockContainerWrapper { + background-color: none; +} + +#workspacestodockContainer { + background-color: none; +} + +#workspacestodockDockWrapper { +} + +#workspacestodockDock { + padding: 0; +} + +#workspacestodockDock .workspace-thumbnails { + background-color: #37474F; + background-color: rgba(0, 0, 0, 0.6); +} + +#workspacestodockDock:overview .workspace-thumbnails { + background-color: rgba(255, 255, 255, 0.1); +} + +#workspacestodockDock.fullheight:overview .workspace-thumbnails { + background-color: transparent; +} + +#workspacestodockDock .workspace-thumbnail-indicator { + border-left-width: 0; +} + +#workspacestodockDock.right .workspace-thumbnail-indicator { + border-left-width: 2px; +} + +#workspacestodockDock.left .workspace-thumbnail-indicator { + border-right-width: 2px; +} + +#workspacestodockDock.top .workspace-thumbnail-indicator { + border-bottom-width: 2px; +} + +#workspacestodockDock.bottom .workspace-thumbnail-indicator { + border-top-width: 2px; +} + +#workspacestodockDock.right .workspace-thumbnails { + border-radius: 4px 0 0 4px; +} + +#workspacestodockDock.left .workspace-thumbnails { + border-radius: 0 4px 4px 0; +} + +#workspacestodockDock.top .workspace-thumbnails { + border-radius: 0 0 4px 4px; +} + +#workspacestodockDock.bottom .workspace-thumbnails { + border-radius: 4px 4px 0 0; +} + +#workspacestodockDock.right.inside .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.left.inside .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.top.inside .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.bottom.inside .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.right.fullheight .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.left.fullheight .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.top.fullheight .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock.bottom.fullheight .workspace-thumbnails { + border-radius: 0; +} + +#workspacestodockDock .workspacestodock-shortcuts-panel { + border: 0 solid rgba(255, 255, 255, 0.12); +} + +#workspacestodockDock.right .workspacestodock-shortcuts-panel { + border-radius: 0; + padding: 0; + spacing: 0; + border-left: 1px; + border-right: none; +} + +#workspacestodockDock.left .workspacestodock-shortcuts-panel { + border-radius: 0; + padding: 0; + spacing: 0; + border-left: none; + border-right: 1px; +} + +#workspacestodockDock.top .workspacestodock-shortcuts-panel { + border-radius: 0; + padding: 0; + spacing: 0; + border-top: none; + border-bottom: 1px; +} + +#workspacestodockDock.bottom .workspacestodock-shortcuts-panel { + border-radius: 0; + padding: 0; + spacing: 0; + border-top: 1px; + border-bottom: none; +} + +#workspacestodockDock.right.inside .workspacestodock-shortcuts-panel { + border-radius: 4px 0 0 4px; + padding: 0; + spacing: 0; + border-left: none; + border-right: 1px; +} + +#workspacestodockDock.left.inside .workspacestodock-shortcuts-panel { + border-radius: 0 4px 4px 0; + padding: 0; + spacing: 0; + border-left: 1px; + border-right: none; +} + +#workspacestodockDock.top.inside .workspacestodock-shortcuts-panel { + border-radius: 0 0 4px 4px; + padding: 0; + spacing: 0; + border-top: 1px; + border-bottom: none; +} + +#workspacestodockDock.bottom.inside .workspacestodock-shortcuts-panel { + border-radius: 4px 4px 0 0; + padding: 0; + spacing: 0; + border-top: none; + border-bottom: 1px; +} + +#workspacestodockDock.right.fullheight .workspacestodock-shortcuts-panel { + border-radius: 0; +} + +#workspacestodockDock.left.fullheight .workspacestodock-shortcuts-panel { + border-radius: 0; +} + +#workspacestodockDock.top.fullheight .workspacestodock-shortcuts-panel { + border-radius: 0; +} + +#workspacestodockDock.bottom.fullheight .workspacestodock-shortcuts-panel { + border-radius: 0; +} + +#workspacestodockDock .workspacestodock-shortcuts-panel > * { + border: 0 !important; +} + +.workspacestodock-shortcuts-panel-popupmenu { + padding: 2px; + spacing: 0; +} + +.workspacestodock-shortcuts-panel-favorites { +} + +.workspacestodock-shortcuts-panel-running { +} + +.workspacestodock-shortcuts-panel-places { +} + +/* shortcuts panel buttons */ +#workspacestodockDock .app-well-app { +} + +#workspacestodockDock .workspacestodock-shortcuts-panel > StButton { + background-size: cover; +} + +#workspacestodockDock.left .workspacestodock-shortcuts-panel > StButton, +#workspacestodockDock.right .workspacestodock-shortcuts-panel > StButton { + padding: 3px 6px; +} + +#workspacestodockDock.left .workspacestodock-shortcuts-panel > StButton:first-child, +#workspacestodockDock.right .workspacestodock-shortcuts-panel > StButton:first-child { + padding: 6px 6px 3px 6px; +} + +#workspacestodockDock.left .workspacestodock-shortcuts-panel > StButton:last-child, +#workspacestodockDock.right .workspacestodock-shortcuts-panel > StButton:last-child { + padding: 3px 6px 6px 6px; +} + +#workspacestodockDock.top .workspacestodock-shortcuts-panel > StButton, +#workspacestodockDock.bottom .workspacestodock-shortcuts-panel > StButton { + padding: 6px 3px; +} + +#workspacestodockDock.top .workspacestodock-shortcuts-panel > StButton:first-child, +#workspacestodockDock.bottom .workspacestodock-shortcuts-panel > StButton:first-child { + padding: 6px 3px 6px 6px; +} + +#workspacestodockDock.top .workspacestodock-shortcuts-panel > StButton:last-child, +#workspacestodockDock.bottom .workspacestodock-shortcuts-panel > StButton:last-child { + padding: 6px 6px 6px 3px; +} + +.workspacestodock-shortcut-button { +} + +.workspacestodock-shortcut-button-symbolic { +} + +/* shortcuts panel button icons */ +#workspacestodockDock .app-well-app > .overview-icon { +} + +.workspacestodock-shortcut-button-icon { + padding: 6px; +} + +.workspacestodock-shortcut-button-symbolic-icon { + padding: 8px; +} + +/* shortcuts panel items */ +#workspacestodockDock .popup-separator-menu-item { + margin: 0; +} + +.workspacestodock-shortcut-panel-separator { + -margin-horizontal: 0; +} + +.workspacestodock-shortcut-panel-filler { + -margin-horizontal: 0; + height: 0; + padding: 0; + border: none; +} + +/* shortcuts panel button window count indicators */ +#workspacestodockDock.right .workspacestodock-shortcut-button-windowcount-image-1 { + background-image: url("../../assets/dash/right-running1.svg"); +} + +#workspacestodockDock.left .workspacestodock-shortcut-button-windowcount-image-1 { + background-image: url("../../assets/dash/left-running1.svg"); +} + +#workspacestodockDock.top .workspacestodock-shortcut-button-windowcount-image-1 { + background-image: url("../../assets/dash/top-running1.svg"); +} + +#workspacestodockDock.bottom .workspacestodock-shortcut-button-windowcount-image-1 { + background-image: url("../../assets/dash/bottom-running1.svg"); +} + +#workspacestodockDock.right .workspacestodock-shortcut-button-windowcount-image-2 { + background-image: url("../../assets/dash/right-running2.svg"); +} + +#workspacestodockDock.left .workspacestodock-shortcut-button-windowcount-image-2 { + background-image: url("../../assets/dash/left-running2.svg"); +} + +#workspacestodockDock.top .workspacestodock-shortcut-button-windowcount-image-2 { + background-image: url("../../assets/dash/top-running2.svg"); +} + +#workspacestodockDock.bottom .workspacestodock-shortcut-button-windowcount-image-2 { + background-image: url("../../assets/dash/bottom-running2.svg"); +} + +#workspacestodockDock.right .workspacestodock-shortcut-button-windowcount-image-3 { + background-image: url("../../assets/dash/right-running3.svg"); +} + +#workspacestodockDock.left .workspacestodock-shortcut-button-windowcount-image-3 { + background-image: url("../../assets/dash/left-running3.svg"); +} + +#workspacestodockDock.top .workspacestodock-shortcut-button-windowcount-image-3 { + background-image: url("../../assets/dash/top-running3.svg"); +} + +#workspacestodockDock.bottom .workspacestodock-shortcut-button-windowcount-image-3 { + background-image: url("../../assets/dash/bottom-running3.svg"); +} + +#workspacestodockDock.right .workspacestodock-shortcut-button-windowcount-image-4 { + background-image: url("../../assets/dash/right-running4.svg"); +} + +#workspacestodockDock.left .workspacestodock-shortcut-button-windowcount-image-4 { + background-image: url("../../assets/dash/left-running4.svg"); +} + +#workspacestodockDock.top .workspacestodock-shortcut-button-windowcount-image-4 { + background-image: url("../../assets/dash/top-running4.svg"); +} + +#workspacestodockDock.bottom .workspacestodock-shortcut-button-windowcount-image-4 { + background-image: url("../../assets/dash/bottom-running4.svg"); +} + +.workspacestodock-workspace-caption-container { + padding: 0; +} + +.workspacestodock-workspace-caption-background { + background-color: rgba(0, 0, 0, 0.6); + /* border-radius: 0 0 4px 4px; */ +} + +.workspacestodock-workspace-caption-background.caption-top { + /* border-radius: 4px 4px 0 0; */ +} + +.workspacestodock-workspace-caption { +} + +/* caption window apps (taskbar) */ +.workspacestodock-caption-windowapps { + padding: 0; +} + +.workspacestodock-caption-windowapps-menu { + -boxpointer-gap: 12px; +} + +.workspacestodock-caption-windowapps-menu .popup-menu-item { + min-height: 24px; + padding-top: 4px; + padding-bottom: 4px; +} + +.workspacestodock-caption-windowapps-menu .popup-menu-item:active { + background-color: rgba(0, 0, 0, 0.12); +} + +.workspacestodock-caption-windowapps-menu .popup-menu-item.selected:active { + background-color: rgba(0, 0, 0, 0.24); +} + +.workspacestodock-caption-windowapps-menu-item { + /*fallback class for GS34 since it can't override gnome shell class 'popup-menu-item' */ +} + +.workspacestodock-caption-windowapps-menu-item:active { + /*fallback class for GS34 since it can't override gnome shell class 'popup-menu-item' */ +} + +.workspacestodock-caption-windowapps-menu-icon { +} + +.workspacestodock-caption-windowapps-menu-label { + padding: 0 8px; +} + +.workspacestodock-caption-windowapps-menu .window-close { + /* GS36+ can override gnome shell class 'window-close' */ + border-radius: 100px; + -st-background-image-shadow: none; + background-image: url("../../assets/close.svg"); + background-size: 24px; + height: 24px; + width: 24px; +} + +.workspacestodock-caption-windowapps-menu .window-close:hover { + background-color: rgba(0, 0, 0, 0.12); +} + +.workspacestodock-caption-windowapps-menu .window-close:active { + background-color: rgba(0, 0, 0, 0.24); +} + +.workspacestodock-caption-windowapps-menu-close { + /*fallback class for GS34 since it can't override gnome shell class 'window-close' */ +} + +.workspacestodock-caption-windowapps-menu-close:hover { + /*fallback class for GS34 since it can't override gnome shell class 'window-close' */ +} + +.workspacestodock-caption-windowapps-button { + padding: 0; +} + +.workspacestodock-caption-windowapps-button-icon { + padding: 2px; + background-color: rgba(0, 0, 0, 0.01); /* needs to draw box-shadow */ +} + +.workspacestodock-caption-windowapps-button:active > .workspacestodock-caption-windowapps-button-icon { + box-shadow: inset 0 -2px rgba(255, 255, 255, 0.3); +} + +.workspacestodock-caption-windowapps-button-active > .workspacestodock-caption-windowapps-button-icon { + box-shadow: inset 0 -2px #F8F8F2; +} + +/* caption workspace number */ +.workspacestodock-caption-number { + margin: 1px; + padding: 0 10px; + border-radius: 0; + background-color: rgba(255, 255, 255, 0.3); + color: #F8F8F2; + font-size: 9pt; + font-weight: bold; + text-align: center; +} + +/* caption workspace name */ +.workspacestodock-caption-name { + margin: 0 4px; + color: rgba(255, 255, 255, 0.6); + font-size: 9pt; + text-align: center; +} + +/* caption workspace windowcount */ +.workspacestodock-caption-windowcount { + /* min-width: 16px; */ + margin: 0px 4px; + padding: 0px 4px; + color: #F8F8F2; + font-size: 9pt; + font-weight: bold; + text-align: center; +} + +/* caption workspace windowcount image*/ +.workspacestodock-caption-windowcount-image { + width: 20px; + height: 20px; + margin: 1px; + border-radius: 0; + background-color: #FF4081; + color: #F8F8F2; + font-size: 9pt; + font-weight: bold; + text-align: center; +} + +/* The classes below are used in conjunction with the above workspacestodock-caption-windowcount-image + * They provide background images that corespond with the window count */ +.workspacestodock-caption-windowcount-image-1 { +} + +.workspacestodock-caption-windowcount-image-2 { +} + +.workspacestodock-caption-windowcount-image-3 { +} + +.workspacestodock-caption-windowcount-image-4 { +} + +/* caption spacer-filler */ +.workspacestodock-caption-spacer { + width: 4px; +} + +/* The classes below are used in conjuction with the above classes + * They provide additional theming for the current workspace caption */ +.workspacestodock-workspace-caption-background-current { +} + +.workspacestodock-workspace-caption-background-current.caption-top { +} + +.workspacestodock-caption-number-current { + /* background-color: #42A5F5; */ +} + +.workspacestodock-caption-name-current { +} + +.workspacestodock-caption-windowcount-current { +} + +.workspacestodock-caption-windowcount-image-current { +} diff --git a/misc/gtk/ephemeral/gnome-shell/gnome-shell-theme.gresource.xml b/misc/gtk/ephemeral/gnome-shell/gnome-shell-theme.gresource.xml new file mode 100644 index 0000000..eab5f37 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/gnome-shell-theme.gresource.xml @@ -0,0 +1,62 @@ + + + + assets/dash/bottom-running1.svg + assets/dash/bottom-running1-focused.svg + assets/dash/bottom-running2.svg + assets/dash/bottom-running2-focused.svg + assets/dash/bottom-running3.svg + assets/dash/bottom-running3-focused.svg + assets/dash/bottom-running4.svg + assets/dash/bottom-running4-focused.svg + assets/dash/left-running1.svg + assets/dash/left-running1-focused.svg + assets/dash/left-running2.svg + assets/dash/left-running2-focused.svg + assets/dash/left-running3.svg + assets/dash/left-running3-focused.svg + assets/dash/left-running4.svg + assets/dash/left-running4-focused.svg + assets/dash/right-running1.svg + assets/dash/right-running1-focused.svg + assets/dash/right-running2.svg + assets/dash/right-running2-focused.svg + assets/dash/right-running3.svg + assets/dash/right-running3-focused.svg + assets/dash/right-running4.svg + assets/dash/right-running4-focused.svg + assets/dash/top-running1.svg + assets/dash/top-running1-focused.svg + assets/dash/top-running2.svg + assets/dash/top-running2-focused.svg + assets/dash/top-running3.svg + assets/dash/top-running3-focused.svg + assets/dash/top-running4.svg + assets/dash/top-running4-focused.svg + assets/calendar-arrow-left.svg + assets/calendar-arrow-right.svg + assets/checkbox.svg + assets/checkbox-off.svg + assets/close.svg + assets/dash-placeholder.svg + assets/key-enter.svg + assets/key-hide.svg + assets/key-layout.svg + assets/key-shift.svg + assets/key-shift-uppercase.svg + assets/key-shift-latched-uppercase.svg + assets/more-results.svg + assets/toggle-off.svg + assets/toggle-on.svg + assets/window-close.svg + assets/window-close-active.svg + extensions/workspaces-to-dock/workspaces-to-dock.css + gnome-shell.css + message-indicator-symbolic.svg + no-events.svg + no-notifications.svg + noise-texture.png + pad-osd.css + process-working.svg + + diff --git a/misc/gtk/ephemeral/gnome-shell/gnome-shell.css b/misc/gtk/ephemeral/gnome-shell/gnome-shell.css new file mode 100644 index 0000000..230350f --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/gnome-shell.css @@ -0,0 +1,3349 @@ +/* This stylesheet is generated, DO NOT EDIT */ +/* Copyright 2009, 2015 Red Hat, Inc. + * + * Portions adapted from Mx's data/style/default.css + * Copyright 2009 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU Lesser General Public License, + * version 2.1, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* GLOBALS */ +stage { + font-family: "M+ 1c", Roboto, Cantarell, Sans-Serif; + font-size: 10.5pt; + font-weight: 400; + color: #F8F8F2; +} + +/* WIDGETS */ +/* Buttons */ +.button { + min-height: 32px; + padding: 0 16px; + border-width: 0; + border-radius: 6px; + font-size: 10.5pt; + font-weight: 500; + color: rgba(248, 248, 242, 0.7); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; +} + +.button:focus { + color: #F8F8F2; + text-shadow: none; + icon-shadow: none; + box-shadow: 0 0 transparent; +} + +.button:hover { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.08); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.button:active { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.2); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.button:insensitive { + color: rgba(248, 248, 242, 0.3); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.modal-dialog-linked-button { + min-height: 32px; + margin: 4px; + padding: 0 8px; + margin-right: 0; + border-right-width: 0; + border-radius: 6px; + font-size: 10.5pt; + font-weight: 500; + color: rgba(248, 248, 242, 0.7); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; +} + +.modal-dialog-linked-button:focus { + color: #F8F8F2; + text-shadow: none; + icon-shadow: none; + box-shadow: 0 0 transparent; +} + +.modal-dialog-linked-button:hover { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.08); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.modal-dialog-linked-button:active { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.2); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.modal-dialog-linked-button:insensitive { + color: rgba(248, 248, 242, 0.3); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.modal-dialog-linked-button:first-child { + border-radius: 6px; +} + +.modal-dialog-linked-button:last-child { + margin-right: 4px; + border-right-width: 0px; + border-radius: 6px; +} + +.modal-dialog-linked-button:first-child:last-child { + margin-right: 4px; + border-right-width: 0px; + border-radius: 6px; +} + +/* Entries */ +StEntry { + min-height: 32px; + padding: 0 8px; + border-radius: 6px 6px 0 0; + border-width: 0; + color: #F8F8F2; + selection-background-color: #BD99FF; + selected-color: white; + font-size: 11.25pt; + font-weight: 400; + transition-duration: 100ms; + background-color: rgba(248, 248, 242, 0.04); + border-color: transparent; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); +} + +StEntry:hover { + box-shadow: inset 0 -1px #F8F8F2; +} + +StEntry:focus { + border-color: transparent; + box-shadow: inset 0 -2px #BD99FF; +} + +StEntry:insensitive { + color: rgba(248, 248, 242, 0.5); + border-color: transparent; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.12); +} + +StEntry StIcon.capslock-warning { + icon-size: 16px; + warning-color: #ee9c11; + padding: 0 0; +} + +/* Scrollbars */ +StScrollView.vfade { + -st-vfade-offset: 32px; +} + +StScrollView.hfade { + -st-hfade-offset: 32px; +} + +StScrollBar { + padding: 0; +} + +StScrollView StScrollBar { + min-width: 16px; + min-height: 16px; +} + +StScrollBar StBin#trough { + margin: 4px; + border-radius: 100px; + background-color: rgba(248, 248, 242, 0.12); +} + +StScrollBar StButton#vhandle, StScrollBar StButton#hhandle { + transition-duration: 100ms; + border-radius: 100px; + background-color: rgba(248, 248, 242, 0.5); + margin: 4px; +} + +StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover { + background-color: rgba(248, 248, 242, 0.7); +} + +StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active { + background-color: #F8F8F2; +} + +#overview StScrollBar StBin#trough, #screenShieldNotifications StScrollBar StBin#trough { + background-color: rgba(255, 255, 255, 0.12); +} + +#overview StScrollBar StButton#vhandle, #screenShieldNotifications StScrollBar StButton#vhandle, #overview StScrollBar StButton#hhandle, #screenShieldNotifications StScrollBar StButton#hhandle { + background-color: rgba(255, 255, 255, 0.5); +} + +#overview StScrollBar StButton#vhandle:hover, #screenShieldNotifications StScrollBar StButton#vhandle:hover, #overview StScrollBar StButton#hhandle:hover, #screenShieldNotifications StScrollBar StButton#hhandle:hover { + background-color: rgba(255, 255, 255, 0.7); +} + +#overview StScrollBar StButton#vhandle:active, #screenShieldNotifications StScrollBar StButton#vhandle:active, #overview StScrollBar StButton#hhandle:active, #screenShieldNotifications StScrollBar StButton#hhandle:active { + background-color: white; +} + +/* Slider */ +.slider { + height: 20px; + color: #BD99FF; + -barlevel-height: 2px; + -barlevel-background-color: rgba(248, 248, 242, 0.3); + -barlevel-border-color: transparent; + -barlevel-active-background-color: #BD99FF; + -barlevel-active-border-color: transparent; + -barlevel-overdrive-color: #ff8c3e; + -barlevel-overdrive-border-color: transparent; + -barlevel-overdrive-separator-width: 2px; + -barlevel-border-width: 0; + -slider-handle-radius: 6px; +} + +/* Check Boxes */ +.check-box * { + min-height: 16px; + padding: 8px 0; +} + +.check-box StBoxLayout { + spacing: 8px; +} + +.check-box StBin { + transition-duration: 100ms; + width: 24px; + height: 24px; + padding: 4px; + border-radius: 100px; + background-image: url("assets/checkbox-off.svg"); +} + +.check-box:focus StBin { + background-image: url("assets/checkbox-off.svg"); +} + +.check-box:hover StBin { + background-color: rgba(248, 248, 242, 0.08); +} + +.check-box:active StBin { + transition-duration: 200ms; + background-color: rgba(248, 248, 242, 0.2); +} + +.check-box:checked StBin { + background-image: url("assets/checkbox.svg"); +} + +.check-box:focus:checked StBin { + background-image: url("assets/checkbox.svg"); +} + +.check-box:hover:checked StBin { + background-color: rgba(189, 153, 255, 0.08); +} + +.check-box:active:checked StBin { + background-color: rgba(189, 153, 255, 0.2); +} + +/* Switches */ +.toggle-switch { + width: 40px; + height: 20px; + background-size: contain; +} + +.toggle-switch-us { + background-image: url("assets/toggle-off.svg"); +} + +.toggle-switch-us:checked { + background-image: url("assets/toggle-on.svg"); +} + +.toggle-switch-intl { + background-image: url("assets/toggle-off.svg"); +} + +.toggle-switch-intl:checked { + background-image: url("assets/toggle-on.svg"); +} + +/* links */ +.shell-link { + transition-duration: 100ms; + border-radius: 6px; + color: #6faaff; +} + +.shell-link:hover { + color: #6faaff; + background-color: rgba(111, 170, 255, 0.08); +} + +.shell-link:active { + transition-duration: 200ms; + color: #6faaff; + background-color: rgba(111, 170, 255, 0.2); +} + +/* Modal Dialogs */ +.headline { + font-size: 15pt; + font-weight: 500; +} + +.lightbox { + background-color: black; +} + +.flashspot { + background-color: white; +} + +.modal-dialog { + border-radius: 6px; + color: #F8F8F2; + background-color: #3D4C5F; + border: none; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5), 0 10px 5px rgba(0, 0, 0, 0.44); +} + +.modal-dialog .modal-dialog-content-box { + padding: 24px; +} + +.modal-dialog .run-dialog-entry { + width: 20em; + margin-bottom: 0; +} + +.modal-dialog .run-dialog-error-box { + padding-top: 16px; + spacing: 6px; +} + +.modal-dialog .run-dialog-button-box { + padding-top: 1em; +} + +.modal-dialog .run-dialog-label { + font-size: 1em; + font-weight: normal; + color: rgba(248, 248, 242, 0.7); + padding-bottom: .4em; +} + +.mount-dialog-subject, +.end-session-dialog-subject { + font-size: 15pt; + font-weight: 500; +} + +/* Message Dialog */ +.message-dialog-main-layout { + padding: 12px 20px 0; + spacing: 12px; +} + +.message-dialog-content { + max-width: 28em; + spacing: 20px; +} + +.message-dialog-icon { + min-width: 48px; + icon-size: 48px; +} + +.message-dialog-title { + font-weight: bold; +} + +.message-dialog-subtitle { + color: rgba(248, 248, 242, 0.7); + font-weight: bold; +} + +/* End Session Dialog */ +.end-session-dialog { + spacing: 42px; + border: none; +} + +.end-session-dialog-list { + padding-top: 20px; +} + +.end-session-dialog-layout { + padding-left: 17px; +} + +.end-session-dialog-layout:rtl { + padding-right: 17px; +} + +.end-session-dialog-description { + width: 28em; + padding-bottom: 10px; +} + +.end-session-dialog-description:rtl { + text-align: right; +} + +.end-session-dialog-warning { + width: 28em; + color: #ee9c11; + padding-top: 6px; +} + +.end-session-dialog-warning:rtl { + text-align: right; +} + +.end-session-dialog-logout-icon { + border-radius: 5px; + width: 48px; + height: 48px; + background-size: contain; +} + +.end-session-dialog-shutdown-icon { + color: rgba(248, 248, 242, 0.5); + width: 48px; + height: 48px; +} + +.end-session-dialog-inhibitor-layout { + spacing: 16px; + max-height: 200px; + padding-right: 65px; + padding-left: 65px; +} + +.end-session-dialog-session-list, +.end-session-dialog-app-list { + spacing: 1em; +} + +.end-session-dialog-list-header { + font-weight: bold; +} + +.end-session-dialog-list-header:rtl { + text-align: right; +} + +.end-session-dialog-app-list-item, +.end-session-dialog-session-list-item { + spacing: 1em; +} + +.end-session-dialog-app-list-item-name, +.end-session-dialog-session-list-item-name { + font-weight: bold; +} + +.end-session-dialog-app-list-item-description { + color: rgba(248, 248, 242, 0.7); + font-size: 1em; +} + +/* ShellMountOperation Dialogs */ +.shell-mount-operation-icon { + icon-size: 48px; +} + +.mount-dialog { + spacing: 24px; +} + +.mount-dialog .message-dialog-title { + padding-top: 10px; + padding-left: 17px; + padding-bottom: 6px; + max-width: 34em; +} + +.mount-dialog .message-dialog-title:rtl { + padding-left: 0px; + padding-right: 17px; +} + +.mount-dialog .message-dialog-body { + padding-left: 17px; + width: 28em; +} + +.mount-dialog .message-dialog-body:rtl { + padding-left: 0px; + padding-right: 17px; +} + +.mount-dialog-app-list { + max-height: 200px; + padding-top: 24px; + padding-left: 49px; + padding-right: 32px; +} + +.mount-dialog-app-list:rtl { + padding-right: 49px; + padding-left: 32px; +} + +.mount-dialog-app-list-item { + color: #F8F8F2; +} + +.mount-dialog-app-list-item:hover { + color: #F8F8F2; +} + +.mount-dialog-app-list-item:ltr { + padding-right: 1em; +} + +.mount-dialog-app-list-item:rtl { + padding-left: 1em; +} + +.mount-dialog-app-list-item-icon:ltr { + padding-right: 17px; +} + +.mount-dialog-app-list-item-icon:rtl { + padding-left: 17px; +} + +.mount-dialog-app-list-item-name { + font-size: 1em; +} + +/* Password or Authentication Dialog */ +.prompt-dialog { + width: 34em; + border: none; +} + +.prompt-dialog .message-dialog-main-layout { + spacing: 24px; + padding: 10px; +} + +.prompt-dialog .message-dialog-content { + spacing: 16px; +} + +.prompt-dialog .message-dialog-title { + font-size: 15pt; + font-weight: 500; + color: #F8F8F2; +} + +.prompt-dialog-description:rtl { + text-align: right; +} + +.prompt-dialog-password-box { + spacing: 1em; + padding-bottom: 1em; +} + +.prompt-dialog-error-label { + font-size: 1em; + color: #ff8c3e; + padding-bottom: 8px; +} + +.prompt-dialog-info-label { + font-size: 1em; + padding-bottom: 8px; +} + +.hidden { + color: transparent; +} + +.prompt-dialog-null-label { + font-size: 1em; + padding-bottom: 8px; +} + +/* Polkit Dialog */ +.polkit-dialog-user-layout { + padding-left: 10px; + spacing: 10px; +} + +.polkit-dialog-user-layout:rtl { + padding-left: 0px; + padding-right: 10px; +} + +.polkit-dialog-user-root-label { + color: #ee9c11; +} + +.polkit-dialog-user-icon { + border-radius: 5px; + background-size: contain; + width: 48px; + height: 48px; +} + +/* Audio selection dialog */ +.audio-device-selection-dialog { + spacing: 30px; +} + +.audio-selection-content { + spacing: 20px; + padding: 24px; +} + +.audio-selection-title { + font-weight: bold; + text-align: center; +} + +.audio-selection-box { + spacing: 20px; +} + +.audio-selection-device { + border: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 6px; +} + +.audio-selection-device:active, .audio-selection-device:hover, .audio-selection-device:focus { + background-color: #BD99FF; +} + +.audio-selection-device-box { + padding: 20px; + spacing: 20px; +} + +.audio-selection-device-icon { + icon-size: 64px; +} + +/* Access Dialog */ +.access-dialog { + spacing: 30px; +} + +/* Geolocation Dialog */ +.geolocation-dialog { + spacing: 30px; +} + +/* Extension Dialog */ +.extension-dialog .message-dialog-main-layout { + spacing: 24px; + padding: 10px; +} + +.extension-dialog .message-dialog-title { + color: rgba(248, 248, 242, 0.7); +} + +/* Inhibit-Shortcuts Dialog */ +.inhibit-shortcuts-dialog { + spacing: 30px; +} + +/* Network Agent Dialog */ +.network-dialog-secret-table { + spacing-rows: 15px; + spacing-columns: 1em; +} + +.keyring-dialog-control-table { + spacing-rows: 15px; + spacing-columns: 1em; +} + +/* Popovers/Menus */ +.popup-menu { + min-width: 200px; +} + +.popup-menu .popup-sub-menu { + background-color: #323F4E; + box-shadow: 0 0 transparent; +} + +.popup-menu .popup-menu-content { + padding: 8px 0; +} + +.popup-menu .popup-menu-item { + spacing: 8px; + transition-duration: 100ms; +} + +.popup-menu .popup-menu-item:ltr { + padding: 0.4em 24px 0.4em 0; +} + +.popup-menu .popup-menu-item:rtl { + padding: 0.4em 0 0.4em 24px; +} + +.popup-menu .popup-menu-item:checked { + background-color: #BD99FF; + color: white; + box-shadow: 0 0 transparent; + font-weight: normal; +} + +.popup-menu .popup-menu-item:checked.selected { + background-color: #c2a1ff; + color: white; +} + +.popup-menu .popup-menu-item:checked:active { + background-color: #caadff; + color: white !important; +} + +.popup-menu .popup-menu-item:checked:insensitive { + color: rgba(255, 255, 255, 0.5); +} + +.popup-menu .popup-menu-item.selected { + background-color: rgba(248, 248, 242, 0.08); + color: #F8F8F2; + transition-duration: 0ms; +} + +.popup-menu .popup-menu-item:active { + background-color: rgba(248, 248, 242, 0.2); + color: #F8F8F2; + transition-duration: 200ms; +} + +.popup-menu .popup-menu-item.selected:active { + color: #F8F8F2; +} + +.popup-menu .popup-menu-item:insensitive { + color: rgba(248, 248, 242, 0.5); +} + +.popup-menu .popup-inactive-menu-item { + color: #F8F8F2; +} + +.popup-menu .popup-inactive-menu-item:insensitive { + color: rgba(248, 248, 242, 0.5); +} + +.popup-menu.panel-menu { + -boxpointer-gap: 4px; + margin-bottom: 1.75em; +} + +.popup-menu-ornament { + text-align: right; + width: 16px; + height: 16px; +} + +.popup-menu-boxpointer, +.candidate-popup-boxpointer { + -arrow-border-radius: 0; + -arrow-background-color: transparent; + -arrow-border-width: 0; + -arrow-border-color: transparent; + -arrow-base: 0; + -arrow-rise: 0; + -arrow-box-shadow: none; + margin: 5px 8px 8px; + background-color: #3D4C5F; + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); +} + +.popup-separator-menu-item { + height: 1px; + margin: 8px 40px; + background-color: transparent; + border-color: rgba(0, 0, 0, 0.26); + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.background-menu { + -boxpointer-gap: 4px; + -arrow-rise: 0; +} + +/* fallback menu +- odd thing for styling App menu when apparently not running under shell. Light Adwaita styled + app menu inside the main app window itself rather than the top bar +*/ +/* OSD */ +.osd-window { + text-align: center; + font-weight: bold; + spacing: 1em; + margin: 32px; + min-width: 64px; + min-height: 64px; +} + +.osd-window .osd-monitor-label { + font-size: 45px; + font-weight: 400; +} + +.osd-window .level { + height: 8px; + -barlevel-height: 8px; + -barlevel-background-color: rgba(248, 248, 242, 0.12); + -barlevel-active-background-color: #BD99FF; + -barlevel-overdrive-color: #ff8c3e; + -barlevel-overdrive-separator-width: 2px; +} + +/* Pad OSD */ +.pad-osd-window { + padding: 32px; + background-color: black; +} + +.pad-osd-window .pad-osd-title-box { + spacing: 12px; +} + +.pad-osd-window .pad-osd-title-menu-box { + spacing: 6px; +} + +.combo-box-label { + width: 15em; +} + +/* App Switcher */ +.switcher-popup { + padding: 8px; + spacing: 16px; +} + +.switcher-list-item-container { + spacing: 8px; +} + +.switcher-list .item-box { + transition-duration: 100ms; + padding: 8px; + border-radius: 6px; +} + +.switcher-list .item-box:outlined { + padding: 8px; + border: none; + background-color: rgba(248, 248, 242, 0.12); + color: #F8F8F2; +} + +.switcher-list .item-box:selected { + background-color: #BD99FF; + color: white; +} + +.switcher-list .thumbnail-box { + padding: 2px; + spacing: 4px; +} + +.switcher-list .thumbnail { + width: 256px; +} + +.switcher-list .separator { + width: 1px; + background: rgba(0, 0, 0, 0.26); +} + +.switcher-arrow { + transition-duration: 100ms; + border-color: transparent; + color: rgba(248, 248, 242, 0.7); +} + +.switcher-arrow:highlighted { + color: #F8F8F2; +} + +.input-source-switcher-symbol { + font-size: 45px; + font-weight: 400; + width: 96px; + height: 96px; +} + +/* Window Cycler */ +.cycler-highlight { + border: 4px solid #BD99FF; +} + +/* Workspace Switcher */ +.workspace-switcher-group { + padding: 8px; +} + +.workspace-switcher { + background: transparent; + border: 0px; + border-radius: 0px; + padding: 0px; + spacing: 8px; +} + +.ws-switcher-active-up, .ws-switcher-active-down { + height: 48px; + background-color: #BD99FF; + color: white; + background-size: 32px; + border-radius: 6px; +} + +.ws-switcher-box { + height: 48px; + border: none; + background: rgba(248, 248, 242, 0.12); + border-radius: 6px; +} + +.osd-window, +.resize-popup, +.switcher-list, .workspace-switcher-container { + color: #F8F8F2; + background-color: #3D4C5F; + border: none; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5), 0 10px 5px rgba(0, 0, 0, 0.44); + border-radius: 6px; + padding: 12px; +} + +/* Tiled window previews */ +.tile-preview { + background-color: rgba(221, 185, 255, 0.3); + border: 1px solid #ddb9ff; +} + +.tile-preview-left.on-primary { + border-radius: 0; +} + +.tile-preview-right.on-primary { + border-radius: 0; +} + +.tile-preview-left.tile-preview-right.on-primary { + border-radius: 0; +} + +/* TOP BAR */ +#panel { + background-color: black; + /* transition from solid to transparent */ + transition-duration: 250ms; + font-weight: bold; + height: 28px; + font-feature-settings: "tnum"; +} + +#panel:overview, #panel.unlock-screen, #panel.login-screen, #panel.lock-screen { + background-color: transparent; +} + +#panel #panelLeft, #panel #panelCenter { + spacing: 0; +} + +#panel .panel-corner { + -panel-corner-radius: 0; + -panel-corner-background-color: black; + -panel-corner-border-width: 2px; + -panel-corner-border-color: transparent; +} + +#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus { + -panel-corner-border-color: white; +} + +#panel .panel-corner.lock-screen, #panel .panel-corner.login-screen, #panel .panel-corner.unlock-screen { + -panel-corner-radius: 0; + -panel-corner-background-color: transparent; + -panel-corner-border-color: transparent; +} + +#panel .panel-button { + -natural-hpadding: 12px; + -minimum-hpadding: 6px; + font-weight: bold; + color: rgba(255, 255, 255, 0.7); + text-shadow: none; + transition-duration: 100ms; +} + +#panel .panel-button .app-menu-icon { + -st-icon-style: symbolic; + margin-left: 4px; + margin-right: 4px; +} + +#panel .panel-button .system-status-icon, +#panel .panel-button .app-menu-icon > StIcon, +#panel .panel-button .popup-menu-arrow { + icon-shadow: none; +} + +#panel .panel-button:hover { + color: white; + text-shadow: none; +} + +#panel .panel-button:hover .system-status-icon, +#panel .panel-button:hover .app-menu-icon > StIcon, +#panel .panel-button:hover .popup-menu-arrow { + icon-shadow: none; +} + +#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked { + background-color: rgba(0, 0, 0, 0.01); + box-shadow: inset 0 -2px 0px white; + color: white; +} + +#panel .panel-button:active > .system-status-icon, #panel .panel-button:overview > .system-status-icon, #panel .panel-button:focus > .system-status-icon, #panel .panel-button:checked > .system-status-icon { + icon-shadow: none; +} + +#panel .panel-button .system-status-icon { + icon-size: 1.14286em; + padding: 0 4px; +} + +.unlock-screen #panel .panel-button, +.login-screen #panel .panel-button, +.lock-screen #panel .panel-button { + color: rgba(255, 255, 255, 0.7); +} + +.unlock-screen #panel .panel-button:focus, .unlock-screen #panel .panel-button:hover, .unlock-screen #panel .panel-button:active, +.login-screen #panel .panel-button:focus, +.login-screen #panel .panel-button:hover, +.login-screen #panel .panel-button:active, +.lock-screen #panel .panel-button:focus, +.lock-screen #panel .panel-button:hover, +.lock-screen #panel .panel-button:active { + color: white; +} + +#panel .panel-status-indicators-box, +#panel .panel-status-menu-box { + spacing: 2px; +} + +#panel .power-status.panel-status-indicators-box { + spacing: 0; +} + +#panel .screencast-indicator { + color: #ee9c11; +} + +#panel .remote-access-indicator { + color: #ee9c11; +} + +#panel.solid { + background-color: #121f2e; + /* transition from transparent to solid */ + transition-duration: 250ms; + background-gradient-direction: none; + text-shadow: none; +} + +#panel.solid:overview { + background-color: transparent; +} + +#panel.solid .panel-corner { + -panel-corner-background-color: #121f2e; +} + +#panel.solid .panel-button { + color: rgba(255, 255, 255, 0.7); + text-shadow: none; +} + +#panel.solid .panel-button:hover, #panel.solid .panel-button:active, #panel.solid .panel-button:overview, #panel.solid .panel-button:focus, #panel.solid .panel-button:checked { + color: white; +} + +#panel.solid .system-status-icon, +#panel.solid .app-menu-icon > StIcon, +#panel.solid .popup-menu-arrow { + icon-shadow: none; +} + +#calendarArea { + padding: 8px 16px; +} + +.calendar { + margin-bottom: 0; +} + +.calendar, +.datemenu-today-button, +.datemenu-displays-box, +.message-list-sections { + margin: 0 8px; +} + +.datemenu-calendar-column { + spacing: 8px; +} + +.datemenu-displays-section { + padding-bottom: 0; +} + +.datemenu-displays-box { + spacing: 8px; +} + +.datemenu-calendar-column { + border: 0 solid rgba(0, 0, 0, 0.26); +} + +.datemenu-calendar-column:ltr { + border-left-width: 0; +} + +.datemenu-calendar-column:rtl { + border-right-width: 0; +} + +.datemenu-today-button, +.world-clocks-button, +.weather-button, +.events-section-title { + min-height: 20px; + padding: 4px 8px; + border-radius: 6px; +} + +.datemenu-today-button { + min-height: 48px; +} + +.message-list-section-list:ltr { + padding-left: 0; +} + +.message-list-section-list:rtl { + padding-right: 0; +} + +.datemenu-today-button, +.world-clocks-button, +.weather-button, +.events-section-title { + transition-duration: 100ms; +} + +.datemenu-today-button:hover, .datemenu-today-button:focus, +.world-clocks-button:hover, +.world-clocks-button:focus, +.weather-button:hover, +.weather-button:focus, +.events-section-title:hover, +.events-section-title:focus { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.08); +} + +.datemenu-today-button:active, +.world-clocks-button:active, +.weather-button:active, +.events-section-title:active { + transition-duration: 200ms; + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.2); +} + +.datemenu-today-button .date-label { + font-size: 18pt; + font-weight: 400; +} + +.world-clocks-header, +.weather-header, +.events-section-title { + color: rgba(248, 248, 242, 0.7); + font-weight: bold; +} + +.world-clocks-grid { + spacing-rows: 0.4em; +} + +.weather-box { + spacing: 0.4em; +} + +.calendar-month-label { + transition-duration: 100ms; + height: 16px; + margin: 2px; + padding: 6px 16px; + border-radius: 6px; + color: #F8F8F2; + font-weight: bold; + text-align: center; +} + +.calendar-month-label:focus { + background-color: rgba(248, 248, 242, 0.12); +} + +.pager-button { + transition-duration: 100ms; + width: 28px; + height: 28px; + margin: 2px; + border-radius: 100px; + background-color: transparent; + color: #F8F8F2; +} + +.pager-button:hover, .pager-button:focus { + background-color: rgba(248, 248, 242, 0.08); +} + +.pager-button:active { + background-color: rgba(248, 248, 242, 0.2); + transition-duration: 200ms; +} + +.calendar-change-month-back { + background-image: url("assets/calendar-arrow-left.svg"); +} + +.calendar-change-month-back:rtl { + background-image: url("assets/calendar-arrow-right.svg"); +} + +.calendar-change-month-forward { + background-image: url("assets/calendar-arrow-right.svg"); +} + +.calendar-change-month-forward:rtl { + background-image: url("assets/calendar-arrow-left.svg"); +} + +.calendar-day-base { + transition-duration: 100ms; + font-size: 9pt; + font-weight: 400; + text-align: center; + width: 28px; + height: 28px; + padding: 0; + margin: 2px; + border-radius: 100px; + font-feature-settings: "tnum"; +} + +.calendar-day-base:hover, .calendar-day-base:focus { + background-color: rgba(248, 248, 242, 0.08); +} + +.calendar-day-base:active { + transition-duration: 200ms; + color: inherit; + background-color: rgba(248, 248, 242, 0.2); + border-color: transparent; +} + +.calendar-day-base:selected { + color: white; + background-color: #BD99FF; + border-color: transparent; +} + +.calendar-day-base.calendar-day-heading { + width: 28px; + height: 21px; + margin-top: 2px; + padding: 7px 0 0; + border-radius: 100px; + background-color: transparent; + color: rgba(248, 248, 242, 0.5); + font-size: 9pt; + font-weight: 400; + font-weight: bold; + text-align: center; +} + +.calendar-day { + border-width: 0; +} + +.calendar-day-top { + border-top-width: 0; +} + +.calendar-day-left { + border-left-width: 0; +} + +.calendar-nonwork-day { + color: #F8F8F2; +} + +.calendar-today { + font-weight: bold !important; + border: none; +} + +.calendar-day-with-events { + color: #6faaff; + font-weight: normal; + text-decoration: underline; + background-image: none; +} + +.calendar-other-month-day { + color: rgba(248, 248, 242, 0.3); + opacity: 0.5; +} + +.calendar-week-number { + width: 28px; + height: 21px; + margin: 2px; + padding: 7px 0 0; + border-radius: 100px; + background-color: transparent; + color: rgba(248, 248, 242, 0.5); + font-size: inherit; + font-weight: bold; + text-align: center; +} + +/* Message list */ +.message-list { + width: 420px; +} + +.message-list-clear-button.button { + background-color: transparent; + margin: 8px 8px 0; +} + +.message-list-clear-button.button:hover, .message-list-clear-button.button:focus { + background-color: rgba(248, 248, 242, 0.08); +} + +.message-list-clear-button.button:active { + background-color: rgba(248, 248, 242, 0.2); +} + +.message-list-sections { + spacing: 8px; +} + +.message-list-section, +.message-list-section-list { + spacing: 8px; +} + +.message { + transition-duration: 100ms; + min-height: 56px; + background-color: transparent; + border-radius: 6px; +} + +.message:hover, .message:focus { + background-color: rgba(248, 248, 242, 0.08); +} + +.message:active { + transition-duration: 200ms; + background-color: rgba(248, 248, 242, 0.2); +} + +.message-icon-bin { + padding: 8px 0px 8px 8px; +} + +.message-icon-bin:rtl { + padding: 8px 8px 8px 0px; +} + +.message-icon-bin > StIcon { + color: #F8F8F2; + icon-size: 1.14286em; + -st-icon-style: requested; + margin: 4px 0px 4px 4px; +} + +.message-icon-bin > StIcon:rtl { + margin: 4px 4px 4px 0px; +} + +.message-secondary-bin { + padding: 0 8px; +} + +.message-secondary-bin > .event-time { + min-height: 22px; + padding-top: 2px; + color: rgba(248, 248, 242, 0.7); + font-size: 1em; + /* HACK: the label should be baseline-aligned with a 1em label, + fake this with some bottom padding */ + padding-bottom: 0; +} + +.message-secondary-bin > StIcon { + icon-size: 1.14286em; +} + +.message-title { + min-height: 22px; + padding-top: 2px; + color: #F8F8F2; + font-weight: bold; + font-size: 1em; +} + +.message-content { + min-height: 40px; + padding: 8px; + color: rgba(248, 248, 242, 0.7); + font-size: 1em; +} + +.message-content * > StIcon { + transition-duration: 100ms; + icon-size: 16px; + border-radius: 16px; + padding: 4px; + color: rgba(248, 248, 242, 0.7); +} + +/* FIXME: how do you do this in sass? */ +.message-content *:hover > StIcon, +.message-content *:focus > StIcon { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.08); +} + +.message-content *:active > StIcon { + transition-duration: 200ms; + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.2); +} + +.message-media-control { + transition-duration: 100ms; + margin: 16px 0; + padding: 8px; + border-radius: 100px; + color: rgba(248, 248, 242, 0.7); +} + +.message-media-control:hover, .message-media-control:focus { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.08); +} + +.message-media-control:active { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.2); + transition-duration: 200ms; +} + +.message-media-control:insensitive { + color: rgba(248, 248, 242, 0.3); +} + +.message-media-control:last-child:ltr { + margin-right: 16px; + padding-right: 8px; +} + +.message-media-control:last-child:rtl { + margin-left: 16px; + padding-left: 8px; +} + +.media-message-cover-icon { + icon-size: 32px !important; + margin: 8px 0px 8px 4px !important; +} + +.media-message-cover-icon:rtl { + margin: 8px 4px 8px 0px !important; +} + +.media-message-cover-icon.fallback { + icon-size: 16px !important; + padding: 8px; + border: none; + border-radius: 6px; + background-color: rgba(248, 248, 242, 0.12); + color: rgba(248, 248, 242, 0.5); +} + +.system-switch-user-submenu-icon.user-icon { + icon-size: 20px; + padding: 0 2px; +} + +.system-switch-user-submenu-icon.default-icon { + icon-size: 16px; + padding: 0 4px; +} + +#appMenu { + spinner-image: url("process-working.svg"); + spacing: 4px; +} + +#appMenu .label-shadow { + color: transparent; +} + +.aggregate-menu { + min-width: 280px; +} + +.aggregate-menu .popup-menu-icon { + padding: 0 4px; +} + +.aggregate-menu .popup-sub-menu .popup-menu-item > :first-child:ltr { + /* 8px spacing + 2*4px padding */ + padding-left: 16px; + margin-left: 1.14286em; +} + +.aggregate-menu .popup-sub-menu .popup-menu-item > :first-child:rtl { + /* 8px spacing + 2*4px padding */ + padding-right: 16px; + margin-right: 1.14286em; +} + +.system-menu-action { + -st-icon-style: symbolic; + color: rgba(248, 248, 242, 0.7); + border-radius: 100px; + /* wish we could do 50% */ + padding: 12px; + border: none; + transition-duration: 100ms; +} + +.system-menu-action:hover, .system-menu-action:focus { + background-color: rgba(248, 248, 242, 0.08); + color: #F8F8F2; + border: none; + padding: 12px; +} + +.system-menu-action:active { + background-color: rgba(248, 248, 242, 0.2); + color: #F8F8F2; + transition-duration: 200ms; +} + +.system-menu-action > StIcon { + icon-size: 16px; +} + +.ripple-box { + width: 48px; + height: 48px; + border-radius: 0 0 48px 0; + background-color: rgba(255, 255, 255, 0.3); + background-image: none; + background-size: auto; +} + +.ripple-box:rtl { + border-radius: 0 0 0 48px; + background-image: none; +} + +.popup-menu-arrow { + width: 16px; + height: 16px; +} + +.popup-menu-icon { + icon-size: 1.14286em; +} + +.window-close { + height: 32px; + width: 32px; + -shell-close-overlap: 16px; + -st-background-image-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); + background-image: url("assets/window-close.svg"); + background-size: 32px; +} + +.window-close:hover { + -st-background-image-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); + background-image: url("assets/window-close.svg"); +} + +.window-close:active { + background-image: url("assets/window-close-active.svg"); +} + +.window-close:rtl { + -st-background-image-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); +} + +.window-close:rtl:hover { + -st-background-image-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); +} + +/* NETWORK DIALOGS */ +.nm-dialog { + max-height: 34em; + min-height: 31em; + min-width: 32em; +} + +.nm-dialog-content { + spacing: 20px; + padding: 24px; +} + +.nm-dialog-header-hbox { + spacing: 10px; +} + +.nm-dialog-airplane-box { + spacing: 12px; +} + +.nm-dialog-airplane-headline { + font-weight: bold; + text-align: center; +} + +.nm-dialog-airplane-text { + color: #F8F8F2; +} + +.nm-dialog-header-icon { + icon-size: 32px; +} + +.nm-dialog-scroll-view { + border: none; +} + +.nm-dialog-header { + font-size: 15pt; + font-weight: 500; +} + +.nm-dialog-item { + transition-duration: 100ms; + font-size: 1em; + border-bottom: none; + border-radius: 6px; + padding: 12px; + spacing: 20px; +} + +.nm-dialog-item:hover, .nm-dialog-item:focus { + background-color: rgba(248, 248, 242, 0.08); +} + +.nm-dialog-item:active { + transition-duration: 200ms; + background-color: rgba(248, 248, 242, 0.2); +} + +.nm-dialog-item:selected { + background-color: #BD99FF; + color: white; +} + +.nm-dialog-icons { + spacing: .5em; +} + +.nm-dialog-icon { + icon-size: 16px; +} + +.no-networks-label { + color: rgba(248, 248, 242, 0.5); +} + +.no-networks-box { + spacing: 12px; +} + +/* OVERVIEW */ +#overview { + spacing: 24px; +} + +.overview-controls { + padding-bottom: 32px; +} + +.window-picker { + -horizontal-spacing: 16px; + -vertical-spacing: 16px; + padding: 0 16px 32px; +} + +.window-picker.external-monitor { + padding: 16px; +} + +.window-clone-border { + border: 4px solid rgba(255, 255, 255, 0.3); + border-radius: 6px; + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.3); +} + +.window-caption { + spacing: 25px; + color: white; + background-color: black; + border-radius: 6px; + padding: 4px 8px; +} + +.search-entry { + width: 304px; + padding: 0 8px; + border-radius: 6px 6px 0 0; + color: rgba(255, 255, 255, 0.5); + selection-background-color: rgba(255, 255, 255, 0.3); + selected-color: white; + transition-duration: 100ms; + background-color: rgba(255, 255, 255, 0.04); + border-color: transparent; + box-shadow: inset 0 -1px rgba(255, 255, 255, 0.3); +} + +.search-entry:hover { + box-shadow: inset 0 -1px rgba(255, 255, 255, 0.3); +} + +.search-entry:focus { + border-color: transparent; + box-shadow: inset 0 -2px white; + padding: 0 8px; + border-width: 0; + color: white; +} + +.search-entry .search-entry-icon { + icon-size: 16px; + padding: 0 0; + color: rgba(255, 255, 255, 0.7); +} + +.search-entry:hover .search-entry-icon, .search-entry:focus .search-entry-icon { + color: white; +} + +#searchResultsBin { + max-width: 1000px; +} + +#searchResultsContent { + padding-left: 20px; + padding-right: 20px; + spacing: 16px; +} + +.search-section { + spacing: 16px; +} + +.search-section-content { + spacing: 32px; +} + +.list-search-results { + spacing: 3px; +} + +.search-section-separator { + height: 1px; + background-color: rgba(255, 255, 255, 0.12); +} + +.list-search-result-content { + spacing: 30px; +} + +.list-search-result-title { + font-size: 11.25pt; + font-weight: 400; + color: white; + spacing: 12px; +} + +.list-search-result-description { + color: rgba(255, 255, 255, 0.7); +} + +.list-search-provider-details { + width: 150px; + color: rgba(255, 255, 255, 0.7); + margin-top: 0.24em; +} + +.list-search-provider-content { + spacing: 20px; +} + +.search-provider-icon { + padding: 15px; +} + +/* DASHBOARD */ +#dash { + transition-duration: 250ms; + font-size: 1em; + color: white; + background-color: rgba(255, 255, 255, 0.1); + padding: 3px 0; + border: none; + border-left: 0px; + border-radius: 0px 6px 6px 0px; +} + +#dash:rtl { + border-radius: 6px 0 0 6px; +} + +#dash .placeholder { + background-image: url("assets/dash-placeholder.svg"); + background-size: contain; + height: 24px; +} + +#dash .empty-dash-drop-target { + width: 24px; + height: 24px; +} + +.dash-item-container > StWidget { + padding: 3px 6px; +} + +.dash-label { + border-radius: 6px; + padding: 7px 8px; + color: #F8F8F2; + background-color: #3D4C5F; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); + text-align: center; + -x-offset: 8px; +} + +/* App Vault/Grid */ +.icon-grid { + spacing: 30px; + -shell-grid-horizontal-item-size: 136px; + -shell-grid-vertical-item-size: 136px; +} + +.icon-grid .overview-icon { + icon-size: 96px; +} + +.system-action-icon { + box-shadow: 0 4px 4px rgba(0, 0, 0, 0.2); + background-color: #212121; + color: #FFFFFF; + border-radius: 99px; + icon-size: 48px; +} + +.app-view-controls { + width: 320px; + padding-bottom: 32px; +} + +.app-view-control { + padding: 0 16px; + font-weight: bold; + color: rgba(255, 255, 255, 0.7); +} + +.app-view-control:hover { + color: white; + background-color: rgba(255, 255, 255, 0.08) !important; +} + +.app-view-control:active { + color: white; + background-color: rgba(255, 255, 255, 0.2) !important; +} + +.app-view-control:checked { + color: white; + background-color: rgba(0, 0, 0, 0.01) !important; + box-shadow: inset 0 2px 0 white; +} + +.app-view-control:first-child { + border-right-width: 0; + border-radius: 6px; +} + +.app-view-control:first-child:checked { + border-radius: 0; +} + +.app-view-control:last-child { + border-radius: 6px; +} + +.app-view-control:last-child:checked { + border-radius: 0; +} + +.search-provider-icon:focus, .search-provider-icon:selected, .search-provider-icon:hover, +.list-search-result:focus, +.list-search-result:selected, +.list-search-result:hover { + background-color: rgba(255, 255, 255, 0.08); + transition-duration: 0ms; +} + +.search-provider-icon:active, .search-provider-icon:checked, +.list-search-result:active, +.list-search-result:checked { + background-color: rgba(255, 255, 255, 0.2); + transition-duration: 200ms; +} + +.app-well-app:hover .overview-icon, +.app-well-app:focus .overview-icon, +.app-well-app:selected .overview-icon, +.app-well-app.app-folder:hover .overview-icon, +.app-well-app.app-folder:focus .overview-icon, +.app-well-app.app-folder:selected .overview-icon, +.show-apps:hover .overview-icon, +.show-apps:focus .overview-icon, +.show-apps:selected .overview-icon, +.grid-search-result:hover .overview-icon, +.grid-search-result:focus .overview-icon, +.grid-search-result:selected .overview-icon { + background-color: rgba(255, 255, 255, 0.08); + transition-duration: 0ms; + border-image: none; + background-image: none; +} + +.app-well-app:active .overview-icon, +.app-well-app:checked .overview-icon, +.app-well-app.app-folder:active .overview-icon, +.app-well-app.app-folder:checked .overview-icon, +.show-apps:active .overview-icon, +.show-apps:checked .overview-icon, +.grid-search-result:active .overview-icon, +.grid-search-result:checked .overview-icon { + background-color: rgba(255, 255, 255, 0.2); + box-shadow: 0 0 transparent; + transition-duration: 200ms; +} + +.app-well-app-running-dot { + width: 32px; + height: 2px; + background-color: white; + margin-bottom: 0; +} + +.search-provider-icon, +.list-search-result, .app-well-app .overview-icon, +.app-well-app.app-folder .overview-icon, +.show-apps .overview-icon, +.grid-search-result .overview-icon { + color: white; + border-radius: 6px; + padding: 6px; + border: none; + transition-duration: 100ms; + text-align: center; +} + +.app-well-app.app-folder > .overview-icon { + background-color: rgba(255, 255, 255, 0.1); +} + +.show-apps .show-apps-icon { + color: rgba(255, 255, 255, 0.7); +} + +.show-apps:hover .show-apps-icon, +.show-apps:active .show-apps-icon, +.show-apps:checked .show-apps-icon, +.show-apps:focus .show-apps-icon { + color: white; + transition-duration: 100ms; +} + +.app-folder-popup { + -arrow-border-radius: 6px; + -arrow-background-color: rgba(255, 255, 255, 0.1); + -arrow-base: 24px; + -arrow-rise: 12px; +} + +.app-folder-popup-bin { + padding: 5px; +} + +.app-folder-icon { + padding: 5px; + spacing-rows: 5px; + spacing-columns: 5px; +} + +.page-indicator { + padding: 15px 20px; +} + +.page-indicator .page-indicator-icon { + width: 12px; + height: 12px; + border-radius: 12px; + background-image: none; + background-color: rgba(255, 255, 255, 0.3); + transition-duration: 100ms; +} + +.page-indicator:hover .page-indicator-icon { + background-image: none; + background-color: rgba(255, 255, 255, 0.5); +} + +.page-indicator:active .page-indicator-icon { + background-image: none; + background-color: rgba(255, 255, 255, 0.7); +} + +.page-indicator:checked .page-indicator-icon { + background-image: none; + background-color: white; + transition-duration: 0ms; +} + +.page-indicator:checked:active { + background-image: none; +} + +.app-well-app > .overview-icon.overview-icon-with-label, +.grid-search-result .overview-icon.overview-icon-with-label { + padding: 10px 8px 5px 8px; + spacing: 4px; +} + +.workspace-thumbnails { + visible-width: 32px; + spacing: 12px; + padding: 12px; + border-radius: 6px 0 0 6px; +} + +.workspace-thumbnails:rtl { + border-radius: 0 6px 6px 0; +} + +.workspace-thumbnails .placeholder { + background-image: url("assets/dash-placeholder.svg"); + background-size: contain; + height: 24px; +} + +.workspace-thumbnail-indicator { + border: 0 solid white; + border-left-width: 2px; + padding: 6px 10px; + border-radius: 0; +} + +.search-display > StBoxLayout, +.all-apps, +.frequent-apps > StBoxLayout { + padding: 0px 88px 10px 88px; +} + +.workspace-thumbnails { + transition-duration: 250ms; + color: white; + background-color: rgba(255, 255, 255, 0.1); + border: none; +} + +.search-statustext, .no-frequent-applications-label { + font-size: 45px; + font-weight: 400; + color: rgba(255, 255, 255, 0.5); +} + +/* NOTIFICATIONS & MESSAGE TRAY */ +.url-highlighter { + link-color: #6faaff; +} + +.notification-banner { + font-size: 1em; + width: 34em; + min-height: 56px; + margin: 5px; + border-radius: 6px; + color: #F8F8F2; + background-color: #3D4C5F; + border: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); +} + +.notification-banner:hover { + background-color: #3D4C5F; +} + +.notification-banner:focus { + background-color: #3D4C5F; +} + +.notification-banner .notification-icon { + padding: 5px; +} + +.notification-banner .notification-content { + padding: 5px; + spacing: 5px; +} + +.notification-banner .secondary-icon { + icon-size: 1.14286em; +} + +.notification-banner .notification-actions { + background-color: transparent; + padding-top: 0; + padding: 4px; + spacing: 4px; +} + +.notification-banner .notification-button { + transition-duration: 100ms; + min-height: 32px; + padding: 0 8px; + border-radius: 6px; + background-color: transparent; + color: rgba(248, 248, 242, 0.7); + font-weight: 500; +} + +.notification-banner .notification-button:first-child { + border-radius: 6px; +} + +.notification-banner .notification-button:last-child { + border-radius: 6px; +} + +.notification-banner .notification-button:hover, .notification-banner .notification-buttonfocus { + background-color: rgba(248, 248, 242, 0.08); + color: #F8F8F2; +} + +.notification-banner .notification-button:active { + transition-duration: 200ms; + background-color: rgba(248, 248, 242, 0.2); + color: #F8F8F2; +} + +.summary-source-counter { + font-size: 1em; + font-weight: bold; + height: 1.6em; + width: 1.6em; + -shell-counter-overlap-x: 3px; + -shell-counter-overlap-y: 3px; + background-color: #BD99FF; + color: white; + border: 2px solid white; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5); + border-radius: 0.9em; +} + +.secondary-icon { + icon-size: 1.14286em; +} + +.chat-body { + spacing: 5px; +} + +.chat-response { + margin: 5px; +} + +.chat-log-message { + color: #F8F8F2; +} + +.chat-new-group { + padding-top: 1em; +} + +.chat-received { + padding-left: 4px; +} + +.chat-received:rtl { + padding-left: 0px; + padding-right: 4px; +} + +.chat-sent { + padding-left: 18pt; + color: rgba(248, 248, 242, 0.7); +} + +.chat-sent:rtl { + padding-left: 0; + padding-right: 18pt; +} + +.chat-meta-message { + padding-left: 4px; + font-size: 9pt; + font-weight: 400; + color: rgba(248, 248, 242, 0.7); +} + +.chat-meta-message:rtl { + padding-left: 0; + padding-right: 4px; +} + +.hotplug-transient-box { + spacing: 6px; + padding: 2px 72px 2px 12px; +} + +.hotplug-notification-item { + padding: 2px 10px; +} + +.hotplug-notification-item:focus { + padding: 1px 71px 1px 11px; +} + +.hotplug-notification-item-icon { + icon-size: 24px; + padding: 2px 5px; +} + +.hotplug-resident-box { + spacing: 8px; +} + +.hotplug-resident-mount { + transition-duration: 100ms; + spacing: 8px; + border-radius: 6px; +} + +.hotplug-resident-mount:hover { + background-color: rgba(248, 248, 242, 0.08); +} + +.hotplug-resident-mount:active { + transition-duration: 200ms; + background-color: rgba(248, 248, 242, 0.2); +} + +.hotplug-resident-mount-label { + color: inherit; + padding-left: 6px; +} + +.hotplug-resident-mount-icon { + icon-size: 24px; + padding-left: 6px; +} + +.hotplug-resident-eject-icon { + icon-size: 16px; +} + +.hotplug-resident-eject-button { + padding: 7px; + border-radius: 6px; + color: #F8F8F2; +} + +/* Eeeky things */ +.magnifier-zoom-region { + border: 2px solid #BD99FF; +} + +.magnifier-zoom-region.full-screen { + border-width: 0; +} + +/* On-screen Keyboard */ +.word-suggestions { + font-size: 11.25pt; + font-weight: 400; + spacing: 12px; + min-height: 20pt; +} + +#keyboard { + background-color: rgba(0, 0, 0, 0.3); +} + +.key-container { + padding: 4px; + spacing: 4px; +} + +.keyboard-key { + min-height: 2em; + min-width: 2em; + font-size: 2em; + font-weight: 500; + border-radius: 6px; + border: none; + color: #F8F8F2; + background-color: #3D4C5F; + border-color: transparent; + box-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; +} + +.keyboard-key:focus { + color: #F8F8F2; + text-shadow: none; + icon-shadow: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); +} + +.keyboard-key:hover, .keyboard-key:checked { + color: #F8F8F2; + background-color: #3D4C5F; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); + text-shadow: none; + icon-shadow: none; +} + +.keyboard-key:active { + color: #F8F8F2; + background-color: #6a7582; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.keyboard-key:grayed { + background-color: rgba(0, 0, 0, 0.3); + color: white; + border-color: rgba(0, 0, 0, 0.3); +} + +.keyboard-key.default-key { + border-color: transparent; + background-color: #3D4C5F; + background-size: 24px; +} + +.keyboard-key.default-key:active { + background-color: #626e7c; +} + +.keyboard-key.enter-key { + border-color: transparent; + background-color: #BD99FF; + background-image: url("assets/key-enter.svg"); +} + +.keyboard-key.enter-key:active { + background-color: #caadff; +} + +.keyboard-key.shift-key-lowercase { + background-image: url("assets/key-shift.svg"); +} + +.keyboard-key.shift-key-uppercase { + background-image: url("assets/key-shift-uppercase.svg"); +} + +.keyboard-key.shift-key-uppercase:latched { + background-image: url("assets/key-shift-latched-uppercase.svg"); +} + +.keyboard-key.hide-key { + background-image: url("assets/key-hide.svg"); +} + +.keyboard-key.layout-key { + background-image: url("assets/key-layout.svg"); +} + +.keyboard-subkeys { + color: inherit; + padding: 5px; + -arrow-border-radius: 0; + -arrow-background-color: transparent; + -arrow-border-width: 0; + -arrow-border-color: transparent; + -arrow-base: 0; + -arrow-rise: 0; + -boxpointer-gap: 5px; + background-color: #3D4C5F; + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); +} + +.candidate-popup-content { + padding: 8px; + spacing: 0; +} + +.candidate-index { + padding: 0 4px 0 0; + color: rgba(248, 248, 242, 0.7); +} + +.candidate-box:selected .candidate-index { + color: rgba(255, 255, 255, 0.7); +} + +.candidate-box { + transition-duration: 100ms; + min-height: 28px; + padding: 0 8px; + border-radius: 6px; +} + +.candidate-box:hover { + background-color: rgba(248, 248, 242, 0.08); + color: #F8F8F2; + transition-duration: 0ms; +} + +.candidate-box:active { + background-color: rgba(248, 248, 242, 0.2); + color: #F8F8F2; + transition-duration: 200ms; +} + +.candidate-box:selected { + background-color: #BD99FF; + color: white; + transition-duration: 0ms; +} + +.candidate-page-button-box { + height: 28px; +} + +.vertical .candidate-page-button-box { + padding-top: 0; +} + +.horizontal .candidate-page-button-box { + padding-left: 0; +} + +.candidate-page-button { + min-width: 28px; + min-height: 28px; + padding: 0; +} + +.candidate-page-button-previous { + border-radius: 6px; + border-right-width: 0; +} + +.candidate-page-button-next { + border-radius: 6px; +} + +.candidate-page-button-icon { + icon-size: 1.14286em; +} + +/* Auth Dialogs & Screen Shield */ +.framed-user-icon { + background-size: contain; + border: none; + color: white; + border-radius: 6px; +} + +.framed-user-icon:hover { + border-color: white; + color: white; +} + +.login-dialog-banner-view { + padding-top: 24px; + max-width: 23em; +} + +.login-dialog { + border: none; + background-color: transparent; +} + +.login-dialog StEntry { + color: white; + selection-background-color: rgba(255, 255, 255, 0.3); + selected-color: white; + transition-duration: 100ms; + background-color: rgba(255, 255, 255, 0.04); + border-color: transparent; + box-shadow: inset 0 -1px rgba(255, 255, 255, 0.3); +} + +.login-dialog StEntry:focus { + border-color: transparent; + box-shadow: inset 0 -2px white; +} + +.login-dialog StEntry:insensitive { + color: rgba(248, 248, 242, 0.5); + border-color: transparent; + box-shadow: inset 0 -1px rgba(255, 255, 255, 0.12); + color: rgba(255, 255, 255, 0.5); +} + +.login-dialog .modal-dialog-button-box { + spacing: 3px; +} + +.login-dialog .modal-dialog-button { + padding: 0 16px; + color: rgba(255, 255, 255, 0.7); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; +} + +.login-dialog .modal-dialog-button:hover, .login-dialog .modal-dialog-button:focus { + color: white; + background-color: rgba(255, 255, 255, 0.08); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.login-dialog .modal-dialog-button:active { + color: white; + background-color: rgba(255, 255, 255, 0.2); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.login-dialog .modal-dialog-button:insensitive { + color: rgba(255, 255, 255, 0.3); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.login-dialog .modal-dialog-button:default { + color: white; + background-color: #BD99FF; + border-color: transparent; + box-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; +} + +.login-dialog .modal-dialog-button:default:hover, .login-dialog .modal-dialog-button:default:focus { + color: white; + background-color: #BD99FF; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); + text-shadow: none; + icon-shadow: none; +} + +.login-dialog .modal-dialog-button:default:active { + color: white; + background-color: #cdb1ff; + border-color: transparent; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.24), 0 3px 3px rgba(0, 0, 0, 0.345); + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.login-dialog .modal-dialog-button:default:insensitive { + color: rgba(255, 255, 255, 0.5); + background-color: rgba(255, 255, 255, 0.04); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.login-dialog-logo-bin { + padding: 24px 0px; +} + +.login-dialog-banner { + color: rgba(255, 255, 255, 0.7); +} + +.login-dialog-button-box { + spacing: 5px; +} + +.login-dialog-message-warning { + color: #ee9c11; +} + +.login-dialog-message-hint { + padding-top: 0; + padding-bottom: 20px; +} + +.login-dialog-user-selection-box { + padding: 100px 0px; +} + +.login-dialog-not-listed-label { + padding-left: 2px; +} + +.login-dialog-not-listed-button:focus .login-dialog-not-listed-label, +.login-dialog-not-listed-button:hover .login-dialog-not-listed-label { + color: white; +} + +.login-dialog-not-listed-label { + transition-duration: 100ms; + font-size: 1em; + font-weight: bold; + color: rgba(255, 255, 255, 0.7); + padding-top: 1em; + border-radius: 6px; +} + +.login-dialog-not-listed-label:hover { + background-color: rgba(255, 255, 255, 0.08); + color: white; +} + +.login-dialog-not-listed-label:focus { + background-color: rgba(255, 255, 255, 0.12); +} + +.login-dialog-not-listed-label:active { + transition-duration: 200ms; + background-color: rgba(255, 255, 255, 0.2); + color: white; +} + +.login-dialog-user-list-view { + -st-vfade-offset: 1em; +} + +.login-dialog-user-list { + spacing: 12px; + width: 23em; +} + +.login-dialog-user-list:expanded .login-dialog-user-list-item:selected { + background-color: rgba(255, 255, 255, 0.12); + color: white; +} + +.login-dialog-user-list:expanded .login-dialog-user-list-item:hover { + background-color: rgba(255, 255, 255, 0.08); + color: white; +} + +.login-dialog-user-list:expanded .login-dialog-user-list-item:active { + background-color: rgba(255, 255, 255, 0.2); + color: white; +} + +.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in { + border-right: 2px solid white; +} + +.login-dialog-user-list-item { + transition-duration: 100ms; + border-radius: 6px; + padding: 6px; + color: rgba(255, 255, 255, 0.7); +} + +.login-dialog-user-list-item:ltr .user-widget { + padding-right: 1em; +} + +.login-dialog-user-list-item:rtl .user-widget { + padding-left: 1em; +} + +.login-dialog-user-list-item:hover { + background-color: rgba(255, 255, 255, 0.08); + color: white; +} + +.login-dialog-user-list-item:active { + transition-duration: 200ms; + background-color: rgba(255, 255, 255, 0.2); + color: white; +} + +.login-dialog-user-list-item .login-dialog-timed-login-indicator { + height: 2px; + margin-top: 6px; + background-color: white; +} + +.login-dialog-user-list-item:focus .login-dialog-timed-login-indicator { + background-color: white; +} + +.login-dialog-username, +.user-widget-label { + color: white; + font-size: 15pt; + font-weight: 500; + text-align: left; + padding-left: 15px; +} + +.user-widget-label:ltr { + padding-left: 14px; +} + +.user-widget-label:rtl { + padding-right: 14px; +} + +.login-dialog-prompt-layout { + padding-top: 24px; + padding-bottom: 12px; + spacing: 8px; + width: 23em; +} + +.login-dialog-prompt-label { + color: rgba(255, 255, 255, 0.7); + font-size: 1em; + padding-top: 1em; +} + +.login-dialog-session-list-button StIcon { + icon-size: 1.25em; +} + +.login-dialog-session-list-button { + color: rgba(255, 255, 255, 0.7); +} + +.login-dialog-session-list-button:hover, .login-dialog-session-list-button:focus { + color: white; +} + +.login-dialog-session-list-button:active { + color: white; +} + +.screen-shield-arrows { + padding-bottom: 3em; +} + +.screen-shield-arrows Gjs_Arrow { + color: white; + width: 80px; + height: 48px; + -arrow-thickness: 12px; + -arrow-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); +} + +.screen-shield-clock { + color: white; + text-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); + font-weight: normal; + text-align: center; + padding-bottom: 1.5em; +} + +.screen-shield-clock-time { + font-size: 112px; + font-weight: 300; + text-shadow: 0 1px 1.5px rgba(0, 0, 0, 0.12), 0 1px 1px rgba(0, 0, 0, 0.24); + font-feature-settings: "tnum"; +} + +.screen-shield-clock-date { + font-size: 45px; + font-weight: 400; +} + +.screen-shield-notifications-container { + spacing: 6px; + width: 30em; + background-color: transparent; + max-height: 500px; +} + +.screen-shield-notifications-container .summary-notification-stack-scrollview { + padding-top: 0; + padding-bottom: 0; +} + +.screen-shield-notifications-container .notification, +.screen-shield-notifications-container .screen-shield-notification-source { + padding: 8px; + border: none; + background-color: rgba(0, 0, 0, 0.3); + color: white; + border-radius: 6px; +} + +.screen-shield-notifications-container .notification { + margin-right: 16px; +} + +.screen-shield-notification-label { + min-height: 22px; + padding: 2px 0px 0px 16px; + font-weight: bold; +} + +.screen-shield-notification-count-text { + min-height: 22px; + padding: 2px 0px 0px 16px; + color: rgba(255, 255, 255, 0.7); +} + +#panel.lock-screen { + background-color: rgba(0, 0, 0, 0.3); +} + +.screen-shield-background { + background: black; + box-shadow: 0 19px 19px rgba(0, 0, 0, 0.6), 0 15px 6px rgba(0, 0, 0, 0.44); +} + +#lockDialogGroup { + background: #121f2e; + background-size: cover; +} + +#LookingGlassDialog { + background-color: #3D4C5F; + spacing: 4px; + padding: 0; + border: none; + border-radius: 6px; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5), 0 10px 5px rgba(0, 0, 0, 0.44); +} + +#LookingGlassDialog > #Toolbar { + padding: 0 8px; + border: none; + border-radius: 0; + background-color: rgba(61, 76, 95, 0.01); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.26); +} + +#LookingGlassDialog .labels { + spacing: 0; +} + +#LookingGlassDialog .notebook-tab { + -natural-hpadding: 12px; + -minimum-hpadding: 6px; + font-weight: bold; + color: rgba(248, 248, 242, 0.7); + transition-duration: 100ms; + padding-left: 16px; + padding-right: 16px; + min-height: 32px; + padding: 0 32px; +} + +#LookingGlassDialog .notebook-tab:hover { + background-color: rgba(248, 248, 242, 0.08); + color: #F8F8F2; + text-shadow: none; +} + +#LookingGlassDialog .notebook-tab:active { + background-color: rgba(248, 248, 242, 0.2); + color: #F8F8F2; + transition-duration: 200ms; +} + +#LookingGlassDialog .notebook-tab:selected { + border-bottom-width: 0; + border-color: transparent; + background-color: rgba(61, 76, 95, 0.01); + box-shadow: inset 0 -2px 0px #BD99FF; + color: #F8F8F2; + text-shadow: none; +} + +#LookingGlassDialog StBoxLayout#EvalBox { + padding: 4px; + spacing: 4px; +} + +#LookingGlassDialog StBoxLayout#ResultsArea { + spacing: 4px; +} + +.lg-dialog StEntry { + selection-background-color: #BD99FF; + selected-color: white; +} + +.lg-dialog .shell-link { + color: #6faaff; +} + +.lg-dialog .shell-link:hover { + color: #6faaff; +} + +.lg-completions-text { + font-size: 1em; + font-style: italic; +} + +.lg-obj-inspector-title { + spacing: 4px; +} + +.lg-obj-inspector-button { + min-height: 32px; + padding: 0 16px; + border: none; + border-radius: 6px; + font-size: 10.5pt; + font-weight: 500; + color: rgba(248, 248, 242, 0.7); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 100ms; +} + +.lg-obj-inspector-button:hover { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.08); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.lg-obj-inspector-button:active { + color: #F8F8F2; + background-color: rgba(248, 248, 242, 0.2); + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; + transition-duration: 200ms; +} + +.lg-obj-inspector-button:insensitive { + color: rgba(248, 248, 242, 0.3); + background-color: transparent; + border-color: transparent; + box-shadow: 0 0 transparent; + text-shadow: none; + icon-shadow: none; +} + +.lg-obj-inspector-button:focus { + color: #F8F8F2; + text-shadow: none; + icon-shadow: none; + box-shadow: 0 0 transparent; +} + +.lg-obj-inspector-button:hover { + border: none; +} + +#lookingGlassExtensions { + padding: 4px; +} + +.lg-extensions-list { + padding: 4px; + spacing: 6px; +} + +.lg-extension { + border: none; + border-radius: 6px; + padding: 4px; +} + +.lg-extension-name { + font-size: 18pt; + font-weight: 400; +} + +.lg-extension-meta { + spacing: 6px; +} + +#LookingGlassPropertyInspector { + background: #3D4C5F; + border: none; + border-radius: 6px; + padding: 6px; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.5), 0 10px 5px rgba(0, 0, 0, 0.44); +} + +/* Dash to Dock */ +#dashtodockContainer #dash { + background-color: black; +} + +#dashtodockContainer:overview #dash { + background-color: rgba(255, 255, 255, 0.1); +} + +#dashtodockContainer.extended:overview #dash { + background-color: transparent; +} + +#dashtodockContainer.left #dash, +#dashtodockContainer.right #dash { + padding: 3px 0; +} + +#dashtodockContainer.top #dash, +#dashtodockContainer.bottom #dash { + padding: 0 3px; +} + +#dashtodockContainer.extended #dash { + padding: 0; + border-radius: 0; +} + +#dashtodockContainer.left .dash-item-container > StWidget, +#dashtodockContainer.right .dash-item-container > StWidget, +#dashtodockContainer.extended.left .dash-item-container > StWidget, +#dashtodockContainer.extended.right .dash-item-container > StWidget { + padding: 3px 6px; +} + +#dashtodockContainer.extended.left .dash-item-container:first-child > StWidget, +#dashtodockContainer.extended.right .dash-item-container:first-child > StWidget { + padding: 6px 6px 3px 6px; +} + +#dashtodockContainer.extended.left .dash-item-container:last-child > StWidget, +#dashtodockContainer.extended.right .dash-item-container:last-child > StWidget { + padding: 3px 6px 6px 6px; +} + +#dashtodockContainer.top .dash-item-container > StWidget, +#dashtodockContainer.bottom .dash-item-container > StWidget, +#dashtodockContainer.extended.top .dash-item-container > StWidget, +#dashtodockContainer.extended.bottom .dash-item-container > StWidget { + padding: 6px 3px; +} + +#dashtodockContainer.extended.top .dash-item-container:first-child > StWidget, +#dashtodockContainer.extended.bottom .dash-item-container:first-child > StWidget { + padding: 6px 3px 6px 6px; +} + +#dashtodockContainer.extended.top .dash-item-container:last-child > StWidget, +#dashtodockContainer.extended.bottom .dash-item-container:last-child > StWidget { + padding: 6px 6px 6px 3px; +} + +#dashtodockContainer .app-well-app-running-dot { + background-color: transparent; +} + +#dashtodockContainer .dash-item-container > StWidget { + background-size: cover; +} + +#dashtodockContainer.left .dash-item-container > StWidget.running1 { + background-image: url("assets/dash/left-running1.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running1.focused { + background-image: url("assets/dash/left-running1-focused.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running2 { + background-image: url("assets/dash/left-running2.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running2.focused { + background-image: url("assets/dash/left-running2-focused.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running3 { + background-image: url("assets/dash/left-running3.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running3.focused { + background-image: url("assets/dash/left-running3-focused.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running4 { + background-image: url("assets/dash/left-running4.svg"); +} + +#dashtodockContainer.left .dash-item-container > StWidget.running4.focused { + background-image: url("assets/dash/left-running4-focused.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running1 { + background-image: url("assets/dash/right-running1.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running1.focused { + background-image: url("assets/dash/right-running1-focused.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running2 { + background-image: url("assets/dash/right-running2.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running2.focused { + background-image: url("assets/dash/right-running2-focused.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running3 { + background-image: url("assets/dash/right-running3.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running3.focused { + background-image: url("assets/dash/right-running3-focused.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running4 { + background-image: url("assets/dash/right-running4.svg"); +} + +#dashtodockContainer.right .dash-item-container > StWidget.running4.focused { + background-image: url("assets/dash/right-running4-focused.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running1 { + background-image: url("assets/dash/top-running1.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running1.focused { + background-image: url("assets/dash/top-running1-focused.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running2 { + background-image: url("assets/dash/top-running2.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running2.focused { + background-image: url("assets/dash/top-running2-focused.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running3 { + background-image: url("assets/dash/top-running3.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running3.focused { + background-image: url("assets/dash/top-running3-focused.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running4 { + background-image: url("assets/dash/top-running4.svg"); +} + +#dashtodockContainer.top .dash-item-container > StWidget.running4.focused { + background-image: url("assets/dash/top-running4-focused.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running1 { + background-image: url("assets/dash/bottom-running1.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running1.focused { + background-image: url("assets/dash/bottom-running1-focused.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running2 { + background-image: url("assets/dash/bottom-running2.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running2.focused { + background-image: url("assets/dash/bottom-running2-focused.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running3 { + background-image: url("assets/dash/bottom-running3.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running3.focused { + background-image: url("assets/dash/bottom-running3-focused.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running4 { + background-image: url("assets/dash/bottom-running4.svg"); +} + +#dashtodockContainer.bottom .dash-item-container > StWidget.running4.focused { + background-image: url("assets/dash/bottom-running4-focused.svg"); +} + +/* Simple Dock */ +#dash:desktop { + background-color: black; +} + +/* GPaste */ +.popup-menu .search-entry { + color: #F8F8F2; + selection-background-color: #BD99FF; + selected-color: white; + transition-duration: 100ms; + background-color: rgba(248, 248, 242, 0.04); + border-color: transparent; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); +} + +.popup-menu .search-entry:hover { + box-shadow: inset 0 -1px #F8F8F2; +} + +.popup-menu .search-entry:focus { + border-color: transparent; + box-shadow: inset 0 -2px #BD99FF; + color: #F8F8F2; +} + +.popup-menu .search-entry .search-entry-icon { + color: rgba(248, 248, 242, 0.7); +} + +.popup-menu .search-entry:hover .search-entry-icon, .popup-menu .search-entry:focus .search-entry-icon { + color: #F8F8F2; +} diff --git a/misc/gtk/ephemeral/gnome-shell/message-indicator-symbolic.svg b/misc/gtk/ephemeral/gnome-shell/message-indicator-symbolic.svg new file mode 100644 index 0000000..a93cc63 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/message-indicator-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gnome-shell/no-events.svg b/misc/gtk/ephemeral/gnome-shell/no-events.svg new file mode 120000 index 0000000..d2fcad0 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/no-events.svg @@ -0,0 +1 @@ +assets/no-events.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/gnome-shell/no-notifications.svg b/misc/gtk/ephemeral/gnome-shell/no-notifications.svg new file mode 120000 index 0000000..175731c --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/no-notifications.svg @@ -0,0 +1 @@ +assets/no-notifications.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/gnome-shell/noise-texture.png b/misc/gtk/ephemeral/gnome-shell/noise-texture.png new file mode 100644 index 0000000..ca1563d Binary files /dev/null and b/misc/gtk/ephemeral/gnome-shell/noise-texture.png differ diff --git a/misc/gtk/ephemeral/gnome-shell/pad-osd.css b/misc/gtk/ephemeral/gnome-shell/pad-osd.css new file mode 100644 index 0000000..31c2377 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/pad-osd.css @@ -0,0 +1,30 @@ +.Leader { + stroke-width: .5 !important; + stroke: #535353; + fill: none !important; +} + +.Button { + stroke-width: .25; + stroke: #ededed; + fill: #ededed; +} + +.Ring { + stroke-width: .5 !important; + stroke: #535353 !important; + fill: none !important; +} + +.Label { + stroke: none !important; + stroke-width: .1 !important; + font-size: .1 !important; + fill: transparent !important; +} + +.TouchStrip, .TouchRing { + stroke-width: .1 !important; + stroke: #ededed !important; + fill: #535353 !important; +} diff --git a/misc/gtk/ephemeral/gnome-shell/process-working.svg b/misc/gtk/ephemeral/gnome-shell/process-working.svg new file mode 120000 index 0000000..a6586c3 --- /dev/null +++ b/misc/gtk/ephemeral/gnome-shell/process-working.svg @@ -0,0 +1 @@ +assets/process-working.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/gtk-2.0/apps.rc b/misc/gtk/ephemeral/gtk-2.0/apps.rc new file mode 100644 index 0000000..530e72f --- /dev/null +++ b/misc/gtk/ephemeral/gtk-2.0/apps.rc @@ -0,0 +1,92 @@ +# vim:set ft=gtkrc ts=2 sw=2 sts=2 ai et: +# +# This file, unlike hacks.rc, contains legitimate cases we need to handle, e.g. +# custom widgets, programs giving us a chance to alter their UI to fit more with +# the theme or stuff that is supposed to look different, like panels. + +# TODO: This could really look nicer +style "gimp_spin_scale" { + # Spin background + bg[NORMAL] = @base_color + + engine "pixmap" { + image { + function = BOX + state = NORMAL + detail = "spinbutton_up" + overlay_file = "assets/pan-up-alt.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = PRELIGHT + detail = "spinbutton_up" + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = ACTIVE + detail = "spinbutton_up" + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = INSENSITIVE + detail = "spinbutton_up" + overlay_file = "assets/pan-up-alt-disabled.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = NORMAL + detail = "spinbutton_down" + overlay_file = "assets/pan-down-alt.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = PRELIGHT + detail = "spinbutton_down" + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = ACTIVE + detail = "spinbutton_down" + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + } + + image { + function = BOX + state = INSENSITIVE + detail = "spinbutton_down" + overlay_file = "assets/pan-down-alt-disabled.png" + overlay_stretch = FALSE + } + } +} + +style "chrome_gtk_frame" { + ChromeGtkFrame::frame-color = @titlebar_bg_color + ChromeGtkFrame::inactive-frame-color = @titlebar_bg_color + ChromeGtkFrame::incognito-frame-color = @titlebar_bg_color + ChromeGtkFrame::incognito-inactive-frame-color = @titlebar_bg_color + + ChromeGtkFrame::frame-gradient-size = 0 +} + +# Disable spin button assets for GimpSpinScale +class "GimpSpinScale" style "gimp_spin_scale" + +# Chromium lets us define some colours and settings for better integration +class "ChromeGtkFrame" style "chrome_gtk_frame" diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/border.png b/misc/gtk/ephemeral/gtk-2.0/assets/border.png new file mode 100644 index 0000000..0e4fb42 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/border.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/button-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/button-active.png new file mode 100644 index 0000000..63df24b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/button-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/button-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/button-disabled.png new file mode 100644 index 0000000..1d5b8b1 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/button-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/button-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/button-hover.png new file mode 100644 index 0000000..bb02e63 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/button-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/button.png b/misc/gtk/ephemeral/gtk-2.0/assets/button.png new file mode 100644 index 0000000..c166c7f Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/button.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-active.png new file mode 100644 index 0000000..963cbd3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-disabled.png new file mode 100644 index 0000000..50221db Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-hover.png new file mode 100644 index 0000000..f3eaa1c Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked.png new file mode 100644 index 0000000..cb68af7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-checked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-active.png new file mode 100644 index 0000000..62b3361 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-disabled.png new file mode 100644 index 0000000..8db3921 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-hover.png new file mode 100644 index 0000000..94d3cb0 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed.png new file mode 100644 index 0000000..78a134c Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-mixed.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-active.png new file mode 100644 index 0000000..c14ebf8 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-disabled.png new file mode 100644 index 0000000..c80a256 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-hover.png new file mode 100644 index 0000000..d6bda48 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked.png b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked.png new file mode 100644 index 0000000..6c8a111 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/checkbox-unchecked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-active.png new file mode 100644 index 0000000..a5f474b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-disabled.png new file mode 100644 index 0000000..fdf2624 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-hover.png new file mode 100644 index 0000000..ff4d5ed Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button.png new file mode 100644 index 0000000..50a7c55 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-button.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry-active.png new file mode 100644 index 0000000..448d51c Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry-disabled.png new file mode 100644 index 0000000..f3f8868 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry.png new file mode 100644 index 0000000..f3f8868 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-ltr-entry.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-active.png new file mode 100644 index 0000000..518d07b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-disabled.png new file mode 100644 index 0000000..7c06542 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-hover.png new file mode 100644 index 0000000..ff7e2e8 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button.png new file mode 100644 index 0000000..f6c7470 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-button.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry-active.png new file mode 100644 index 0000000..ef56731 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry-disabled.png new file mode 100644 index 0000000..043a640 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry.png b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry.png new file mode 100644 index 0000000..043a640 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/combo-rtl-entry.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/entry-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/entry-active.png new file mode 100644 index 0000000..512e3bc Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/entry-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/entry-background-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/entry-background-disabled.png new file mode 100644 index 0000000..672875b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/entry-background-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/entry-background.png b/misc/gtk/ephemeral/gtk-2.0/assets/entry-background.png new file mode 100644 index 0000000..672875b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/entry-background.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/entry-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/entry-disabled.png new file mode 100644 index 0000000..794d94b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/entry-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/entry.png b/misc/gtk/ephemeral/gtk-2.0/assets/entry.png new file mode 100644 index 0000000..794d94b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/entry.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-active.png new file mode 100644 index 0000000..2cb74c3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-disabled.png new file mode 100644 index 0000000..2e3cfdc Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-hover.png new file mode 100644 index 0000000..623f383 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/flat-button.png b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button.png new file mode 100644 index 0000000..2e3cfdc Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/flat-button.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/focus.png b/misc/gtk/ephemeral/gtk-2.0/assets/focus.png new file mode 100644 index 0000000..b181b73 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/focus.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/frame-inline.png b/misc/gtk/ephemeral/gtk-2.0/assets/frame-inline.png new file mode 100644 index 0000000..11d87aa Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/frame-inline.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/frame-notebook.png b/misc/gtk/ephemeral/gtk-2.0/assets/frame-notebook.png new file mode 100644 index 0000000..6c97ab4 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/frame-notebook.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/frame.png b/misc/gtk/ephemeral/gtk-2.0/assets/frame.png new file mode 100644 index 0000000..579998e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/frame.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz-active.png new file mode 100644 index 0000000..9f86461 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz-hover.png new file mode 100644 index 0000000..8a75071 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz.png b/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz.png new file mode 100644 index 0000000..b4d2686 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/handle-horz.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert-active.png new file mode 100644 index 0000000..57a9f3e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert-hover.png new file mode 100644 index 0000000..a9ada49 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert.png b/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert.png new file mode 100644 index 0000000..1f9f525 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/handle-vert.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-checked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-checked-disabled.png new file mode 100644 index 0000000..de413b9 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-checked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-checked.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-checked.png new file mode 100644 index 0000000..d49bf03 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-checked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-mixed-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-mixed-disabled.png new file mode 100644 index 0000000..0dd61a8 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-mixed-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-mixed.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-mixed.png new file mode 100644 index 0000000..fe474a1 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-mixed.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-unchecked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-unchecked-disabled.png new file mode 100644 index 0000000..27a1871 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-unchecked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-unchecked.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-unchecked.png new file mode 100644 index 0000000..2c16a50 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-checkbox-unchecked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-checked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-checked-disabled.png new file mode 100644 index 0000000..cd16ebd Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-checked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-checked.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-checked.png new file mode 100644 index 0000000..fd47b60 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-checked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-mixed-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-mixed-disabled.png new file mode 100644 index 0000000..b66ffc9 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-mixed-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-mixed.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-mixed.png new file mode 100644 index 0000000..8bf5cad Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-mixed.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-unchecked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-unchecked-disabled.png new file mode 100644 index 0000000..56da857 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-unchecked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-unchecked.png b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-unchecked.png new file mode 100644 index 0000000..08285c9 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/menu-radio-unchecked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry-active.png new file mode 100644 index 0000000..448d51c Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry-disabled.png new file mode 100644 index 0000000..f3f8868 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry.png new file mode 100644 index 0000000..f3f8868 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-ltr-entry.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry-active.png new file mode 100644 index 0000000..ef56731 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry-disabled.png new file mode 100644 index 0000000..043a640 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry.png new file mode 100644 index 0000000..043a640 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-combo-rtl-entry.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry-active.png new file mode 100644 index 0000000..512e3bc Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry-disabled.png new file mode 100644 index 0000000..794d94b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry.png b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry.png new file mode 100644 index 0000000..794d94b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/notebook-entry.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-alt-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-alt-disabled.png new file mode 100644 index 0000000..99aec71 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-alt-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-alt.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-alt.png new file mode 100644 index 0000000..73e9cba Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-alt.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-disabled.png new file mode 100644 index 0000000..6a11596 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-down.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down.png new file mode 100644 index 0000000..c05505f Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-down.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-alt-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-alt-disabled.png new file mode 100644 index 0000000..f8edc51 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-alt-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-alt.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-alt.png new file mode 100644 index 0000000..de6a057 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-alt.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-disabled.png new file mode 100644 index 0000000..e661d9d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-semi.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-semi.png new file mode 100644 index 0000000..99f5429 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left-semi.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-left.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left.png new file mode 100644 index 0000000..0c07be0 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-left.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-alt-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-alt-disabled.png new file mode 100644 index 0000000..cc6c942 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-alt-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-alt.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-alt.png new file mode 100644 index 0000000..56dd4c1 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-alt.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-disabled.png new file mode 100644 index 0000000..d24e821 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-semi.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-semi.png new file mode 100644 index 0000000..8b82092 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right-semi.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-right.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right.png new file mode 100644 index 0000000..2011a36 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-right.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-alt-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-alt-disabled.png new file mode 100644 index 0000000..64b3753 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-alt-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-alt.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-alt.png new file mode 100644 index 0000000..5a4e6c7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-alt.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-disabled.png new file mode 100644 index 0000000..4920a4e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/pan-up.png b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up.png new file mode 100644 index 0000000..da224fb Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/pan-up.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/progressbar-progress.png b/misc/gtk/ephemeral/gtk-2.0/assets/progressbar-progress.png new file mode 100644 index 0000000..606dc86 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/progressbar-progress.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/progressbar-trough.png b/misc/gtk/ephemeral/gtk-2.0/assets/progressbar-trough.png new file mode 100644 index 0000000..229a405 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/progressbar-trough.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-active.png new file mode 100644 index 0000000..a5bb99e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-disabled.png new file mode 100644 index 0000000..81cfd55 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-hover.png new file mode 100644 index 0000000..05c15ef Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked.png new file mode 100644 index 0000000..da0c5bf Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-checked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-active.png new file mode 100644 index 0000000..043294c Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-disabled.png new file mode 100644 index 0000000..c7bd296 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-hover.png new file mode 100644 index 0000000..b305c83 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed.png new file mode 100644 index 0000000..6f1f9c3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-mixed.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-active.png new file mode 100644 index 0000000..2a789c1 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-disabled.png new file mode 100644 index 0000000..4ba61c8 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-hover.png new file mode 100644 index 0000000..6cfd3ed Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked.png b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked.png new file mode 100644 index 0000000..0bdb3c6 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/radio-unchecked.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough-active.png new file mode 100644 index 0000000..a2722de Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough-disabled.png new file mode 100644 index 0000000..7af5718 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough.png new file mode 100644 index 0000000..a4a7ea2 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-horz-trough.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-active.png new file mode 100644 index 0000000..0182b87 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-disabled.png new file mode 100644 index 0000000..0975095 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-hover.png new file mode 100644 index 0000000..35adcb6 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider.png new file mode 100644 index 0000000..dea60e7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough-active.png new file mode 100644 index 0000000..5db5772 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough-disabled.png new file mode 100644 index 0000000..4edd4ab Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough.png b/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough.png new file mode 100644 index 0000000..d44f671 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scale-vert-trough.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-active.png new file mode 100644 index 0000000..4b3c0d1 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-disabled.png new file mode 100644 index 0000000..4dd0120 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-hover.png new file mode 100644 index 0000000..d48bf85 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider.png new file mode 100644 index 0000000..fba4f27 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-trough.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-trough.png new file mode 100644 index 0000000..6b306bc Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-horz-trough.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-active.png new file mode 100644 index 0000000..7d966cf Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-disabled.png new file mode 100644 index 0000000..097d5a3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-hover.png new file mode 100644 index 0000000..aaa3738 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider.png new file mode 100644 index 0000000..82bfd21 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-trough.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-trough.png new file mode 100644 index 0000000..b7b0c7f Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-ltr-trough.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-active.png new file mode 100644 index 0000000..56ef524 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-disabled.png new file mode 100644 index 0000000..19be0d7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-hover.png new file mode 100644 index 0000000..db3f144 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider.png new file mode 100644 index 0000000..6404ff7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-trough.png b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-trough.png new file mode 100644 index 0000000..3cbf17b Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/scrollbar-vert-rtl-trough.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-active.png new file mode 100644 index 0000000..f959655 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-disabled.png new file mode 100644 index 0000000..538c26e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-hover.png new file mode 100644 index 0000000..ae86e1d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down.png new file mode 100644 index 0000000..1a450e6 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-down.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-active.png new file mode 100644 index 0000000..5bf5999 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-disabled.png new file mode 100644 index 0000000..5524b39 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-hover.png new file mode 100644 index 0000000..15c34aa Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up.png new file mode 100644 index 0000000..2aaa548 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-ltr-up.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-active.png new file mode 100644 index 0000000..8da5f37 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-disabled.png new file mode 100644 index 0000000..787a1bc Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-hover.png new file mode 100644 index 0000000..22337c3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down.png new file mode 100644 index 0000000..71d266d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-down.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-active.png new file mode 100644 index 0000000..e412eeb Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-disabled.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-disabled.png new file mode 100644 index 0000000..efd3384 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-hover.png new file mode 100644 index 0000000..6ade346 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up.png b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up.png new file mode 100644 index 0000000..eeaac0d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/spin-rtl-up.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/tab.png b/misc/gtk/ephemeral/gtk-2.0/assets/tab.png new file mode 100644 index 0000000..544f537 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/tab.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button-active.png new file mode 100644 index 0000000..837bf70 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button-hover.png new file mode 100644 index 0000000..1ff08c4 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button.png b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button.png new file mode 100644 index 0000000..de152ba Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-ltr-button.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button-active.png b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button-active.png new file mode 100644 index 0000000..c84e062 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button-active.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button-hover.png b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button-hover.png new file mode 100644 index 0000000..4593b28 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button-hover.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button.png b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button.png new file mode 100644 index 0000000..de152ba Binary files /dev/null and b/misc/gtk/ephemeral/gtk-2.0/assets/treeview-rtl-button.png differ diff --git a/misc/gtk/ephemeral/gtk-2.0/gtkrc b/misc/gtk/ephemeral/gtk-2.0/gtkrc new file mode 100644 index 0000000..adcfb95 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-2.0/gtkrc @@ -0,0 +1,34 @@ +# Based on Bridge by ScionicSpectre and Adwaita by GNOME +# vim:set ts=2 sw=2 sts=2 ai et: +# +# This is the GTK+ 2 version of oomox-ephemeral. It's whole purpose is to look as the +# GTK+ 3 version as much as possible until GTK+ 2 dies completely. +# +# Note: comments for explaining styles are on the bottom of each file beside the +# widget matches. + +# Declare the colours used throughout the theme. +# There shouldn't be any fiddling with them in the theme files themselves in +# order to not mess up the dark theme. + +# Text/base +gtk-color-scheme = "text_color:#F8F8F2\nbase_color:#323F4E" +# Foreground/background +gtk-color-scheme = "fg_color:#F8F8F2\nbg_color:#323F4E" +# Selected foreground/background +gtk-color-scheme = "selected_fg_color:#F8F8F2\nselected_bg_color:#BD99FF" +# Titlebar foreground/background +gtk-color-scheme = "titlebar_fg_color:#F8F8F2\ntitlebar_bg_color:#323F4E" +# Tooltips foreground/background +gtk-color-scheme = "tooltip_fg_color:#F8F8F2\ntooltip_bg_color:#616161" +# Links +gtk-color-scheme = "link_color:#BD99FF\nvisited_link_color:#E040FB" + +# Set GTK settings +gtk-auto-mnemonics = 1 +gtk-primary-button-warps-slider = 1 + +# And hand over the control to the theme files +include "main.rc" +include "apps.rc" +include "hacks.rc" diff --git a/misc/gtk/ephemeral/gtk-2.0/hacks.rc b/misc/gtk/ephemeral/gtk-2.0/hacks.rc new file mode 100644 index 0000000..96eb088 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-2.0/hacks.rc @@ -0,0 +1,36 @@ +# vim:set ft=gtkrc ts=2 sw=2 sts=2 ai et: +# +# This file contains horrible hacks to make this theme work with some programs +# This is mostly due to the limitations of gtk2 but sometimes its the fault of +# the programs themselves. Not going to point fingers. +# +# Either way, it's a WONTFIX for both, hence this horrible file. + +style "toplevel_hack" { + engine "adwaita" {} +} + +style "chrome_entry" { + base[NORMAL] = @base_color + base[INSENSITIVE] = @base_color +} + +style "vim_notebook" { + bg[NORMAL] = @base_color + bg[ACTIVE] = @bg_color +} + +# Vim puts an eventbox between the tab and the label and colours it, +# we need to handle that +widget "vim-main-window*GtkNotebook.GtkEventBox" style "vim_notebook" + +# (he)xchat input box +class "SexySpellEntry" style:highest "normal_entry" + +# Chromium uses base as the fill colour of its own entries +# This would be fine but Gtk+ uses it to fill the surrounding space, so its set to bg +# That results in Chromium using it for the fill, so we need to handle that +widget_class "*Chrom*" style "chrome_entry" + +# Hack to be able to match widgets in LibreOffice +class "GtkWindow" style "toplevel_hack" diff --git a/misc/gtk/ephemeral/gtk-2.0/main.rc b/misc/gtk/ephemeral/gtk-2.0/main.rc new file mode 100644 index 0000000..c7562dd --- /dev/null +++ b/misc/gtk/ephemeral/gtk-2.0/main.rc @@ -0,0 +1,2781 @@ +# vim:set ft=gtkrc ts=2 sw=2 sts=2 ai et: +# +# This is the main theme file, handling all the default widgets and theme +# properties. Since GTK+ 2 is old, we need to overcome some of its limitations, +# which is also mostly done in this file. Sadly not all of them can be overcome +# so there will always be a visible difference between the GTK+ 2 and 3 theme. + +style "default" { + xthickness = 1 + ythickness = 1 + + #################### + # Style Properties # + #################### + + GtkWidget::focus-padding = 0 + GtkWidget::focus-line-width = 2 + GtkWidget::focus-line-pattern = "\2\1" + + GtkToolbar::space-size = 5 # 1 + 2*2 (separator + margins) + GtkToolbar::internal-padding = 2 + GtkToolButton::icon-spacing = 4 + + GtkWidget::tooltip-radius = 4 + GtkWidget::tooltip-alpha = 230 + GtkWidget::new-tooltip-style = 1 #for compatibility + + GtkWidget::link-color = @link_color + GtkWidget::visited-link-color = @visited_link_color + GnomeHRef::link_color = @link_color + GtkHTML::link-color = @link_color + GtkHTML::vlink-color = @visited_link_color + GtkIMHtml::hyperlink-color = @link_color + GtkIMHtml::hyperlink-visited-color = @visited_link_color + + GtkSeparatorMenuItem::horizontal-padding = 0 + GtkSeparatorMenuItem::wide-separators = 1 + GtkSeparatorMenuItem::separator-height = 3 + + GtkButton::child-displacement-y = 0 + + GtkButton::default-border = {0, 0, 0, 0} + GtkButton::default-outside-border = {0, 0, 0, 0} + GtkButton::inner-border = {4, 4, 4, 4} + + GtkEntry::state-hint = 1 + GtkEntry::inner-border = {4, 4, 4, 4} + + GtkPaned::handle-size = 8 + GtkHPaned::handle-size = 8 + GtkVPaned::handle-size = 8 + + GtkScrollbar::trough-border = 0 + GtkRange::trough-border = 0 + GtkRange::slider-width = 17 + GtkRange::stepper-size = 0 + GtkRange::activate-slider = 1 + + GtkScrollbar::activate-slider = 1 + GtkScrollbar::stepper-size = 0 + GtkScrollbar::has-backward-stepper = 0 + GtkScrollbar::has-forward-stepper = 0 + GtkScrollbar::min-slider-length = 32 # 24 + 2*4 (margins) + GtkScrolledWindow::scrollbar-spacing = 0 + GtkScrolledWindow::scrollbars-within-bevel = 1 + + GtkScale::slider_length = 24 + GtkScale::slider_width = 24 + GtkScale::trough-side-details = 1 + + GtkProgressBar::min-horizontal-bar-height = 4 + GtkProgressBar::min-vertical-bar-width = 4 + GtkProgressBar::xspacing = 4 + GtkProgressBar::yspacing = 4 + + GtkStatusbar::shadow_type = GTK_SHADOW_NONE + GtkSpinButton::shadow_type = GTK_SHADOW_NONE + GtkMenuBar::shadow-type = GTK_SHADOW_NONE + GtkToolbar::shadow-type = GTK_SHADOW_NONE + # TODO: find out what this comment means: + # ( every window is misaligned for the sake of menus ): + GtkMenuBar::internal-padding = 0 + GtkMenu::horizontal-padding = 0 + GtkMenu::vertical-padding = 4 + GtkMenu::double-arrows = 0 + GtkMenuItem::arrow-scaling = 1 + GtkMenuItem::toggle-spacing = 12 + + GtkCheckButton::indicator-size = 24 + GtkCheckButton::indicator_spacing = 2 + GtkOptionMenu::indicator_spacing = {10, 10, 6, 6} + + GtkTreeView::expander-size = 16 + GtkTreeView::vertical-separator = 0 + GtkTreeView::horizontal-separator = 4 + GtkTreeView::allow-rules = 0 + # Set this because some apps read it + GtkTreeView::odd-row-color = @base_color + GtkTreeView::even-row-color = @base_color + + GtkExpander::expander-size = 16 + + GtkNotebook::tab-overlap = 0 + + ########## + # Colors # + ########## + + bg[NORMAL] = @bg_color + bg[PRELIGHT] = @bg_color + bg[SELECTED] = mix (0.32, @selected_bg_color, @bg_color) + bg[INSENSITIVE] = @bg_color + bg[ACTIVE] = @bg_color + + fg[NORMAL] = @fg_color + fg[PRELIGHT] = @fg_color + fg[SELECTED] = @fg_color + fg[INSENSITIVE] = mix (0.4, @fg_color, @bg_color) + fg[ACTIVE] = @fg_color + + text[NORMAL] = @text_color + text[PRELIGHT] = @text_color + text[SELECTED] = @text_color + text[INSENSITIVE] = mix (0.4, @text_color, @base_color) + text[ACTIVE] = @text_color + + base[NORMAL] = @base_color + base[PRELIGHT] = mix (0.05, @text_color, @base_color) + base[SELECTED] = mix (0.32, @selected_bg_color, @base_color) + base[INSENSITIVE] = mix (0.5, @base_color, @bg_color) + base[ACTIVE] = mix (0.32, @selected_bg_color, @base_color) + + # For succinctness, all reasonable pixmap options remain here + + # Draw frame around menu in a non-compositied environment + # This needs to go before pixmap because we need to override some stuff + engine "adwaita" {} + + engine "pixmap" { + + ################# + # Check Buttons # + ################# + + image { + function = CHECK + state = NORMAL + shadow = OUT + overlay_file = "assets/checkbox-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = PRELIGHT + shadow = OUT + overlay_file = "assets/checkbox-unchecked-hover.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = ACTIVE + shadow = OUT + overlay_file = "assets/checkbox-unchecked-active.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = SELECTED + shadow = OUT + overlay_file = "assets/checkbox-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = INSENSITIVE + shadow = OUT + overlay_file = "assets/checkbox-unchecked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = NORMAL + shadow = IN + overlay_file = "assets/checkbox-checked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = PRELIGHT + shadow = IN + overlay_file = "assets/checkbox-checked-hover.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = ACTIVE + shadow = IN + overlay_file = "assets/checkbox-checked-active.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = SELECTED + shadow = IN + overlay_file = "assets/checkbox-checked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = INSENSITIVE + shadow = IN + overlay_file = "assets/checkbox-checked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = NORMAL + shadow = ETCHED_IN + overlay_file = "assets/checkbox-mixed.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = PRELIGHT + shadow = ETCHED_IN + overlay_file = "assets/checkbox-mixed-hover.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = ACTIVE + shadow = ETCHED_IN + overlay_file = "assets/checkbox-mixed-active.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = SELECTED + shadow = ETCHED_IN + overlay_file = "assets/checkbox-mixed.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = INSENSITIVE + shadow = ETCHED_IN + overlay_file = "assets/checkbox-mixed-disabled.png" + overlay_stretch = FALSE + } + + ################# + # Radio Buttons # + ################# + + image { + function = OPTION + state = NORMAL + shadow = OUT + overlay_file = "assets/radio-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = PRELIGHT + shadow = OUT + overlay_file = "assets/radio-unchecked-hover.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = ACTIVE + shadow = OUT + overlay_file = "assets/radio-unchecked-active.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = SELECTED + shadow = OUT + overlay_file = "assets/radio-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = INSENSITIVE + shadow = OUT + overlay_file = "assets/radio-unchecked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = NORMAL + shadow = IN + overlay_file = "assets/radio-checked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = PRELIGHT + shadow = IN + overlay_file = "assets/radio-checked-hover.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = ACTIVE + shadow = IN + overlay_file = "assets/radio-checked-active.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = SELECTED + shadow = IN + overlay_file = "assets/radio-checked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = INSENSITIVE + shadow = IN + overlay_file = "assets/radio-checked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = NORMAL + shadow = ETCHED_IN + overlay_file = "assets/radio-mixed.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = PRELIGHT + shadow = ETCHED_IN + overlay_file = "assets/radio-mixed-hover.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = ACTIVE + shadow = ETCHED_IN + overlay_file = "assets/radio-mixed-active.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = SELECTED + shadow = ETCHED_IN + overlay_file = "assets/radio-mixed.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = INSENSITIVE + shadow = ETCHED_IN + overlay_file = "assets/radio-mixed-disabled.png" + overlay_stretch = FALSE + } + + ########## + # Arrows # + ########## + + # Overrides + + # Disable arrows in spinbuttons + image { + function = ARROW + detail = "spinbutton" + } + + # Disable arrows for qt in scrollbars + + image { + function = ARROW + detail = "vscrollbar" + } + + image { + function = ARROW + detail = "hscrollbar" + } + + # Menu arrows + + image { + function = ARROW + state = NORMAL + detail = "menuitem" + overlay_file = "assets/pan-left.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = PRELIGHT + detail = "menuitem" + overlay_file = "assets/pan-left.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = INSENSITIVE + detail = "menuitem" + overlay_file = "assets/pan-left-disabled.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = NORMAL + detail = "menuitem" + overlay_file = "assets/pan-right.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + image { + function = ARROW + state = PRELIGHT + detail = "menuitem" + overlay_file = "assets/pan-right.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + image { + function = ARROW + state = INSENSITIVE + detail = "menuitem" + overlay_file = "assets/pan-right-disabled.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + image { + function = ARROW + state = INSENSITIVE + detail = "menu_scroll_arrow_up" + overlay_file = "assets/pan-up-disabled.png" + overlay_stretch = FALSE + } + + image { + function = ARROW + detail = "menu_scroll_arrow_up" + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + } + + image { + function = ARROW + state = INSENSITIVE + detail = "menu_scroll_arrow_down" + overlay_file = "assets/pan-down-disabled.png" + overlay_stretch = FALSE + } + + image { + function = ARROW + detail = "menu_scroll_arrow_down" + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + } + + # Regular arrows + + image { + function = ARROW + state = NORMAL + overlay_file = "assets/pan-up-alt.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = PRELIGHT + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = ACTIVE + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = INSENSITIVE + overlay_file = "assets/pan-up-alt-disabled.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = NORMAL + overlay_file = "assets/pan-down-alt.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + + image { + function = ARROW + state = PRELIGHT + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + + image { + function = ARROW + state = ACTIVE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + + image { + function = ARROW + state = INSENSITIVE + overlay_file = "assets/pan-down-alt-disabled.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + + image { + function = ARROW + state = NORMAL + overlay_file = "assets/pan-left-alt.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = PRELIGHT + overlay_file = "assets/pan-left.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = ACTIVE + overlay_file = "assets/pan-left.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = INSENSITIVE + overlay_file = "assets/pan-left-alt-disabled.png" + overlay_stretch = FALSE + arrow_direction = LEFT + } + + image { + function = ARROW + state = NORMAL + overlay_file = "assets/pan-right-alt.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + image { + function = ARROW + state = PRELIGHT + overlay_file = "assets/pan-right.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + image { + function = ARROW + state = ACTIVE + overlay_file = "assets/pan-right.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + image { + function = ARROW + state = INSENSITIVE + overlay_file = "assets/pan-right-alt-disabled.png" + overlay_stretch = FALSE + arrow_direction = RIGHT + } + + ###################### + # Option Menu Arrows # + ###################### + + image { + function = TAB + state = NORMAL + overlay_file = "assets/pan-down-alt.png" + overlay_stretch = FALSE + } + + image { + function = TAB + state = PRELIGHT + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + } + + image { + function = TAB + state = ACTIVE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + } + + image { + function = TAB + state = INSENSITIVE + overlay_file = "assets/pan-down-alt-disabled.png" + overlay_stretch = FALSE + } + + ######### + # Lines # + ######### + + image { + function = VLINE + file = "assets/border.png" + border = {1, 0, 0, 0} + } + + image { + function = HLINE + file = "assets/border.png" + border = {0, 0, 1, 0} + } + + ######### + # Focus # + ######### + + image { + function = FOCUS + file = "assets/focus.png" + border = {5, 5, 5, 5} # Super strange, {4, 4, 4, 4} does not work properly... + stretch = TRUE + } + + ########### + # Handles # + ########### + + image { + function = HANDLE + detail = "handlebox" + overlay_file = "assets/handle-vert.png" + overlay_stretch = FALSE + } + + image { + function = HANDLE + state = NORMAL + overlay_file = "assets/handle-horz.png" + overlay_stretch = FALSE + orientation = HORIZONTAL + } + + image { + function = HANDLE + state = PRELIGHT + overlay_file = "assets/handle-horz-hover.png" + overlay_stretch = FALSE + orientation = HORIZONTAL + } + + image { + function = HANDLE + state = ACTIVE + overlay_file = "assets/handle-horz-active.png" + overlay_stretch = FALSE + orientation = HORIZONTAL + } + + image { + function = HANDLE + state = NORMAL + overlay_file = "assets/handle-vert.png" + overlay_stretch = FALSE + orientation = VERTICAL + } + + image { + function = HANDLE + state = PRELIGHT + overlay_file = "assets/handle-vert-hover.png" + overlay_stretch = FALSE + orientation = VERTICAL + } + + image { + function = HANDLE + state = ACTIVE + overlay_file = "assets/handle-vert-active.png" + overlay_stretch = FALSE + orientation = VERTICAL + } + + image { + function = RESIZE_GRIP + } + + ############# + # Expanders # + ############# + + image { + function = EXPANDER + expander_style = EXPANDED + state = NORMAL + file = "assets/pan-down-alt.png" + } + + image { + function = EXPANDER + expander_style = EXPANDED + state = PRELIGHT + file = "assets/pan-down.png" + } + + image { + function = EXPANDER + expander_style = EXPANDED + state = ACTIVE + file = "assets/pan-down.png" + } + + image { + function = EXPANDER + expander_style = EXPANDED + state = INSENSITIVE + file = "assets/pan-down-alt-disabled.png" + } + + # LTR + + image { + function = EXPANDER + expander_style = COLLAPSED + state = NORMAL + file = "assets/pan-right-alt.png" + direction = LTR + } + + image { + function = EXPANDER + expander_style = COLLAPSED + state = PRELIGHT + file = "assets/pan-right.png" + direction = LTR + } + + image { + function = EXPANDER + expander_style = COLLAPSED + state = ACTIVE + file = "assets/pan-right.png" + direction = LTR + } + + image { + function = EXPANDER + expander_style = COLLAPSED + state = INSENSITIVE + file = "assets/pan-right-alt-disabled.png" + direction = LTR + } + + image { + function = EXPANDER + expander_style = SEMI_COLLAPSED + file = "assets/pan-right-semi.png" + direction = LTR + } + + image { + function = EXPANDER + expander_style = SEMI_EXPANDED + file = "assets/pan-right-semi.png" + direction = LTR + } + + # RTL + + image { + function = EXPANDER + expander_style = COLLAPSED + state = NORMAL + file = "assets/pan-left-alt.png" + direction = RTL + } + + image { + function = EXPANDER + expander_style = COLLAPSED + state = PRELIGHT + file = "assets/pan-left.png" + direction = RTL + } + + image { + function = EXPANDER + expander_style = COLLAPSED + state = ACTIVE + file = "assets/pan-left.png" + direction = RTL + } + + image { + function = EXPANDER + expander_style = COLLAPSED + state = INSENSITIVE + file = "assets/pan-left-alt-disabled.png" + direction = RTL + } + + image { + function = EXPANDER + expander_style = SEMI_COLLAPSED + file = "assets/pan-left-semi.png" + direction = RTL + } + + image { + function = EXPANDER + expander_style = SEMI_EXPANDED + file = "assets/pan-left-semi.png" + direction = RTL + } + + ############# + # Notebooks # + ############# + + # Left + + image { + function = EXTENSION + state = NORMAL + file = "assets/tab.png" + border = {0, 1, 0, 0} + stretch = TRUE + gap_side = RIGHT + } + + image { + function = EXTENSION + gap_side = RIGHT + } + + # Right + + image { + function = EXTENSION + state = NORMAL + file = "assets/tab.png" + border = {1, 0, 0, 0} + stretch = TRUE + gap_side = LEFT + } + + image { + function = EXTENSION + gap_side = LEFT + } + + # Up + + image { + function = EXTENSION + state = NORMAL + file = "assets/tab.png" + border = {0, 0, 0, 1} + stretch = TRUE + gap_side = BOTTOM + } + + image { + function = EXTENSION + gap_side = BOTTOM + } + + # Down + + image { + function = EXTENSION + state = NORMAL + file = "assets/tab.png" + border = {0, 0, 1, 0} + stretch = TRUE + gap_side = TOP + } + + image { + function = EXTENSION + gap_side = TOP + } + + # Inner frame + + image { + function = BOX_GAP + detail = "notebook" + file = "assets/frame-notebook.png" + border = {1, 1, 1, 1} + stretch = TRUE + gap_file = "assets/tab.png" + gap_border = {1, 0, 0, 0} + gap_side = LEFT + } + + image { + function = BOX_GAP + detail = "notebook" + file = "assets/frame-notebook.png" + border = {1, 1, 1, 1} + stretch = TRUE + gap_file = "assets/tab.png" + gap_border = {0, 1, 0, 0} + gap_side = RIGHT + } + + image { + function = BOX_GAP + detail = "notebook" + file = "assets/frame-notebook.png" + border = {1, 1, 1, 1} + stretch = TRUE + gap_file = "assets/tab.png" + gap_border = {0, 0, 1, 0} + gap_side = TOP + } + + image { + function = BOX_GAP + detail = "notebook" + file = "assets/frame-notebook.png" + border = {1, 1, 1, 1} + stretch = TRUE + gap_file = "assets/tab.png" + gap_border = {0, 0, 0, 1} + gap_side = BOTTOM + } + + # Standalone frame + image { + function = BOX + detail = "notebook" + file = "assets/frame-notebook.png" + border = {1, 1, 1, 1} + stretch = TRUE + } + + ############## + # Scrollbars # + ############## + + image { + function = BOX + detail = "trough" + file = "assets/scrollbar-horz-trough.png" + border = {0, 0, 1, 0} + orientation = HORIZONTAL + } + + image { + function = BOX + detail = "trough" + file = "assets/scrollbar-vert-ltr-trough.png" + border = {1, 0, 0, 0} + orientation = VERTICAL + direction = LTR + } + + image { + function = BOX + detail = "trough" + file = "assets/scrollbar-vert-rtl-trough.png" + border = {0, 1, 0, 0} + orientation = VERTICAL + direction = RTL + } + + # Horizontal sliders + + image { + function = SLIDER + state = NORMAL + detail = "slider" + file = "assets/scrollbar-horz-slider.png" + border = {8, 8, 9, 8 } + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = SLIDER + state = PRELIGHT + detail = "slider" + file = "assets/scrollbar-horz-slider-hover.png" + border = {8, 8, 9, 8 } + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = SLIDER + state = ACTIVE + detail = "slider" + file = "assets/scrollbar-horz-slider-active.png" + border = {8, 8, 9, 8 } + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = SLIDER + state = INSENSITIVE + detail = "slider" + file = "assets/scrollbar-horz-slider-disabled.png" + border = {8, 8, 9, 8 } + stretch = TRUE + orientation = HORIZONTAL + } + + # Vertical sliders + + image { + function = SLIDER + state = NORMAL + detail = "slider" + file = "assets/scrollbar-vert-ltr-slider.png" + border = {9, 8, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = LTR + } + + image { + function = SLIDER + state = PRELIGHT + detail = "slider" + file = "assets/scrollbar-vert-ltr-slider-hover.png" + border = {9, 8, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = LTR + } + + image { + function = SLIDER + state = ACTIVE + detail = "slider" + file = "assets/scrollbar-vert-ltr-slider-active.png" + border = {9, 8, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = LTR + } + + image { + function = SLIDER + state = INSENSITIVE + detail = "slider" + file = "assets/scrollbar-vert-ltr-slider-disabled.png" + border = {9, 8, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = LTR + } + + # RTL + + image { + function = SLIDER + state = NORMAL + detail = "slider" + file = "assets/scrollbar-vert-rtl-slider.png" + border = {8, 9, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = RTL + } + + image { + function = SLIDER + state = PRELIGHT + detail = "slider" + file = "assets/scrollbar-vert-rtl-slider-hover.png" + border = {8, 9, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = RTL + } + + image { + function = SLIDER + state = ACTIVE + detail = "slider" + file = "assets/scrollbar-vert-rtl-slider-active.png" + border = {8, 9, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = RTL + } + + image { + function = SLIDER + state = INSENSITIVE + detail = "slider" + file = "assets/scrollbar-vert-rtl-slider-disabled.png" + border = {8, 9, 8, 8} + stretch = TRUE + orientation = VERTICAL + direction = RTL + } + + ########## + # Scales # + ########## + + # Troughs, overrided later on. We set them here too because some widgets + # don't specify their orientation. + + image { + function = BOX + detail = "trough-upper" + file = "assets/scale-horz-trough.png" + border = {6, 6, 0, 0} + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = BOX + state = INSENSITIVE + detail = "trough-upper" + file = "assets/scale-horz-trough-disabled.png" + border = {6, 6, 0, 0} + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = BOX + detail = "trough-lower" + file = "assets/scale-horz-trough-active.png" + border = {6, 6, 0, 0} + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = BOX + state = INSENSITIVE + detail = "trough-lower" + file = "assets/scale-horz-trough-disabled.png" + border = {6, 6, 0, 0} + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = BOX + detail = "trough-upper" + file = "assets/scale-vert-trough.png" + border = {0, 0, 6, 6} + stretch = TRUE + orientation = VERTICAL + } + + image { + function = BOX + state = INSENSITIVE + detail = "trough-upper" + file = "assets/scale-vert-trough-disabled.png" + border = {0, 0, 6, 6} + stretch = TRUE + orientation = VERTICAL + } + + image { + function = BOX + detail = "trough-lower" + file = "assets/scale-vert-trough-active.png" + border = {0, 0, 6, 6} + stretch = TRUE + orientation = VERTICAL + } + + image { + function = BOX + state = INSENSITIVE + detail = "trough-lower" + file = "assets/scale-vert-trough-disabled.png" + border = {0, 0, 6, 6} + stretch = TRUE + orientation = VERTICAL + } + + # Sliders + + image { + function = SLIDER + state = NORMAL + detail = "hscale" + file = "assets/scale-slider.png" + } + + image { + function = SLIDER + state = PRELIGHT + detail = "hscale" + file = "assets/scale-slider-hover.png" + } + + image { + function = SLIDER + state = ACTIVE + detail = "hscale" + file = "assets/scale-slider-active.png" + } + + image { + function = SLIDER + state = INSENSITIVE + detail = "hscale" + file = "assets/scale-slider-disabled.png" + } + + image { + function = SLIDER + state = NORMAL + detail = "vscale" + file = "assets/scale-slider.png" + } + + image { + function = SLIDER + state = PRELIGHT + detail = "vscale" + file = "assets/scale-slider-hover.png" + } + + image { + function = SLIDER + state = ACTIVE + detail = "vscale" + file = "assets/scale-slider-active.png" + } + + image { + function = SLIDER + state = INSENSITIVE + detail = "vscale" + file = "assets/scale-slider-disabled.png" + } + + ########### + # Menubar # + ########### + + # image { + # function = BOX + # detail = "menubar" + # file = "assets/border.png" + # border = {0, 0, 0, 1} + # } + + ######### + # Menus # + ######### + + image { + function = BOX + state = PRELIGHT + detail = "menu_scroll_arrow_up" + file = "assets/border.png" + } + + image { + function = BOX + detail = "menu_scroll_arrow_up" + file = "assets/border.png" + border = {0, 0, 0, 1} + } + + image { + function = BOX + state = PRELIGHT + detail = "menu_scroll_arrow_down" + file = "assets/border.png" + } + + image { + function = BOX + detail = "menu_scroll_arrow_down" + file = "assets/border.png" + border = {0, 0, 1, 0} + } + + ########### + # Entries # + ########### + + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/entry-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/entry-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = SHADOW + detail = "entry" + file = "assets/entry.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = FLAT_BOX + state = ACTIVE + detail = "entry_bg" + file = "assets/entry-background.png" + } + + image { + function = FLAT_BOX + state = INSENSITIVE + detail = "entry_bg" + file = "assets/entry-background-disabled.png" + } + + image { + function = FLAT_BOX + detail = "entry_bg" + file = "assets/entry-background.png" + } + + ######### + # Spins # + ######### + + # Spin-Up LTR + + image { + function = BOX + state = NORMAL + detail = "spinbutton_up" + file = "assets/spin-ltr-up.png" + border = {0, 8, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up-alt.png" + overlay_stretch = FALSE + direction = LTR + } + + image { + function = BOX + state = PRELIGHT + detail = "spinbutton_up" + file = "assets/spin-ltr-up-hover.png" + border = {0, 8, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + direction = LTR + } + + image { + function = BOX + state = ACTIVE + detail = "spinbutton_up" + file = "assets/spin-ltr-up-active.png" + border = {0, 8, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + direction = LTR + } + + image { + function = BOX + state = INSENSITIVE + detail = "spinbutton_up" + file = "assets/spin-ltr-up-disabled.png" + border = {0, 8, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up-alt-disabled.png" + overlay_stretch = FALSE + direction = LTR + } + + # Spin-Up RTL + + image { + function = BOX + state = NORMAL + detail = "spinbutton_up" + file = "assets/spin-rtl-up.png" + border = {8, 0, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up-alt.png" + overlay_stretch = FALSE + direction = RTL + } + + image { + function = BOX + state = PRELIGHT + detail = "spinbutton_up" + file = "assets/spin-rtl-up-hover.png" + border = {8, 0, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + direction = RTL + } + + image { + function = BOX + state = ACTIVE + detail = "spinbutton_up" + file = "assets/spin-rtl-up-hover.png" + border = {8, 0, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + direction = RTL + } + + image { + function = BOX + state = INSENSITIVE + detail = "spinbutton_up" + file = "assets/spin-rtl-up-disabled.png" + border = {8, 0, 8, 0} + stretch = TRUE + overlay_file = "assets/pan-up-alt-disabled.png" + overlay_stretch = FALSE + direction = RTL + } + + # Spin-Down LTR + + image { + function = BOX + state = NORMAL + detail = "spinbutton_down" + file = "assets/spin-ltr-down.png" + border = {0, 8, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down-alt.png" + overlay_stretch = FALSE + direction = LTR + } + + image { + function = BOX + state = PRELIGHT + detail = "spinbutton_down" + file = "assets/spin-ltr-down-hover.png" + border = {0, 8, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + direction = LTR + } + + image { + function = BOX + state = ACTIVE + detail = "spinbutton_down" + file = "assets/spin-ltr-down-active.png" + border = {0, 8, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + direction = LTR + } + + image { + function = BOX + state = INSENSITIVE + detail = "spinbutton_down" + file = "assets/spin-ltr-down-disabled.png" + border = {0, 8, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down-alt-disabled.png" + overlay_stretch = FALSE + direction = LTR + } + + # Spin-Down RTL + + image { + function = BOX + state = NORMAL + detail = "spinbutton_down" + file = "assets/spin-rtl-down.png" + border = {8, 0, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down-alt.png" + overlay_stretch = FALSE + direction = RTL + } + + image { + function = BOX + state = PRELIGHT + detail = "spinbutton_down" + file = "assets/spin-rtl-down-hover.png" + border = {8, 0, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + direction = RTL + } + + image { + function = BOX + state = ACTIVE + detail = "spinbutton_down" + file = "assets/spin-rtl-down-active.png" + border = {8, 0, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + direction = RTL + } + + image { + function = BOX + state = INSENSITIVE + detail = "spinbutton_down" + file = "assets/spin-rtl-down-disabled.png" + border = {8, 0, 0, 8} + stretch = TRUE + overlay_file = "assets/pan-down-alt-disabled.png" + overlay_stretch = FALSE + direction = RTL + } + + ############## + # Scrollbars # + ############## + + image { + function = BOX + detail = "bar" + file = "assets/progressbar-progress.png" + stretch = TRUE + border = {0, 0, 0, 0} + orientation = HORIZONTAL + } + + image { + function = BOX + detail = "bar" + file = "assets/progressbar-progress.png" + stretch = TRUE + border = {0, 0, 0, 0} + orientation = VERTICAL + } + + ############# + # Treeviews # + ############# + + # Disable active the column highlight + # We need to match specific cells or we break stuff + # Looking at you deadbeef + + image { + function = FLAT_BOX + detail = "cell_even_sorted" + state = NORMAL + } + + image { + function = FLAT_BOX + detail = "cell_odd_sorted" + state = NORMAL + } + + # Disable all the other shadows + # This prevents the Raleigh effect + image { + function = SHADOW + } + } +} + +style "menubar" { + bg[NORMAL] = @titlebar_bg_color + fg[NORMAL] = mix(0.7, @titlebar_fg_color, @titlebar_bg_color) + fg[PRELIGHT] = @titlebar_fg_color + fg[INSENSITIVE] = mix(0.3, @titlebar_fg_color, @titlebar_bg_color) + # Needed to fix Firefox's menubar text + bg[SELECTED] = mix(0.15, @titlebar_fg_color, @titlebar_bg_color) + fg[SELECTED] = @titlebar_fg_color +} + +style "menubar_item" { + xthickness = 3 + ythickness = 4 + + fg[NORMAL] = mix(0.7, @titlebar_fg_color, @titlebar_bg_color) + bg[PRELIGHT] = mix(0.15, @titlebar_fg_color, @titlebar_bg_color) + fg[PRELIGHT] = @titlebar_fg_color + fg[INSENSITIVE] = mix(0.3, @titlebar_fg_color, @titlebar_bg_color) +} + +style "menu" { + xthickness = 0 + ythickness = 0 + + bg[NORMAL] = @base_color + bg[INSENSITIVE] = @base_color + bg[PRELIGHT] = @base_color + bg[SELECTED] = mix(0.15, @fg_color, @base_color) +} + +style "menu_item" { + xthickness = 4 + ythickness = 4 + + bg[PRELIGHT] = mix(0.15, @fg_color, @base_color) + fg[PRELIGHT] = @fg_color + # Chromium uses this setting + bg[SELECTED] = mix(0.15, @fg_color, @base_color) + text[SELECTED] = @fg_color + # Some widgets use text, we need to handle that + text[NORMAL] = @fg_color + text[PRELIGHT] = @fg_color + + # Unfortunately we can't tell regular and menu checks/radios apart + # Without the heirarchy + engine "pixmap" { + + ################# + # Check Buttons # + ################# + + image { + function = CHECK + state = NORMAL + shadow = OUT + overlay_file = "assets/menu-checkbox-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = PRELIGHT + shadow = OUT + overlay_file = "assets/menu-checkbox-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = ACTIVE + shadow = OUT + overlay_file = "assets/menu-checkbox-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = INSENSITIVE + shadow = OUT + overlay_file = "assets/menu-checkbox-unchecked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = NORMAL + shadow = IN + overlay_file = "assets/menu-checkbox-checked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = PRELIGHT + shadow = IN + overlay_file = "assets/menu-checkbox-checked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = ACTIVE + shadow = IN + overlay_file = "assets/menu-checkbox-checked.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = INSENSITIVE + shadow = IN + overlay_file = "assets/menu-checkbox-checked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = NORMAL + shadow = ETCHED_IN + overlay_file = "assets/menu-checkbox-mixed.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = PRELIGHT + shadow = ETCHED_IN + overlay_file = "assets/menu-checkbox-mixed.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = ACTIVE + shadow = ETCHED_IN + overlay_file = "assets/menu-checkbox-mixed.png" + overlay_stretch = FALSE + } + + image { + function = CHECK + state = INSENSITIVE + shadow = ETCHED_IN + overlay_file = "assets/menu-checkbox-mixed-disabled.png" + overlay_stretch = FALSE + } + + ################# + # Radio Buttons # + ################# + + image { + function = OPTION + state = NORMAL + shadow = OUT + overlay_file = "assets/menu-radio-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = PRELIGHT + shadow = OUT + overlay_file = "assets/menu-radio-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = ACTIVE + shadow = OUT + overlay_file = "assets/menu-radio-unchecked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = INSENSITIVE + shadow = OUT + overlay_file = "assets/menu-radio-unchecked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = NORMAL + shadow = IN + overlay_file = "assets/menu-radio-checked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = PRELIGHT + shadow = IN + overlay_file = "assets/menu-radio-checked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = ACTIVE + shadow = IN + overlay_file = "assets/menu-radio-checked.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = INSENSITIVE + shadow = IN + overlay_file = "assets/menu-radio-checked-disabled.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = NORMAL + shadow = ETCHED_IN + overlay_file = "assets/menu-radio-mixed.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = PRELIGHT + shadow = ETCHED_IN + overlay_file = "assets/menu-radio-mixed.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = ACTIVE + shadow = ETCHED_IN + overlay_file = "assets/menu-radio-mixed.png" + overlay_stretch = FALSE + } + + image { + function = OPTION + state = INSENSITIVE + shadow = ETCHED_IN + overlay_file = "assets/menu-radio-mixed-disabled.png" + overlay_stretch = FALSE + } + } +} + +style "separator_menu_item" { + xthickness = 0 + ythickness = 2 + + engine "pixmap" { + image { + function = BOX + file = "assets/border.png" + border = {0, 0, 0, 1} + } + } +} + +style "button_label" { + fg[NORMAL] = mix(0.75, @fg_color, @bg_color) + # fg[INSENSITIVE] = mix(0.3, @fg_color, @bg_color) + + font_name = "Medium" +} + +style "checkbutton_label" { + fg[NORMAL] = @fg_color + # fg[INSENSITIVE] = mix(0.4, @fg_color, @bg_color) + + font_name = "Regular" +} + +style "button" { + xthickness = 4 + ythickness = 4 + + # For the sake of sanity style buttons this way + engine "pixmap" { + + ########### + # Buttons # + ########### + + image { + function = BOX + state = NORMAL + file = "assets/button.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = PRELIGHT + shadow = OUT + file = "assets/button-hover.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + # Don't add hover effect on pressed buttons + image { + function = BOX + state = PRELIGHT + shadow = IN + file = "assets/button-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = ACTIVE + file = "assets/button-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = INSENSITIVE + file = "assets/button-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + } +} + +style "link_button" { + # Disable the button effect, leave just the link + engine "pixmap" { + image { + function = BOX + } + } +} + +style "entry" { + # We set this same as the border of the border of the entry + # This way there's no overlap + xthickness = 6 + ythickness = 6 +} + +style "combobox" { + xthickness = 6 + ythickness = 6 + + # This affects only the button beside an entry + GtkButton::inner-border = {0, 0, 0, 0} +} + +style "combobox_cellview" { + text[NORMAL] = mix(0.75, @fg_color, @bg_color) + # text[INSENSITIVE] = mix(0.3, @fg_color, @bg_color) + + font_name = "Medium" +} + +style "combobox_entry" { + # Since one side of the button is missing, we need to shift the arrow a little to the right + GtkButton::inner-border = {0, 2, 0, 0} + + engine "pixmap" { + + ############# + # LTR entry # + ############# + + image { + function = SHADOW + state = NORMAL + detail = "entry" + file = "assets/combo-ltr-entry.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/combo-ltr-entry-active.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/combo-ltr-entry-disabled.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = LTR + } + + ############# + # RTL entry # + ############# + + image { + function = SHADOW + state = NORMAL + detail = "entry" + file = "assets/combo-rtl-entry.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/combo-rtl-entry-active.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/combo-rtl-entry-disabled.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = RTL + } + + ############## + # LTR button # + ############## + + image { + function = BOX + state = NORMAL + detail = "button" + file = "assets/combo-ltr-button.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = BOX + state = PRELIGHT + detail = "button" + file = "assets/combo-ltr-button-hover.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = BOX + state = ACTIVE + detail = "button" + file = "assets/combo-ltr-button-active.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = BOX + state = INSENSITIVE + detail = "button" + file = "assets/combo-ltr-button-disabled.png" + border = {0, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + ############## + # RTL button # + ############## + + image { + function = BOX + state = NORMAL + detail = "button" + file = "assets/combo-rtl-button.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = BOX + state = PRELIGHT + detail = "button" + file = "assets/combo-rtl-button-hover.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = BOX + state = ACTIVE + detail = "button" + file = "assets/combo-rtl-button-active.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = BOX + state = INSENSITIVE + detail = "button" + file = "assets/combo-rtl-button-disabled.png" + border = {8, 0, 8, 8} + stretch = TRUE + direction = RTL + } + } +} + +style "combo_button_padding" { + # Since one side of the button is missing, we need to shift the arrow a + # little to the right. + # This is the same thing we've done above but the combo, unlike the combobox, + # uses padding the same way as a button. + GtkButton::inner-border = {3, 6, 3, 3} +} + +style "notebook" { + xthickness = 3 + ythickness = 3 +} + +style "notebook_tab_label" { + fg[ACTIVE] = mix(0.75, @fg_color, @bg_color) + + font_name = "Medium" +} + +style "notebook_viewport" { + bg[NORMAL] = @base_color +} + +style "notebook_bg" { + bg[NORMAL] = @base_color + bg[PRELIGHT] = @base_color + bg[INSENSITIVE] = @base_color +} + +style "notebook_entry" { + engine "pixmap" { + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/notebook-entry-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/notebook-entry-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = SHADOW + detail = "entry" + file = "assets/notebook-entry.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + } +} + +style "normal_bg" { + bg[NORMAL] = @bg_color + bg[PRELIGHT] = @bg_color + bg[INSENSITIVE] = @bg_color +} + +style "normal_entry" { + engine "pixmap" { + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/entry-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/entry-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = SHADOW + detail = "entry" + file = "assets/entry.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + } +} + +style "notebook_combo" { + engine "pixmap" { + + ############# + # LTR entry # + ############# + + image { + function = SHADOW + state = NORMAL + detail = "entry" + file = "assets/notebook-combo-ltr-entry.png" + border = {8, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/notebook-combo-ltr-entry-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/notebook-combo-ltr-entry-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + direction = LTR + } + + ############# + # RTL entry # + ############# + + image { + function = SHADOW + state = NORMAL + detail = "entry" + file = "assets/notebook-combo-rtl-entry.png" + border = {8, 8, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = SHADOW + state = ACTIVE + detail = "entry" + file = "assets/notebook-combo-rtl-entry-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + direction = RTL + } + + image { + function = SHADOW + state = INSENSITIVE + detail = "entry" + file = "assets/notebook-combo-rtl-entry-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + direction = RTL + } + } +} + +style "textview" { + bg[NORMAL] = @base_color +} + +style "scale_horz" { + engine "pixmap" { + image { + function = BOX + detail = "trough-upper" + file = "assets/scale-horz-trough.png" + border = {6, 6, 0, 0} + stretch = TRUE + } + + image { + function = BOX + detail = "trough-lower" + file = "assets/scale-horz-trough-active.png" + border = {6, 6, 0, 0} + stretch = TRUE + } + } +} + +style "scale_vert" { + engine "pixmap" { + image { + function = BOX + detail = "trough-upper" + file = "assets/scale-vert-trough.png" + border = {0, 0, 6, 6} + stretch = TRUE + } + + image { + function = BOX + detail = "trough-lower" + file = "assets/scale-vert-trough-active.png" + border = {0, 0, 6, 6} + stretch = TRUE + } + } +} + +style "progressbar" { + xthickness = 0 + ythickness = 0 + + fg[PRELIGHT] = @selected_fg_color + + engine "pixmap" { + image { + function = BOX + detail = "trough" + file = "assets/progressbar-trough.png" + border = {0, 0, 0, 0} + stretch = TRUE + orientation = HORIZONTAL + } + + image { + function = BOX + detail = "trough" + file = "assets/progressbar-trough.png" + border = {0, 0, 0, 0} + stretch = TRUE + orientation = VERTICAL + } + } +} + +style "treeview_header" { + xthickness = 2 + ythickness = 2 + + fg[NORMAL] = mix(0.75, @fg_color, @base_color) + fg[PRELIGHT] = @fg_color + + font_name = "Medium" + + GtkButton::inner-border = {4, 4, 0, 2} + + engine "pixmap" { + image { + function = BOX + state = NORMAL + file = "assets/treeview-ltr-button.png" + border = {0, 1, 0, 1} + stretch = TRUE + direction = LTR + } + + image { + function = BOX + state = PRELIGHT + file = "assets/treeview-ltr-button-hover.png" + border = {0, 1, 0, 1} + stretch = TRUE + direction = LTR + } + + image { + function = BOX + state = ACTIVE + file = "assets/treeview-ltr-button-active.png" + border = {0, 1, 0, 1} + stretch = TRUE + direction = LTR + } + + image { + function = BOX + state = NORMAL + file = "assets/treeview-rtl-button.png" + border = {1, 0, 0, 1} + stretch = TRUE + direction = RTL + } + + image { + function = BOX + state = PRELIGHT + file = "assets/treeview-rtl-button-hover.png" + border = {1, 0, 0, 1} + stretch = TRUE + direction = RTL + } + + image { + function = BOX + state = ACTIVE + file = "assets/treeview-rtl-button-active.png" + border = {1, 0, 0, 1} + stretch = TRUE + direction = RTL + } + + image { + function = ARROW + state = NORMAL + overlay_file = "assets/pan-up-alt.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = PRELIGHT + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = ACTIVE + overlay_file = "assets/pan-up.png" + overlay_stretch = FALSE + arrow_direction = UP + } + + image { + function = ARROW + state = NORMAL + overlay_file = "assets/pan-down-alt.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + + image { + function = ARROW + state = PRELIGHT + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + + image { + function = ARROW + state = ACTIVE + overlay_file = "assets/pan-down.png" + overlay_stretch = FALSE + arrow_direction = DOWN + } + } +} + +style "scrolled_window" { + engine "pixmap" { + image { + function = SHADOW + file = "assets/frame.png" + border = {1, 1, 1, 1} + stretch = TRUE + } + } +} + +style "frame" { + engine "pixmap" { + image { + function = SHADOW + shadow = NONE + } + + image { + function = SHADOW + file = "assets/frame.png" + border = {1, 1, 1, 1} + stretch = TRUE + } + + image { + function = SHADOW_GAP + file = "assets/frame.png" + border = {1, 1, 1, 1} + stretch = TRUE + gap_start_file = "assets/border.png" + gap_end_file = "assets/border.png" + } + } +} + +style "tool_button" { + GtkButton::inner-border = {2, 2, 2, 2} + + # For the sake of sanity style buttons this way + engine "pixmap" { + image { + function = BOX + state = NORMAL + file = "assets/flat-button.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = PRELIGHT + shadow = OUT + file = "assets/flat-button-hover.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + # Don't add hover effect on pressed buttons + image { + function = BOX + state = PRELIGHT + shadow = IN + file = "assets/flat-button-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = ACTIVE + file = "assets/flat-button-active.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = INSENSITIVE + shadow = OUT + file = "assets/flat-button-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + + image { + function = BOX + state = INSENSITIVE + shadow = IN + file = "assets/button-disabled.png" + border = {8, 8, 8, 8} + stretch = TRUE + } + } +} + +style "toolbar_separator" { + GtkWidget::wide-separators = 1 + GtkWidget::separator-width = 1 + GtkWidget::separator-height = 1 + + engine "pixmap" { + image { + function = BOX + file = "assets/border.png" + } + } +} + +style "inline_toolbar" { + # GtkToolbar::button-relief = GTK_RELIEF_NORMAL + + engine "pixmap" { + image { + function = BOX + file = "assets/frame-inline.png" + border = {1, 1, 0, 1} + stretch = TRUE + } + } +} + +style "tooltip" { + xthickness = 8 + ythickness = 8 + + bg[NORMAL] = @tooltip_bg_color + fg[NORMAL] = @tooltip_fg_color + bg[SELECTED] = @tooltip_bg_color +} + +style "disable_text_shadow" { + engine "murrine" { + textstyle = 0 + } +} + +style "disable_separator" { + xthickness = 0 + ythickness = 0 + + GtkWidget::wide-separators = 1 +} + +# Default style, containing theme properties and trying to match every widget as +# much as possible, which is not only faster than trying to match every widget +# by its own but also less bug-prune and more consistent. However there is some +# widget specific stuff that needs to be taken care of, which is the point of +# every other style below. +class "GtkWidget" style "default" + +###################################### +# Override padding, style and colour # +###################################### + +class "GtkButton" style "button" +class "GtkLinkButton" style "link_button" +class "GtkEntry" style "entry" +class "GtkOldEditable" style "entry" +class "GtkNotebook" style "notebook" +class "GtkHScale" style "scale_horz" +class "GtkVScale" style "scale_vert" +class "GtkProgressBar" style "progressbar" +class "GtkScrolledWindow" style "scrolled_window" +class "GtkFrame" style "frame" +class "GtkSeparatorToolItem" style "toolbar_separator" +class "GtkMenuBar" style "menubar" +class "GtkMenu" style "menu" +class "GtkTextView" style "textview" + +# Menu and menubar items +widget_class "**" style "menu_item" +widget_class "*.*" style "menubar_item" +widget_class "**" style "separator_menu_item" + +# Treeview buttons +widget_class "***" style "treeview_header" + +# Give the file chooser toolbar a border +widget_class "**" style "inline_toolbar" + +# Fix padding on regular comboboxes +widget_class "*." style "combobox" + +# And disable separators on them +widget_class "*.*" style "disable_separator" +widget_class "**" style "disable_separator" +widget_class "**" style "disable_separator" + +# Join together the ComboBoxEntry entry and button +widget_class "**" style "combobox_entry" + +# Join the Combo entry and button +widget_class "**" style "combobox_entry" + +# Tweak the padding on the button a little bit because it +# uses it a bit differently +widget_class "*." style "combo_button_padding" + +# Alas we cannot do the same for ComboBoxText because there +# isn't a way to apply the style to only the comboboxes that +# have an entry inside + +# Tool buttons have different styles +widget_class "**" style "tool_button" +widget_class "**.*" style "tool_button" + +# Notebooks +widget_class "*." style "notebook_tab_label" +widget_class "*.." style "notebook_tab_label" + +# Notebooks are white, act accordingly +widget_class "**" style "notebook_entry" +widget_class "**" style "notebook_bg" +widget_class "**" style "notebook_bg" +widget_class "***" style "notebook_bg" +widget_class "**" style "notebook_bg" +widget_class "*.*" style "notebook_bg" +widget_class "***" style "notebook_combo" +widget_class "***" style "notebook_combo" + +# However, stuff inside eventboxes inside notebooks is grey +# again, react +widget_class "***" style "normal_entry" +widget_class "***" style "normal_bg" +widget_class "***" style "normal_bg" +widget_class "****" style "combobox_entry" +widget_class "****" style "combobox_entry" +widget_class "***." style "combo_button_padding" + +# Button labels +widget_class "**" style "button_label" + +# Checkbutton labels +widget_class "*." style "checkbutton_label" + +# ComboBoxes tend to draw the button label with text[] +# instead of fg[], we need to fix that +widget_class "**" style "combobox_cellview" + +# Disable white text shadows +widget_class "*" style "disable_text_shadow" +widget_class "*" style "disable_text_shadow" + +# GTK tooltips +widget "gtk-tooltip*" style "tooltip" diff --git a/misc/gtk/ephemeral/gtk-3.0/assets b/misc/gtk/ephemeral/gtk-3.0/assets new file mode 120000 index 0000000..ac77667 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-3.0/assets @@ -0,0 +1 @@ +../gtk-assets \ No newline at end of file diff --git a/misc/gtk/ephemeral/gtk-3.0/custom.css b/misc/gtk/ephemeral/gtk-3.0/custom.css new file mode 100644 index 0000000..580dcda --- /dev/null +++ b/misc/gtk/ephemeral/gtk-3.0/custom.css @@ -0,0 +1,51 @@ +/* Some settings added by hand */ +.text-button { + font-weight: bold; + margin-left: 3px; + margin-right: 3px; + padding-bottom: 5px; + padding-top: 5px; + border-radius: 25px; + transition: 0.3s; +} + +.text-button:checked { + color: #BD99FF; + background: #3D4C5F; + border-radius: 25px; +} + +.text-button:hover { + background: #56687E; + color: #BD99FF; + transition: 0.3s; +} + +.image-button { + color: #87DFEB; + margin-left: 4px; + margin-right: 4px; + padding-left: 12px; + padding-right: 12px; + transition: 0.3s; + border-radius: 99px; +} + +.image-button:hover { + background: #56687E; + transition: 0.3s; +} + +.image-button:checked { + color: #24D1E7; + background: #3D4C5F; +} + +.image-button:disabled { + color: #56687E; +} + +.titlebar { + min-height: 48px; + box-shadow: none; +} diff --git a/misc/gtk/ephemeral/gtk-3.0/gtk.css b/misc/gtk/ephemeral/gtk-3.0/gtk.css new file mode 100644 index 0000000..6e4a6db --- /dev/null +++ b/misc/gtk/ephemeral/gtk-3.0/gtk.css @@ -0,0 +1,6276 @@ +@keyframes ripple_effect { + to { + background-size: 1000% 1000%; + } +} + +@keyframes scale_ripple_effect { + to { + background-size: auto, 1000% 1000%; + } +} + +@keyframes header_ripple_effect { + from { + background-image: radial-gradient(circle farthest-corner at center, #BD99FF 0%, transparent 0%); + } + to { + background-image: radial-gradient(circle farthest-corner at center, #BD99FF 100%, transparent 0%); + } +} + +* { + background-clip: padding-box; + -GtkToolButton-icon-spacing: 0; + -GtkTextView-error-underline-color: #ff8c3e; + -GtkScrolledWindow-scrollbar-spacing: 0; + -GtkToolItemGroup-expander-size: 11; + -GtkWidget-text-handle-width: 24; + -GtkWidget-text-handle-height: 24; + -GtkDialog-button-spacing: 4; + -GtkDialog-action-area-border: 0; + outline-style: solid; + outline-width: 2px; + outline-color: transparent; + outline-offset: -4px; + -gtk-outline-radius: 6px; + -gtk-secondary-caret-color: #BD99FF; +} + +notebook:focus tab, +*:focus { + outline-color: alpha(currentColor, 0.24); +} + +/*************** + * Base States * + ***************/ +.background { + background-color: #323F4E; + color: #F8F8F2; +} + +/* + These wildcard seems unavoidable, need to investigate. + Wildcards are bad and troublesome, use them with care, + or better, just don't. + Everytime a wildcard is used a kitten dies, painfully. +*/ +*:disabled { + -gtk-icon-effect: dim; +} + +.gtkstyle-fallback { + background-color: #323F4E; + color: #F8F8F2; +} + +.gtkstyle-fallback:hover { + background-color: #28323e; + color: #F8F8F2; +} + +.gtkstyle-fallback:active { + background-color: #1e262f; + color: #F8F8F2; +} + +.gtkstyle-fallback:disabled { + background-color: #323F4E; + color: rgba(248, 248, 242, 0.5); +} + +.gtkstyle-fallback:selected { + background-color: #BD99FF; + color: white; +} + +.view { + background-color: #323F4E; + color: #F8F8F2; +} + +.view:hover { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +.view:selected:hover { + box-shadow: inset 0 0 0 9999px rgba(189, 153, 255, 0.08); +} + +.view:disabled { + color: rgba(248, 248, 242, 0.5); +} + +.view:hover, .view:selected { + border-radius: 6px; +} + +textview text { + background-color: #323F4E; +} + +textview border { + background-color: #323f4e; + color: rgba(248, 248, 242, 0.7); +} + +.rubberband, +rubberband, +flowbox rubberband, +treeview.view rubberband, +.content-view rubberband, +.content-view .rubberband, +XfdesktopIconView.view .rubberband { + border: 1px solid #ddb9ff; + background-color: rgba(221, 185, 255, 0.3); +} + +flowbox flowboxchild { + padding: 4px; + border-radius: 6px; +} + +.content-view .tile:selected { + background-color: transparent; + color: inherit; +} + +label { + caret-color: currentColor; +} + +label.separator { + color: #F8F8F2; +} + +label:disabled { + color: rgba(248, 248, 242, 0.5); +} + +headerbar label:disabled, +tab label:disabled, +button label:disabled { + color: inherit; +} + +.dim-label, label.separator, .titlebar:not(headerbar) .subtitle, +headerbar .subtitle, .budgie-notification .notification-body, .budgie-switcher .notification-body { + opacity: 0.6; +} + +assistant .sidebar { + padding: 4px 0; +} + +assistant .sidebar label { + min-height: 32px; + padding: 0 12px; + color: rgba(248, 248, 242, 0.5); + font-weight: 500; +} + +assistant .sidebar label.highlight { + color: #F8F8F2; +} + +/********************* + * Spinner Animation * + *********************/ +@keyframes spin { + to { + -gtk-icon-transform: rotate(1turn); + } +} + +spinner { + background: none; + opacity: 0; + -gtk-icon-source: -gtk-icontheme("process-working-symbolic"); +} + +spinner:checked { + opacity: 1; + animation: spin 1s linear infinite; +} + +spinner:checked:disabled { + opacity: 0.5; +} + +/**************** + * Text Entries * + ****************/ +spinbutton:not(.vertical), +entry { + min-height: 32px; + padding: 0 8px; + border-radius: 6px 6px 0 0; + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-image 225ms cubic-bezier(0, 0, 0.2, 1); + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #BD99FF 0%, transparent 0%) 0 0 0/0 0 0px; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); + background-color: rgba(248, 248, 242, 0.04); + color: #F8F8F2; +} + +spinbutton:focus:not(.vertical), +entry:focus { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #BD99FF 100%, transparent 0%) 0 0 2/0 0 2px; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); +} + +spinbutton:disabled:not(.vertical), +entry:disabled { + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.12); + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + +spinbutton.flat:not(.vertical), entry.preferences-search, layoutpane entry.search, editortweak entry.search, +entry.flat { + min-height: 0; + padding: 2px; + border-radius: 0; + background-color: transparent; +} + +spinbutton:not(.vertical) image, +entry image { + color: rgba(248, 248, 242, 0.7); +} + +spinbutton:not(.vertical) image:hover, spinbutton:not(.vertical) image:active, +entry image:hover, +entry image:active { + color: #F8F8F2; +} + +spinbutton:not(.vertical) image:disabled, +entry image:disabled { + color: rgba(248, 248, 242, 0.5); +} + +spinbutton:not(.vertical) image.left, +entry image.left { + margin-left: 0px; + margin-right: 6px; +} + +spinbutton:not(.vertical) image.right, +entry image.right { + margin-left: 6px; + margin-right: 0px; +} + +spinbutton:not(.vertical) undershoot.left, +entry undershoot.left { + background-color: transparent; + background-image: linear-gradient(to top, rgba(50, 63, 78, 0.3) 50%, rgba(248, 248, 242, 0.3) 50%); + padding-left: 1px; + background-size: 1px 12px; + background-repeat: repeat-y; + background-origin: content-box; + background-position: left top; +} + +spinbutton:not(.vertical) undershoot.right, +entry undershoot.right { + background-color: transparent; + background-image: linear-gradient(to top, rgba(50, 63, 78, 0.3) 50%, rgba(248, 248, 242, 0.3) 50%); + padding-right: 1px; + background-size: 1px 12px; + background-repeat: repeat-y; + background-origin: content-box; + background-position: right top; +} + +spinbutton.error:not(.vertical), +entry.error { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-image 225ms cubic-bezier(0, 0, 0.2, 1); + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #ff8c3e 0%, transparent 0%) 0 0 0/0 0 0px; + box-shadow: inset 0 -1px #ff8c3e; + background-color: rgba(248, 248, 242, 0.04); + color: #F8F8F2; +} + +spinbutton.error:focus:not(.vertical), +entry.error:focus { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #ff8c3e 100%, transparent 0%) 0 0 2/0 0 2px; + box-shadow: inset 0 -1px #ff8c3e; +} + +spinbutton.error:disabled:not(.vertical), +entry.error:disabled { + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.12); + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + +spinbutton.warning:not(.vertical), +entry.warning { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-image 225ms cubic-bezier(0, 0, 0.2, 1); + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #ee9c11 0%, transparent 0%) 0 0 0/0 0 0px; + box-shadow: inset 0 -1px #ee9c11; + background-color: rgba(248, 248, 242, 0.04); + color: #F8F8F2; +} + +spinbutton.warning:focus:not(.vertical), +entry.warning:focus { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #ee9c11 100%, transparent 0%) 0 0 2/0 0 2px; + box-shadow: inset 0 -1px #ee9c11; +} + +spinbutton.warning:disabled:not(.vertical), +entry.warning:disabled { + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.12); + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + +spinbutton:not(.vertical) progress, +entry progress { + margin: 2px -6px; + border-bottom: 2px solid #BD99FF; + background-color: transparent; +} + +spinbutton.vertical entry, .gedit-search-slider .linked:not(.vertical) > entry { + border-radius: 6px; + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + border-image: none; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #323F4E; + color: #F8F8F2; +} + +spinbutton.vertical entry:focus, .gedit-search-slider .linked:not(.vertical) > entry:focus { + border-image: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); +} + +spinbutton.vertical entry:disabled, .gedit-search-slider .linked:not(.vertical) > entry:disabled { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #323f4e; + color: rgba(248, 248, 242, 0.5); +} + +spinbutton.vertical entry.error, .gedit-search-slider .linked:not(.vertical) > entry.error { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + border-image: none; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #ff8c3e; + color: white; +} + +spinbutton.vertical entry.error:focus, .gedit-search-slider .linked:not(.vertical) > entry.error:focus { + border-image: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); +} + +spinbutton.vertical entry.error:disabled, .gedit-search-slider .linked:not(.vertical) > entry.error:disabled { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #323f4e; + color: rgba(248, 248, 242, 0.5); +} + +spinbutton.vertical entry.error image, .gedit-search-slider .linked:not(.vertical) > entry.error image { + color: rgba(255, 255, 255, 0.7); +} + +spinbutton.vertical entry.error image:hover, .gedit-search-slider .linked:not(.vertical) > entry.error image:hover, spinbutton.vertical entry.error image:active, .gedit-search-slider .linked:not(.vertical) > entry.error image:active { + color: white; +} + +spinbutton.vertical entry.error image:disabled, .gedit-search-slider .linked:not(.vertical) > entry.error image:disabled { + color: rgba(255, 255, 255, 0.5); +} + +spinbutton.vertical entry.warning, .gedit-search-slider .linked:not(.vertical) > entry.warning { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + border-image: none; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #ee9c11; + color: white; +} + +spinbutton.vertical entry.warning:focus, .gedit-search-slider .linked:not(.vertical) > entry.warning:focus { + border-image: none; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); +} + +spinbutton.vertical entry.warning:disabled, .gedit-search-slider .linked:not(.vertical) > entry.warning:disabled { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #323f4e; + color: rgba(248, 248, 242, 0.5); +} + +spinbutton.vertical entry.warning image, .gedit-search-slider .linked:not(.vertical) > entry.warning image { + color: rgba(255, 255, 255, 0.7); +} + +spinbutton.vertical entry.warning image:hover, .gedit-search-slider .linked:not(.vertical) > entry.warning image:hover, spinbutton.vertical entry.warning image:active, .gedit-search-slider .linked:not(.vertical) > entry.warning image:active { + color: white; +} + +spinbutton.vertical entry.warning image:disabled, .gedit-search-slider .linked:not(.vertical) > entry.warning image:disabled { + color: rgba(255, 255, 255, 0.5); +} + +treeview entry.flat, treeview entry { + background-color: #323F4E; +} + +treeview entry.flat, treeview entry.flat:focus, treeview entry, treeview entry:focus { + border-image: none; + box-shadow: none; +} + +.entry-tag, .documents-entry-tag, .photos-entry-tag { + margin: 2px; + border-radius: 9999px; + box-shadow: none; + background-color: rgba(248, 248, 242, 0.12); + color: #F8F8F2; +} + +.entry-tag:hover, .documents-entry-tag:hover, .photos-entry-tag:hover { + background-image: image(rgba(248, 248, 242, 0.12)); +} + +:dir(ltr) .entry-tag, :dir(ltr) .documents-entry-tag, :dir(ltr) .photos-entry-tag { + margin-left: 4px; + margin-right: 0; + padding-left: 12px; + padding-right: 8px; +} + +:dir(rtl) .entry-tag, :dir(rtl) .documents-entry-tag, :dir(rtl) .photos-entry-tag { + margin-left: 0; + margin-right: 4px; + padding-left: 8px; + padding-right: 12px; +} + +.entry-tag.button, .button.documents-entry-tag, .button.photos-entry-tag { + box-shadow: none; + background-color: transparent; +} + +.entry-tag.button:not(:hover):not(:active), .button.documents-entry-tag:not(:hover):not(:active), .button.photos-entry-tag:not(:hover):not(:active) { + color: rgba(248, 248, 242, 0.7); +} + +/*********** + * Buttons * + ***********/ +@keyframes needs_attention { + from { + background-image: -gtk-gradient(radial, center center, 0, center center, 0.001, to(#BD99FF), to(transparent)); + } + to { + background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#BD99FF), to(transparent)); + } +} + + +button { + min-height: 24px; + min-width: 16px; + padding: 4px 8px; + border-radius: 6px; + font-weight: 500; + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 300ms cubic-bezier(0, 0, 0.2, 1), background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), inset 0 0 0 9999px transparent; + background-color: #3D4C5F; + background-image: radial-gradient(circle farthest-corner at center, transparent 10%, transparent 0%); + background-repeat: no-repeat; + background-position: center; + background-size: 1000% 1000%; + color: #F8F8F2; +} + + +button:hover { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), inset 0 0 0 9999px transparent; + color: #F8F8F2; +} + + +button:active { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 0, background-image 0; + animation: ripple_effect 225ms cubic-bezier(0, 0, 0.2, 1) forwards; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), inset 0 0 0 9999px alpha(currentColor, 0.08); + background-image: radial-gradient(circle farthest-corner at center, alpha(currentColor, 0.12) 10%, transparent 0%); + background-size: 0% 0%; + color: #F8F8F2; +} + + +button:disabled { + box-shadow: none; + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + + +button:checked { + background-color: #BD99FF; + color: white; +} + + +button:checked:disabled { + background-color: rgba(248, 248, 242, 0.12); + color: rgba(248, 248, 242, 0.5); +} + +modelbutton.flat, +.menuitem.button.flat, spinbutton:not(.vertical) button, spinbutton.vertical button, popover.background.menu button, +popover.background button.model, notebook > header > tabs > arrow, scrollbar button, check, +radio, calendar.button, messagedialog.csd .dialog-action-area button, button.sidebar-button, .gedit-search-slider .linked > button, popover.messagepopover .popover-action-area button, #mate-menu button, .budgie-settings-window buttonbox.inline-toolbar button, .raven .raven-header:not(.top) button, .drop-shadow button, .budgie-session-dialog .linked.horizontal > button, .lightdm-gtk-greeter button, :not(headerbar) .caja-pathbar button, .caja-pathbar :not(headerbar) button, :not(headerbar) .path-bar button, layouttabbar button, .mate-panel-menu-bar button, .budgie-panel button, .raven stackswitcher.linked > button, toolbar button, .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action), +headerbar button:not(.suggested-action):not(.destructive-action), actionbar > revealer > box button:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification button, filechooser #pathbarbox > stack > box > button, .nemo-window .toolbar button, +button.flat { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-image 225ms cubic-bezier(0, 0, 0.2, 1), background-size 300ms cubic-bezier(0, 0, 0.2, 1), background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 9999px transparent; + background-color: transparent; + background-image: radial-gradient(circle farthest-corner at center, transparent 10%, transparent 0%); + background-repeat: no-repeat; + background-position: center; + background-size: 1000% 1000%; + color: rgba(248, 248, 242, 0.7); +} + +modelbutton.flat:hover, +.menuitem.button.flat:hover, spinbutton:not(.vertical) button:hover, spinbutton.vertical button:hover, popover.background.menu button:hover, +popover.background button.model:hover, notebook > header > tabs > arrow:hover, scrollbar button:hover, check:hover, +radio:hover, calendar.button:hover, messagedialog.csd .dialog-action-area button:hover, button.sidebar-button:hover, .gedit-search-slider .linked > button:hover, popover.messagepopover .popover-action-area button:hover, #mate-menu button:hover, .budgie-settings-window buttonbox.inline-toolbar button:hover, .raven .raven-header:not(.top) button:hover, .drop-shadow button:hover, .budgie-session-dialog .linked.horizontal > button:hover, .lightdm-gtk-greeter button:hover, :not(headerbar) .caja-pathbar button:hover, .caja-pathbar :not(headerbar) button:hover, :not(headerbar) .path-bar button:hover, layouttabbar button:hover, .mate-panel-menu-bar button:hover, .budgie-panel button:hover, .raven stackswitcher.linked > button:hover, toolbar button:hover, .titlebar:not(headerbar) button:hover:not(.suggested-action):not(.destructive-action), +headerbar button:hover:not(.suggested-action):not(.destructive-action), actionbar > revealer > box button:hover:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification button:hover, filechooser #pathbarbox > stack > box > button:hover, .nemo-window .toolbar button:hover, +button.flat:hover { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); + color: #F8F8F2; +} + +modelbutton.flat:active, +.menuitem.button.flat:active, spinbutton:not(.vertical) button:active, spinbutton.vertical button:active, popover.background.menu button:active, +popover.background button.model:active, notebook > header > tabs > arrow:active, scrollbar button:active, check:active, +radio:active, calendar.button:active, messagedialog.csd .dialog-action-area button:active, button.sidebar-button:active, .gedit-search-slider .linked > button:active, popover.messagepopover .popover-action-area button:active, #mate-menu button:active, .budgie-settings-window buttonbox.inline-toolbar button:active, .raven .raven-header:not(.top) button:active, .drop-shadow button:active, .budgie-session-dialog .linked.horizontal > button:active, .lightdm-gtk-greeter button:active, :not(headerbar) .caja-pathbar button:active, .caja-pathbar :not(headerbar) button:active, :not(headerbar) .path-bar button:active, layouttabbar button:active, .mate-panel-menu-bar button:active, .budgie-panel button:active, .raven stackswitcher.linked > button:active, toolbar button:active, .titlebar:not(headerbar) button:active:not(.suggested-action):not(.destructive-action), +headerbar button:active:not(.suggested-action):not(.destructive-action), actionbar > revealer > box button:active:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification button:active, filechooser #pathbarbox > stack > box > button:active, .nemo-window .toolbar button:active, +button.flat:active { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-image 225ms cubic-bezier(0, 0, 0.2, 1), background-size 0, background-image 0; + animation: ripple_effect 225ms cubic-bezier(0, 0, 0.2, 1) forwards; + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); + background-image: radial-gradient(circle farthest-corner at center, alpha(currentColor, 0.12) 10%, transparent 0%); + background-size: 0% 0%; + color: #F8F8F2; +} + +modelbutton.flat:disabled, +.menuitem.button.flat:disabled, spinbutton:not(.vertical) button:disabled, spinbutton.vertical button:disabled, popover.background.menu button:disabled, +popover.background button.model:disabled, notebook > header > tabs > arrow:disabled, scrollbar button:disabled, check:disabled, +radio:disabled, calendar.button:disabled, messagedialog.csd .dialog-action-area button:disabled, button.sidebar-button:disabled, .gedit-search-slider .linked > button:disabled, popover.messagepopover .popover-action-area button:disabled, #mate-menu button:disabled, .budgie-settings-window buttonbox.inline-toolbar button:disabled, .raven .raven-header:not(.top) button:disabled, .drop-shadow button:disabled, .budgie-session-dialog .linked.horizontal > button:disabled, .lightdm-gtk-greeter button:disabled, :not(headerbar) .caja-pathbar button:disabled, .caja-pathbar :not(headerbar) button:disabled, :not(headerbar) .path-bar button:disabled, layouttabbar button:disabled, .mate-panel-menu-bar button:disabled, .budgie-panel button:disabled, .raven stackswitcher.linked > button:disabled, toolbar button:disabled, .titlebar:not(headerbar) button:disabled:not(.suggested-action):not(.destructive-action), +headerbar button:disabled:not(.suggested-action):not(.destructive-action), actionbar > revealer > box button:disabled:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification button:disabled, filechooser #pathbarbox > stack > box > button:disabled, .nemo-window .toolbar button:disabled, +button.flat:disabled { + box-shadow: none; + background-color: transparent; + color: rgba(248, 248, 242, 0.3); +} + +:not(headerbar) .caja-pathbar button:checked, .caja-pathbar :not(headerbar) button:checked, :not(headerbar) .path-bar button:checked, layouttabbar button:checked, .mate-panel-menu-bar button:checked, .budgie-panel button:checked, .raven stackswitcher.linked > button:checked, toolbar button:checked, .titlebar:not(headerbar) button:checked:not(.suggested-action):not(.destructive-action), +headerbar button:checked:not(.suggested-action):not(.destructive-action), actionbar > revealer > box button:checked:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification button:checked, filechooser #pathbarbox > stack > box > button:checked, .nemo-window .toolbar button:checked, +button.flat:checked { + background-color: alpha(currentColor, 0.24); + color: #F8F8F2; +} + +:not(headerbar) .caja-pathbar button:checked:disabled, .caja-pathbar :not(headerbar) button:checked:disabled, :not(headerbar) .path-bar button:checked:disabled, layouttabbar button:checked:disabled, .mate-panel-menu-bar button:checked:disabled, .budgie-panel button:checked:disabled, .raven stackswitcher.linked > button:checked:disabled, toolbar button:checked:disabled, .titlebar:not(headerbar) button:checked:disabled:not(.suggested-action):not(.destructive-action), +headerbar button:checked:disabled:not(.suggested-action):not(.destructive-action), actionbar > revealer > box button:checked:disabled:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification button:checked:disabled, filechooser #pathbarbox > stack > box > button:checked:disabled, .nemo-window .toolbar button:checked:disabled, +button.flat:checked:disabled { + background-color: rgba(248, 248, 242, 0.12); + color: rgba(248, 248, 242, 0.5); +} + + +button.text-button { + padding-left: 16px; + padding-right: 16px; +} + + +button.image-button { + min-width: 24px; + padding: 4px; +} + + +button.text-button.image-button { + border-radius: 6px; + -gtk-outline-radius: 6px; +} + + +button.text-button.image-button label:first-child { + margin-left: 12px; +} + + +button.text-button.image-button label:last-child { + margin-right: 12px; +} + + +button.text-button.image-button image:not(:only-child) { + margin: 0 4px; +} + +toolbar .linked > button, .titlebar:not(headerbar) .linked > button:not(.suggested-action):not(.destructive-action), +headerbar .linked > button:not(.suggested-action):not(.destructive-action), actionbar > revealer > box .linked > button:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification .linked > button, filechooser #pathbarbox > stack > box.linked > button, .nemo-window .toolbar .linked > button, +toolbar .linked.vertical > button, +.titlebar:not(headerbar) .linked.vertical > button:not(.suggested-action):not(.destructive-action), +headerbar .linked.vertical > button:not(.suggested-action):not(.destructive-action), +actionbar > revealer > box .linked.vertical > button:not(.suggested-action):not(.destructive-action):not(.server-list-button), +.app-notification .linked.vertical > button, +filechooser #pathbarbox > stack > box.linked.vertical > button, +.nemo-window .toolbar .linked.vertical > button, .linked > +button.flat, +.linked.vertical > +button.flat { + border-radius: 6px; +} + +toolbar .linked > button.text-button.image-button, .titlebar:not(headerbar) .linked > button.text-button.image-button:not(.suggested-action):not(.destructive-action), +headerbar .linked > button.text-button.image-button:not(.suggested-action):not(.destructive-action), actionbar > revealer > box .linked > button.text-button.image-button:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification .linked > button.text-button.image-button, filechooser #pathbarbox > stack > box.linked > button.text-button.image-button, .nemo-window .toolbar .linked > button.text-button.image-button, +toolbar .linked.vertical > button.text-button.image-button, +.titlebar:not(headerbar) .linked.vertical > button.text-button.image-button:not(.suggested-action):not(.destructive-action), +headerbar .linked.vertical > button.text-button.image-button:not(.suggested-action):not(.destructive-action), +actionbar > revealer > box .linked.vertical > button.text-button.image-button:not(.suggested-action):not(.destructive-action):not(.server-list-button), +.app-notification .linked.vertical > button.text-button.image-button, +filechooser #pathbarbox > stack > box.linked.vertical > button.text-button.image-button, +.nemo-window .toolbar .linked.vertical > button.text-button.image-button, .linked > +button.flat.text-button.image-button, +.linked.vertical > +button.flat.text-button.image-button { + border-radius: 6px; + -gtk-outline-radius: 6px; +} + +infobar.info button.flat, infobar.question button.flat, infobar.warning button.flat, infobar.error button.flat, .mate-panel-menu-bar button, .budgie-panel button, .raven stackswitcher.linked > button, .raven-mpris button.image-button, .xfce4-panel.background button { + color: rgba(255, 255, 255, 0.7); +} + +infobar.info button.flat:hover, infobar.question button.flat:hover, infobar.warning button.flat:hover, infobar.error button.flat:hover, .mate-panel-menu-bar button:hover, .budgie-panel button:hover, .raven stackswitcher.linked > button:hover, .raven-mpris button.image-button:hover, .xfce4-panel.background button:hover, infobar.info button.flat:active, infobar.question button.flat:active, infobar.warning button.flat:active, infobar.error button.flat:active, .mate-panel-menu-bar button:active, .budgie-panel button:active, .raven stackswitcher.linked > button:active, .raven-mpris button.image-button:active, .xfce4-panel.background button:active { + color: white; +} + +infobar.info button.flat:disabled, infobar.question button.flat:disabled, infobar.warning button.flat:disabled, infobar.error button.flat:disabled, .mate-panel-menu-bar button:disabled, .budgie-panel button:disabled, .raven stackswitcher.linked > button:disabled, .raven-mpris button.image-button:disabled, .xfce4-panel.background button:disabled { + color: rgba(255, 255, 255, 0.3); +} + +infobar.info button.flat:checked, infobar.question button.flat:checked, infobar.warning button.flat:checked, infobar.error button.flat:checked, .mate-panel-menu-bar button:checked, .budgie-panel button:checked, .raven stackswitcher.linked > button:checked, .raven-mpris button.image-button:checked, .xfce4-panel.background button:checked { + background-color: rgba(255, 255, 255, 0.3); + color: white; +} + +infobar.info button.flat:checked:disabled, infobar.question button.flat:checked:disabled, infobar.warning button.flat:checked:disabled, infobar.error button.flat:checked:disabled, .mate-panel-menu-bar button:checked:disabled, .budgie-panel button:checked:disabled, .raven stackswitcher.linked > button:checked:disabled, .raven-mpris button.image-button:checked:disabled, .xfce4-panel.background button:checked:disabled { + background-color: rgba(255, 255, 255, 0.12); + color: rgba(255, 255, 255, 0.5); +} + + +button.osd { + padding: 8px 12px; +} + + +button.osd.image-button { + padding: 8px; +} + + +button.osd:disabled { + opacity: 0; +} + + +button.suggested-action { + background-color: #BD99FF; + color: white; +} + + +button.suggested-action:disabled { + box-shadow: none; + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + + +button.suggested-action:checked { + background-color: #d1b8ff; +} + + +button.suggested-action.flat { + background-color: transparent; + color: #BD99FF; +} + + +button.suggested-action.flat:disabled { + box-shadow: none; + background-color: transparent; + color: rgba(248, 248, 242, 0.3); +} + + +button.suggested-action.flat:checked { + background-color: rgba(189, 153, 255, 0.3); +} + + +button.destructive-action { + background-color: #ff8c3e; + color: white; +} + + +button.destructive-action:disabled { + box-shadow: none; + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + + +button.destructive-action:checked { + background-color: #ffaf78; +} + + +button.destructive-action.flat { + background-color: transparent; + color: #ff8c3e; +} + + +button.destructive-action.flat:disabled { + box-shadow: none; + background-color: transparent; + color: rgba(248, 248, 242, 0.3); +} + + +button.destructive-action.flat:checked { + background-color: rgba(255, 140, 62, 0.3); +} + +.stack-switcher > +button { + outline-offset: -4px; +} + +.stack-switcher > +button > label { + padding-left: 6px; + padding-right: 6px; +} + +.stack-switcher > +button > image { + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + padding-bottom: 3px; +} + +.stack-switcher > +button.text-button { + padding-left: 10px; + padding-right: 10px; +} + +.stack-switcher > +button.image-button { + padding-left: 2px; + padding-right: 2px; +} + +.stack-switcher > +button.needs-attention:checked > label, +.stack-switcher > +button.needs-attention:checked > image { + animation: none; + background-image: none; +} + +.primary-toolbar +button { + -gtk-icon-shadow: none; +} + + +button.image-button, toolbar .linked > button.image-button, .titlebar:not(headerbar) .linked > button.image-button:not(.suggested-action):not(.destructive-action), +headerbar .linked > button.image-button:not(.suggested-action):not(.destructive-action), actionbar > revealer > box .linked > button.image-button:not(.suggested-action):not(.destructive-action):not(.server-list-button), .app-notification .linked > button.image-button, .nemo-window .toolbar .linked > button.image-button, toolbar .linked.vertical > button.image-button, +headerbar .linked.vertical > button.image-button:not(.suggested-action):not(.destructive-action), .app-notification .linked.vertical > button.image-button, .nemo-window .toolbar .linked.vertical > button.image-button, .linked > button.flat.image-button, +.linked.vertical > button.flat.image-button, .inline-toolbar button:not(.text-button), check, +radio, filechooser #pathbarbox > stack > box > button, button.titlebutton, .disclosure-button, .nautilus-window headerbar > revealer > button, .raven .raven-header:not(.top) button.image-button, .raven .expander-button, +button.close, +button.circular { + border-radius: 9999px; + -gtk-outline-radius: 9999px; +} + +spinbutton:not(.vertical) button, notebook > header tab button.flat, button.sidebar-button, .nautilus-window .floating-bar button, .gedit-document-panel row button.flat, .gedit-search-slider .linked > button, .pluma-window paned.horizontal box.vertical box.horizontal button.flat { + min-height: 24px; + min-width: 24px; + padding: 0; + border-radius: 9999px; + -gtk-outline-radius: 9999px; +} + +.stack-switcher > button.needs-attention > label, +.stack-switcher > button.needs-attention > image, stacksidebar row.needs-attention > label { + animation: needs_attention 225ms cubic-bezier(0, 0, 0.2, 1) forwards; + background-repeat: no-repeat; + background-position: right 3px; + background-size: 6px 6px; +} + +.stack-switcher > button.needs-attention > label:dir(rtl), +.stack-switcher > button.needs-attention > image:dir(rtl), stacksidebar row.needs-attention > label:dir(rtl) { + background-position: left 3px; +} + +.linked > button, .linked:not(.vertical) > spinbutton:not(.vertical), .linked:not(.vertical) > entry, combobox > .linked > button, .linked:not(.vertical) > combobox > box > button.combo { + border-radius: 0; + -gtk-outline-radius: 6px; +} + +.linked > button:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +.linked > button:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.linked > button:only-child { + border-radius: 6px; +} + +.linked.vertical > button, .linked.vertical > spinbutton:not(.vertical), .linked.vertical > entry, .linked.vertical > combobox > box > button.combo { + border-radius: 0; + -gtk-outline-radius: 6px; +} + +.linked.vertical > button:first-child { + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +.linked.vertical > button:last-child { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; +} + +.linked.vertical > button:only-child { + border-radius: 6px; +} + +.linked:not(.vertical) > spinbutton:first-child:not(.vertical), .linked:not(.vertical) > entry:first-child, combobox.linked button:nth-child(2):dir(rtl), combobox > .linked > button:first-child, .linked:not(.vertical) > combobox:first-child > box > button.combo { + border-radius: 6px 0 0 0; +} + +.linked:not(.vertical) > spinbutton:last-child:not(.vertical), .linked:not(.vertical) > entry:last-child, combobox.linked button:nth-child(2):dir(ltr), combobox > .linked > button:last-child, .linked:not(.vertical) > combobox:last-child > box > button.combo { + border-radius: 0 6px 0 0; +} + +.linked:not(.vertical) > spinbutton:only-child:not(.vertical), .linked:not(.vertical) > entry:only-child, combobox > .linked > button:only-child, .linked:not(.vertical) > combobox:only-child > box > button.combo { + border-radius: 6px 6px 0 0; +} + +.linked.vertical > spinbutton:first-child:not(.vertical), .linked.vertical > entry:first-child, .linked.vertical > combobox:first-child > box > button.combo { + border-radius: 6px 6px 0 0; +} + +.linked.vertical > spinbutton:last-child:not(.vertical), .linked.vertical > entry:last-child, .linked.vertical > combobox:last-child > box > button.combo { + border-radius: 0; +} + +.linked.vertical > spinbutton:only-child:not(.vertical), .linked.vertical > entry:only-child, .linked.vertical > combobox:only-child > box > button.combo { + border-radius: 6px 6px 0 0; +} + +/* menu buttons */ +modelbutton.flat, +.menuitem.button.flat { + min-height: 28px; + padding: 0 8px; + border-radius: 6px; + color: inherit; +} + +modelbutton.flat arrow { + background: none; +} + +modelbutton.flat arrow:hover { + background: none; +} + +modelbutton.flat arrow.left { + -gtk-icon-source: -gtk-icontheme("pan-start-symbolic"); +} + +modelbutton.flat arrow.right { + -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); +} + +button.color { + min-height: 24px; + min-width: 24px; + padding: 4px; +} + +/********* + * Links * + *********/ +*:link, button:link, +button:visited, *:link:hover, button:hover:link, +button:hover:visited, *:link:active, button:active:link, +button:active:visited { + color: #6faaff; +} + +*:link:visited, +button:visited, *:link:visited:hover, +button:visited:hover, *:link:visited:active, +button:visited:active { + color: #f58eb3; +} + +infobar.info *:link, infobar.info button:link, +infobar.info button:visited, infobar.question *:link, infobar.question button:link, +infobar.question button:visited, infobar.warning *:link, infobar.warning button:link, +infobar.warning button:visited, infobar.error *:link, infobar.error button:link, +infobar.error button:visited, *:link:selected, button:selected:link, +button:selected:visited, .selection-mode.titlebar:not(headerbar) .subtitle:link, +headerbar.selection-mode .subtitle:link, +*:selected *:link, +*:selected button:link, +*:selected button:visited { + color: white; +} + +button:link > label, +button:visited > label { + text-decoration-line: underline; +} + +/***************** + * GtkSpinButton * + *****************/ +spinbutton:not(.vertical) { + padding: 0; +} + +spinbutton:not(.vertical) entry { + min-width: 24px; + margin: 0; + border-image: none; + border-radius: 0; + box-shadow: none; + background-color: transparent; +} + +spinbutton:not(.vertical) button { + border: solid 4px transparent; +} + +spinbutton:not(.vertical) button.up:dir(ltr), spinbutton:not(.vertical) button.down:dir(rtl) { + margin-left: -2px; +} + +spinbutton:not(.vertical) button.up:dir(rtl), spinbutton:not(.vertical) button.down:dir(ltr) { + margin-right: -2px; +} + +spinbutton.vertical:disabled { + color: rgba(248, 248, 242, 0.5); +} + +spinbutton.vertical:drop(active) { + box-shadow: none; +} + +spinbutton.vertical entry { + min-height: 32px; + min-width: 40px; + padding: 0; +} + +spinbutton.vertical button { + min-height: 32px; + min-width: 40px; + padding: 0; +} + +spinbutton.vertical button.up { + border-radius: 6px 6px 0 0; +} + +spinbutton.vertical button.down { + border-radius: 0 0 6px 6px; +} + +treeview spinbutton:not(.vertical) { + min-height: 0; + border-style: none; + border-radius: 0; +} + +treeview spinbutton:not(.vertical) entry { + min-height: 0; + padding: 1px 2px; +} + +/************** + * ComboBoxes * + **************/ +combobox arrow { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); + min-height: 16px; + min-width: 16px; +} + +combobox decoration, +combobox button.combo:checked { + transition: none; +} + +combobox button.combo cellview:dir(ltr) { + margin-left: 0px; +} + +combobox button.combo cellview:dir(rtl) { + margin-right: 0px; +} + +combobox #gtk-combobox-popup-menu { + padding: 2px 0; +} + +combobox #gtk-combobox-popup-menu menuitem { + min-height: 28px; + padding: 0 8px; +} + +combobox #gtk-combobox-popup-menu > arrow.top { + margin-top: -2px; +} + +combobox #gtk-combobox-popup-menu > arrow.bottom { + margin-top: 4px; + margin-bottom: -6px; +} + +combobox:drop(active) { + box-shadow: none; +} + +button.combo { + border-radius: 6px 6px 0 0; + background-image: none; + font-weight: inherit; + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-image 225ms cubic-bezier(0, 0, 0.2, 1); + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #BD99FF 0%, transparent 0%) 0 0 0/0 0 0px; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); + background-color: rgba(248, 248, 242, 0.04); + color: #F8F8F2; +} + +button.combo:hover { + box-shadow: inset 0 -1px #F8F8F2; +} + +button.combo:checked { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #BD99FF 100%, transparent 0%) 0 0 2/0 0 2px; + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.3); +} + +button.combo:disabled { + box-shadow: inset 0 -1px rgba(248, 248, 242, 0.12); + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + +/************ + * Toolbars * + ************/ +toolbar { + -GtkWidget-window-dragging: true; + padding: 2px; + background-color: #323F4E; +} + +.osd toolbar { + background-color: transparent; +} + +toolbar.osd, .app-notification, frame.documents-dropdown { + transition: box-shadow 100ms cubic-bezier(0, 0, 0.2, 1); + padding: 4px; + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #3D4C5F; +} + +toolbar.osd:backdrop, .app-notification:backdrop, frame.documents-dropdown:backdrop { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), inset 0 1px rgba(255, 255, 255, 0.1); +} + +toolbar.osd.left, .left.app-notification, frame.left.documents-dropdown, toolbar.osd.right, .right.app-notification, frame.right.documents-dropdown, toolbar.osd.top, .top.app-notification, frame.top.documents-dropdown, toolbar.osd.bottom, .bottom.app-notification, frame.bottom.documents-dropdown { + border-radius: 0; +} + +toolbar.horizontal > separator { + margin: 2px; +} + +toolbar.vertical > separator { + margin: 2px; +} + +toolbar:not(.inline-toolbar):not(.osd) scale, +toolbar:not(.inline-toolbar):not(.osd) entry, +toolbar:not(.inline-toolbar):not(.osd) spinbutton, +toolbar:not(.inline-toolbar):not(.osd) button { + margin: 2px; +} + +toolbar:not(.inline-toolbar):not(.osd) .linked entry:not(:first-child), +toolbar:not(.inline-toolbar):not(.osd) .linked spinbutton:not(:first-child), +toolbar:not(.inline-toolbar):not(.osd) .linked button:not(:first-child) { + margin-left: 0; +} + +toolbar:not(.inline-toolbar):not(.osd) .linked entry:not(:last-child), +toolbar:not(.inline-toolbar):not(.osd) .linked spinbutton:not(:last-child), +toolbar:not(.inline-toolbar):not(.osd) .linked button:not(:last-child) { + margin-right: 0; +} + +toolbar:not(.inline-toolbar):not(.osd) spinbutton entry, +toolbar:not(.inline-toolbar):not(.osd) spinbutton button { + margin: 0; +} + +toolbar:not(.inline-toolbar):not(.osd) switch { + margin: 6px 2px; +} + +.inline-toolbar { + padding: 4px; + border-style: solid; + border-width: 0 1px 1px; + border-color: rgba(0,0,0,0); + background-color: #323f4e; +} + +searchbar > revealer > box, +.location-bar { + padding: 4px; + border-style: solid; + border-width: 0 0 1px; + border-color: rgba(0,0,0,0); + background-color: #323F4E; + background-clip: border-box; +} + +searchbar > revealer > box { + margin: -6px; + padding: 4px; +} + +/*************** + * Header bars * + ***************/ +.titlebar:not(headerbar), +headerbar { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1), color 100ms cubic-bezier(0, 0, 0.2, 1); + min-height: 40px; + padding: 0 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #323F4E; + color: #F8F8F2; +} + +.titlebar:disabled:not(headerbar), +headerbar:disabled { + color: rgba(248, 248, 242, 0.5); +} + +.titlebar:backdrop:not(headerbar), +headerbar:backdrop { + color: rgba(248, 248, 242, 0.7); +} + +.titlebar:backdrop:disabled:not(headerbar), +headerbar:backdrop:disabled { + color: rgba(248, 248, 242, 0.3); +} + +.titlebar:not(headerbar) .title, +headerbar .title { + padding: 0 12px; + font-weight: bold; +} + +.titlebar:not(headerbar) .subtitle, +headerbar .subtitle { + padding: 0 12px; + font-size: smaller; +} + +.titlebar:not(headerbar) .linked:not(.vertical) > entry:not(.flat), +headerbar .linked:not(.vertical) > entry:not(.flat) { + border-radius: 6px; +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action), +headerbar button:not(.suggested-action):not(.destructive-action) { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 0%, transparent 0%) 0 0 0/0 0 0px; + color: rgba(248, 248, 242, 0.7); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):hover, .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):active, +headerbar button:not(.suggested-action):not(.destructive-action):hover, +headerbar button:not(.suggested-action):not(.destructive-action):active { + color: #F8F8F2; +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):disabled, +headerbar button:not(.suggested-action):not(.destructive-action):disabled { + color: rgba(248, 248, 242, 0.3); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):checked, +headerbar button:not(.suggested-action):not(.destructive-action):checked { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 100%, transparent 0%) 0 0 2/0 0 2px; + color: #F8F8F2; +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):checked:disabled, +headerbar button:not(.suggested-action):not(.destructive-action):checked:disabled { + color: rgba(248, 248, 242, 0.5); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):checked, .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):checked:disabled, +headerbar button:not(.suggested-action):not(.destructive-action):checked, +headerbar button:not(.suggested-action):not(.destructive-action):checked:disabled { + background-color: transparent; +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop, +headerbar button:not(.suggested-action):not(.destructive-action):backdrop { + color: rgba(248, 248, 242, 0.5); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:hover, .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:active, +headerbar button:not(.suggested-action):not(.destructive-action):backdrop:hover, +headerbar button:not(.suggested-action):not(.destructive-action):backdrop:active { + color: rgba(248, 248, 242, 0.7); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:disabled, +headerbar button:not(.suggested-action):not(.destructive-action):backdrop:disabled { + color: rgba(248, 248, 242, 0.3); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:checked, +headerbar button:not(.suggested-action):not(.destructive-action):backdrop:checked { + color: rgba(248, 248, 242, 0.7); +} + +.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:checked:disabled, +headerbar button:not(.suggested-action):not(.destructive-action):backdrop:checked:disabled { + color: rgba(248, 248, 242, 0.3); +} + +.titlebar:not(headerbar) button.suggested-action:disabled, .titlebar:not(headerbar) button.destructive-action:disabled, +headerbar button.suggested-action:disabled, +headerbar button.destructive-action:disabled { + background-color: rgba(248, 248, 242, 0.04); + color: rgba(248, 248, 242, 0.5); +} + +.selection-mode.titlebar:not(headerbar), +headerbar.selection-mode { + transition: background-color 0.00001s 225ms, color 225ms cubic-bezier(0, 0, 0.2, 1); + animation: header_ripple_effect 225ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), inset 0 1px rgba(255, 255, 255, 0.2); + background-color: #BD99FF; + color: white; +} + +.selection-mode.titlebar:backdrop:not(headerbar), +headerbar.selection-mode:backdrop { + color: rgba(255, 255, 255, 0.7); +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action), +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action) { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 0%, transparent 0%) 0 0 0/0 0 0px; + color: white; +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):disabled, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):disabled { + color: rgba(255, 255, 255, 0.5); +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):checked, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):checked { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 100%, transparent 0%) 0 0 2/0 0 2px; + color: white; +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):checked:disabled, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):checked:disabled { + color: rgba(255, 255, 255, 0.5); +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):backdrop { + color: rgba(255, 255, 255, 0.7); +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:disabled, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):backdrop:disabled { + color: rgba(255, 255, 255, 0.3); +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:checked, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):backdrop:checked { + color: rgba(255, 255, 255, 0.7); +} + +.selection-mode.titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):backdrop:checked:disabled, +headerbar.selection-mode button:not(.suggested-action):not(.destructive-action):backdrop:checked:disabled { + color: rgba(255, 255, 255, 0.3); +} + +.selection-mode.titlebar:not(headerbar) .selection-menu, +headerbar.selection-mode .selection-menu { + padding-left: 16px; + padding-right: 16px; +} + +.selection-mode.titlebar:not(headerbar) .selection-menu arrow, +headerbar.selection-mode .selection-menu arrow { + -GtkArrow-arrow-scaling: 1; +} + +.selection-mode.titlebar:not(headerbar) .selection-menu .arrow, +headerbar.selection-mode .selection-menu .arrow { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); +} + +.tiled .titlebar:not(headerbar), +.tiled-top .titlebar:not(headerbar), +.tiled-right .titlebar:not(headerbar), +.tiled-bottom .titlebar:not(headerbar), +.tiled-left .titlebar:not(headerbar), +.maximized .titlebar:not(headerbar), +.fullscreen .titlebar:not(headerbar), .tiled +headerbar, +.tiled-top +headerbar, +.tiled-right +headerbar, +.tiled-bottom +headerbar, +.tiled-left +headerbar, +.maximized +headerbar, +.fullscreen +headerbar { + border-radius: 0; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.default-decoration.titlebar:not(headerbar), +headerbar.default-decoration { + min-height: 24px; + padding: 4px; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); +} + +.tiled .default-decoration.titlebar:not(headerbar), +.maximized .default-decoration.titlebar:not(headerbar), +.fullscreen .default-decoration.titlebar:not(headerbar), .tiled +headerbar.default-decoration, +.maximized +headerbar.default-decoration, +.fullscreen +headerbar.default-decoration { + box-shadow: none; +} + +.default-decoration.titlebar:not(headerbar) button.titlebutton, +headerbar.default-decoration button.titlebutton { + min-height: 24px; + min-width: 24px; + margin: 0; + padding: 0; +} + +.background:not(.csd) .default-decoration.titlebar:not(headerbar) button.titlebutton:active, .background:not(.csd) +headerbar.default-decoration button.titlebutton:active { + background-size: 1000% 1000%; +} + +.solid-csd .titlebar:dir(rtl):not(headerbar), .solid-csd .titlebar:dir(ltr):not(headerbar), .solid-csd +headerbar:dir(rtl), .solid-csd +headerbar:dir(ltr) { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +headerbar entry, +headerbar spinbutton, +headerbar button { + margin-top: 4px; + margin-bottom: 4px; +} + +headerbar separator { + margin-top: 10px; + margin-bottom: 10px; + background-color: rgba(248, 248, 242, 0.12); +} + +headerbar switch { + margin-top: 8px; + margin-bottom: 8px; +} + +headerbar spinbutton button { + margin-top: 0; + margin-bottom: 0; +} + +headerbar .entry-tag, headerbar .documents-entry-tag, headerbar .photos-entry-tag { + margin-top: 5px; + margin-bottom: 5px; +} + +.background .titlebar { + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +.background.tiled .titlebar, +.background.tiled-top .titlebar, +.background.tiled-right .titlebar, +.background.tiled-bottom .titlebar, +.background.tiled-left .titlebar, +.background.maximized .titlebar, +.background.solid-csd .titlebar { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +window separator:first-child + headerbar, +window headerbar:first-child { + border-top-left-radius: 6px; +} + +window headerbar:last-child { + border-top-right-radius: 6px; +} + +window stack headerbar:first-child, window stack headerbar:last-child { + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +window.tiled headerbar, window.tiled headerbar:first-child, window.tiled headerbar:last-child, window.tiled headerbar:only-child, +window.tiled-top headerbar, +window.tiled-top headerbar:first-child, +window.tiled-top headerbar:last-child, +window.tiled-top headerbar:only-child, +window.tiled-right headerbar, +window.tiled-right headerbar:first-child, +window.tiled-right headerbar:last-child, +window.tiled-right headerbar:only-child, +window.tiled-bottom headerbar, +window.tiled-bottom headerbar:first-child, +window.tiled-bottom headerbar:last-child, +window.tiled-bottom headerbar:only-child, +window.tiled-left headerbar, +window.tiled-left headerbar:first-child, +window.tiled-left headerbar:last-child, +window.tiled-left headerbar:only-child, +window.maximized headerbar, +window.maximized headerbar:first-child, +window.maximized headerbar:last-child, +window.maximized headerbar:only-child, +window.fullscreen headerbar, +window.fullscreen headerbar:first-child, +window.fullscreen headerbar:last-child, +window.fullscreen headerbar:only-child, +window.solid-csd headerbar, +window.solid-csd headerbar:first-child, +window.solid-csd headerbar:last-child, +window.solid-csd headerbar:only-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +window.csd > .titlebar:not(headerbar) { + padding: 0; + background-color: transparent; + background-image: none; + border-style: none; + box-shadow: none; +} + +.titlebar:not(headerbar) > separator { + background-color: #323F4E; + background-image: image(rgba(0,0,0,0)); +} + +/************ + * Pathbars * + ************/ +.caja-pathbar button, +.path-bar button { + padding-left: 4px; + padding-right: 4px; +} + +.caja-pathbar button label:not(:only-child):first-child, +.path-bar button label:not(:only-child):first-child { + margin-left: 4px; +} + +.caja-pathbar button label:not(:only-child):last-child, +.path-bar button label:not(:only-child):last-child { + margin-right: 4px; +} + +.caja-pathbar button.slider-button, +.path-bar button.slider-button { + padding-left: 4px; + padding-right: 4px; +} + +:not(headerbar) .caja-pathbar button, .caja-pathbar :not(headerbar) button, :not(headerbar) +.path-bar button { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #BD99FF 0%, transparent 0%) 0 0 0/0 0 0px; + border-radius: 6px; +} + +:not(headerbar) .caja-pathbar button:checked, .caja-pathbar :not(headerbar) button:checked, :not(headerbar) +.path-bar button:checked { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #BD99FF 100%, transparent 0%) 0 0 2/0 0 2px; +} + +:not(headerbar) .caja-pathbar button:checked, .caja-pathbar :not(headerbar) button:checked, :not(headerbar) .caja-pathbar button:checked:disabled, .caja-pathbar :not(headerbar) button:checked:disabled, :not(headerbar) +.path-bar button:checked, :not(headerbar) +.path-bar button:checked:disabled { + background-color: transparent; +} + +/************** + * Tree Views * + **************/ +treeview.view { + border-left-color: rgba(248, 248, 242, 0.3); + border-top-color: rgba(0,0,0,0); +} + +* { + -GtkTreeView-horizontal-separator: 4; + -GtkTreeView-grid-line-width: 1; + -GtkTreeView-grid-line-pattern: ''; + -GtkTreeView-tree-line-width: 1; + -GtkTreeView-tree-line-pattern: ''; + -GtkTreeView-expander-size: 16; +} + +treeview.view:selected { + background-color: #323F4E; + background-image: image(#bd99ff); +} + +treeview.view:hover, treeview.view:selected { + border-radius: 0; +} + +treeview.view.separator { + min-height: 5px; + color: rgba(0,0,0,0); +} + +treeview.view:drop(active) { + border-style: solid none; + border-width: 1px; + border-color: #BD99FF; +} + +treeview.view:drop(active).after { + border-top-style: none; +} + +treeview.view:drop(active).before { + border-bottom-style: none; +} + +treeview.view.expander { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); + -gtk-icon-transform: rotate(-90deg); + color: rgba(248, 248, 242, 0.7); +} + +treeview.view.expander:dir(rtl) { + -gtk-icon-transform: rotate(90deg); +} + +treeview.view.expander:checked { + -gtk-icon-transform: unset; +} + +treeview.view.expander:hover, treeview.view.expander:active { + color: #F8F8F2; +} + +treeview.view.expander:disabled { + color: rgba(248, 248, 242, 0.3); +} + +treeview.view.progressbar { + border-bottom: 4px solid #BD99FF; + box-shadow: none; + background-color: transparent; +} + +treeview.view.trough { + border-bottom: 4px solid rgba(248, 248, 242, 0.12); + box-shadow: none; + background-color: transparent; +} + +treeview.view header button { + padding: 2px 6px; + border-style: none solid solid none; + border-width: 1px; + border-color: rgba(0,0,0,0); + border-radius: 0; + background-clip: border-box; +} + +treeview.view header button:not(:hover):not(:active) { + color: rgba(248, 248, 242, 0.7); +} + +treeview.view header button, treeview.view header button:hover, treeview.view header button:active { + box-shadow: none; +} + +treeview.view header button, treeview.view header button:disabled { + background-color: #323F4E; +} + +treeview.view header button:last-child { + border-right-style: none; +} + +treeview.view button.dnd, +treeview.view header.button.dnd { + padding: 2px 6px; + border-style: none solid solid; + border-width: 1px; + border-color: rgba(0,0,0,0); + border-radius: 0; + box-shadow: none; + background-color: #323F4E; + background-clip: border-box; + color: #BD99FF; +} + +treeview.view acceleditor > label { + background-color: #BD99FF; +} + +/********* + * Menus * + *********/ +menubar, +.menubar { + -GtkWidget-window-dragging: true; + padding: 0; + background-color: #323F4E; +} + +menubar > menuitem, +.menubar > menuitem { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + min-height: 20px; + padding: 4px 8px; + color: rgba(248, 248, 242, 0.7); +} + +menubar > menuitem:hover, +.menubar > menuitem:hover { + transition: none; + background-color: rgba(248, 248, 242, 0.12); + color: #F8F8F2; +} + +menubar > menuitem:disabled, +.menubar > menuitem:disabled { + color: rgba(248, 248, 242, 0.3); +} + +menubar > menuitem label:disabled, +.menubar > menuitem label:disabled { + color: inherit; +} + +.csd.popup { + background-color: transparent; +} + +menu, +.menu, +.context-menu { + margin: 4px 0; + padding: 4px 0; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #3D4C5F; + border: 1px solid rgba(0,0,0,0); +} + +.csd menu, .csd +.menu, .csd +.context-menu { + border: none; + border-radius: 6px; +} + +menu menuitem, +.menu menuitem, +.context-menu menuitem { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1); + min-height: 20px; + min-width: 40px; + padding: 4px 8px; + font: initial; + text-shadow: none; +} + +menu menuitem:hover, +.menu menuitem:hover, +.context-menu menuitem:hover { + transition: none; + background-color: rgba(248, 248, 242, 0.12); +} + +menu menuitem:disabled, +.menu menuitem:disabled, +.context-menu menuitem:disabled { + color: rgba(248, 248, 242, 0.5); +} + +menu menuitem arrow, +.menu menuitem arrow, +.context-menu menuitem arrow { + min-height: 16px; + min-width: 16px; +} + +menu menuitem arrow:dir(ltr), +.menu menuitem arrow:dir(ltr), +.context-menu menuitem arrow:dir(ltr) { + -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); + margin-left: 8px; +} + +menu menuitem arrow:dir(rtl), +.menu menuitem arrow:dir(rtl), +.context-menu menuitem arrow:dir(rtl) { + -gtk-icon-source: -gtk-icontheme("pan-end-symbolic-rtl"); + margin-right: 8px; +} + +menu menuitem label:dir(rtl), menu menuitem label:dir(ltr), +.menu menuitem label:dir(rtl), +.menu menuitem label:dir(ltr), +.context-menu menuitem label:dir(rtl), +.context-menu menuitem label:dir(ltr) { + color: inherit; +} + +menu > arrow, +.menu > arrow, +.context-menu > arrow { + min-height: 16px; + min-width: 16px; + padding: 4px; + background-color: #3D4C5F; + color: rgba(248, 248, 242, 0.7); +} + +menu > arrow.top, +.menu > arrow.top, +.context-menu > arrow.top { + margin-top: -4px; + border-bottom: 1px solid rgba(0,0,0,0); + border-radius: 6px 6px 0 0; + -gtk-icon-source: -gtk-icontheme("pan-up-symbolic"); +} + +menu > arrow.bottom, +.menu > arrow.bottom, +.context-menu > arrow.bottom { + margin-top: 8px; + margin-bottom: -12px; + border-top: 1px solid rgba(0,0,0,0); + border-radius: 0 0 6px 6px; + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); +} + +menu > arrow:hover, +.menu > arrow:hover, +.context-menu > arrow:hover { + background-image: image(rgba(248, 248, 242, 0.12)); + color: #F8F8F2; +} + +menu > arrow:disabled, +.menu > arrow:disabled, +.context-menu > arrow:disabled { + border-color: transparent; + background-color: transparent; + color: transparent; +} + +menu separator, +.menu separator, +.context-menu separator { + margin: 4px 0; +} + +menuitem accelerator { + color: rgba(248, 248, 242, 0.7); +} + +menuitem:disabled accelerator { + color: rgba(248, 248, 242, 0.3); +} + +.popup:not(.csd) menu menuitem { + color: #F8F8F2; +} + +.popup:not(.csd) menu menuitem:hover { + background-color: #536171; +} + +.popup:not(.csd) menu menuitem:disabled { + color: #9ba2a9; +} + +.popup:not(.csd) menu accelerator { + color: #c0c4c6; +} + +/************ + * Popovers * + ************/ +popover.background { + transition: box-shadow 100ms cubic-bezier(0, 0, 0.2, 1); + padding: 2px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); + background-color: #3D4C5F; +} + +popover.background:backdrop { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +popover.background, .csd popover.background { + border-style: solid; + border-width: 1px; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.3); + border-radius: 7px; +} + +popover.background > stack { + margin: -4px; +} + +popover.background > toolbar { + margin: -2px; +} + +popover.background > list, +popover.background > .view, +popover.background > toolbar { + border-style: none; + box-shadow: none; + background-color: transparent; +} + +popover.background list, +popover.background .view:not(:selected), +popover.background toolbar { + background-color: #3D4C5F; +} + +popover.background.menu button, +popover.background button.model { + min-height: 32px; + padding: 0 8px; + border-radius: 6px; +} + +popover.background separator { + margin: 4px 0; +} + +popover.background list separator { + margin: 0; +} + +/************* + * Notebooks * + *************/ +frame > paned > notebook > header, +notebook.frame > header { + background-color: #323f4e; +} + +notebook:focus tab:checked { + box-shadow: inset 0 0 0 9999px rgba(189, 153, 255, 0.12); + outline: none; +} + +notebook > header { + border-width: 1px; + border-color: rgba(0,0,0,0); + background-color: #323F4E; + background-clip: border-box; +} + +notebook > header.top { + border-bottom-style: solid; +} + +notebook > header.top > tabs { + margin-bottom: -1px; +} + +notebook > header.top > tabs > tab { + border-image: linear-gradient(to top, transparent 2px, transparent 2px) 2/0 0 2px; +} + +notebook > header.top > tabs > tab:checked { + border-image-source: linear-gradient(to top, #BD99FF 2px, rgba(0,0,0,0) 2px); +} + +notebook > header.top > tabs > tab.reorderable-page { + border-image-width: 0 1px 2px; +} + +notebook > header.bottom { + border-top-style: solid; +} + +notebook > header.bottom > tabs { + margin-top: -1px; +} + +notebook > header.bottom > tabs > tab { + border-image: linear-gradient(to bottom, transparent 2px, transparent 2px) 2/2px 0 0; +} + +notebook > header.bottom > tabs > tab:checked { + border-image-source: linear-gradient(to bottom, #BD99FF 2px, rgba(0,0,0,0) 2px); +} + +notebook > header.bottom > tabs > tab.reorderable-page { + border-image-width: 2px 1px 0; +} + +notebook > header.left { + border-right-style: solid; +} + +notebook > header.left > tabs { + margin-right: -1px; +} + +notebook > header.left > tabs > tab { + border-image: linear-gradient(to left, transparent 2px, transparent 2px) 2/0 2px 0 0; +} + +notebook > header.left > tabs > tab:checked { + border-image-source: linear-gradient(to left, #BD99FF 2px, rgba(0,0,0,0) 2px); +} + +notebook > header.left > tabs > tab.reorderable-page { + border-image-width: 1px 2px 1px 0; +} + +notebook > header.right { + border-left-style: solid; +} + +notebook > header.right > tabs { + margin-left: -1px; +} + +notebook > header.right > tabs > tab { + border-image: linear-gradient(to right, transparent 2px, transparent 2px) 2/0 0 0 2px; +} + +notebook > header.right > tabs > tab:checked { + border-image-source: linear-gradient(to right, #BD99FF 2px, rgba(0,0,0,0) 2px); +} + +notebook > header.right > tabs > tab.reorderable-page { + border-image-width: 1px 0 1px 2px; +} + +notebook > header.top > tabs > arrow { + border-top-style: none; +} + +notebook > header.bottom > tabs > arrow { + border-bottom-style: none; +} + +notebook > header.top > tabs > arrow, notebook > header.bottom > tabs > arrow { + padding-left: 4px; + padding-right: 4px; +} + +notebook > header.top > tabs > arrow.down, notebook > header.bottom > tabs > arrow.down { + margin-left: -8px; + -gtk-icon-source: -gtk-icontheme("pan-start-symbolic"); +} + +notebook > header.top > tabs > arrow.up, notebook > header.bottom > tabs > arrow.up { + margin-right: -8px; + -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); +} + +notebook > header.left > tabs > arrow { + border-left-style: none; +} + +notebook > header.right > tabs > arrow { + border-right-style: none; +} + +notebook > header.left > tabs > arrow, notebook > header.right > tabs > arrow { + padding-top: 4px; + padding-bottom: 4px; +} + +notebook > header.left > tabs > arrow.down, notebook > header.right > tabs > arrow.down { + margin-top: -8px; + -gtk-icon-source: -gtk-icontheme("pan-up-symbolic"); +} + +notebook > header.left > tabs > arrow.up, notebook > header.right > tabs > arrow.up { + margin-bottom: -8px; + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); +} + +notebook > header > tabs > arrow { + min-height: 16px; + min-width: 16px; + border-radius: 0; +} + +notebook > header tab { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 0, background-image 0; + min-height: 24px; + min-width: 24px; + padding: 4px 12px; + outline-offset: -6px; + border-width: 1px; + border-color: transparent; + background-image: radial-gradient(circle farthest-corner at center, #BD99FF 10%, transparent 0%); + background-repeat: no-repeat; + background-position: center; + background-size: 0% 0%; + background-clip: border-box; + color: rgba(248, 248, 242, 0.7); + font-weight: 500; +} + +notebook > header tab:hover { + background-color: alpha(currentColor, 0.08); + color: #F8F8F2; +} + +notebook > header tab:disabled { + color: rgba(248, 248, 242, 0.3); +} + +notebook > header tab:checked { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 225ms cubic-bezier(0, 0, 0.2, 1), background-image 525ms cubic-bezier(0, 0, 0.2, 1); + background-color: transparent; + background-image: radial-gradient(circle farthest-corner at center, transparent 10%, transparent 0%); + background-size: 1000% 1000%; + background-clip: padding-box; + color: #F8F8F2; +} + +notebook > header tab:checked:disabled { + color: rgba(248, 248, 242, 0.5); +} + +notebook > header tab:checked.reorderable-page { + border-color: rgba(0,0,0,0); + background-color: #323F4E; +} + +notebook > header tab button.flat:last-child { + margin-left: 4px; + margin-right: -8px; +} + +notebook > header tab button.flat:first-child { + margin-left: -8px; + margin-right: 4px; +} + +notebook > header.top tabs, notebook > header.bottom tabs { + padding-left: 8px; + padding-right: 8px; +} + +notebook > header.top tabs:not(:only-child):first-child, notebook > header.bottom tabs:not(:only-child):first-child { + margin-left: 0; +} + +notebook > header.top tabs:not(:only-child):last-child, notebook > header.bottom tabs:not(:only-child):last-child { + margin-right: 0; +} + +notebook > header.top tabs tab.reorderable-page, notebook > header.bottom tabs tab.reorderable-page { + border-style: none solid; +} + +notebook > header.left tabs, notebook > header.right tabs { + padding-top: 8px; + padding-bottom: 8px; +} + +notebook > header.left tabs:not(:only-child):first-child, notebook > header.right tabs:not(:only-child):first-child { + margin-top: 0; +} + +notebook > header.left tabs:not(:only-child):last-child, notebook > header.right tabs:not(:only-child):last-child { + margin-bottom: 0; +} + +notebook > header.left tabs tab.reorderable-page, notebook > header.right tabs tab.reorderable-page { + border-style: solid none; +} + +notebook > stack:not(:only-child) { + background-color: #323F4E; +} + +/************** + * Scrollbars * + **************/ +scrollbar { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + background-color: #323F4E; + background-clip: border-box; +} + +* { + -GtkScrollbar-has-backward-stepper: false; + -GtkScrollbar-has-forward-stepper: false; +} + +scrollbar.top { + border-bottom: 1px solid rgba(0,0,0,0); +} + +scrollbar.bottom { + border-top: 1px solid rgba(0,0,0,0); +} + +scrollbar.left { + border-right: 1px solid rgba(0,0,0,0); +} + +scrollbar.right { + border-left: 1px solid rgba(0,0,0,0); +} + +scrollbar slider { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), margin 0, border-width 0; + min-width: 8px; + min-height: 8px; + border: 4px solid transparent; + border-radius: 9999px; + background-clip: padding-box; + background-color: rgba(248, 248, 242, 0.5); +} + +scrollbar slider:hover { + background-color: rgba(248, 248, 242, 0.7); +} + +scrollbar slider:active { + background-color: #F8F8F2; +} + +scrollbar slider:disabled { + background-color: rgba(248, 248, 242, 0.3); +} + +scrollbar.fine-tune slider { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), margin 0, border-width 0, min-width 0, min-height 0; + min-width: 4px; + min-height: 4px; +} + +scrollbar.fine-tune.horizontal slider { + margin: 2px 0; +} + +scrollbar.fine-tune.vertical slider { + margin: 0 2px; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) { + border-color: transparent; + background-color: transparent; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) slider { + min-width: 4px; + min-height: 4px; + margin: 3px; + border: 1px solid rgba(50, 63, 78, 0.3); +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) button { + min-width: 4px; + min-height: 4px; + margin: 3px; + border: 1px solid rgba(50, 63, 78, 0.3); + border-radius: 9999px; + background-color: rgba(248, 248, 242, 0.5); + background-clip: padding-box; + -gtk-icon-source: none; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering) button:disabled { + background-color: rgba(248, 248, 242, 0.3); +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering).horizontal slider { + min-width: 24px; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering).horizontal button { + min-width: 8px; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering).vertical slider { + min-height: 24px; +} + +scrollbar.overlay-indicator:not(.dragging):not(.hovering).vertical button { + min-height: 8px; +} + +scrollbar.overlay-indicator.dragging, scrollbar.overlay-indicator.hovering { + background-color: rgba(50, 63, 78, 0.9); +} + +scrollbar.horizontal slider { + min-width: 24px; +} + +scrollbar.vertical slider { + min-height: 24px; +} + +scrollbar button { + min-width: 16px; + min-height: 16px; + padding: 0; + border-radius: 0; +} + +scrollbar.vertical button.down { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); +} + +scrollbar.vertical button.up { + -gtk-icon-source: -gtk-icontheme("pan-up-symbolic"); +} + +scrollbar.horizontal button.down { + -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); +} + +scrollbar.horizontal button.up { + -gtk-icon-source: -gtk-icontheme("pan-start-symbolic"); +} + +/********** + * Switch * + **********/ +switch { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + margin: 4px 0; + padding: 0 2px; + border: 5px solid transparent; + border-radius: 9999px; + background-color: rgba(248, 248, 242, 0.3); + background-clip: padding-box; + font-size: 0; +} + +switch:checked { + background-color: rgba(189, 153, 255, 0.5); +} + +switch:disabled { + opacity: 0.5; +} + +switch slider { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + min-width: 20px; + min-height: 20px; + margin: -3px -2px; + border-radius: 9999px; + box-shadow: 0 0 0 10px transparent, 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + background-color: #3D4C5F; +} + +switch:hover slider { + box-shadow: 0 0 0 10px alpha(currentColor, 0.08), 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +switch:focus slider { + box-shadow: 0 0 0 10px alpha(currentColor, 0.12), 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +switch:focus:hover slider { + box-shadow: 0 0 0 10px alpha(currentColor, 0.16), 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +switch:checked slider { + background-color: #BD99FF; + color: #BD99FF; +} + +/************************* + * Check and Radio items * + *************************/ +.view.content-view.check:not(list), +.content-view .tile check:not(list) { + min-height: 40px; + min-width: 40px; + margin: 0; + padding: 0; + box-shadow: none; + background-color: transparent; + background-image: none; + -gtk-icon-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.view.content-view.check:not(list):hover, .view.content-view.check:not(list):active, +.content-view .tile check:not(list):hover, +.content-view .tile check:not(list):active { + -gtk-icon-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); +} + +.view.content-view.check:not(list), +.content-view .tile check:not(list) { + -gtk-icon-source: -gtk-scaled(url("assets/selectionmode-checkbox-unchecked-dark.png"), url("assets/selectionmode-checkbox-unchecked-dark@2.png")); +} + +.view.content-view.check:not(list):checked, +.content-view .tile check:not(list):checked { + -gtk-icon-source: -gtk-scaled(url("assets/selectionmode-checkbox-checked-dark.png"), url("assets/selectionmode-checkbox-checked-dark@2.png")); +} + +checkbutton, +radiobutton { + outline: none; +} + +checkbutton.text-button, +radiobutton.text-button { + padding: 2px; +} + +checkbutton.text-button label:not(:only-child), +radiobutton.text-button label:not(:only-child) { + margin: 0 4px; +} + +check, +radio { + min-height: 24px; + min-width: 24px; + margin: -8px; + padding: 8px; +} + +check:hover, +radio:hover { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +check:focus, +radio:focus { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.12); +} + +check:focus:hover, +radio:focus:hover { + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.16); +} + +check:checked, check:indeterminate, +radio:checked, +radio:indeterminate { + color: #BD99FF; +} + +check:checked:disabled, check:indeterminate:disabled, +radio:checked:disabled, +radio:indeterminate:disabled { + color: rgba(248, 248, 242, 0.3); +} + +popover check, popover check:hover, popover check:focus, popover check:focus:hover, popover check:active, popover check:disabled, popover +radio, popover +radio:hover, popover +radio:focus, popover +radio:focus:hover, popover +radio:active, popover +radio:disabled { + transition: none; + box-shadow: none; + background-image: none; +} + +popover check:not(:checked):not(:indeterminate):not(:disabled), popover +radio:not(:checked):not(:indeterminate):not(:disabled) { + color: rgba(248, 248, 242, 0.7); +} + +popover check.left:dir(rtl), popover +radio.left:dir(rtl) { + margin-left: -12px; + margin-right: -4px; +} + +popover check.right:dir(ltr), popover +radio.right:dir(ltr) { + margin-left: -4px; + margin-right: -12px; +} + +menu menuitem check, menu menuitem +radio { + transition: none; + margin: 0; + padding: 0; +} + +menu menuitem check:dir(ltr), menu menuitem +radio:dir(ltr) { + margin-right: 8px; +} + +menu menuitem check:dir(rtl), menu menuitem +radio:dir(rtl) { + margin-left: 8px; +} + +menu menuitem check:not(:checked):not(:indeterminate):not(:disabled), menu menuitem +radio:not(:checked):not(:indeterminate):not(:disabled) { + color: rgba(248, 248, 242, 0.7); +} + +menu menuitem check, menu menuitem check:hover, menu menuitem check:disabled, menu menuitem +radio, menu menuitem +radio:hover, menu menuitem +radio:disabled { + box-shadow: none; +} + + +check { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-unchecked-symbolic.svg")); +} + + +check:checked { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-checked-symbolic.svg")); +} + + +check:indeterminate { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/checkbox-mixed-symbolic.svg")); +} + + +radio { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-unchecked-symbolic.svg")); + border-image-slice: 20; + border-image-width: 20px; +} + + +radio:indeterminate { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-mixed-symbolic.svg")); +} + + +radio { + border-image-source: -gtk-gradient(radial, center center, 0, center center, 0.001, to(#BD99FF), to(transparent)); +} + + +radio:checked:not(:indeterminate) { + border-image-source: -gtk-gradient(radial, center center, 0, center center, 0.125, to(#BD99FF), to(transparent)); +} + + +radio:checked:not(:indeterminate):disabled { + border-image-source: -gtk-gradient(radial, center center, 0, center center, 0.125, to(rgba(248, 248, 242, 0.3)), to(transparent)); +} + +window.background:not(.csd) > widget > checkbutton > check, +menu menuitem check { + min-height: 16px; + min-width: 16px; + border-radius: 6px; + -gtk-outline-radius: 6px; + -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-unchecked-symbolic.svg")); +} + +window.background:not(.csd) > widget > checkbutton > check:checked, +menu menuitem check:checked { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-checked-symbolic.svg")); +} + +window.background:not(.csd) > widget > checkbutton > check:indeterminate, +menu menuitem check:indeterminate { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-checkbox-mixed-symbolic.svg")); +} + +window.background:not(.csd) > widget > radiobutton > radio, +menu menuitem radio { + min-height: 16px; + min-width: 16px; + border-image: none; + -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-unchecked-symbolic.svg")); +} + +window.background:not(.csd) > widget > radiobutton > radio:checked, +menu menuitem radio:checked { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-checked-symbolic.svg")); +} + +window.background:not(.csd) > widget > radiobutton > radio:indeterminate, +menu menuitem radio:indeterminate { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/small-radio-mixed-symbolic.svg")); +} + +treeview.view check, +treeview.view radio { + padding: 0; +} + +treeview.view check:hover, treeview.view check:selected, +treeview.view radio:hover, +treeview.view radio:selected { + box-shadow: none; + background-color: transparent; +} + +treeview.view check, +treeview.view radio { + color: rgba(248, 248, 242, 0.7); +} + +treeview.view check:hover, treeview.view check:active, +treeview.view radio:hover, +treeview.view radio:active { + color: #F8F8F2; +} + +treeview.view check:disabled, +treeview.view radio:disabled { + color: rgba(248, 248, 242, 0.3); +} + +treeview.view check:checked, treeview.view check:indeterminate, +treeview.view radio:checked, +treeview.view radio:indeterminate { + color: #BD99FF; +} + +treeview.view check:checked:disabled, treeview.view check:indeterminate:disabled, +treeview.view radio:checked:disabled, +treeview.view radio:indeterminate:disabled { + color: rgba(248, 248, 242, 0.3); +} + +treeview.view radio:checked { + -gtk-icon-source: -gtk-recolor(url("assets/scalable/radio-checked-symbolic.svg")); + border-image: none; +} + +/************ + * GtkScale * + ************/ +scale { + min-height: 2px; + min-width: 2px; +} + +scale.horizontal { + padding: 15px 12px; +} + +scale.vertical { + padding: 12px 15px; +} + +scale slider { + min-height: 32px; + min-width: 32px; + margin: -15px; +} + +scale.fine-tune.horizontal { + min-height: 4px; + padding-top: 14px; + padding-bottom: 14px; +} + +scale.fine-tune.vertical { + min-width: 4px; + padding-left: 14px; + padding-right: 14px; +} + +scale.fine-tune slider { + margin: -14px; +} + +scale trough { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1); + outline: none; + background-color: rgba(248, 248, 242, 0.3); +} + +scale trough:disabled { + background-color: rgba(248, 248, 242, 0.12); +} + +scale highlight { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1); + background-color: #BD99FF; +} + +scale highlight:disabled { + background-color: transparent; +} + +scale fill { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1); + background-color: rgba(248, 248, 242, 0.3); +} + +scale fill:disabled { + background-color: transparent; +} + +scale slider { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1), background-size 300ms cubic-bezier(0, 0, 0.2, 1), background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + background-repeat: no-repeat; + background-position: center; + background-size: auto, 1000% 1000%; + border-radius: 50%; + color: transparent; +} + +scale slider { + background-image: -gtk-scaled(url("assets/scale-slider-dark.png"), url("assets/scale-slider-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale slider:disabled { + background-image: -gtk-scaled(url("assets/scale-slider-disabled-dark.png"), url("assets/scale-slider-disabled-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale slider:hover { + background-color: rgba(189, 153, 255, 0.08); +} + +scale slider:focus { + background-color: rgba(189, 153, 255, 0.12); +} + +scale slider:focus:hover { + background-color: rgba(189, 153, 255, 0.16); +} + +scale slider:active { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1), background-size 0, background-image 0; + animation: scale_ripple_effect 225ms cubic-bezier(0, 0, 0.2, 1) forwards; + background-size: auto, 0% 0%; + background-color: rgba(189, 153, 255, 0.08); + color: rgba(189, 153, 255, 0.12); +} + +scale marks label, +scale value { + color: rgba(248, 248, 242, 0.7); +} + +scale marks { + color: rgba(248, 248, 242, 0.3); +} + +scale marks.top { + margin-bottom: 7px; + margin-top: -15px; +} + +scale marks.bottom { + margin-top: 7px; + margin-bottom: -15px; +} + +scale marks.left { + margin-right: 7px; + margin-left: -15px; +} + +scale marks.right { + margin-left: 7px; + margin-right: -15px; +} + +scale.fine-tune marks.top { + margin-bottom: 6px; + margin-top: -14px; +} + +scale.fine-tune marks.bottom { + margin-top: 6px; + margin-bottom: -14px; +} + +scale.fine-tune marks.left { + margin-right: 6px; + margin-left: -14px; +} + +scale.fine-tune marks.right { + margin-left: 6px; + margin-right: -14px; +} + +scale.horizontal indicator { + min-height: 8px; + min-width: 1px; +} + +scale.vertical indicator { + min-height: 1px; + min-width: 8px; +} + +scale.horizontal.marks-before:not(.marks-after) slider { + background-image: -gtk-scaled(url("assets/scale-horz-marks-before-slider-dark.png"), url("assets/scale-horz-marks-before-slider-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.horizontal.marks-before:not(.marks-after) slider:disabled { + background-image: -gtk-scaled(url("assets/scale-horz-marks-before-slider-disabled-dark.png"), url("assets/scale-horz-marks-before-slider-disabled-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.horizontal.marks-after:not(.marks-before) slider { + background-image: -gtk-scaled(url("assets/scale-horz-marks-after-slider-dark.png"), url("assets/scale-horz-marks-after-slider-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.horizontal.marks-after:not(.marks-before) slider:disabled { + background-image: -gtk-scaled(url("assets/scale-horz-marks-after-slider-disabled-dark.png"), url("assets/scale-horz-marks-after-slider-disabled-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.vertical.marks-before:not(.marks-after) slider { + background-image: -gtk-scaled(url("assets/scale-vert-marks-before-slider-dark.png"), url("assets/scale-vert-marks-before-slider-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.vertical.marks-before:not(.marks-after) slider:disabled { + background-image: -gtk-scaled(url("assets/scale-vert-marks-before-slider-disabled-dark.png"), url("assets/scale-vert-marks-before-slider-disabled-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.vertical.marks-after:not(.marks-before) slider { + background-image: -gtk-scaled(url("assets/scale-vert-marks-after-slider-dark.png"), url("assets/scale-vert-marks-after-slider-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.vertical.marks-after:not(.marks-before) slider:disabled { + background-image: -gtk-scaled(url("assets/scale-vert-marks-after-slider-disabled-dark.png"), url("assets/scale-vert-marks-after-slider-disabled-dark@2.png")), radial-gradient(circle farthest-corner at center, currentColor 10%, transparent 0%); +} + +scale.color { + min-height: 0; + min-width: 0; +} + +scale.color.horizontal { + padding: 0 0 12px 0; +} + +scale.color.horizontal slider:dir(ltr), scale.color.horizontal slider:dir(rtl) { + margin-bottom: -24px; + margin-top: 8px; +} + +scale.color.vertical:dir(ltr) { + padding: 0 0 0 12px; +} + +scale.color.vertical:dir(ltr) slider { + margin-left: -24px; + margin-right: 8px; +} + +scale.color.vertical:dir(rtl) { + padding: 0 12px 0 0; +} + +scale.color.vertical:dir(rtl) slider { + margin-right: -24px; + margin-left: 8px; +} + +/***************** + * Progress bars * + *****************/ +progressbar { + color: rgba(248, 248, 242, 0.7); + font-size: smaller; +} + +progressbar.horizontal trough, +progressbar.horizontal progress { + min-height: 4px; +} + +progressbar.vertical trough, +progressbar.vertical progress { + min-width: 4px; +} + +progressbar trough { + background-color: rgba(248, 248, 242, 0.12); +} + +progressbar progress { + background-color: #BD99FF; +} + +progressbar trough.empty progress { + all: unset; +} + +/************* + * Level Bar * + *************/ +levelbar.horizontal block { + min-height: 4px; +} + +levelbar.horizontal.discrete block { + min-width: 32px; +} + +levelbar.horizontal.discrete block:not(:last-child) { + margin-right: 2px; +} + +levelbar.vertical block { + min-width: 4px; +} + +levelbar.vertical.discrete block { + min-height: 32px; +} + +levelbar.vertical.discrete block:not(:last-child) { + margin-bottom: 2px; +} + +levelbar block.low { + background-color: #ee9c11; +} + +levelbar block.high, levelbar block:not(.empty) { + background-color: #BD99FF; +} + +levelbar block.full { + background-color: #23bd86; +} + +levelbar block.empty { + background-color: rgba(248, 248, 242, 0.12); +} + +/**************** + * Print dialog * +*****************/ +printdialog paper { + padding: 0; + border: 1px solid rgba(0,0,0,0); + background-color: #323F4E; + color: #F8F8F2; +} + +printdialog .dialog-action-box { + margin: 12px; +} + +/********** + * Frames * + **********/ +frame > border, +.frame { + margin: 0; + padding: 0; + border: 1px solid rgba(0,0,0,0); + border-radius: 0; + box-shadow: none; +} + +frame > border.flat, +.frame.flat, +frame.flat > border { + border-style: none; +} + +actionbar > revealer > box { + padding: 4px; + border-top: 1px solid rgba(0,0,0,0); +} + +scrolledwindow viewport.frame { + border-style: none; +} + +overshoot.top { + background-image: -gtk-gradient(radial, center top, 0, center top, 0.75, to(rgba(189, 153, 255, 0.24)), to(transparent)); + background-repeat: no-repeat; + background-position: center top; + background-color: transparent; + border: none; + box-shadow: none; +} + +overshoot.bottom { + background-image: -gtk-gradient(radial, center bottom, 0, center bottom, 0.75, to(rgba(189, 153, 255, 0.24)), to(transparent)); + background-repeat: no-repeat; + background-position: center bottom; + background-color: transparent; + border: none; + box-shadow: none; +} + +overshoot.left { + background-image: -gtk-gradient(radial, left center, 0, left center, 0.75, to(rgba(189, 153, 255, 0.24)), to(transparent)); + background-repeat: no-repeat; + background-position: left center; + background-color: transparent; + border: none; + box-shadow: none; +} + +overshoot.right { + background-image: -gtk-gradient(radial, right center, 0, right center, 0.75, to(rgba(189, 153, 255, 0.24)), to(transparent)); + background-repeat: no-repeat; + background-position: right center; + background-color: transparent; + border: none; + box-shadow: none; +} + +undershoot.top { + background-color: transparent; + background-image: linear-gradient(to left, rgba(50, 63, 78, 0.3) 50%, rgba(248, 248, 242, 0.3) 50%); + padding-top: 1px; + background-size: 12px 1px; + background-repeat: repeat-x; + background-origin: content-box; + background-position: left top; +} + +undershoot.bottom { + background-color: transparent; + background-image: linear-gradient(to left, rgba(50, 63, 78, 0.3) 50%, rgba(248, 248, 242, 0.3) 50%); + padding-bottom: 1px; + background-size: 12px 1px; + background-repeat: repeat-x; + background-origin: content-box; + background-position: left bottom; +} + +undershoot.left { + background-color: transparent; + background-image: linear-gradient(to top, rgba(50, 63, 78, 0.3) 50%, rgba(248, 248, 242, 0.3) 50%); + padding-left: 1px; + background-size: 1px 12px; + background-repeat: repeat-y; + background-origin: content-box; + background-position: left top; +} + +undershoot.right { + background-color: transparent; + background-image: linear-gradient(to top, rgba(50, 63, 78, 0.3) 50%, rgba(248, 248, 242, 0.3) 50%); + padding-right: 1px; + background-size: 1px 12px; + background-repeat: repeat-y; + background-origin: content-box; + background-position: right top; +} + +junction { + border-style: solid none none solid; + border-width: 1px; + border-color: rgba(0,0,0,0); + background-color: #323F4E; +} + +junction:dir(rtl) { + border-style: solid solid none none; +} + +separator { + min-width: 1px; + min-height: 1px; + background-color: rgba(0,0,0,0); +} + + +button.font separator, +button.file separator, .tweak-categories separator, preferences stacksidebar.sidebar list separator { + min-width: 0; + min-height: 0; + background-color: transparent; +} + +/********* + * Lists * + *********/ +list { + border-color: rgba(0,0,0,0); + background-color: #323F4E; +} + +list row { + padding: 2px; +} + +row.activatable, treeview.view header button, .budgie-menu button { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 300ms cubic-bezier(0, 0, 0.2, 1), background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 9999px transparent; + background-image: radial-gradient(circle farthest-corner at center, transparent 10%, transparent 0%); + background-repeat: no-repeat; + background-position: center; + background-size: 1000% 1000%; +} + +row.activatable:hover, treeview.view header button:hover, .budgie-menu button:hover { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), box-shadow 0, background-size 300ms cubic-bezier(0, 0, 0.2, 1), background-image 1200ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); +} + +row.activatable.has-open-popup, treeview.view header button.has-open-popup, .budgie-menu button.has-open-popup, row.activatable:active, treeview.view header button:active, .budgie-menu button:active { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 0, background-image 0; + animation: ripple_effect 225ms cubic-bezier(0, 0, 0.2, 1) forwards; + box-shadow: inset 0 0 0 9999px alpha(currentColor, 0.08); + background-image: radial-gradient(circle farthest-corner at center, alpha(currentColor, 0.12) 10%, transparent 0%); + background-size: 0% 0%; +} + +row:selected { + color: #BD99FF; +} + +row:selected image, +row:selected label { + color: #F8F8F2; +} + +row:selected button image, +row:selected button label { + color: inherit; +} + +/********************* + * App Notifications * + *********************/ +.app-notification { + margin: 8px; +} + +.app-notification.frame, +.app-notification border { + border-style: none; +} + +/************* + * Expanders * + *************/ +expander title > arrow { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + min-width: 16px; + min-height: 16px; + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); + -gtk-icon-transform: rotate(-90deg); + color: rgba(248, 248, 242, 0.7); +} + +expander title > arrow:dir(rtl) { + -gtk-icon-transform: rotate(90deg); +} + +expander title > arrow:checked { + -gtk-icon-transform: unset; +} + +expander title > arrow:hover, expander title > arrow:active { + color: #F8F8F2; +} + +expander title > arrow:disabled { + color: rgba(248, 248, 242, 0.3); +} + +/************ + * Calendar * + ************/ +calendar { + padding: 1px; + border: 1px solid rgba(0,0,0,0); + color: #F8F8F2; +} + +calendar:disabled { + color: rgba(248, 248, 242, 0.5); +} + +calendar:selected { + border-radius: 7px; +} + +calendar.header { + border-style: none none solid; + border-radius: 0; +} + +calendar.highlight { + color: rgba(248, 248, 242, 0.7); + font-weight: 500; +} + +calendar:indeterminate { + color: rgba(248, 248, 242, 0.3); +} + +/*********** + * Dialogs * + ***********/ +messagedialog.background { + background-color: #3D4C5F; +} + +messagedialog .titlebar { + min-height: 24px; + border-style: none; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #3D4C5F; + color: #F8F8F2; +} + +messagedialog .titlebar:backdrop { + color: rgba(248, 248, 242, 0.7); +} + +messagedialog.csd.background { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; +} + +messagedialog.csd .dialog-action-area { + margin-top: -4px; + padding: 4px; +} + +messagedialog.csd .dialog-action-area button { + border-radius: 6px; +} + +messagedialog.csd .dialog-action-area button:not(:last-child) { + margin-right: 4px; +} + +messagedialog.csd .dialog-action-area button.suggested-action:not(:disabled) { + color: #BD99FF; +} + +messagedialog.csd .dialog-action-area button.destructive-action:not(:disabled) { + color: #ff8c3e; +} + +filechooser .dialog-action-box { + border-top: 1px solid rgba(0,0,0,0); +} + +filechooser #pathbarbox { + border-bottom: 1px solid rgba(0,0,0,0); + background-color: #323F4E; +} + +filechooserbutton:drop(active) { + box-shadow: none; +} + +/*********** + * Sidebar * + ***********/ +.sidebar { + border-style: none; + background-color: #323f4e; +} + +stacksidebar.sidebar:dir(ltr) list, stacksidebar.sidebar.left list, stacksidebar.sidebar.left:dir(rtl) list, .sidebar:dir(ltr), .sidebar.left, .sidebar.left:dir(rtl) { + border-right: 1px solid rgba(0,0,0,0); + border-left-style: none; +} + +stacksidebar.sidebar:dir(rtl) list, stacksidebar.sidebar.right list, .sidebar:dir(rtl), .sidebar.right { + border-left: 1px solid rgba(0,0,0,0); + border-right-style: none; +} + +.sidebar list { + background-color: transparent; +} + +paned .sidebar.left, paned .sidebar.right, paned .sidebar.left:dir(rtl), paned .sidebar:dir(rtl), paned .sidebar:dir(ltr), paned .sidebar { + border-style: none; +} + +stacksidebar row { + padding: 10px 4px; +} + +stacksidebar row > label { + padding-left: 6px; + padding-right: 6px; +} + +/**************** + * File chooser * + ****************/ +row image.sidebar-icon { + color: rgba(248, 248, 242, 0.7); +} + +placessidebar > viewport.frame { + border-style: none; +} + +placessidebar list { + padding: 1px 0 4px; +} + +placessidebar row { + min-height: 32px; + margin: -1px 4px; + padding: 0; + border-radius: 6px; +} + +placessidebar row > revealer { + padding: 0 8px; +} + +placessidebar row:selected { + font-weight: 500; +} + +placessidebar row:disabled { + color: rgba(248, 248, 242, 0.5); +} + +placessidebar row image.sidebar-icon:dir(ltr) { + padding-right: 8px; +} + +placessidebar row image.sidebar-icon:dir(rtl) { + padding-left: 8px; +} + +placessidebar row label.sidebar-label:dir(ltr) { + padding-right: 2px; +} + +placessidebar row label.sidebar-label:dir(rtl) { + padding-left: 2px; +} + +placessidebar row:selected image.sidebar-icon, +placessidebar row:selected label.sidebar-label { + color: inherit; +} + +placessidebar row.sidebar-placeholder-row { + min-height: 2px; + padding: 0 8px; + background-image: image(#BD99FF); + background-clip: content-box; +} + +placessidebar row.sidebar-new-bookmark-row { + color: #BD99FF; +} + +placessidebar row:drop(active):not(:disabled) { + box-shadow: inset 0 0 0 2px #BD99FF; +} + +placesview .server-list-button > image { + -gtk-icon-transform: rotate(0turn); +} + +placesview .server-list-button:checked > image { + -gtk-icon-transform: rotate(-0.5turn); +} + +placesview > actionbar > revealer > box > label { + padding-left: 8px; + padding-right: 8px; +} + +/********* + * Paned * + *********/ +paned > separator { + min-width: 1px; + min-height: 1px; + -gtk-icon-source: none; + border-style: none; + background-color: transparent; + background-image: image(rgba(0,0,0,0)); + background-size: 1px 1px; + background-clip: content-box; +} + +paned > separator.wide { + min-width: 6px; + min-height: 6px; + background-color: #323F4E; + background-image: image(rgba(0,0,0,0)), image(rgba(0,0,0,0)); + background-size: 1px 1px, 1px 1px; +} + +paned.horizontal > separator { + background-repeat: repeat-y; +} + +paned.horizontal > separator:dir(ltr) { + margin: 0 -8px 0 0; + padding: 0 8px 0 0; + background-position: left; +} + +paned.horizontal > separator:dir(rtl) { + margin: 0 0 0 -8px; + padding: 0 0 0 8px; + background-position: right; +} + +paned.horizontal > separator.wide { + margin: 0; + padding: 0; + background-repeat: repeat-y, repeat-y; + background-position: left, right; +} + +paned.vertical > separator { + margin: 0 0 -8px 0; + padding: 0 0 8px 0; + background-repeat: repeat-x; + background-position: top; +} + +paned.vertical > separator.wide { + margin: 0; + padding: 0; + background-repeat: repeat-x, repeat-x; + background-position: bottom, top; +} + +/************** + * GtkInfoBar * + **************/ +infobar { + border-style: none; +} + +infobar.info { + background-color: #bd99ff; +} + +infobar.question { + background-color: #bd99ff; +} + +infobar.warning { + background-color: #ee9c11; +} + +infobar.error { + background-color: #ff8c3e; +} + +infobar.info > label, infobar.info, infobar.question > label, infobar.question, infobar.warning > label, infobar.warning, infobar.error > label, infobar.error { + color: white; +} + +/************ + * Tooltips * + ************/ +tooltip { + border-radius: 6px; + box-shadow: none; +} + +tooltip.background { + background-color: rgba(50, 63, 78, 0.9); + color: #F8F8F2; +} + +tooltip decoration { + background-color: transparent; +} + +tooltip label { + min-height: 20px; + padding: 0 2px; +} + +/***************** + * Color Chooser * + *****************/ +colorswatch.top { + border-top-left-radius: 6.5px; + border-top-right-radius: 6.5px; +} + +colorswatch.top overlay { + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +colorswatch.bottom { + border-bottom-left-radius: 6.5px; + border-bottom-right-radius: 6.5px; +} + +colorswatch.bottom overlay { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; +} + +colorswatch.left, colorswatch:first-child:not(.top) { + border-top-left-radius: 6.5px; + border-bottom-left-radius: 6.5px; +} + +colorswatch.left overlay, colorswatch:first-child:not(.top) overlay { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} + +colorswatch.right, colorswatch:last-child:not(.bottom) { + border-top-right-radius: 6.5px; + border-bottom-right-radius: 6.5px; +} + +colorswatch.right overlay, colorswatch:last-child:not(.bottom) overlay { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +colorswatch.dark { + color: #323F4E; +} + +colorswatch.light { + color: #F8F8F2; +} + +colorswatch:drop(active) { + box-shadow: none; +} + +colorswatch:drop(active).light overlay { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), 0 0 0 2px #BD99FF; +} + +colorswatch:drop(active).dark overlay { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), 0 0 0 2px #BD99FF; +} + +colorswatch overlay { + transition: box-shadow 100ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +colorswatch overlay:hover { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); +} + +colorswatch#add-color-button { + border-radius: 6px 6px 0 0; + color: #323F4E; +} + +colorswatch#add-color-button:only-child { + border-radius: 6px; +} + +colorswatch#add-color-button overlay { + background-image: linear-gradient(to right, #ff8c3e 25%, #ee9c11 25%, #ee9c11 50%, #bd99ff 50%, #bd99ff 75%, #bd99ff 75%); +} + +colorswatch:disabled { + opacity: 0.5; +} + +colorswatch:disabled overlay { + box-shadow: none; +} + +colorswatch#editor-color-sample { + border-radius: 6.5px; +} + +colorswatch#editor-color-sample overlay { + border-radius: 6px; +} + +colorchooser .popover.osd { + transition: box-shadow 100ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #3D4C5F; +} + +colorchooser .popover.osd:backdrop { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), inset 0 1px rgba(255, 255, 255, 0.1); +} + +/******** + * Misc * + ********/ +.content-view { + background-color: #323F4E; +} + +/********************** + * Window Decorations * + **********************/ +decoration { + transition: box-shadow 100ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 6px 6px 0 0; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.25), 0 10px 5px rgba(0, 0, 0, 0.22), 0 16px 16px transparent; + margin: 8px; +} + +decoration:backdrop { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), 0 16px 16px transparent; +} + +.maximized decoration, +.fullscreen decoration, +.tiled decoration, +.tiled-top decoration, +.tiled-right decoration, +.tiled-bottom decoration, +.tiled-left decoration { + border-radius: 0; +} + +.popup decoration { + box-shadow: none; +} + +.ssd decoration { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16); +} + +.csd.popup decoration { + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); +} + +tooltip.csd decoration { + border-radius: 6px; + box-shadow: none; +} + +messagedialog.csd decoration { + border-radius: 6px; +} + +.solid-csd decoration { + margin: 0; + border-radius: 0; + box-shadow: none; + background-color: #323F4E; +} + +.view selection, .view:selected, flowbox flowboxchild:selected, label selection, spinbutton:not(.vertical) selection, +entry selection, modelbutton.flat:selected, +.menuitem.button.flat:selected, popover.background.menu button:checked, +popover.background button.model:checked, row:selected, calendar:selected, .nautilus-window flowboxchild:selected .icon-item-background, text:selected, box.vertical > widget > widget:selected, .budgie-menu button:checked, XfdesktopIconView.view:active { + background-color: #bd99ff; +} + +.monospace { + font-family: monospace; +} + +/********************** + * Touch Copy & Paste * + **********************/ +cursor-handle { + border-radius: 9999px; + background-color: #BD99FF; + background-image: none; +} + +cursor-handle.top:dir(ltr), cursor-handle.bottom:dir(rtl) { + padding-left: 6px; + border-top-right-radius: 0; +} + +cursor-handle.bottom:dir(ltr), cursor-handle.top:dir(rtl) { + padding-right: 6px; + border-top-left-radius: 0; +} + +cursor-handle.insertion-cursor:dir(ltr), cursor-handle.insertion-cursor:dir(rtl) { + -GtkWidget-text-handle-width: 24; + -GtkWidget-text-handle-height: 30; + -gtk-icon-source: -gtk-scaled(url("assets/scale-horz-marks-before-slider-dark.png"), url("assets/scale-horz-marks-before-slider-dark@2.png")); +} + +.context-menu { + font: initial; +} + +.keycap { + min-width: 12px; + min-height: 26px; + margin-top: 2px; + padding-bottom: 2px; + padding-left: 8px; + padding-right: 8px; + border: solid 1px rgba(0,0,0,0); + border-radius: 7px; + box-shadow: inset 0 -2px rgba(0,0,0,0); + background-color: #3D4C5F; + color: #F8F8F2; + font-size: smaller; +} + +:not(decoration):not(window):drop(active) { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24), inset 0 0 0 2px #BD99FF; + caret-color: #BD99FF; +} + +stackswitcher button.text-button { + min-width: 100px; +} + +stackswitcher button.circular, +stackswitcher button.text-button.circular { + min-width: 32px; + min-height: 32px; + padding: 0; +} + +/********* + * Emoji * + *********/ +popover.emoji-picker { + padding: 0; +} + +popover.emoji-picker entry { + border-bottom: 1px solid rgba(0,0,0,0); + border-radius: 0; + box-shadow: none; + background-color: transparent; +} + +popover.emoji-picker scrolledwindow { + border-bottom: 1px solid rgba(0,0,0,0); +} + +button.emoji-section { + margin-top: -1px; + padding: 0 8px; + min-width: 24px; + min-height: 32px; + border-radius: 0; + outline-offset: -6px; +} + +button.emoji-section, button.emoji-section:hover, button.emoji-section:active { + box-shadow: inset 0 2px transparent; +} + +button.emoji-section:checked { + box-shadow: inset 0 2px #BD99FF; + background-color: transparent; +} + +button.emoji-section:hover, button.emoji-section:active { + background-color: alpha(currentColor, 0.08); +} + +button.emoji-section:first-child { + margin-left: 4px; +} + +button.emoji-section:last-child { + margin-right: 4px; +} + +.emoji { + min-width: 3em; + min-height: 3em; + padding: 0 8px; +} + +.emoji widget { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + border-radius: 6px; +} + +.emoji widget:hover { + background-color: alpha(currentColor, 0.08); +} + +/************ + * Nautilus * + ************/ +.nautilus-window, +.nautilus-window notebook, +.nautilus-window notebook > stack { + background-color: #323F4E; +} + +.nautilus-canvas-item.dim-label, label.nautilus-canvas-item.separator, .titlebar:not(headerbar) .nautilus-canvas-item.subtitle, +headerbar .nautilus-canvas-item.subtitle, .budgie-notification .nautilus-canvas-item.notification-body, .budgie-switcher .nautilus-canvas-item.notification-body, +.nautilus-list-dim-label { + color: rgba(248, 248, 242, 0.7); +} + +.nautilus-desktop.nautilus-canvas-item, .caja-desktop.caja-canvas-item, .nemo-desktop.nemo-canvas-item { + color: white; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +@keyframes needs_attention_keyframes { + to { + background-color: alpha(currentColor, 0.12); + } +} + +.nautilus-operations-button-needs-attention { + animation: needs_attention_keyframes 225ms cubic-bezier(0.4, 0, 0.2, 1) 2 alternate; +} + +.nautilus-operations-button-needs-attention-multiple { + animation: needs_attention_keyframes 225ms cubic-bezier(0.4, 0, 0.2, 1) 4 alternate; +} + +.path-bar-box.background.frame { + border-style: none; + background-color: transparent; +} + +.nautilus-window .floating-bar { + min-height: 32px; + padding: 0; + border-style: solid solid none; + border-width: 1px; + border-color: rgba(0,0,0,0); + border-radius: 7px 7px 0 0; + background-color: rgba(50, 63, 78, 0.9); + background-clip: border-box; + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), border-width 0; +} + +.nautilus-window .floating-bar.bottom.left { + margin-right: 7px; + border-left-style: none; + border-top-left-radius: 0; +} + +.nautilus-window .floating-bar.bottom.right { + margin-left: 7px; + border-right-style: none; + border-top-right-radius: 0; +} + +.nautilus-window .floating-bar button { + margin: 4px; +} + +.disk-space-display.unknown { + background-color: rgba(248, 248, 242, 0.3); + color: rgba(248, 248, 242, 0.3); +} + +.disk-space-display.used { + background-color: #BD99FF; + color: #BD99FF; +} + +.disk-space-display.free { + background-color: rgba(248, 248, 242, 0.12); + color: rgba(248, 248, 242, 0.12); +} + +.search-information { + padding: 2px; + background-color: #BD99FF; + color: white; +} + +.conflict-row:not(:selected) { + background-color: #6a5b3c; +} + +.nautilus-window flowboxchild .icon-item-background { + padding: 4px; + border-radius: 6px; +} + +.nautilus-window flowboxchild:selected { + background-color: transparent; +} + +dialog.background > box.dialog-vbox.vertical > grid.horizontal > scrolledwindow.frame { + border-style: none; +} + +dialog.background > box.dialog-vbox.vertical > grid.horizontal > box.horizontal:last-child { + margin: -6px 0 0 -6px; + border-top: 1px solid rgba(0,0,0,0); +} + +dialog.background > box.dialog-vbox.vertical > grid.horizontal > box.horizontal:last-child > label { + margin: 0 8px; +} + +dialog.background > box.dialog-vbox.vertical > grid.horizontal > box.horizontal:last-child > box > button { + border-radius: 0; +} + +.nautilus-window > popover.menu:not(:last-child) { + padding: 3px; +} + +.nautilus-window > popover.menu:not(:last-child) > stack > box > box > box { + margin-top: -6px; +} + +.nautilus-window > popover.menu:not(:last-child) > stack > box > box > box > box { + margin-bottom: -6px; +} + +.nautilus-window > popover.menu:not(:last-child) > stack > box > box > box > box.linked { + margin-top: 1px; +} + +.nautilus-window > popover.menu:not(:last-child) separator { + margin-bottom: -2px; +} + +.nautilus-menu-sort-heading { + margin: 1px 3px; + font-weight: 500; +} + +.nautilus-menu-sort-heading:disabled { + color: rgba(248, 248, 242, 0.7); +} + +.nautilus-window paned > separator { + background-color: #323F4E; +} + +/********* + * gedit * + *********/ +.open-document-selector-path-label { + color: rgba(248, 248, 242, 0.7); + font-size: smaller; +} + +.gedit-document-panel { + background-color: #323f4e; +} + +.gedit-document-panel row button.flat { + margin-top: 8px; + margin-bottom: 8px; +} + +.gedit-document-panel-group-row:not(:first-child) { + border-top: 1px solid rgba(0,0,0,0); +} + +.gedit-side-panel-paned statusbar { + border-top: 1px solid rgba(0,0,0,0); +} + +.gedit-search-slider { + margin: 4px 4px 8px; +} + +.gedit-search-slider .linked:not(.vertical) > entry { + border-radius: 6px; +} + +.gedit-search-slider .linked:not(.vertical) > entry .gedit-search-entry-occurrences-tag { + all: unset; + color: rgba(248, 248, 242, 0.7); +} + +.gedit-search-slider .linked:not(.vertical) > entry:dir(ltr) { + margin-right: -60px; + padding-right: 60px; +} + +.gedit-search-slider .linked:not(.vertical) > entry:dir(ltr) .gedit-search-entry-occurrences-tag { + margin-left: 4px; +} + +.gedit-search-slider .linked:not(.vertical) > entry:dir(ltr) image.right { + margin-right: 0; +} + +.gedit-search-slider .linked:not(.vertical) > entry:dir(rtl) { + margin-left: -60px; + padding-left: 60px; +} + +.gedit-search-slider .linked:not(.vertical) > entry:dir(rtl) .gedit-search-entry-occurrences-tag { + margin-right: 4px; +} + +.gedit-search-slider .linked:not(.vertical) > entry:dir(rtl) image.left { + margin-left: 0; +} + +.gedit-search-slider .linked:not(.vertical) > entry:not(.error) { + background-color: #3D4C5F; +} + +.gedit-search-slider .linked:not(.vertical) > entry.error ~ button { + color: rgba(255, 255, 255, 0.7); +} + +.gedit-search-slider .linked:not(.vertical) > entry.error ~ button:hover, .gedit-search-slider .linked:not(.vertical) > entry.error ~ button:active { + color: white; +} + +.gedit-search-slider .linked:not(.vertical) > entry.error ~ button:disabled { + color: rgba(255, 255, 255, 0.3); +} + +.gedit-search-slider .linked > button { + border: solid 4px transparent; + border-radius: 9999px; +} + +.gedit-search-slider .linked > button:last-child:dir(ltr), .gedit-search-slider .linked > button:not(:first-child):dir(rtl) { + margin-left: -2px; +} + +.gedit-search-slider .linked > button:first-child:dir(rtl), .gedit-search-slider .linked > button:not(:last-child):dir(ltr) { + margin-right: -2px; +} + +frame.gedit-map-frame > border:dir(ltr) { + border-style: none none none solid; +} + +frame.gedit-map-frame > border:dir(rtl) { + border-style: none solid none none; +} + +/********** + * Tweaks * + **********/ +.tweak-categories { + background-image: image(#323f4e); +} + +.tweak { + padding: 3px; +} + +.tweak.title:hover { + box-shadow: none; +} + +.tweak-group-white, +.tweak-white, +.tweak-white:hover { + background-image: image(#323F4E); +} + +.tweak-startup, +.tweak-startup:hover { + background-image: image(#323F4E); +} + +.tweak-group-startup { + background-image: image(#323F4E); + border: 1px solid rgba(0,0,0,0); +} + +row#Focus, +row#ClickMethod, +row#StaticWorkspaceTweak, +row#dynamic-workspaces, +row#PrimaryWorkspaceTweak, +row#workspaces-only-on-primary { + padding: 0; + border: 1px solid rgba(0,0,0,0); +} + +row#Focus row:not(:last-child), +row#ClickMethod row:not(:last-child), +row#StaticWorkspaceTweak row:not(:last-child), +row#dynamic-workspaces row:not(:last-child), +row#PrimaryWorkspaceTweak row:not(:last-child), +row#workspaces-only-on-primary row:not(:last-child) { + border-bottom: 1px solid rgba(0,0,0,0); +} + +row#Focus.tweak > list, +row#ClickMethod.tweak > list, +row#StaticWorkspaceTweak.tweak > list, +row#dynamic-workspaces.tweak > list, +row#PrimaryWorkspaceTweak.tweak > list, +row#workspaces-only-on-primary.tweak > list { + margin-top: -3px; +} + +row#Focus, +row#ClickMethod, +row#PrimaryWorkspaceTweak, +row#workspaces-only-on-primary { + margin-top: 4px; +} + +/*********** + * Builder * + ***********/ +layouttabbar { + border-bottom: 1px solid rgba(0,0,0,0); + background-color: #323F4E; +} + +layouttabbar > box > button { + margin: 4px 0; +} + +layouttab { + margin: 0 8px; + border-style: none solid; + border-width: 1px; + border-color: rgba(0,0,0,0); + box-shadow: inset 0 -2px #BD99FF; + background-color: #323F4E; +} + +layouttab separator.vertical { + margin: 8px 4px; +} + +layouttab button.text-button, layouttab button.image-button, layouttab button { + margin-top: 8px; + margin-bottom: 8px; + padding: 0 4px; +} + +layout { + border: 1px solid rgba(0,0,0,0); + -PnlDockBin-handle-size: 1; +} + +entry.search-missing { + background-color: #ff8c3e; + color: white; +} + +window.workbench treeview.image { + color: rgba(248, 248, 242, 0.7); +} + +popover.popover-selector list { + padding: 6px; +} + +popover.popover-selector list row { + border-radius: 6px; +} + +popover.popover-selector list row image:dir(ltr) { + margin-right: 6px; +} + +popover.popover-selector list row image:dir(rtl) { + margin-left: 6px; +} + +popover.popover-selector list row .accel:dir(ltr) { + margin-left: 6px; +} + +popover.popover-selector list row .accel:dir(rtl) { + margin-right: 6px; +} + +omnibar.linked:not(.vertical) entry { + border-radius: 6px; +} + +omnibar:not(:hover):not(:active) entry { + color: rgba(248, 248, 242, 0.7); +} + +popover.omnibar list row:not(:last-child) { + border-bottom: 1px solid rgba(0,0,0,0); +} + +entry.preferences-search { + box-shadow: inset 0 -1px rgba(0,0,0,0); + background-color: #323F4E; +} + +preferences stacksidebar.sidebar list { + background-color: #323f4e; +} + +preferences stacksidebar.sidebar:dir(ltr) list, preferences stacksidebar.sidebar:dir(rtl) list { + border-style: none; +} + +preferences > box > box:dir(ltr) { + border-right: 1px solid rgba(0,0,0,0); +} + +preferences > box > box:dir(rtl) { + border-left: 1px solid rgba(0,0,0,0); +} + +popover.messagepopover.background { + padding: 0; +} + +popover.messagepopover .popover-action-area button { + padding: 8px 16px; + border-top: 1px solid rgba(0,0,0,0); + border-radius: 0; +} + +popover.messagepopover .popover-action-area button:first-child { + border-bottom-left-radius: 6px; +} + +popover.messagepopover .popover-action-area button:last-child { + border-bottom-right-radius: 6px; +} + +popover.messagepopover .popover-content-area { + margin: 16px; +} + +popover.transfers list { + background-color: transparent; +} + +popover.transfers list row:not(:first-child) { + border-top: 1px solid rgba(0,0,0,0); +} + +popover.transfers list row > box { + padding: 10px; +} + +dockbin { + border: 1px solid rgba(0,0,0,0); + -PnlDockBin-handle-size: 1; +} + +dockpaned { + border: 1px solid rgba(0,0,0,0); +} + +eggsearchbar box.search-bar { + padding: 0 8px; + border-bottom: 1px solid rgba(0,0,0,0); + background-color: #323F4E; +} + +docktabstrip { + padding: 0 8px; + border-bottom: 1px solid rgba(0,0,0,0); + background-color: #323F4E; +} + +docktab { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 0, background-image 0; + min-height: 24px; + min-width: 24px; + margin-bottom: -1px; + padding: 4px 6px; + outline-offset: -6px; + border-width: 1px; + border-color: transparent; + box-shadow: inset 0 -2px transparent; + background-image: radial-gradient(circle farthest-corner at center, #BD99FF 10%, transparent 0%); + background-repeat: no-repeat; + background-position: center; + background-size: 0% 0%; + color: rgba(248, 248, 242, 0.7); + font-weight: 500; +} + +docktab:hover { + background-color: alpha(currentColor, 0.08); + color: #F8F8F2; +} + +docktab:checked { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1), background-size 225ms cubic-bezier(0, 0, 0.2, 1), background-image 525ms cubic-bezier(0, 0, 0.2, 1); + box-shadow: inset 0 -2px #BD99FF; + background-color: transparent; + background-image: radial-gradient(circle farthest-corner at center, transparent 10%, transparent 0%); + background-size: 1000% 1000%; + color: #F8F8F2; +} + +dockoverlayedge { + background-color: #323F4E; +} + +dockoverlayedge docktabstrip { + padding: 0; + border: none; +} + +dockoverlayedge.left-edge docktab:hover { + box-shadow: inset -2px 0 rgba(248, 248, 242, 0.3); +} + +dockoverlayedge.left-edge docktab:checked { + box-shadow: inset -2px 0 #BD99FF; +} + +dockoverlayedge.right-edge docktab:hover { + box-shadow: inset 2px 0 rgba(248, 248, 242, 0.3); +} + +dockoverlayedge.right-edge docktab:checked { + box-shadow: inset 2px 0 #BD99FF; +} + +pillbox { + background-color: #323F4E; + border-radius: 6px; +} + +layoutpane entry.search { + box-shadow: inset 0 -1px rgba(0,0,0,0); + background-color: #323F4E; +} + +editortweak entry.search { + margin-bottom: -1px; + box-shadow: none; +} + +.gb-search-entry-occurrences-tag { + box-shadow: none; + background-color: transparent; +} + +docktabstrip { + min-height: 39px; +} + +window.workbench preferences preferencesgroup list entry { + padding-top: 8px; + padding-bottom: 8px; +} + +button.run-arrow-button { + padding-left: 8px; + padding-right: 8px; +} + +button.dzlmenubutton image { + min-width: 26px; +} + +button.dzlmenubutton image.arrow { + min-width: 23px; +} + +button.dzlmenubuttonitem { + color: #F8F8F2; + font-weight: normal; +} + +button.dzlmenubuttonitem:disabled { + color: rgba(248, 248, 242, 0.5); +} + +idelayoutstackheader { + border-bottom: 1px solid rgba(0,0,0,0); +} + +idelayoutstackheader button:checked { + color: #F8F8F2; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher { + padding: 8px 0; + background-color: #323F4E; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher:dir(ltr) { + border-right: 1px solid rgba(0,0,0,0); +} + +ideeditorutilities > dzldockpaned > box > stackswitcher:dir(rtl) { + border-left: 1px solid rgba(0,0,0,0); +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button { + border-radius: 0; + outline-offset: -6px; + box-shadow: none; + background-color: transparent; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:active { + background-image: radial-gradient(circle farthest-corner at center, rgba(189, 153, 255, 0.7) 10%, transparent 0%); +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:checked { + background-color: transparent; + color: #F8F8F2; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(ltr) { + margin-right: -1px; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(ltr):hover { + box-shadow: inset -2px 0 rgba(248, 248, 242, 0.3); +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(ltr):active, ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(ltr):checked { + box-shadow: inset -2px 0 #BD99FF; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(rtl) { + margin-left: -1px; +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(rtl):hover { + box-shadow: inset 2px 0 rgba(248, 248, 242, 0.3); +} + +ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(rtl):active, ideeditorutilities > dzldockpaned > box > stackswitcher button:dir(rtl):checked { + box-shadow: inset 2px 0 #BD99FF; +} + +ideeditorsidebar notebook header { + background: transparent; +} + +popover.messagepopover list { + border: 1px solid rgba(0,0,0,0); +} + +popover.messagepopover list row:not(:last-child) { + border-bottom: 1px solid rgba(0,0,0,0); +} + +/********** + * Photos * + **********/ +GdMainIconView.content-view { + -GdMainIconView-icon-size: 48; +} + +.documents-counter { + margin: 8px; + border-radius: 9999px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); + background-color: #BD99FF; + color: white; + font-weight: bold; +} + +.documents-scrolledwin.frame { + border-style: none; +} + +.documents-scrolledwin.frame frame.content-view > border { + border-style: none; +} + +.photos-fade-in { + opacity: 1; + transition: opacity 100ms cubic-bezier(0, 0, 0.2, 1); +} + +.photos-fade-out { + opacity: 0; + transition: opacity 100ms cubic-bezier(0, 0, 0.2, 1); +} + +overlay grid.horizontal > revealer > scrolledwindow.frame:dir(ltr) { + border-style: none none none solid; +} + +overlay grid.horizontal > revealer > scrolledwindow.frame:dir(rtl) { + border-style: none solid none none; +} + +/********* + * Music * + *********/ +.side-panel:dir(ltr) { + border-style: solid; + border-color: rgba(0,0,0,0); +} + +.side-panel:dir(rtl) { + border-style: solid; + border-color: rgba(0,0,0,0); +} + +.side-panel .view { + background-image: image(#323f4e); +} + +.side-panel .view:hover { + background-image: image(#3c4856); +} + +.side-panel .view:selected { + background-image: image(#BD99FF); +} + +.side-panel .view:selected:hover { + background-image: image(#c09eff); +} + +.songs-list:hover { + background-image: image(alpha(currentColor, 0.08)); +} + +frame.documents-dropdown { + margin: 8px; +} + +frame.documents-dropdown > border { + border: none; +} + +box.vertical > revealer > toolbar.search-bar { + border-bottom: 1px solid rgba(0,0,0,0); + background-clip: border-box; +} + +box.vertical > revealer > toolbar.search-bar button > widget { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); +} + +/********* + * To Do * + *********/ +task-list-view taskrow { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); + margin: 0 -8px; +} + +task-list-view taskrow:hover { + transition: none; +} + +task-list-view taskrow label { + margin: 0 8px; +} + +task-list-view taskrow image.dim-label, task-list-view taskrow .titlebar:not(headerbar) image.subtitle, .titlebar:not(headerbar) task-list-view taskrow image.subtitle, +task-list-view taskrow headerbar image.subtitle, headerbar task-list-view taskrow image.subtitle, task-list-view taskrow .budgie-notification image.notification-body, .budgie-notification task-list-view taskrow image.notification-body, task-list-view taskrow .budgie-switcher image.notification-body, .budgie-switcher task-list-view taskrow image.notification-body { + min-width: 16px; +} + +task-list-view > box > revealer > box > button { + margin: -4px; +} + +task-list-view > box > revealer > box > button .dim-label, task-list-view > box > revealer > box > button label.separator, task-list-view > box > revealer > box > button .titlebar:not(headerbar) .subtitle, .titlebar:not(headerbar) task-list-view > box > revealer > box > button .subtitle, +task-list-view > box > revealer > box > button headerbar .subtitle, headerbar task-list-view > box > revealer > box > button .subtitle, task-list-view > box > revealer > box > button .budgie-notification .notification-body, .budgie-notification task-list-view > box > revealer > box > button .notification-body, task-list-view > box > revealer > box > button .budgie-switcher .notification-body, .budgie-switcher task-list-view > box > revealer > box > button .notification-body { + opacity: 1; +} + +tasklistview taskrow { + outline: none; +} + +tasklistview taskrow entry, tasklistview taskrow entry:focus, tasklistview taskrow entry:disabled { + box-shadow: none; +} + +tasklistview taskrow image.dim-label, tasklistview taskrow .titlebar:not(headerbar) image.subtitle, .titlebar:not(headerbar) tasklistview taskrow image.subtitle, +tasklistview taskrow headerbar image.subtitle, headerbar tasklistview taskrow image.subtitle, tasklistview taskrow .budgie-notification image.notification-body, .budgie-notification tasklistview taskrow image.notification-body, tasklistview taskrow .budgie-switcher image.notification-body, .budgie-switcher tasklistview taskrow image.notification-body { + min-width: 16px; +} + +tasklistview > box > revealer > box > button { + margin: -4px; +} + +tasklistview > box > revealer > box > button .dim-label, tasklistview > box > revealer > box > button label.separator, tasklistview > box > revealer > box > button .titlebar:not(headerbar) .subtitle, .titlebar:not(headerbar) tasklistview > box > revealer > box > button .subtitle, +tasklistview > box > revealer > box > button headerbar .subtitle, headerbar tasklistview > box > revealer > box > button .subtitle, tasklistview > box > revealer > box > button .budgie-notification .notification-body, .budgie-notification tasklistview > box > revealer > box > button .notification-body, tasklistview > box > revealer > box > button .budgie-switcher .notification-body, .budgie-switcher tasklistview > box > revealer > box > button .notification-body { + opacity: 1; +} + +/******* + * eog * + *******/ +#eog-thumb-nav scrolledwindow { + border-top: none; +} + +#eog-thumb-nav button { + -gtk-outline-radius: 6px; +} + +/************* + * Evolution * + *************/ +frame.taskbar > border { + border-style: solid none none; +} + +box.vertical > paned.horizontal notebook widget .frame { + border-style: none; +} + +/******** + * gitg * + ********/ +frame.commit-frame > border { + border-style: solid none none; +} + +/************** + * Characters * + **************/ +box.dialog-vbox scrolledwindow.related { + border: 1px solid rgba(0,0,0,0); +} + +list.categories { + background-image: image(#323f4e); +} + +/********* + * Boxes * + *********/ +.transparent-bg + stack overlay > label { + min-height: 24px; + padding: 0 4px; + border-radius: 6px; + background-color: black; + color: white; +} + +/************** + * Calculator * + **************/ +button.title label { + min-height: 32px; +} + +/********* + * Geary * + *********/ +.geary-titlebar-left:dir(ltr) { + margin-right: 5px; + padding-right: 0; +} + +.geary-titlebar-left:dir(rtl) { + margin-left: 5px; + padding-left: 0; +} + +.geary-titlebar-left > separator { + background-color: rgba(0, 0, 0, 0.05); +} + +.geary-titlebar-right:dir(ltr) { + margin-left: -5px; +} + +.geary-titlebar-right:dir(rtl) { + margin-right: -5px; +} + +/********* + * Tilix * + *********/ +overlay > revealer.left > scrolledwindow.frame, +overlay > revealer.right > scrolledwindow.frame { + border-style: none; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.25), 0 10px 5px rgba(0, 0, 0, 0.22); +} + +overlay > revealer.left > scrolledwindow.frame { + margin-right: 32px; +} + +overlay > revealer.right > scrolledwindow.frame { + margin-left: 32px; +} + +.terminix-session-sidebar, +.tilix-session-sidebar { + background-image: image(#3D4C5F); +} + +.terminal-titlebar button { + border-radius: 0; +} + +button.image-button.session-new-button { + min-width: 28px; +} + +/************** + * Terminator * + **************/ +.terminator-terminal-window paned > separator { + background-color: #323F4E; +} + +.terminator-terminal-window notebook.frame { + border-style: none; +} + +/*********** + * Eclipse * + ***********/ +window.background > box.vertical > scrolledwindow > widget toolbar { + padding: 2px; +} + +window.background > box.vertical > scrolledwindow > widget toolbar separator, +window.background > box.vertical > scrolledwindow > widget toolbar button { + margin: 2px; +} + +window.background > box.vertical > scrolledwindow > widget toolbar button { + border-radius: 6px; +} + +/************ + * Chromium * + ************/ +window.background.chromium { + background-color: #3D4C5F; +} + +window.background.chromium entry, +window.background.chromium > button:not(.suggested-action):not(.destructive-action) { + border: 1px solid rgba(0,0,0,0); +} + +window.background.chromium > button { + box-shadow: none; + background-size: auto; +} + +window.background.chromium > button:hover { + background-image: image(alpha(currentColor, 0.08)); +} + +window.background.chromium > button:active { + background-image: image(alpha(currentColor, 0.24)); +} + +window.background.chromium headerbar button:active { + background-size: 1000% 1000%; +} + +window.background.chromium spinner { + color: #BD99FF; +} + +window.background.chromium textview { + background-color: #3D4C5F; +} + +tooltip.background.chromium { + background-color: #323f4e; +} + +/*********** + * Firefox * + ***********/ +window.background:not(.csd) > widget > separator { + color: rgba(0,0,0,0); +} + +window.background:not(.csd) > widget > scrollbar { + background-clip: border-box; +} + +window.background:not(.csd) > widget > scrollbar, +window.background:not(.csd) > widget > frame > border { + border-color: rgba(0,0,0,0); +} + +window.background:not(.csd) > widget > entry, +window.background:not(.csd) > widget > button > button { + border: 1px solid rgba(0,0,0,0); + border-radius: 7px; + box-shadow: none; +} + +window.background:not(.csd) > widget > entry { + min-height: 30px; +} + +window.background:not(.csd) > widget > entry:focus { + border-color: #BD99FF; +} + +window.background:not(.csd) > widget > button > button { + padding: 4px 8px; + background-size: auto; +} + +window.background:not(.csd) > widget > button > button:hover { + background-image: image(alpha(currentColor, 0.08)); +} + +window.background:not(.csd) > widget > button > button:active { + background-image: image(alpha(currentColor, 0.24)); +} + +window.background:not(.csd) > widget > checkbutton > check:not(:checked), +window.background:not(.csd) > widget > radiobutton > radio:not(:checked) { + color: #757575; +} + +window.background:not(.csd) > widget > checkbutton > check:not(:checked):hover, window.background:not(.csd) > widget > checkbutton > check:not(:checked):active, +window.background:not(.csd) > widget > radiobutton > radio:not(:checked):hover, +window.background:not(.csd) > widget > radiobutton > radio:not(:checked):active { + color: #212121; +} + +window.background:not(.csd) > widget > checkbutton > check:not(:checked):disabled, +window.background:not(.csd) > widget > radiobutton > radio:not(:checked):disabled { + color: rgba(117, 117, 117, 0.5); +} + +window.background:not(.csd) > window > menu, +window.background:not(.csd) > menu > menu { + border: none; +} + +window.background:not(.csd) > widget > menubar { + color: rgba(248, 248, 242, 0.7); +} + +window.background:not(.csd) > widget > menubar:hover { + color: #F8F8F2; +} + +window.background:not(.csd) > widget > menubar:disabled { + color: rgba(248, 248, 242, 0.3); +} + +window.background:not(.csd) > widget > frame { + color: rgba(0,0,0,0); +} + +window.background:not(.csd) > widget > checkbutton > check, +window.background:not(.csd) > widget > radiobutton > radio { + margin: 0; + padding: 0; +} + +window.background:not(.csd) > window.background > menu > separator { + color: rgba(0,0,0,0); +} + +/************ + * Inkscape * + ************/ +#ToolboxCommon > #AuxToolbox #StyleSwatch { + font-size: smaller; +} + +#ToolboxCommon > #AuxToolbox #Kludge { + padding: 0; +} + +#ToolboxCommon > #AuxToolbox spinbutton, +#ToolboxCommon > #AuxToolbox entry { + min-height: 32px; +} + +#ToolboxCommon > #AuxToolbox button:not(.up):not(.down) { + min-height: 24px; + min-width: 16px; + padding: 4px 8px; + border-radius: 6px; + -gtk-outline-radius: 6px; +} + +#ToolboxCommon > #AuxToolbox spinbutton button { + border-width: 4px; +} + +#ToolboxCommon > toolbar.vertical { + margin-top: -4px; +} + +#ToolboxCommon > toolbar.vertical button { + min-height: 24px; + min-width: 24px; + padding: 4px; + border-radius: 6px; + -gtk-outline-radius: 6px; +} + +#CanvasTable button { + min-height: 16px; + min-width: 16px; + padding: 0; +} + +#CanvasTable #HorizontalScrollbar { + border-top: 1px solid rgba(0,0,0,0); +} + +#CanvasTable #VerticalScrollbar:dir(ltr) { + border-left: 1px solid rgba(0,0,0,0); +} + +#CanvasTable #VerticalScrollbar:dir(rtl) { + border-right: 1px solid rgba(0,0,0,0); +} + +#Canvas_and_Dock frame > border { + border: none; +} + +#Canvas_and_Dock widget > widget > button.flat { + min-height: 16px; + min-width: 16px; + padding: 4px; +} + +#Canvas_and_Dock widget > widget > box.horizontal image { + padding: 4px; +} + +#Canvas_and_Dock box.horizontal > box.vertical > button.flat { + min-height: 16px; + min-width: 24px; + padding: 8px 4px; +} + +/*********** + * Synapse * + ***********/ +/********* + * Unity * + *********/ +UnityDecoration { + -UnityDecoration-extents: 28px 0 0 0; + -UnityDecoration-input-extents: 8px; + -UnityDecoration-shadow-offset-x: 0; + -UnityDecoration-shadow-offset-y: 3px; + -UnityDecoration-active-shadow-color: rgba(0, 0, 0, 0.48); + -UnityDecoration-active-shadow-radius: 18px; + -UnityDecoration-inactive-shadow-color: rgba(0, 0, 0, 0.32); + -UnityDecoration-inactive-shadow-radius: 6px; + -UnityDecoration-glow-size: 8px; + -UnityDecoration-glow-color: #BD99FF; + -UnityDecoration-title-indent: 4px; + -UnityDecoration-title-fade: 32px; + -UnityDecoration-title-alignment: 0.0; +} + +UnityDecoration .top { + padding: 0 2px; + border-style: none; + border-radius: 6px 6px 0 0; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #323F4E; + color: #F8F8F2; +} + +UnityDecoration .top:backdrop { + color: rgba(248, 248, 242, 0.7); +} + +UnityDecoration .menuitem { + color: rgba(248, 248, 242, 0.7); +} + +UnityDecoration .menuitem:hover { + box-shadow: inset 0 -2px currentColor; + background-color: transparent; + color: #F8F8F2; +} + +.background:not(.csd) headerbar:not(.titlebar) { + border-radius: 0; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.background:not(.csd) headerbar:not(.titlebar).inline-toolbar { + border-style: none; +} + +UnityPanelWidget, +.unity-panel { + background-color: #121f2e; + color: #F8F8F2; +} + +UnityPanelWidget:backdrop, +.unity-panel:backdrop { + color: rgba(248, 248, 242, 0.7); +} + +.unity-panel.menuitem, +.unity-panel .menuitem { + color: rgba(248, 248, 242, 0.7); +} + +.unity-panel.menubar.menuitem:hover, +.unity-panel.menubar .menuitem *:hover { + box-shadow: inset 0 -2px currentColor; + background-color: transparent; + color: #F8F8F2; +} + +.menu IdoPlaybackMenuItem.menuitem:active { + -gtk-icon-source: -gtk-icontheme("process-working-symbolic"); + animation: spin 1s linear infinite; + color: #BD99FF; +} + +/************** + * Mate-Panel * + **************/ +.mate-panel-menu-bar menubar, +#PanelApplet-window-menu-applet-button { + background-color: transparent; +} + +.mate-panel-menu-bar { + background-color: #121f2e; + font-weight: 500; +} + +.mate-panel-menu-bar:not(.popup) { + color: rgba(255, 255, 255, 0.7); +} + +.mate-panel-menu-bar button { + min-height: 16px; + min-width: 16px; + padding: 0; + border-radius: 0; +} + +.mate-panel-menu-bar button:checked { + background-color: rgba(255, 255, 255, 0.12); +} + +PanelToplevel.horizontal > grid > button { + min-width: 24px; +} + +PanelToplevel.vertical > grid > button { + min-height: 24px; +} + +PanelSeparator { + color: rgba(255, 255, 255, 0.12); +} + +MatePanelAppletFrameDBus { + border-style: solid; + border-color: rgba(255, 255, 255, 0.12); +} + +.mate-panel-menu-bar.horizontal MatePanelAppletFrameDBus { + border-width: 0 1px; +} + +.mate-panel-menu-bar.vertical MatePanelAppletFrameDBus { + border-width: 1px 0; +} + +.mate-panel-menu-bar menubar > menuitem { + color: rgba(255, 255, 255, 0.7); +} + +.mate-panel-menu-bar menubar > menuitem:hover { + background-color: rgba(255, 255, 255, 0.12); + color: white; +} + +.mate-panel-menu-bar menubar > menuitem:disabled { + color: rgba(255, 255, 255, 0.3); +} + +.mate-panel-menu-bar.horizontal menubar > menuitem { + padding: 0 8px; +} + +.mate-panel-menu-bar.vertical menubar > menuitem { + padding: 8px 0; +} + +.mate-panel-menu-bar menubar menu > menuitem { + min-height: 28px; + padding: 0 6px; +} + +.mate-panel-menu-bar #PanelApplet button { + -GtkWidget-window-dragging: true; +} + +.mate-panel-menu-bar #tasklist-button { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 0%, transparent 0%) 0 0 0/0 0 0px; +} + +.mate-panel-menu-bar #tasklist-button:checked { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 100%, transparent 0%) 0 0 2/0 0 2px; +} + +.mate-panel-menu-bar #tasklist-button image:dir(ltr), .mate-panel-menu-bar #tasklist-button label:dir(rtl) { + padding-left: 4px; +} + +.mate-panel-menu-bar #tasklist-button label:dir(ltr), .mate-panel-menu-bar #tasklist-button image:dir(rtl) { + padding-right: 4px; +} + +.mate-panel-menu-bar.vertical #tasklist-button { + min-height: 32px; +} + +.mate-panel-menu-bar.horizontal #showdesktop-button image { + min-width: 24px; + padding: 0 4px; +} + +.mate-panel-menu-bar.vertical #showdesktop-button image { + min-height: 24px; + padding: 4px 0; +} + +PanelApplet.wnck-applet .wnck-pager { + background-color: transparent; + color: #ddb9ff; +} + +PanelApplet.wnck-applet .wnck-pager:hover { + background-color: rgba(255, 255, 255, 0.12); +} + +PanelApplet.wnck-applet .wnck-pager:active { + background-color: rgba(255, 255, 255, 0.3); +} + +PanelApplet.wnck-applet .wnck-pager:selected { + background-color: #BD99FF; +} + +.mate-panel-menu-bar.horizontal #clock-applet-button label { + padding: 0 8px; +} + +.mate-panel-menu-bar.vertical #clock-applet-button label { + padding: 8px 0; +} + +#MatePanelPopupWindow { + border: 1px solid rgba(0,0,0,0); + border-radius: 7px; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); +} + +#MatePanelPopupWindow frame > border { + border-style: none; +} + +#MatePanelPopupWindow button { + padding: 4px 16px; +} + +#MatePanelPopupWindow > frame > box > box > box > widget { + color: rgba(0,0,0,0); +} + +na-tray-applet { + -NaTrayApplet-icon-padding: 3px; + -NaTrayApplet-icon-size: 16; +} + +.mate-panel-menu-bar { + -PanelMenuBar-icon-visible: true; +} + +.mate-panel-applet-slider { + border: 1px solid rgba(0,0,0,0); + border-radius: 7px; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #323F4E; +} + +.mate-panel-applet-slider frame > border { + border-style: none; +} + +#PanelApplet:not(:selected) > box { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); +} + +#PanelApplet:selected > box { + background-color: rgba(255, 255, 255, 0.12); + color: white; +} + +#mate-menu { + border: 1px solid rgba(0,0,0,0); +} + +#mate-menu button { + min-height: 24px; + min-width: 24px; + padding: 4px 0; + color: #F8F8F2; + font-weight: normal; +} + +#mate-menu button label:not(:first-child) { + color: rgba(248, 248, 242, 0.7); +} + +#mate-menu entry { + margin: 0 0 8px; +} + +#mate-menu entry image { + margin: 0; +} + +#mate-menu entry + button { + margin: 0 4px 8px; + padding: 4px; +} + +/********************* + * CAJA File manager * + *********************/ +.caja-navigation-window button.toggle.image-button { + border-radius: 6px; +} + +.caja-pathbar button { + margin: 0 -1px 0 -2px; +} + +.caja-pathbar button > widget { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); + -GtkArrow-arrow-scaling: 1; +} + +.caja-side-pane notebook viewport.frame, +.caja-side-pane notebook widget .vertical { + background-color: #323F4E; +} + +.caja-side-pane notebook, +.caja-notebook { + border-top: 1px solid rgba(0,0,0,0); +} + +.caja-side-pane notebook .frame, +.caja-notebook .frame { + border-style: none; +} + +.caja-navigation-window statusbar { + margin: 0 -10px; + padding: 0 4px; + border-top: 1px solid rgba(0,0,0,0); +} + +.caja-notebook frame > border { + border-style: none; +} + +#caja-extra-view-widget { + border-bottom: 1px solid rgba(0,0,0,0); + background-color: #323F4E; +} + +#caja-extra-view-widget > box > box > label { + font-weight: bold; +} + +/********* + * Pluma * + *********/ +.pluma-window statusbar { + margin: 0 -10px; + padding: 0 4px; + border-top: 1px solid rgba(0,0,0,0); +} + +.pluma-window statusbar frame > border { + border-style: none; +} + +.pluma-window statusbar frame button.flat { + padding: 0 4px; + border-radius: 0; +} + +.pluma-window statusbar frame button.flat widget { + -gtk-icon-source: -gtk-icontheme("pan-down-symbolic"); + -GtkArrow-arrow-scaling: 1; +} + +.pluma-print-preview toolbar { + border-bottom: 1px solid rgba(0,0,0,0); +} + +.pluma-window paned.horizontal box.vertical box.horizontal button.flat { + margin: 1px; +} + +.pluma-window paned.horizontal box.vertical .frame { + border-style: none; +} + +.pluma-window paned.horizontal box.vertical notebook.frame { + margin-top: -1px; + border-top: 1px solid rgba(0,0,0,0); +} + +.pluma-window paned.horizontal box.vertical notebook.frame box.vertical toolbar.horizontal { + border-bottom: 1px solid rgba(0,0,0,0); +} + +/********* + * Atril * + *********/ +.atril-window paned.horizontal box.vertical .frame { + border-style: none; +} + +.atril-window paned.horizontal box.vertical notebook .frame { + border-top: 1px solid rgba(0,0,0,0); +} + +/* mate-screensaver lock dialog */ +.lock-dialog { + border-radius: 6px; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.25), 0 10px 5px rgba(0, 0, 0, 0.22), inset 0 1px rgba(255, 255, 255, 0.1); +} + +.lock-dialog frame > border { + border-style: none; +} + +/* multimedia OSD */ +MsdOsdWindow.background.osd { + border-radius: 6px; + background-color: rgba(50, 63, 78, 0.9); + color: #F8F8F2; +} + +MsdOsdWindow.background.osd .trough { + border-radius: 0; + background-color: rgba(255, 255, 255, 0.12); +} + +MsdOsdWindow.background.osd .progressbar { + border-radius: 0; + background-color: #BD99FF; +} + +/****************** + * Budgie Desktop * + ******************/ +.budgie-container { + background-color: transparent; +} + +.budgie-settings-window buttonbox.inline-toolbar { + border-style: none none solid; +} + +.budgie-settings-window buttonbox.inline-toolbar button { + border-radius: 6px; + -gtk-outline-radius: 6px; +} + +.budgie-popover { + border-style: solid; + border-width: 1px; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.3); + border-radius: 7px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23); + background-color: #3D4C5F; +} + +.budgie-popover .container { + padding: 2px; +} + +.budgie-popover border { + border: none; +} + +.budgie-popover list { + background-color: transparent; +} + +.budgie-popover row { + padding: 0; +} + +.budgie-popover row:hover { + box-shadow: none; +} + +.budgie-popover:not(.budgie-menu) button.flat:not(.image-button) { + min-height: 28px; + padding: 0 8px; + color: #F8F8F2; + font-weight: normal; +} + +.budgie-popover:not(.budgie-menu) button.flat:not(.image-button):disabled { + color: rgba(248, 248, 242, 0.5); +} + +.budgie-popover.budgie-menu .container { + padding: 0; +} + +.budgie-popover.user-menu .container { + padding: 8px; +} + +.budgie-popover.user-menu separator { + margin: 4px 0; +} + +.budgie-popover.sound-popover separator { + margin: 3px 0; +} + +.budgie-popover.night-light-indicator .container { + padding: 8px; +} + +.budgie-popover.places-menu .container { + padding: 8px; +} + +.budgie-popover.places-menu .places-list:not(.always-expand) { + margin-top: 4px; + padding-top: 4px; + border-top: 1px solid rgba(0,0,0,0); +} + +.budgie-popover.places-menu .alternative-label { + padding: 3px; + font-size: 15px; +} + +.budgie-popover.workspace-popover .container { + padding: 2px 8px 8px; +} + +.budgie-popover.workspace-popover separator { + margin: 4px 0; +} + +.budgie-popover.workspace-popover flowboxchild { + padding: 0; +} + +.workspace-switcher .workspace-layout { + border: 0 solid rgba(255, 255, 255, 0.12); +} + +.top .workspace-switcher .workspace-layout:dir(ltr), +.bottom .workspace-switcher .workspace-layout:dir(ltr) { + border-left-width: 1px; +} + +.top .workspace-switcher .workspace-layout:dir(rtl), +.bottom .workspace-switcher .workspace-layout:dir(rtl) { + border-right-width: 1px; +} + +.left .workspace-switcher .workspace-layout, +.right .workspace-switcher .workspace-layout { + border-top-width: 1px; +} + +.workspace-switcher .workspace-item, +.workspace-switcher .workspace-add-button { + border: 0 solid rgba(255, 255, 255, 0.12); +} + +.top .workspace-switcher .workspace-item:dir(ltr), +.bottom .workspace-switcher .workspace-item:dir(ltr), .top +.workspace-switcher .workspace-add-button:dir(ltr), +.bottom +.workspace-switcher .workspace-add-button:dir(ltr) { + border-right-width: 1px; +} + +.top .workspace-switcher .workspace-item:dir(rtl), +.bottom .workspace-switcher .workspace-item:dir(rtl), .top +.workspace-switcher .workspace-add-button:dir(rtl), +.bottom +.workspace-switcher .workspace-add-button:dir(rtl) { + border-left-width: 1px; +} + +.left .workspace-switcher .workspace-item, +.right .workspace-switcher .workspace-item, .left +.workspace-switcher .workspace-add-button, +.right +.workspace-switcher .workspace-add-button { + border-bottom-width: 1px; +} + +.workspace-switcher .workspace-item { + transition: all 100ms cubic-bezier(0, 0, 0.2, 1); +} + +.workspace-switcher .workspace-item.current-workspace { + background-color: rgba(255, 255, 255, 0.12); +} + +.workspace-switcher .workspace-add-button:hover { + box-shadow: none; +} + +.workspace-switcher .workspace-add-button:active { + background-image: none; +} + +.workspace-switcher .workspace-add-button:active image { + margin: 1px 0 -1px; +} + +.budgie-panel .workspace-switcher .workspace-icon-button { + min-height: 24px; + min-width: 24px; + padding: 0; + border-radius: 6px; +} + +.budgie-menu.background { + padding: 0; +} + +.budgie-menu .sidebar, +.budgie-menu scrollbar, +.budgie-menu entry.search { + background-color: transparent; +} + +.budgie-menu entry.search { + border-bottom: 1px solid rgba(0,0,0,0); + border-radius: 0; + box-shadow: none; + font-size: 120%; +} + +.budgie-menu button { + min-height: 32px; + padding: 0 8px; + border-radius: 0; + color: #F8F8F2; + font-weight: normal; +} + +.budgie-menu button:disabled { + color: rgba(248, 248, 242, 0.5); +} + +.budgie-menu button:checked:disabled { + background-color: #BD99FF; +} + +.budgie-menu row { + padding: 0; +} + +.budgie-menu row:hover { + box-shadow: none; +} + +popover.background.user-menu { + padding: 8px; +} + +popover.background.user-menu .content-box { + background-color: transparent; +} + +popover.background.user-menu separator { + margin: 4px 0; +} + +popover.background.user-menu row { + padding: 0; + box-shadow: none; + background-image: none; +} + +popover.background.places-menu { + padding: 8px; +} + +popover.background.places-menu .name-button.text-button { + padding-left: 8px; + padding-right: 8px; +} + +popover.background.places-menu .name-button.text-button image:dir(ltr) { + margin-right: 3px; +} + +popover.background.places-menu .name-button.text-button image:dir(rtl) { + margin-left: 3px; +} + +popover.background.places-menu .places-section-header > image:dir(ltr) { + margin: 0 -2px 0 5px; +} + +popover.background.places-menu .places-section-header > image:dir(rtl) { + margin: 0 5px 0 -2px; +} + +popover.background.places-menu .places-list { + margin-top: 4px; + padding-top: 4px; + border-top: 1px solid rgba(0,0,0,0); + background-color: transparent; +} + +popover.background.places-menu row { + padding: 0; + box-shadow: none; + background-image: none; +} + +.budgie-panel { + transition: background-color 100ms cubic-bezier(0, 0, 0.2, 1); + background-color: #121f2e; + color: rgba(255, 255, 255, 0.7); + font-weight: 500; +} + +.budgie-panel.transparent { + background-color: black; +} + +.budgie-panel button { + min-height: 16px; + min-width: 16px; + padding: 0; + border-radius: 0; +} + +.budgie-panel button:checked { + background-color: rgba(255, 255, 255, 0.12); +} + +.budgie-panel.horizontal button { + padding: 0 4px; +} + +.budgie-panel.vertical button { + padding: 4px 0; +} + +.budgie-panel separator { + background-color: rgba(255, 255, 255, 0.3); +} + +.budgie-panel .alert { + color: #ff8c3e; +} + +.budgie-panel .titlebar:not(headerbar) { + min-height: 0; + padding: 0; + box-shadow: none; + background-color: transparent; + color: white; +} + +.budgie-panel .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action) { + color: rgba(255, 255, 255, 0.7); +} + +.budgie-panel .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):hover, .budgie-panel .titlebar:not(headerbar) button:not(.suggested-action):not(.destructive-action):active { + color: white; +} + +.budgie-panel #tasklist-button { + padding: 0 4px; +} + +.budgie-panel.vertical #tasklist-button { + min-height: 32px; +} + +.budgie-panel button.flat.launcher { + padding: 0; +} + +.budgie-panel button.flat.launcher:not(:checked) { + color: rgba(255, 255, 255, 0.5); +} + +.budgie-panel button.flat.launcher:not(:checked):hover, .budgie-panel button.flat.launcher:not(:checked):active { + color: rgba(255, 255, 255, 0.7); +} + +.budgie-panel button.flat.launcher:not(:checked):disabled { + color: rgba(255, 255, 255, 0.3); +} + +.top .budgie-panel #tasklist-button, .budgie-panel .top #tasklist-button, .top .budgie-panel button.flat.launcher, .budgie-panel .top button.flat.launcher { + border-image: radial-gradient(circle closest-corner at center calc(1px), currentColor 0%, transparent 0%) 0 0 0 0/0 0 0 0; +} + +.top .budgie-panel #tasklist-button:checked, .budgie-panel .top #tasklist-button:checked, .top .budgie-panel button.flat.launcher:checked, .budgie-panel .top button.flat.launcher:checked, .top .budgie-panel .unpinned button.flat.launcher, .budgie-panel .unpinned .top button.flat.launcher, +.top .budgie-panel .pinned button.flat.launcher.running, .budgie-panel .pinned .top button.flat.launcher.running { + border-image: radial-gradient(circle closest-corner at center calc(1px), currentColor 100%, transparent 0%) 2 0 0 0/2px 0 0 0; +} + +.bottom .budgie-panel #tasklist-button, .budgie-panel .bottom #tasklist-button, .bottom .budgie-panel button.flat.launcher, .budgie-panel .bottom button.flat.launcher { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 0%, transparent 0%) 0 0 0 0/0 0 0 0; +} + +.bottom .budgie-panel #tasklist-button:checked, .budgie-panel .bottom #tasklist-button:checked, .bottom .budgie-panel button.flat.launcher:checked, .budgie-panel .bottom button.flat.launcher:checked, .bottom .budgie-panel .unpinned button.flat.launcher, .budgie-panel .unpinned .bottom button.flat.launcher, +.bottom .budgie-panel .pinned button.flat.launcher.running, .budgie-panel .pinned .bottom button.flat.launcher.running { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), currentColor 100%, transparent 0%) 0 0 2 0/0 0 2px 0; +} + +.left .budgie-panel #tasklist-button, .budgie-panel .left #tasklist-button, .left .budgie-panel button.flat.launcher, .budgie-panel .left button.flat.launcher { + border-image: radial-gradient(circle closest-corner at calc(1px) center, currentColor 0%, transparent 0%) 0 0 0 0/0 0 0 0; +} + +.left .budgie-panel #tasklist-button:checked, .budgie-panel .left #tasklist-button:checked, .left .budgie-panel button.flat.launcher:checked, .budgie-panel .left button.flat.launcher:checked, .left .budgie-panel .unpinned button.flat.launcher, .budgie-panel .unpinned .left button.flat.launcher, +.left .budgie-panel .pinned button.flat.launcher.running, .budgie-panel .pinned .left button.flat.launcher.running { + border-image: radial-gradient(circle closest-corner at calc(1px) center, currentColor 100%, transparent 0%) 0 0 0 2/0 0 0 2px; +} + +.right .budgie-panel #tasklist-button, .budgie-panel .right #tasklist-button, .right .budgie-panel button.flat.launcher, .budgie-panel .right button.flat.launcher { + border-image: radial-gradient(circle closest-corner at calc(100% - 1px) center, currentColor 0%, transparent 0%) 0 0 0 0/0 0 0 0; +} + +.right .budgie-panel #tasklist-button:checked, .budgie-panel .right #tasklist-button:checked, .right .budgie-panel button.flat.launcher:checked, .budgie-panel .right button.flat.launcher:checked, .right .budgie-panel .unpinned button.flat.launcher, .budgie-panel .unpinned .right button.flat.launcher, +.right .budgie-panel .pinned button.flat.launcher.running, .budgie-panel .pinned .right button.flat.launcher.running { + border-image: radial-gradient(circle closest-corner at calc(100% - 1px) center, currentColor 100%, transparent 0%) 0 2 0 0/0 2px 0 0; +} + +frame.raven-frame > border { + border-style: none; + box-shadow: 0 14px 14px rgba(0, 0, 0, 0.25), 0 10px 5px rgba(0, 0, 0, 0.22); +} + +.top frame.raven-frame > border { + margin-bottom: 32px; +} + +.bottom frame.raven-frame > border { + margin-top: 32px; +} + +.left frame.raven-frame > border { + margin-right: 32px; +} + +.right frame.raven-frame > border { + margin-left: 32px; +} + +.raven { + background-color: #3D4C5F; +} + +.raven > box { + margin-bottom: -10px; +} + +.raven > stack { + margin-bottom: -10px; +} + +.raven stackswitcher.linked > button { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #ee9c11 0%, transparent 0%) 0 0 0/0 0 0px; + border-radius: 0; +} + +.raven stackswitcher.linked > button:checked { + border-image: radial-gradient(circle closest-corner at center calc(100% - 1px), #ee9c11 100%, transparent 0%) 0 0 2/0 0 2px; + background-color: transparent; +} + +.raven .raven-header { + min-height: 32px; + padding: 3px; +} + +.raven .raven-header:not(.top) { + margin-top: -6px; +} + +.raven .raven-header.top { + padding: 2px 0; + background-color: #BD99FF; + color: white; +} + +.raven .raven-header.top stackswitcher button { + margin: -4px 0; + min-height: 32px; +} + +.raven .raven-header.top button.image-button:dir(ltr) { + margin-right: 2px; +} + +.raven .raven-header.top button.image-button:dir(rtl) { + margin-left: 2px; +} + +.raven .raven-header.top > image { + margin: 0 8px; +} + +.raven .raven-header.top > label { + margin: 0 -8px; + font-weight: bold; +} + +.raven .raven-header.bottom { + border-top: 1px solid rgba(0,0,0,0); +} + +.raven viewport.frame .raven-header { + margin-top: -8px; +} + +.raven .raven-background { + border-style: solid none; + border-width: 1px; + border-color: rgba(0,0,0,0); + background-color: #323F4E; +} + +.raven .raven-background.frame { + border-style: solid none; +} + +.raven .raven-background > overlay > widget > image { + color: rgba(248, 248, 242, 0.12); +} + +.raven .raven-background grid > label:first-child { + min-height: 32px; +} + +.raven scrolledwindow.raven-background { + border-bottom-style: none; +} + +.raven .raven-header.top + .raven-background { + border-style: none; + background-color: #BD99FF; + color: white; +} + +.raven .raven-header.top + .raven-background stackswitcher button { + margin: -4px 0; +} + +.raven .powerstrip button { + margin: 2px 0 1px; + padding: 8px; +} + +.raven .option-subtitle { + font-size: smaller; +} + +calendar.raven-calendar { + border-style: none; + background-color: transparent; +} + +calendar.raven-calendar:selected { + border-radius: 6px; + background-color: #BD99FF; +} + +.raven-mpris { + background-color: black; + color: white; +} + +.raven-mpris label { + min-height: 24px; +} + +.raven-mpris button.image-button { + padding: 8px; +} + +.budgie-notification-window, .budgie-osd-window, .budgie-switcher-window { + background-color: transparent; +} + +.budgie-notification .notification-title, .budgie-switcher .notification-title { + font-size: 120%; +} + +.budgie-osd .budgie-osd-text { + font-size: 120%; +} + +.drop-shadow { + margin: 5px 9px; + padding: 3px; + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #3D4C5F; +} + +.drop-shadow .linked > button { + border-radius: 6px; +} + +.budgie-session-dialog, .budgie-polkit-dialog, .budgie-run-dialog { + border-radius: 6px; + background-color: #3D4C5F; +} + +.budgie-session-dialog decoration, .budgie-polkit-dialog decoration, .budgie-run-dialog decoration { + border-radius: 6px; +} + +.budgie-session-dialog label:not(:last-child), +.budgie-session-dialog .dialog-title { + font-size: 120%; +} + +.budgie-session-dialog .linked.horizontal > button { + padding: 8px 16px; + border-top: 1px solid rgba(0,0,0,0); + border-radius: 0; +} + +.budgie-session-dialog .linked.horizontal > button:first-child { + border-bottom-left-radius: 6px; +} + +.budgie-session-dialog .linked.horizontal > button:last-child { + border-bottom-right-radius: 6px; +} + +.budgie-polkit-dialog .message { + color: rgba(248, 248, 242, 0.7); +} + +.budgie-polkit-dialog .failure { + color: #ff8c3e; +} + +.budgie-run-dialog { + background-color: #323F4E; +} + +.budgie-run-dialog entry.search { + font-size: 120%; + padding: 4px 12px; + box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); + background-color: transparent; +} + +.budgie-run-dialog list .dim-label, .budgie-run-dialog list label.separator, .budgie-run-dialog list .titlebar:not(headerbar) .subtitle, .titlebar:not(headerbar) .budgie-run-dialog list .subtitle, +.budgie-run-dialog list headerbar .subtitle, headerbar .budgie-run-dialog list .subtitle, .budgie-run-dialog list .budgie-notification .notification-body, .budgie-notification .budgie-run-dialog list .notification-body, .budgie-run-dialog list .budgie-switcher .notification-body, .budgie-switcher .budgie-run-dialog list .notification-body { + opacity: 1; +} + +.budgie-run-dialog scrolledwindow { + border-top: 1px solid rgba(0,0,0,0); +} + +/************** + * Xfce4 Apps * + **************/ +.XfceHeading { + background-color: #323F4E; +} + +/*************** + * xfce4-panel * + ***************/ +.xfce4-panel.background { + border: none; + background-color: #121f2e; + color: rgba(255, 255, 255, 0.7); + font-weight: 500; +} + +.xfce4-panel.background button { + min-height: 16px; + min-width: 16px; + padding: 0; + border-radius: 0; +} + +.xfce4-panel.background button:checked { + background-color: rgba(255, 255, 255, 0.12); +} + +.xfce4-panel.background .tasklist button { + border-image: image(transparent) 0 0 2/0 0 2px; +} + +.xfce4-panel.background .tasklist button:checked { + border-image: image(currentColor) 0 0 2/0 0 2px; +} + +.xfce4-panel.background .tasklist button image { + padding: 4px; +} + +wnck-pager:hover { + background-color: rgba(255, 255, 255, 0.12); +} + +wnck-pager:active { + background-color: rgba(255, 255, 255, 0.3); +} + +wnck-pager:selected { + background-color: #BD99FF; +} + +XfdesktopIconView.view { + border-radius: 6px; + background-color: transparent; + color: white; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +XfdesktopIconView.view:active { + box-shadow: none; + text-shadow: none; +} + +XfdesktopIconView.view .rubberband { + border-radius: 0; +} + +#XfceNotifyWindow buttonbox { + padding: 0; +} + +#XfceNotifyWindow label#summary { + font-weight: bold; +} + +#xfwm-tabwin { + padding: 12px; + border-radius: 6px; + -XfwmTabwinWidget-icon-size: 64px; + -XfwmTabwinWidget-preview-size: 64px; +} + +/********** + * Thunar * + **********/ +.thunar #location-toolbar { + border-bottom: 1px solid rgba(0,0,0,0); +} + +.thunar .standard-view.frame { + border-style: none; +} + +.thunar .sidebar .view:not(:selected) { + background-color: transparent; +} + +.thunar statusbar { + margin: 0 -10px; + padding: 0 4px; + border-top: 1px solid rgba(0,0,0,0); +} + +/************************ + * LightDM GTK+ Greeter * + ************************/ +#panel_window { + background-color: rgba(0, 0, 0, 0.3); + color: white; +} + +#panel_window menubar, +#panel_window separator { + background-color: transparent; +} + +#panel_window separator { + padding: 0 4px; +} + +#panel_window separator:first-child { + padding: 0 8px; +} + +#panel_window menubar > menuitem { + color: rgba(255, 255, 255, 0.7); +} + +#panel_window menubar > menuitem:hover { + color: white; +} + +#panel_window menubar > menuitem:disabled label { + color: rgba(255, 255, 255, 0.3); +} + +#login_window, +#shutdown_dialog, +#restart_dialog { + margin: 8px; + border-radius: 6px; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.16), 0 3px 3px rgba(0, 0, 0, 0.23), inset 0 1px rgba(255, 255, 255, 0.1); + background-color: #3D4C5F; +} + +#content_frame { + padding-bottom: 20px; + border-bottom: 1px solid rgba(0,0,0,0); +} + +#buttonbox_frame { + padding-top: 24px; +} + +#buttonbox_frame button { + margin: -16px; +} + +#greeter_infobar { + margin-top: -1px; +} + +/******** + * Nemo * + ********/ +.nemo-window .primary-toolbar { + border-bottom: 1px solid rgba(0,0,0,0); +} + +.nemo-window .primary-toolbar entry { + min-height: 0; + margin: 0; +} + +.nemo-window .primary-toolbar button.text-button { + padding-left: 8px; + padding-right: 8px; +} + +.nemo-window .primary-toolbar button:not(.text-button):not(.image-button) { + padding-left: 4px; + padding-right: 4px; +} + +.nemo-window scrolledwindow.frame { + border-style: none; +} + +.nemo-window scrolledwindow.frame .view:not(:selected) { + background-color: transparent; +} + +.nemo-window infobar { + margin-top: -6px; +} + +.nemo-window .nemo-inactive-pane .view:not(:selected) { + background-color: #323f4e; +} + +/* GTK NAMED COLORS + ---------------- + use responsibly! */ +/* +widget text/foreground color */ +@define-color theme_fg_color #F8F8F2; +/* +text color for entries, views and content in general */ +@define-color theme_text_color #F8F8F2; +/* +widget base background color */ +@define-color theme_bg_color #323F4E; +/* +text widgets and the like base background color */ +@define-color theme_base_color #323F4E; +/* +base background color of selections */ +@define-color theme_selected_bg_color #BD99FF; +/* +text/foreground color of selections */ +@define-color theme_selected_fg_color white; +/* +base background color of insensitive widgets */ +@define-color insensitive_bg_color #323F4E; +/* +text foreground color of insensitive widgets */ +@define-color insensitive_fg_color rgba(248, 248, 242, 0.5); +/* +insensitive text widgets and the like base background color */ +@define-color insensitive_base_color #323f4e; +/* +widget text/foreground color on backdrop windows */ +@define-color theme_unfocused_fg_color #F8F8F2; +/* +text color for entries, views and content in general on backdrop windows */ +@define-color theme_unfocused_text_color #F8F8F2; +/* +widget base background color on backdrop windows */ +@define-color theme_unfocused_bg_color #323F4E; +/* +text widgets and the like base background color on backdrop windows */ +@define-color theme_unfocused_base_color #323F4E; +/* +base background color of selections on backdrop windows */ +@define-color theme_unfocused_selected_bg_color #BD99FF; +/* +text/foreground color of selections on backdrop windows */ +@define-color theme_unfocused_selected_fg_color white; +/* +insensitive color on backdrop windows */ +@define-color unfocused_insensitive_color rgba(248, 248, 242, 0.5); +/* +widgets main borders color */ +@define-color borders rgba(0,0,0,0); +/* +widgets main borders color on backdrop windows */ +@define-color unfocused_borders rgba(0,0,0,0); +/* +these are pretty self explicative */ +@define-color warning_color #ee9c11; +@define-color error_color #ff8c3e; +@define-color success_color #23bd86; +/* +these colors are exported for the window manager and shouldn't be used in applications, +read if you used those and something break with a version upgrade you're on your own... */ +@define-color wm_title #F8F8F2; +@define-color wm_unfocused_title rgba(248, 248, 242, 0.7); +@define-color wm_highlight rgba(255, 255, 255, 0.1); +@define-color wm_bg #323F4E; +/* +FIXME this is really an API */ +@define-color content_view_bg #323F4E; +@define-color placeholder_text_color #bdc1c1; + +@import url('custom.css'); diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-checked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-checked-symbolic.svg new file mode 100644 index 0000000..8067c11 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-checked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-mixed-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-mixed-symbolic.svg new file mode 100644 index 0000000..76e69c9 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-mixed-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-unchecked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-unchecked-symbolic.svg new file mode 100644 index 0000000..97dbb89 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/checkbox-unchecked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/radio-checked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/radio-checked-symbolic.svg new file mode 100644 index 0000000..7b82c3d --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/radio-checked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/radio-mixed-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/radio-mixed-symbolic.svg new file mode 100644 index 0000000..55d8916 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/radio-mixed-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/radio-unchecked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/radio-unchecked-symbolic.svg new file mode 100644 index 0000000..6d97559 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/radio-unchecked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-checked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-checked-symbolic.svg new file mode 100644 index 0000000..7ad27d5 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-checked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-mixed-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-mixed-symbolic.svg new file mode 100644 index 0000000..0f80850 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-mixed-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-unchecked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-unchecked-symbolic.svg new file mode 100644 index 0000000..bfe0a56 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/small-checkbox-unchecked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-checked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-checked-symbolic.svg new file mode 100644 index 0000000..04a9a21 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-checked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-mixed-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-mixed-symbolic.svg new file mode 100644 index 0000000..31aac91 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-mixed-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-unchecked-symbolic.svg b/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-unchecked-symbolic.svg new file mode 100644 index 0000000..f870381 --- /dev/null +++ b/misc/gtk/ephemeral/gtk-assets/scalable/small-radio-unchecked-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-dark.png new file mode 100644 index 0000000..b99e6cb Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-dark@2.png new file mode 100644 index 0000000..6bdc659 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled-dark.png new file mode 100644 index 0000000..6d4a840 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled-dark@2.png new file mode 100644 index 0000000..8d83cf7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled.png new file mode 100644 index 0000000..07d427d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled@2.png new file mode 100644 index 0000000..6ee0a51 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider-disabled@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider.png new file mode 100644 index 0000000..b99e6cb Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider@2.png new file mode 100644 index 0000000..6bdc659 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-after-slider@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-dark.png new file mode 100644 index 0000000..aaa043a Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-dark@2.png new file mode 100644 index 0000000..99a45fe Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled-dark.png new file mode 100644 index 0000000..7b4e6e4 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled-dark@2.png new file mode 100644 index 0000000..deedc59 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled.png new file mode 100644 index 0000000..30ce54d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled@2.png new file mode 100644 index 0000000..a353b79 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider-disabled@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider.png new file mode 100644 index 0000000..aaa043a Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider@2.png b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider@2.png new file mode 100644 index 0000000..99a45fe Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-horz-marks-before-slider@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-slider-dark.png new file mode 100644 index 0000000..dea60e7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-slider-dark@2.png new file mode 100644 index 0000000..c263dc7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled-dark.png new file mode 100644 index 0000000..0975095 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled-dark@2.png new file mode 100644 index 0000000..82856ad Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled.png b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled.png new file mode 100644 index 0000000..e7c7a55 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled@2.png b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled@2.png new file mode 100644 index 0000000..59ca6bb Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider-disabled@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider.png b/misc/gtk/ephemeral/gtk-assets/scale-slider.png new file mode 100644 index 0000000..dea60e7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-slider@2.png b/misc/gtk/ephemeral/gtk-assets/scale-slider@2.png new file mode 100644 index 0000000..c263dc7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-slider@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-dark.png new file mode 100644 index 0000000..002c8a7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-dark@2.png new file mode 100644 index 0000000..33de13e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled-dark.png new file mode 100644 index 0000000..605edcd Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled-dark@2.png new file mode 100644 index 0000000..310530d Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled.png new file mode 100644 index 0000000..78c5fe6 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled@2.png new file mode 100644 index 0000000..9fd1230 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider-disabled@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider.png new file mode 100644 index 0000000..002c8a7 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider@2.png new file mode 100644 index 0000000..33de13e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-after-slider@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-dark.png new file mode 100644 index 0000000..7ef8dd3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-dark@2.png new file mode 100644 index 0000000..144cbf8 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled-dark.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled-dark.png new file mode 100644 index 0000000..3cbfd1e Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled-dark@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled-dark@2.png new file mode 100644 index 0000000..811b746 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled.png new file mode 100644 index 0000000..ef12044 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled@2.png new file mode 100644 index 0000000..5aa9373 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider-disabled@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider.png new file mode 100644 index 0000000..7ef8dd3 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider@2.png b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider@2.png new file mode 100644 index 0000000..144cbf8 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/scale-vert-marks-before-slider@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked-dark.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked-dark.png new file mode 100644 index 0000000..3ec7f36 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked-dark@2.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked-dark@2.png new file mode 100644 index 0000000..3322415 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked.png new file mode 100644 index 0000000..3ec7f36 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked@2.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked@2.png new file mode 100644 index 0000000..3322415 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-checked@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked-dark.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked-dark.png new file mode 100644 index 0000000..76fca23 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked-dark.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked-dark@2.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked-dark@2.png new file mode 100644 index 0000000..e3154bd Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked-dark@2.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked.png new file mode 100644 index 0000000..9b90422 Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked.png differ diff --git a/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked@2.png b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked@2.png new file mode 100644 index 0000000..ebaa82c Binary files /dev/null and b/misc/gtk/ephemeral/gtk-assets/selectionmode-checkbox-unchecked@2.png differ diff --git a/misc/gtk/ephemeral/index.theme b/misc/gtk/ephemeral/index.theme new file mode 100755 index 0000000..b8e0c04 --- /dev/null +++ b/misc/gtk/ephemeral/index.theme @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=X-GNOME-Metatheme +Name=Materia-dark-compact +Comment=A Material Design theme +Encoding=UTF-8 + +[X-GNOME-Metatheme] +GtkTheme=Materia-dark-compact +MetacityTheme=Materia-dark-compact +IconTheme=Adwaita +CursorTheme=Adwaita +CursorSize=24 diff --git a/misc/gtk/ephemeral/unity/assets/close_focused.svg b/misc/gtk/ephemeral/unity/assets/close_focused.svg new file mode 100644 index 0000000..8f348b5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/close_focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/close_focused_prelight.svg b/misc/gtk/ephemeral/unity/assets/close_focused_prelight.svg new file mode 100644 index 0000000..f24e0cf --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/close_focused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/close_focused_pressed.svg b/misc/gtk/ephemeral/unity/assets/close_focused_pressed.svg new file mode 100644 index 0000000..b3dc9c5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/close_focused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/close_unfocused.svg b/misc/gtk/ephemeral/unity/assets/close_unfocused.svg new file mode 100644 index 0000000..4b38e97 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/close_unfocused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/close_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/assets/close_unfocused_prelight.svg new file mode 100644 index 0000000..2317024 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/close_unfocused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/close_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/assets/close_unfocused_pressed.svg new file mode 100644 index 0000000..c84015e --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/close_unfocused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/maximize_focused.svg b/misc/gtk/ephemeral/unity/assets/maximize_focused.svg new file mode 100644 index 0000000..c660748 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/maximize_focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/maximize_focused_prelight.svg b/misc/gtk/ephemeral/unity/assets/maximize_focused_prelight.svg new file mode 100644 index 0000000..46187e5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/maximize_focused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/maximize_focused_pressed.svg b/misc/gtk/ephemeral/unity/assets/maximize_focused_pressed.svg new file mode 100644 index 0000000..55b9a22 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/maximize_focused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/maximize_unfocused.svg b/misc/gtk/ephemeral/unity/assets/maximize_unfocused.svg new file mode 100644 index 0000000..578f82f --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/maximize_unfocused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/maximize_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/assets/maximize_unfocused_prelight.svg new file mode 100644 index 0000000..bd912c5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/maximize_unfocused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/maximize_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/assets/maximize_unfocused_pressed.svg new file mode 100644 index 0000000..89d513d --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/maximize_unfocused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/minimize_focused.svg b/misc/gtk/ephemeral/unity/assets/minimize_focused.svg new file mode 100644 index 0000000..bd90e98 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/minimize_focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/minimize_focused_prelight.svg b/misc/gtk/ephemeral/unity/assets/minimize_focused_prelight.svg new file mode 100644 index 0000000..b437fd2 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/minimize_focused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/minimize_focused_pressed.svg b/misc/gtk/ephemeral/unity/assets/minimize_focused_pressed.svg new file mode 100644 index 0000000..cf55446 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/minimize_focused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/minimize_unfocused.svg b/misc/gtk/ephemeral/unity/assets/minimize_unfocused.svg new file mode 100644 index 0000000..514bff1 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/minimize_unfocused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/minimize_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/assets/minimize_unfocused_prelight.svg new file mode 100644 index 0000000..afff5de --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/minimize_unfocused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/minimize_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/assets/minimize_unfocused_pressed.svg new file mode 100644 index 0000000..ec5c63f --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/minimize_unfocused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/unmaximize_focused.svg b/misc/gtk/ephemeral/unity/assets/unmaximize_focused.svg new file mode 100644 index 0000000..535684a --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/unmaximize_focused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/unmaximize_focused_prelight.svg b/misc/gtk/ephemeral/unity/assets/unmaximize_focused_prelight.svg new file mode 100644 index 0000000..18ce21d --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/unmaximize_focused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/unmaximize_focused_pressed.svg b/misc/gtk/ephemeral/unity/assets/unmaximize_focused_pressed.svg new file mode 100644 index 0000000..3f80c80 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/unmaximize_focused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused.svg b/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused.svg new file mode 100644 index 0000000..d1b9d08 --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused_prelight.svg new file mode 100644 index 0000000..d1d614e --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused_pressed.svg new file mode 100644 index 0000000..39e1bee --- /dev/null +++ b/misc/gtk/ephemeral/unity/assets/unmaximize_unfocused_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/close.svg b/misc/gtk/ephemeral/unity/close.svg new file mode 120000 index 0000000..b73ba6c --- /dev/null +++ b/misc/gtk/ephemeral/unity/close.svg @@ -0,0 +1 @@ +assets/close_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/close_dash.svg b/misc/gtk/ephemeral/unity/close_dash.svg new file mode 100644 index 0000000..8f348b5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_dash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/close_dash_disabled.svg b/misc/gtk/ephemeral/unity/close_dash_disabled.svg new file mode 100644 index 0000000..57b3b5c --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_dash_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/close_dash_prelight.svg b/misc/gtk/ephemeral/unity/close_dash_prelight.svg new file mode 100644 index 0000000..f24e0cf --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_dash_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/close_dash_pressed.svg b/misc/gtk/ephemeral/unity/close_dash_pressed.svg new file mode 100644 index 0000000..b3dc9c5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_dash_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/close_focused_normal.svg b/misc/gtk/ephemeral/unity/close_focused_normal.svg new file mode 120000 index 0000000..b73ba6c --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_focused_normal.svg @@ -0,0 +1 @@ +assets/close_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/close_focused_prelight.svg b/misc/gtk/ephemeral/unity/close_focused_prelight.svg new file mode 120000 index 0000000..4357436 --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_focused_prelight.svg @@ -0,0 +1 @@ +assets/close_focused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/close_focused_pressed.svg b/misc/gtk/ephemeral/unity/close_focused_pressed.svg new file mode 120000 index 0000000..6a8cf1d --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_focused_pressed.svg @@ -0,0 +1 @@ +assets/close_focused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/close_unfocused.svg b/misc/gtk/ephemeral/unity/close_unfocused.svg new file mode 120000 index 0000000..47aee7d --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_unfocused.svg @@ -0,0 +1 @@ +assets/close_unfocused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/close_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/close_unfocused_prelight.svg new file mode 120000 index 0000000..8e6a956 --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_unfocused_prelight.svg @@ -0,0 +1 @@ +assets/close_unfocused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/close_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/close_unfocused_pressed.svg new file mode 120000 index 0000000..b59544a --- /dev/null +++ b/misc/gtk/ephemeral/unity/close_unfocused_pressed.svg @@ -0,0 +1 @@ +assets/close_unfocused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/dash-widgets.json b/misc/gtk/ephemeral/unity/dash-widgets.json new file mode 100644 index 0000000..0bcfdce --- /dev/null +++ b/misc/gtk/ephemeral/unity/dash-widgets.json @@ -0,0 +1,162 @@ +{ + "stock-icons" : { + "checkmark" : ["/usr/share/icons/unity/checkmark.svg", "32px", "32px"], + "cross" : ["/usr/share/icons/unity/cross.svg", "32px", "32px"], + "grid-view" : ["/usr/share/icons/unity/grid-view.svg", "32px", "32px"], + "flow-view" : ["/usr/share/icons/unity/flow-view.svg", "32px", "32px"], + "star" : ["/usr/share/icons/unity/star.svg", "32px", "32px"], + "triangle" : ["/usr/share/icons/unity/curved-triangle.svg", "32px", "32px"], + "bag" : ["/usr/share/icons/unity/bag.svg", "32px", "32px"], + "next" : ["/usr/share/icons/unity/next.svg", "32px", "32px"], + "prev" : ["/usr/share/icons/unity/prev.svg", "32px", "32px"], + "play" : ["/usr/share/icons/unity/play.svg", "32px", "32px"] + }, + + "regular-text" : { + "text-color" : "#ffffff", + "text-opacity" : 1.0, + "text-size" : 13.0, + "text-mode" : "normal", + "text-weight" : "regular" + }, + + "comments": { + "states" : ["ACTIVE", "NORMAL","PRELIGHT","SELECTED","INSENSITIVE"] + }, + + "button-icon": { + "color" : ["#ffffff", "#F8F8F2", "#F8F8F2", "#F8F8F2", "#F8F8F2"], + "opacity" : [ 1.0, 1.0, 1.0, 0.8, 0.8], + "overlay-opacity": [ 0.30, 0.48, 0.48, 0.45, 0.45], + "overlay-mode" : [ "normal","multiply", "multiply", "normal", "normal"], + "blur-size" : [ 5, 0, 0, 0, 0] + }, + + "icon-only" : { + "color" : "#123456", + "opacity" : 1.0, + "overlay-opacity": 0.2, + "overlay-mode" : "normal", + "blur-size" : 6 + }, + + "lens-nav-bar" : { + "icon-height" : 20, + "icon-gap" : 40 + }, + + "button-label": { + "border-opacity" : [ 0.8, 0.13, 0.13, 0.13, 0.13], + "border-color" : ["#ffffff", "#F8F8F2", "#F8F8F2", "#F8F8F2", "#F8F8F2"], + "border-size" : [ 2.0, 1.0, 1.0, 0.5, 0.5], + "border-radius" : 4.0, + "text-size" : 1.0, + "text-color" : ["#ffffff", "#ffffff", "#ffffff", "#ffffff", "#ffffff"], + "text-opacity" : [ 1.0, 1.0, 1.0, 1.0, 1.0], + "fill-color" : ["#F8F8F2", "#323F4E", "#323F4E", "#323F4E", "#323F4E"], + "fill-opacity" : [ 0.13, 0.0, 0.0, 0.0, 0.0], + "overlay-opacity": [ 0.1, 0.1, 0.1, 0.0, 0.0], + "overlay-mode" : [ "normal", "normal", "normal", "normal", "normal"], + "blur-size" : [ 1, 1, 1, 0, 0] + }, + + "track-view" : { + "line-gap" : 26.0, + "heading-list-gap" : 30, + "left-padding" : 20 + }, + + "row-caption" : { + "main-text-color" : "#ffffff", + "main-text-opacity" : 1.0, + "main-text-size" : 17.0, + "main-text-weight" : "regular", + "sub-text-color" : "#ffffff", + "sub-text-opacity" : 0.5, + "sub-text-size" : 13.0, + "sub-text-weight" : "regular", + "icon-main-gap" : 10, + "main-sub-gap" : 15, + "sub-arrow-gap" : 10 + }, + + "preview-heading-small" : { + "main-title-size" : 23.0, + "main-title-color" : "#ffffff", + "main-title-opacity" : 1.0, + "main-title-mode" : "normal", + "main-title-weight" : "regular", + "sub-title-size" : 17.0, + "sub-title-color" : "#ffffff", + "sub-title-opacity" : 1.0, + "sub-title-mode" : "normal", + "sub-title-weight" : "regular", + "main-sub-gap" : 15, + "padding" : 10 + }, + + "preview-heading" : { + "main-title-size" : 30.0, + "main-title-color" : "#ffffff", + "main-title-opacity" : 1.0, + "main-title-mode" : "normal", + "main-title-weight" : "regular", + "sub-title-size" : 17.0, + "sub-title-color" : "#ffffff", + "sub-title-opacity" : 1.0, + "sub-title-mode" : "normal", + "sub-title-weight" : "regular", + "main-sub-gap" : 15, + "padding" : 10 + }, + + "scrollbar" : { + "color" : "#fff", + "opacity" : 1.0, + "size" : 8, + "buttons-size" : 0, + "corner-radius" : 3 + }, + + "scrollbar-overlay": { + "color" : "#fff", + "opacity" : 1.0, + "size" : 3, + "corner-radius" : 1.5 + }, + + "scrollbar-track": { + "color" : "#fff", + "opacity" : 0.4 + }, + + "filter-pane" : { + "width" : 330, + "title-size" : 17.0, + "title-color" : "#ffffff", + "title-opacity" : 1.0, + "title-mode" : "normal", + "title-style" : "bold", + "title-arrow-gap" : 10, + "button-height" : 30, + "border-size" : 1 + }, + + "separator" : { + "size" : 1.0, + "color" : "#ffffff", + "opacity" : 0.15, + "overlay-opacity": 0.47, + "overlay-mode" : "normal", + "blur-size" : 6 + }, + + "filter-caption" : { + "text-size" : 17, + "text-color" : "#ffffff", + "text-opacity" : 1.0, + "text-mode" : "normal", + "text-weight" : "bold", + "text-arrow-gap" : 10 + } +} diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_btt_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_btt_19.svg new file mode 100644 index 0000000..a411fe2 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_btt_19.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_btt_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_btt_37.svg new file mode 100644 index 0000000..e15d7e5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_btt_37.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_ltr_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_ltr_19.svg new file mode 100644 index 0000000..15f880e --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_ltr_19.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_ltr_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_ltr_37.svg new file mode 100644 index 0000000..9953943 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_ltr_37.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_btt_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_btt_19.svg new file mode 100644 index 0000000..d847ac7 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_btt_19.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_btt_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_btt_37.svg new file mode 100644 index 0000000..ba3ee57 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_btt_37.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_ltr_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ltr_19.svg new file mode 100644 index 0000000..bb9d0c7 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ltr_19.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_ltr_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ltr_37.svg new file mode 100644 index 0000000..94ba601 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ltr_37.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_rtl_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_rtl_19.svg new file mode 120000 index 0000000..11da60a --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_rtl_19.svg @@ -0,0 +1 @@ +launcher_arrow_outline_ltr_19.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_rtl_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_rtl_37.svg new file mode 120000 index 0000000..16e1b01 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_rtl_37.svg @@ -0,0 +1 @@ +launcher_arrow_outline_ltr_37.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_ttb_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ttb_19.svg new file mode 120000 index 0000000..b834d86 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ttb_19.svg @@ -0,0 +1 @@ +launcher_arrow_outline_btt_19.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_outline_ttb_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ttb_37.svg new file mode 120000 index 0000000..ba82233 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_outline_ttb_37.svg @@ -0,0 +1 @@ +launcher_arrow_outline_btt_37.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_rtl_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_rtl_19.svg new file mode 120000 index 0000000..6c4e31f --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_rtl_19.svg @@ -0,0 +1 @@ +launcher_arrow_ltr_19.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_rtl_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_rtl_37.svg new file mode 120000 index 0000000..372ed7c --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_rtl_37.svg @@ -0,0 +1 @@ +launcher_arrow_ltr_37.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_ttb_19.svg b/misc/gtk/ephemeral/unity/launcher_arrow_ttb_19.svg new file mode 120000 index 0000000..f680bb8 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_ttb_19.svg @@ -0,0 +1 @@ +launcher_arrow_btt_19.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_arrow_ttb_37.svg b/misc/gtk/ephemeral/unity/launcher_arrow_ttb_37.svg new file mode 120000 index 0000000..3ff6f54 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_arrow_ttb_37.svg @@ -0,0 +1 @@ +launcher_arrow_btt_37.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_bfb.png b/misc/gtk/ephemeral/unity/launcher_bfb.png new file mode 100644 index 0000000..9ffc9ec Binary files /dev/null and b/misc/gtk/ephemeral/unity/launcher_bfb.png differ diff --git a/misc/gtk/ephemeral/unity/launcher_icon_back_150.svg b/misc/gtk/ephemeral/unity/launcher_icon_back_150.svg new file mode 100644 index 0000000..f5d1c70 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_back_150.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_back_54.svg b/misc/gtk/ephemeral/unity/launcher_icon_back_54.svg new file mode 100644 index 0000000..d1d8834 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_back_54.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_edge_150.svg b/misc/gtk/ephemeral/unity/launcher_icon_edge_150.svg new file mode 100644 index 0000000..f5d1c70 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_edge_150.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_edge_54.svg b/misc/gtk/ephemeral/unity/launcher_icon_edge_54.svg new file mode 100644 index 0000000..d1d8834 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_edge_54.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_glow_200.svg b/misc/gtk/ephemeral/unity/launcher_icon_glow_200.svg new file mode 100644 index 0000000..d4c10f7 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_glow_200.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_glow_62.svg b/misc/gtk/ephemeral/unity/launcher_icon_glow_62.svg new file mode 100644 index 0000000..5453356 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_glow_62.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_selected_back_150.svg b/misc/gtk/ephemeral/unity/launcher_icon_selected_back_150.svg new file mode 100644 index 0000000..28c9bcb --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_selected_back_150.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_selected_back_54.svg b/misc/gtk/ephemeral/unity/launcher_icon_selected_back_54.svg new file mode 100644 index 0000000..0f02ea4 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_selected_back_54.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_shadow_200.svg b/misc/gtk/ephemeral/unity/launcher_icon_shadow_200.svg new file mode 100644 index 0000000..d4c10f7 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_shadow_200.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_shadow_62.svg b/misc/gtk/ephemeral/unity/launcher_icon_shadow_62.svg new file mode 100644 index 0000000..5453356 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_shadow_62.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_shine_150.svg b/misc/gtk/ephemeral/unity/launcher_icon_shine_150.svg new file mode 100644 index 0000000..f5d1c70 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_shine_150.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_icon_shine_54.svg b/misc/gtk/ephemeral/unity/launcher_icon_shine_54.svg new file mode 100644 index 0000000..d1d8834 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_icon_shine_54.svg @@ -0,0 +1 @@ + diff --git a/misc/gtk/ephemeral/unity/launcher_pip_btt_19.svg b/misc/gtk/ephemeral/unity/launcher_pip_btt_19.svg new file mode 100644 index 0000000..35df521 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_btt_19.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_pip_btt_37.svg b/misc/gtk/ephemeral/unity/launcher_pip_btt_37.svg new file mode 100644 index 0000000..61cea98 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_btt_37.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_pip_ltr_19.svg b/misc/gtk/ephemeral/unity/launcher_pip_ltr_19.svg new file mode 100644 index 0000000..c66a8b3 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_ltr_19.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_pip_ltr_37.svg b/misc/gtk/ephemeral/unity/launcher_pip_ltr_37.svg new file mode 100644 index 0000000..5124814 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_ltr_37.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/launcher_pip_rtl_19.svg b/misc/gtk/ephemeral/unity/launcher_pip_rtl_19.svg new file mode 120000 index 0000000..b054ac9 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_rtl_19.svg @@ -0,0 +1 @@ +launcher_pip_ltr_19.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_pip_rtl_37.svg b/misc/gtk/ephemeral/unity/launcher_pip_rtl_37.svg new file mode 120000 index 0000000..3523e45 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_rtl_37.svg @@ -0,0 +1 @@ +launcher_pip_ltr_37.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_pip_ttb_19.svg b/misc/gtk/ephemeral/unity/launcher_pip_ttb_19.svg new file mode 120000 index 0000000..c3d1daa --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_ttb_19.svg @@ -0,0 +1 @@ +launcher_pip_btt_19.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/launcher_pip_ttb_37.svg b/misc/gtk/ephemeral/unity/launcher_pip_ttb_37.svg new file mode 120000 index 0000000..db01556 --- /dev/null +++ b/misc/gtk/ephemeral/unity/launcher_pip_ttb_37.svg @@ -0,0 +1 @@ +launcher_pip_btt_37.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize.svg b/misc/gtk/ephemeral/unity/maximize.svg new file mode 120000 index 0000000..2f5209d --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize.svg @@ -0,0 +1 @@ +assets/maximize_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize_dash.svg b/misc/gtk/ephemeral/unity/maximize_dash.svg new file mode 100644 index 0000000..c660748 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_dash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/maximize_dash_disabled.svg b/misc/gtk/ephemeral/unity/maximize_dash_disabled.svg new file mode 100644 index 0000000..8e6e607 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_dash_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/maximize_dash_prelight.svg b/misc/gtk/ephemeral/unity/maximize_dash_prelight.svg new file mode 100644 index 0000000..46187e5 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_dash_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/maximize_dash_pressed.svg b/misc/gtk/ephemeral/unity/maximize_dash_pressed.svg new file mode 100644 index 0000000..55b9a22 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_dash_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/maximize_focused_normal.svg b/misc/gtk/ephemeral/unity/maximize_focused_normal.svg new file mode 120000 index 0000000..2f5209d --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_focused_normal.svg @@ -0,0 +1 @@ +assets/maximize_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize_focused_prelight.svg b/misc/gtk/ephemeral/unity/maximize_focused_prelight.svg new file mode 120000 index 0000000..4426372 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_focused_prelight.svg @@ -0,0 +1 @@ +assets/maximize_focused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize_focused_pressed.svg b/misc/gtk/ephemeral/unity/maximize_focused_pressed.svg new file mode 120000 index 0000000..16de6f0 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_focused_pressed.svg @@ -0,0 +1 @@ +assets/maximize_focused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize_unfocused.svg b/misc/gtk/ephemeral/unity/maximize_unfocused.svg new file mode 120000 index 0000000..82bf693 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_unfocused.svg @@ -0,0 +1 @@ +assets/maximize_unfocused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/maximize_unfocused_prelight.svg new file mode 120000 index 0000000..06b219d --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_unfocused_prelight.svg @@ -0,0 +1 @@ +assets/maximize_unfocused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/maximize_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/maximize_unfocused_pressed.svg new file mode 120000 index 0000000..29ade40 --- /dev/null +++ b/misc/gtk/ephemeral/unity/maximize_unfocused_pressed.svg @@ -0,0 +1 @@ +assets/maximize_unfocused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize.svg b/misc/gtk/ephemeral/unity/minimize.svg new file mode 120000 index 0000000..601bb67 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize.svg @@ -0,0 +1 @@ +assets/minimize_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize_dash.svg b/misc/gtk/ephemeral/unity/minimize_dash.svg new file mode 100644 index 0000000..bd90e98 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_dash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/minimize_dash_disabled.svg b/misc/gtk/ephemeral/unity/minimize_dash_disabled.svg new file mode 100644 index 0000000..daf2e30 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_dash_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/minimize_dash_prelight.svg b/misc/gtk/ephemeral/unity/minimize_dash_prelight.svg new file mode 100644 index 0000000..b437fd2 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_dash_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/minimize_dash_pressed.svg b/misc/gtk/ephemeral/unity/minimize_dash_pressed.svg new file mode 100644 index 0000000..cf55446 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_dash_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/minimize_focused_normal.svg b/misc/gtk/ephemeral/unity/minimize_focused_normal.svg new file mode 120000 index 0000000..601bb67 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_focused_normal.svg @@ -0,0 +1 @@ +assets/minimize_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize_focused_prelight.svg b/misc/gtk/ephemeral/unity/minimize_focused_prelight.svg new file mode 120000 index 0000000..208db64 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_focused_prelight.svg @@ -0,0 +1 @@ +assets/minimize_focused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize_focused_pressed.svg b/misc/gtk/ephemeral/unity/minimize_focused_pressed.svg new file mode 120000 index 0000000..b5152c1 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_focused_pressed.svg @@ -0,0 +1 @@ +assets/minimize_focused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize_unfocused.svg b/misc/gtk/ephemeral/unity/minimize_unfocused.svg new file mode 120000 index 0000000..ba15dbf --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_unfocused.svg @@ -0,0 +1 @@ +assets/minimize_unfocused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/minimize_unfocused_prelight.svg new file mode 120000 index 0000000..a9fd7f6 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_unfocused_prelight.svg @@ -0,0 +1 @@ +assets/minimize_unfocused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/minimize_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/minimize_unfocused_pressed.svg new file mode 120000 index 0000000..b084747 --- /dev/null +++ b/misc/gtk/ephemeral/unity/minimize_unfocused_pressed.svg @@ -0,0 +1 @@ +assets/minimize_unfocused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/progress_bar_fill.svg b/misc/gtk/ephemeral/unity/progress_bar_fill.svg new file mode 100644 index 0000000..fbb49fd --- /dev/null +++ b/misc/gtk/ephemeral/unity/progress_bar_fill.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/unity/progress_bar_trough.svg b/misc/gtk/ephemeral/unity/progress_bar_trough.svg new file mode 100644 index 0000000..a98e9fe --- /dev/null +++ b/misc/gtk/ephemeral/unity/progress_bar_trough.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/gtk/ephemeral/unity/sheet_style_close_focused.svg b/misc/gtk/ephemeral/unity/sheet_style_close_focused.svg new file mode 120000 index 0000000..b73ba6c --- /dev/null +++ b/misc/gtk/ephemeral/unity/sheet_style_close_focused.svg @@ -0,0 +1 @@ +assets/close_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/sheet_style_close_focused_prelight.svg b/misc/gtk/ephemeral/unity/sheet_style_close_focused_prelight.svg new file mode 120000 index 0000000..4357436 --- /dev/null +++ b/misc/gtk/ephemeral/unity/sheet_style_close_focused_prelight.svg @@ -0,0 +1 @@ +assets/close_focused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/sheet_style_close_focused_pressed.svg b/misc/gtk/ephemeral/unity/sheet_style_close_focused_pressed.svg new file mode 120000 index 0000000..6a8cf1d --- /dev/null +++ b/misc/gtk/ephemeral/unity/sheet_style_close_focused_pressed.svg @@ -0,0 +1 @@ +assets/close_focused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize.svg b/misc/gtk/ephemeral/unity/unmaximize.svg new file mode 120000 index 0000000..67467f7 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize.svg @@ -0,0 +1 @@ +assets/unmaximize_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize_dash.svg b/misc/gtk/ephemeral/unity/unmaximize_dash.svg new file mode 100644 index 0000000..535684a --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_dash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/unmaximize_dash_disabled.svg b/misc/gtk/ephemeral/unity/unmaximize_dash_disabled.svg new file mode 100644 index 0000000..f70342f --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_dash_disabled.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/unmaximize_dash_prelight.svg b/misc/gtk/ephemeral/unity/unmaximize_dash_prelight.svg new file mode 100644 index 0000000..18ce21d --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_dash_prelight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/unmaximize_dash_pressed.svg b/misc/gtk/ephemeral/unity/unmaximize_dash_pressed.svg new file mode 100644 index 0000000..3f80c80 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_dash_pressed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/unity/unmaximize_focused_normal.svg b/misc/gtk/ephemeral/unity/unmaximize_focused_normal.svg new file mode 120000 index 0000000..67467f7 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_focused_normal.svg @@ -0,0 +1 @@ +assets/unmaximize_focused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize_focused_prelight.svg b/misc/gtk/ephemeral/unity/unmaximize_focused_prelight.svg new file mode 120000 index 0000000..1d8e93e --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_focused_prelight.svg @@ -0,0 +1 @@ +assets/unmaximize_focused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize_focused_pressed.svg b/misc/gtk/ephemeral/unity/unmaximize_focused_pressed.svg new file mode 120000 index 0000000..cc56831 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_focused_pressed.svg @@ -0,0 +1 @@ +assets/unmaximize_focused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize_unfocused.svg b/misc/gtk/ephemeral/unity/unmaximize_unfocused.svg new file mode 120000 index 0000000..75a28d4 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_unfocused.svg @@ -0,0 +1 @@ +assets/unmaximize_unfocused.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize_unfocused_prelight.svg b/misc/gtk/ephemeral/unity/unmaximize_unfocused_prelight.svg new file mode 120000 index 0000000..6916a72 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_unfocused_prelight.svg @@ -0,0 +1 @@ +assets/unmaximize_unfocused_prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/unity/unmaximize_unfocused_pressed.svg b/misc/gtk/ephemeral/unity/unmaximize_unfocused_pressed.svg new file mode 120000 index 0000000..adfee26 --- /dev/null +++ b/misc/gtk/ephemeral/unity/unmaximize_unfocused_pressed.svg @@ -0,0 +1 @@ +assets/unmaximize_unfocused_pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/assets/border.svg b/misc/gtk/ephemeral/xfwm4/assets/border.svg new file mode 100644 index 0000000..c20c608 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/border.svg @@ -0,0 +1,3 @@ + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/close-active.svg b/misc/gtk/ephemeral/xfwm4/assets/close-active.svg new file mode 100644 index 0000000..5219556 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/close-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/close-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/close-inactive.svg new file mode 100644 index 0000000..e502bd2 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/close-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/close-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/close-prelight.svg new file mode 100644 index 0000000..e76c61b --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/close-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/close-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/close-pressed.svg new file mode 100644 index 0000000..49b3d7f --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/close-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/hide-active.svg b/misc/gtk/ephemeral/xfwm4/assets/hide-active.svg new file mode 100644 index 0000000..0bd69a0 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/hide-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/hide-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/hide-inactive.svg new file mode 100644 index 0000000..52191a6 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/hide-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/hide-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/hide-prelight.svg new file mode 100644 index 0000000..0fe5f34 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/hide-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/hide-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/hide-pressed.svg new file mode 100644 index 0000000..0d0200f --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/hide-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-active.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-active.svg new file mode 100644 index 0000000..866c2be --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-inactive.svg new file mode 100644 index 0000000..4c0c411 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-prelight.svg new file mode 100644 index 0000000..8e1b77d --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-pressed.svg new file mode 100644 index 0000000..c6af373 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-active.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-active.svg new file mode 100644 index 0000000..6e7df6d --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-inactive.svg new file mode 100644 index 0000000..744bc7a --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-prelight.svg new file mode 100644 index 0000000..15386be --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-pressed.svg new file mode 100644 index 0000000..3ccf314 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/maximize-toggled-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/menu-active.svg b/misc/gtk/ephemeral/xfwm4/assets/menu-active.svg new file mode 100644 index 0000000..31a33b2 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/menu-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/menu-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/menu-inactive.svg new file mode 100644 index 0000000..0445594 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/menu-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/menu-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/menu-prelight.svg new file mode 100644 index 0000000..fcfca75 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/menu-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/menu-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/menu-pressed.svg new file mode 100644 index 0000000..8d6cf77 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/menu-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-active.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-active.svg new file mode 100644 index 0000000..59ffc21 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-inactive.svg new file mode 100644 index 0000000..29a6aff --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-prelight.svg new file mode 100644 index 0000000..3c6e8a7 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-pressed.svg new file mode 100644 index 0000000..17dded9 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-active.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-active.svg new file mode 100644 index 0000000..da70b1a --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-inactive.svg new file mode 100644 index 0000000..7881051 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-prelight.svg new file mode 100644 index 0000000..305df25 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-pressed.svg new file mode 100644 index 0000000..e76b1ac --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/shade-toggled-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-active.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-active.svg new file mode 100644 index 0000000..7cbc939 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-inactive.svg new file mode 100644 index 0000000..b5524e6 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-prelight.svg new file mode 100644 index 0000000..d01a909 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-pressed.svg new file mode 100644 index 0000000..a038721 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-active.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-active.svg new file mode 100644 index 0000000..3971314 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-inactive.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-inactive.svg new file mode 100644 index 0000000..3c6ab66 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-inactive.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-prelight.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-prelight.svg new file mode 100644 index 0000000..a295058 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-prelight.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-pressed.svg b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-pressed.svg new file mode 100644 index 0000000..3daec66 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/stick-toggled-pressed.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/misc/gtk/ephemeral/xfwm4/assets/themerc b/misc/gtk/ephemeral/xfwm4/assets/themerc new file mode 100644 index 0000000..cab1363 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/themerc @@ -0,0 +1,23 @@ +# Default values can be found here: +# https://git.xfce.org/xfce/xfwm4/tree/defaults/defaults +# or +# /usr/share/xfwm4/defaults + +active_text_color=#F8F8F2 +active_text_shadow_color=#F8F8F2 +inactive_text_color=#c6c9c9 +inactive_text_shadow_color=#c6c9c9 +title_shadow_active=false +title_shadow_inactive=false +full_width_title=true +title_vertical_offset_active=0 +title_vertical_offset_inactive=0 +button_offset=0 +button_spacing=0 +shadow_delta_height=2 +shadow_delta_width=0 +shadow_delta_x=0 +shadow_delta_y=-10 +shadow_opacity=50 +show_app_icon=false +show_popup_shadow=true diff --git a/misc/gtk/ephemeral/xfwm4/assets/title.svg b/misc/gtk/ephemeral/xfwm4/assets/title.svg new file mode 100644 index 0000000..1d0402e --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/assets/title.svg @@ -0,0 +1,4 @@ + + + + diff --git a/misc/gtk/ephemeral/xfwm4/bottom-active.svg b/misc/gtk/ephemeral/xfwm4/bottom-active.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/bottom-active.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/bottom-inactive.svg b/misc/gtk/ephemeral/xfwm4/bottom-inactive.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/bottom-inactive.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/bottom-left-active.svg b/misc/gtk/ephemeral/xfwm4/bottom-left-active.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/bottom-left-active.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/bottom-left-inactive.svg b/misc/gtk/ephemeral/xfwm4/bottom-left-inactive.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/bottom-left-inactive.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/bottom-right-active.svg b/misc/gtk/ephemeral/xfwm4/bottom-right-active.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/bottom-right-active.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/bottom-right-inactive.svg b/misc/gtk/ephemeral/xfwm4/bottom-right-inactive.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/bottom-right-inactive.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/close-active.svg b/misc/gtk/ephemeral/xfwm4/close-active.svg new file mode 120000 index 0000000..fa253af --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/close-active.svg @@ -0,0 +1 @@ +assets/close-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/close-inactive.svg b/misc/gtk/ephemeral/xfwm4/close-inactive.svg new file mode 120000 index 0000000..d0a099a --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/close-inactive.svg @@ -0,0 +1 @@ +assets/close-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/close-prelight.svg b/misc/gtk/ephemeral/xfwm4/close-prelight.svg new file mode 120000 index 0000000..8ef9fbe --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/close-prelight.svg @@ -0,0 +1 @@ +assets/close-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/close-pressed.svg b/misc/gtk/ephemeral/xfwm4/close-pressed.svg new file mode 120000 index 0000000..f1c7470 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/close-pressed.svg @@ -0,0 +1 @@ +assets/close-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/hide-active.svg b/misc/gtk/ephemeral/xfwm4/hide-active.svg new file mode 120000 index 0000000..8779541 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/hide-active.svg @@ -0,0 +1 @@ +assets/hide-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/hide-inactive.svg b/misc/gtk/ephemeral/xfwm4/hide-inactive.svg new file mode 120000 index 0000000..5492868 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/hide-inactive.svg @@ -0,0 +1 @@ +assets/hide-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/hide-prelight.svg b/misc/gtk/ephemeral/xfwm4/hide-prelight.svg new file mode 120000 index 0000000..4134f9f --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/hide-prelight.svg @@ -0,0 +1 @@ +assets/hide-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/hide-pressed.svg b/misc/gtk/ephemeral/xfwm4/hide-pressed.svg new file mode 120000 index 0000000..1965964 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/hide-pressed.svg @@ -0,0 +1 @@ +assets/hide-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/left-active.svg b/misc/gtk/ephemeral/xfwm4/left-active.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/left-active.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/left-inactive.svg b/misc/gtk/ephemeral/xfwm4/left-inactive.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/left-inactive.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-active.svg b/misc/gtk/ephemeral/xfwm4/maximize-active.svg new file mode 120000 index 0000000..3cbfdb0 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-active.svg @@ -0,0 +1 @@ +assets/maximize-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-inactive.svg b/misc/gtk/ephemeral/xfwm4/maximize-inactive.svg new file mode 120000 index 0000000..1f35d2a --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-inactive.svg @@ -0,0 +1 @@ +assets/maximize-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-prelight.svg b/misc/gtk/ephemeral/xfwm4/maximize-prelight.svg new file mode 120000 index 0000000..de7c8a6 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-prelight.svg @@ -0,0 +1 @@ +assets/maximize-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-pressed.svg b/misc/gtk/ephemeral/xfwm4/maximize-pressed.svg new file mode 120000 index 0000000..9315905 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-pressed.svg @@ -0,0 +1 @@ +assets/maximize-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-toggled-active.svg b/misc/gtk/ephemeral/xfwm4/maximize-toggled-active.svg new file mode 120000 index 0000000..281bc52 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-toggled-active.svg @@ -0,0 +1 @@ +assets/maximize-toggled-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-toggled-inactive.svg b/misc/gtk/ephemeral/xfwm4/maximize-toggled-inactive.svg new file mode 120000 index 0000000..2c48981 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-toggled-inactive.svg @@ -0,0 +1 @@ +assets/maximize-toggled-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-toggled-prelight.svg b/misc/gtk/ephemeral/xfwm4/maximize-toggled-prelight.svg new file mode 120000 index 0000000..a02ada8 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-toggled-prelight.svg @@ -0,0 +1 @@ +assets/maximize-toggled-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/maximize-toggled-pressed.svg b/misc/gtk/ephemeral/xfwm4/maximize-toggled-pressed.svg new file mode 120000 index 0000000..bc997d0 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/maximize-toggled-pressed.svg @@ -0,0 +1 @@ +assets/maximize-toggled-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/menu-active.svg b/misc/gtk/ephemeral/xfwm4/menu-active.svg new file mode 120000 index 0000000..26c4ca1 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/menu-active.svg @@ -0,0 +1 @@ +assets/menu-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/menu-inactive.svg b/misc/gtk/ephemeral/xfwm4/menu-inactive.svg new file mode 120000 index 0000000..f192992 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/menu-inactive.svg @@ -0,0 +1 @@ +assets/menu-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/menu-prelight.svg b/misc/gtk/ephemeral/xfwm4/menu-prelight.svg new file mode 120000 index 0000000..d52b110 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/menu-prelight.svg @@ -0,0 +1 @@ +assets/menu-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/menu-pressed.svg b/misc/gtk/ephemeral/xfwm4/menu-pressed.svg new file mode 120000 index 0000000..c2d0565 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/menu-pressed.svg @@ -0,0 +1 @@ +assets/menu-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/right-active.svg b/misc/gtk/ephemeral/xfwm4/right-active.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/right-active.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/right-inactive.svg b/misc/gtk/ephemeral/xfwm4/right-inactive.svg new file mode 120000 index 0000000..cec0be5 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/right-inactive.svg @@ -0,0 +1 @@ +assets/border.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-active.svg b/misc/gtk/ephemeral/xfwm4/shade-active.svg new file mode 120000 index 0000000..66e2e36 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-active.svg @@ -0,0 +1 @@ +assets/shade-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-inactive.svg b/misc/gtk/ephemeral/xfwm4/shade-inactive.svg new file mode 120000 index 0000000..9cc6e4c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-inactive.svg @@ -0,0 +1 @@ +assets/shade-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-prelight.svg b/misc/gtk/ephemeral/xfwm4/shade-prelight.svg new file mode 120000 index 0000000..ef22f69 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-prelight.svg @@ -0,0 +1 @@ +assets/shade-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-pressed.svg b/misc/gtk/ephemeral/xfwm4/shade-pressed.svg new file mode 120000 index 0000000..18b0b9b --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-pressed.svg @@ -0,0 +1 @@ +assets/shade-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-toggled-active.svg b/misc/gtk/ephemeral/xfwm4/shade-toggled-active.svg new file mode 120000 index 0000000..f00cc03 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-toggled-active.svg @@ -0,0 +1 @@ +assets/shade-toggled-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-toggled-inactive.svg b/misc/gtk/ephemeral/xfwm4/shade-toggled-inactive.svg new file mode 120000 index 0000000..639c43f --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-toggled-inactive.svg @@ -0,0 +1 @@ +assets/shade-toggled-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-toggled-prelight.svg b/misc/gtk/ephemeral/xfwm4/shade-toggled-prelight.svg new file mode 120000 index 0000000..3cf5b48 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-toggled-prelight.svg @@ -0,0 +1 @@ +assets/shade-toggled-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/shade-toggled-pressed.svg b/misc/gtk/ephemeral/xfwm4/shade-toggled-pressed.svg new file mode 120000 index 0000000..63615fc --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/shade-toggled-pressed.svg @@ -0,0 +1 @@ +assets/shade-toggled-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-active.svg b/misc/gtk/ephemeral/xfwm4/stick-active.svg new file mode 120000 index 0000000..092f2ac --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-active.svg @@ -0,0 +1 @@ +assets/stick-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-inactive.svg b/misc/gtk/ephemeral/xfwm4/stick-inactive.svg new file mode 120000 index 0000000..1085f48 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-inactive.svg @@ -0,0 +1 @@ +assets/stick-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-prelight.svg b/misc/gtk/ephemeral/xfwm4/stick-prelight.svg new file mode 120000 index 0000000..87a95c7 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-prelight.svg @@ -0,0 +1 @@ +assets/stick-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-pressed.svg b/misc/gtk/ephemeral/xfwm4/stick-pressed.svg new file mode 120000 index 0000000..a371c37 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-pressed.svg @@ -0,0 +1 @@ +assets/stick-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-toggled-active.svg b/misc/gtk/ephemeral/xfwm4/stick-toggled-active.svg new file mode 120000 index 0000000..76aa4bc --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-toggled-active.svg @@ -0,0 +1 @@ +assets/stick-toggled-active.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-toggled-inactive.svg b/misc/gtk/ephemeral/xfwm4/stick-toggled-inactive.svg new file mode 120000 index 0000000..c404b45 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-toggled-inactive.svg @@ -0,0 +1 @@ +assets/stick-toggled-inactive.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-toggled-prelight.svg b/misc/gtk/ephemeral/xfwm4/stick-toggled-prelight.svg new file mode 120000 index 0000000..41442cf --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-toggled-prelight.svg @@ -0,0 +1 @@ +assets/stick-toggled-prelight.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/stick-toggled-pressed.svg b/misc/gtk/ephemeral/xfwm4/stick-toggled-pressed.svg new file mode 120000 index 0000000..5a8b28c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/stick-toggled-pressed.svg @@ -0,0 +1 @@ +assets/stick-toggled-pressed.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/themerc b/misc/gtk/ephemeral/xfwm4/themerc new file mode 120000 index 0000000..737ee25 --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/themerc @@ -0,0 +1 @@ +assets/themerc \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-1-active.svg b/misc/gtk/ephemeral/xfwm4/title-1-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-1-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-1-inactive.svg b/misc/gtk/ephemeral/xfwm4/title-1-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-1-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-2-active.svg b/misc/gtk/ephemeral/xfwm4/title-2-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-2-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-2-inactive.svg b/misc/gtk/ephemeral/xfwm4/title-2-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-2-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-3-active.svg b/misc/gtk/ephemeral/xfwm4/title-3-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-3-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-3-inactive.svg b/misc/gtk/ephemeral/xfwm4/title-3-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-3-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-4-active.svg b/misc/gtk/ephemeral/xfwm4/title-4-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-4-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-4-inactive.svg b/misc/gtk/ephemeral/xfwm4/title-4-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-4-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-5-active.svg b/misc/gtk/ephemeral/xfwm4/title-5-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-5-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/title-5-inactive.svg b/misc/gtk/ephemeral/xfwm4/title-5-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/title-5-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/top-left-active.svg b/misc/gtk/ephemeral/xfwm4/top-left-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/top-left-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/top-left-inactive.svg b/misc/gtk/ephemeral/xfwm4/top-left-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/top-left-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/top-right-active.svg b/misc/gtk/ephemeral/xfwm4/top-right-active.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/top-right-active.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/misc/gtk/ephemeral/xfwm4/top-right-inactive.svg b/misc/gtk/ephemeral/xfwm4/top-right-inactive.svg new file mode 120000 index 0000000..a45337c --- /dev/null +++ b/misc/gtk/ephemeral/xfwm4/top-right-inactive.svg @@ -0,0 +1 @@ +assets/title.svg \ No newline at end of file diff --git a/previews/lovelace.png b/previews/lovelace.png deleted file mode 100644 index bac59e9..0000000 Binary files a/previews/lovelace.png and /dev/null differ diff --git a/previews/manta.png b/previews/manta.png deleted file mode 100644 index 6179bbe..0000000 Binary files a/previews/manta.png and /dev/null differ diff --git a/previews/reasons.png b/previews/reasons.png deleted file mode 100644 index 8595742..0000000 Binary files a/previews/reasons.png and /dev/null differ diff --git a/previews/skyfall.png b/previews/skyfall.png deleted file mode 100644 index 0426e2b..0000000 Binary files a/previews/skyfall.png and /dev/null differ