Compare commits

74 Commits

Author SHA1 Message Date
Rene Kievits
294b15e9ea worked on some stuff and finally the new install script (no idea if it works yet) 2023-10-25 15:01:31 +02:00
Rene Kievits
bf8520ed9d update network widget to (hopefully) show ethernet/wifi accordingly 2023-05-15 13:27:04 +02:00
Rene Kievits
c023714060 add rubato animation to overflow widget for smoother scrolling, can lagg for big lists 2023-05-15 13:03:42 +02:00
Rene Kievits
2d68ee71da rewritten network module, not finished yet 2023-05-15 13:02:59 +02:00
Rene Kievits
1c7d2be751 new network daemon(not finished) 2023-05-13 21:58:38 +02:00
Rene Kievits
3bae4f4403 some fixes 2023-04-28 02:29:47 +02:00
8171f1c97e why was it deleted?? 2023-04-28 01:24:36 +02:00
2bf4ff9f13 fix applauncher for duoscreen 2023-04-28 01:23:13 +02:00
0e2cd5099c update submodules 2023-04-27 17:47:59 +02:00
Rene Kievits
0e3aafcff5 Some fixes 2023-04-26 00:28:06 +02:00
Rene Kievits
24bce4c810 rewritten app launcher 2023-04-24 22:12:18 +02:00
Rene Kievits
ea77c5f1a1 added config files 2023-04-20 01:05:39 +02:00
Rene Kievits
3a85753a74 Big rewrite part 1 2023-04-20 01:04:06 +02:00
61930bf561 add restart detection to prevent autostart to trigger on restarts 2023-03-29 02:27:14 +02:00
e3757c0ef9 fix highlight 2023-03-29 02:02:26 +02:00
Rene Kievits
dcbdbcb4fd fix merge conflict 2023-03-28 14:27:31 +02:00
Rene Kievits
6392dc76ef inpubox almost done 2023-03-28 14:26:37 +02:00
Rene Kievits
78547a1501 more work for inputbox 2023-03-21 16:20:50 +01:00
95d0175f17 some inputbox fixed, but highlight still needs work 2023-03-21 11:08:54 +01:00
f399235db0 yes, I'm very commit lazy 2023-03-19 19:22:02 +01:00
Rene Kievits
4f3fb75687 some work on the network manager 2022-12-14 00:04:45 +01:00
44836685ec fix wrong files added 2022-12-13 23:37:18 +01:00
1751ab9d45 rewritten nice, add setup module (not done) 2022-12-13 23:36:14 +01:00
d45e2496b1 a lot of stuff 2022-12-11 17:30:18 +01:00
Rene Kievits
42a888c311 clean up 2022-12-08 16:06:16 +01:00
675ab6692d small neofetch update 2022-11-29 20:51:26 +01:00
2abdb05ab9 updated some configs, added kitty config and updated theme_config 2022-11-29 19:43:29 +01:00
Rene Kievits
642338e577 rewritten backlight helper and osd 2022-11-28 13:03:27 +01:00
d63ffa1171 finished bluetooth module, cleaned and documented 2022-11-28 06:47:05 +01:00
3e628db637 fix typo 2022-11-28 06:11:47 +01:00
be25a16e3c Finished work on application launcher and fixed some bugs + cleanup and documentation 2022-11-28 05:43:47 +01:00
Rene Kievits
10f56a7273 finished application laucnher and bluetooth widget 2022-11-27 10:58:27 +01:00
Rene Kievits
c6341f84e7 desktop, calendar, various other modules 2022-11-22 16:59:55 +01:00
Rene Kievits
210682e955 add option to choose between client class or name in the taskbar 2022-09-25 02:10:21 +02:00
Rene Kievits
747b8a9787 change awful.utils.get_dir to gears.filesystem.configuration_dir 2022-09-22 18:37:48 +02:00
Rene Kievits
6cdda097c1 fix two nil errors 2022-09-22 18:18:37 +02:00
Rene Kievits
b5c6dc31f7 rewrote a lot of stuff especially the bluetooth module. fixed some errors 2022-09-21 21:10:17 +02:00
Rene
3d8b240ef0 a lot of stuff and added dbus_proxy as sub module 2022-09-12 21:16:19 +02:00
Rene
e5cdb33eec add new calendar widget with ics file support, fix some bugs and added some game rules so steam games fullscreen isn't as annoying 2022-08-29 11:06:38 +02:00
Rene
f2e6709f6b update gitignore 2022-08-25 02:02:14 +02:00
Rene
7a9b93aa65 update gitignore 2022-08-25 01:59:04 +02:00
Crylia
3d743c6be0 fix some bugs in the icon lookup 2022-08-25 01:55:28 +02:00
Crylia
fa656cd5f3 update gitignore 2022-08-25 01:53:01 +02:00
Rene
686de62f0f Forgot what I did, probably some stuff 2022-08-23 20:39:18 +02:00
Rene
be6a819ca9 Add new titlebar and toggle for top/left titlebar 2022-08-17 01:34:22 +02:00
Rene
268cb29a6b add new context_menu and rework dock, programs can now be added to the dock my right clicking any program in the application launcher an choosing Add to Dock 2022-08-15 15:18:51 +02:00
Rene
9cea2f98cc fix dock spawn 2022-08-05 01:41:25 +02:00
Rene
535c763a30 Fix some more bugs related to the new icon implementation 2022-08-03 04:19:42 +02:00
Rene
2422b9a07f Fixed some bugs with the new icon system 2022-08-02 00:29:35 +02:00
Rene
e425b7b79e Switch completely to Gio for icons and it fixed the startup/lookup time for icons. Now works with every icon theme. Taglist/Tasklist/Window switcher still rely on WM_CLASS and WM_NAME to match the icon name, this probably can't be fixed in a sane way 2022-08-01 23:39:45 +02:00
Rene
978a8580c8 Change to Gtk icon lookup for the application launcher, this cuts loading times to basically 0, notifications now only appear on primary screen 2022-07-30 05:13:07 +02:00
Rene
e727015e81 Add application launcher and rewritten window switcher, remove rofi as its no longer needed and replaced by widgets. Fixed a lot of bugs and weird behaviour 2022-07-29 13:21:56 +02:00
Kievits Rene
b2e22fdf8a converted all colors to theme_config.lua; fixed and added some bugs; rewrote some stuff and added some 2022-06-27 01:08:45 +02:00
Crylia
0ccd38f03a moved watch to helper 2022-06-19 16:46:39 +02:00
Crylia
7280db1a5b Fix dock on startup 2022-06-18 10:40:27 +02:00
Crylia
6e1cc7eaa4 small fix 2022-06-16 00:49:57 +02:00
Crylia
fb22b50a97 Add new window switcher on super+tab and smaller fixes 2022-06-16 00:30:56 +02:00
Rene Kievits
454c80336c Bluetooth hotfix 2022-06-14 08:56:04 +02:00
Rene Kievits
2b9003c70a Battery hotfix, passed battery_path instead of battery_kind 2022-06-14 07:00:17 +02:00
Kievits Rene
b479255c39 Add install script and new Readme from #27 2022-06-14 06:36:47 +02:00
Kievits Rene
bc5348f53a Removed discord from the icons folder ... wtf? 2022-06-14 06:35:12 +02:00
Kievits Rene
521d392769 Reworked a whole lot. New config file and theme config file for easier changes. Did #19. And much more 2022-06-14 06:33:33 +02:00
Kievits Rene
fd74ab9fb4 remove Hover_signal 2022-06-03 07:19:24 +02:00
Rene Kievits
1ea91d2b6d rewrote bluetooth to using the dbus, small changes to volume_controller, added more rubato animations 2022-06-03 07:13:44 +02:00
Kievits Rene
3dfd991456 Add overflow widget. The top level folder wibox overrides the default awesome one. Fix bluez crashing awesome when no bluetooth 2022-06-02 03:58:13 +02:00
Kievits Rene
f7d7fb1b95 remove default autostart to avoid confusion #21 2022-06-02 00:29:23 +02:00
Rene Kievits
da2d55e149 forgot to add those files 2022-06-01 09:43:19 +02:00
Rene Kievits
ed9043c4ee add overflow widget from PR #3309 in awesomewm 2022-06-01 09:07:55 +02:00
Rene Kievits
dadb6ef1dc Rewrote bluetooth widget with bdus. Added default song_info icon for artist_art 2022-06-01 03:07:12 +02:00
Rene Kievits
dbc7708f58 Rewrote the Battery widget to work with dbus. Widget also supports to report battery states for every device possible 2022-05-31 20:48:25 +02:00
Kievits Rene
0e22af5a87 fix xorg crash when n.timeout == 0 in arcchart max_value 2022-05-31 15:10:24 +02:00
Rene Kievits
ab37a88570 fix volume problems with bluez and add dbus folder 2022-05-31 02:35:36 +02:00
Kievits Rene
16c6345135 add rubato submodule 2022-05-31 01:22:14 +02:00
Kievits Rene
9049f5c51c Add new notification-center module with various widgets, add rubato animations and other fixes and improvements 2022-05-31 01:16:00 +02:00
372 changed files with 23984 additions and 7835 deletions

View File

@@ -0,0 +1,92 @@
{
"autostart": [
"nm-applet",
"protonvpn-cli ks --off",
"picom",
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1",
"setxkbmap -option caps:swapescape",
"/home/crylia/.screenlayout/double.sh",
"gnome-keyring-daemon --start --components=secrets"
],
"battery_kind": "BATTERY",
"battery_path": null,
"brightness_step": 2,
"dock_icon_size": 64,
"energy_manager": "xfce4-power-manager-settings",
"file_manager": "nemo",
"font": "JetBrainsMono Nerd Font",
"font-size": 12,
"font-weight": "Bold",
"gtk_settings": "lxappearance",
"icon_theme": "Papirus-Dark",
"kblayout": [
"de",
"ru"
],
"layouts": [
"awful.layout.suit.fair",
"awful.layout.suit.floating"
],
"modkey": "Mod4",
"namestyle": "userhost",
"screen_settings": "arandr",
"screenshot_program": "flameshot gui",
"status_bar_widgets": [
"cpu_usage",
"cpu_temp",
"ram_usage",
"microphone",
"volume",
"gpu_temp",
"gpu_usage",
"backlight",
"battery"
],
"taskbar_use_name": true,
"terminal": "kitty",
"text_editor": "code",
"titlebar_exception": [
"protonvpn"
],
"titlebar_position": "left",
"titlebar_items": {
"left_and_bottom": [
"icon"
],
"right_and_top": [
"close",
"maximize",
"minimize"
]
},
"wallpaper": "/home/crylia/Bilder/Hintergründe/1223939.jpg",
"weather_secrets": {
"key": "e71b00168ca7219563dde4514a425b14",
"city_id": "2864118",
"unit": "metric"
},
"web_browser": "firefox",
"crylia_bar": [
{
"left_bar": [
"Tiling Layout",
"Systray",
"Taglist"
],
"center_bar": [
"Tasklist"
],
"right_bar": [
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
]
}

View File

@@ -0,0 +1,14 @@
{
"bg": "#282c34",
"bg1": "#3e4451",
"bg2": "#545d6d",
"fg": "#FFFFFF",
"fg_dark": "#282c34",
"border_color": "#3e4451",
"bg_red": "#E06C75",
"bg_green": "#98C379",
"bg_yellow": "#E5C07B",
"bg_blue": "#61AFEF",
"bg_purple": "#C678DD",
"bg_teal": "#56B6C2"
}

View File

@@ -0,0 +1,22 @@
{
"fg_dark": "#212121",
"fg": "#f5f5f5",
"bg": "#212121",
"bg1": "#424242",
"bg2": "#616161",
"bg_red": "#ef9a9a",
"bg_green": "#a5d6a7",
"bg_yellow": "#fff59d",
"bg_blue": "#90caf9",
"bg_teal": "#80cbc4",
"bg_purple": "#CE93D8",
"bg_deeppurple": "#B39DDB",
"bg_cyan": "#80DEEA",
"bg_orange": "#ffcc80",
"bg_deeporange": "#ffab91",
"bg_lightblue": "#81D4FA",
"bg_pink": "#f48fb1",
"bg_lightgreen": "#C5E1A5",
"bg_lime": "#E6EE9C",
"border_color": "#424242"
}

7
.gitignore vendored
View File

@@ -1,3 +1,4 @@
**/awesome/.idea
**/awesome/.vscode
**/awesome/start-xephyr.sh
awesome/.idea
awesome/.vscode
awesome/start-xephyr.sh
awesome/src/config/**

9
.gitmodules vendored Normal file
View File

@@ -0,0 +1,9 @@
[submodule "awesome/src/lib/rubato"]
path = awesome/src/lib/rubato
url = https://github.com/andOrlando/rubato
[submodule "awesome/src/lib/color"]
path = awesome/src/lib/color
url = https://github.com/andOrlando/color
[submodule "awesome/src/lib/lua-dbus_proxy"]
path = awesome/src/lib/lua-dbus_proxy
url = git@github.com:Crylia/lua-dbus_proxy.git

18
.vscode/settings.json vendored
View File

@@ -1,14 +1,18 @@
{
"Lua.diagnostics.disable": [
"undefined-field",
"undefined-doc-name",
"deprecated"
],
"Lua.diagnostics.globals": [
"user_vars",
"modkey",
"root",
"awesome",
"mouse",
"mousegrabber",
"client",
"screen",
"mouse",
"double_click_timer",
"vim",
"lspSymbol"
"selection",
"tag",
"root",
"vim"
]
}

12
.zshrc Normal file
View File

@@ -0,0 +1,12 @@
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="robbyrussell"
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=6
plugins=(git zsh-autosuggestions)
source $ZSH/oh-my-zsh.sh
alias spicetify=/home/crylia/.spicetify/spicetify
eval "$(starship init zsh)"

View File

@@ -53,6 +53,26 @@ Everything you see is done purely because I hate myself and like to give myself
2. Important dependencies but can be replaced, the theme might behave weird without these or without proper reconfiguration!
3. Nice to have and are the default. Can be easily changed without any worries!
#### Using the install script (Thanks to @JulianGR)
>**Arch**
```bash
git clone https://github.com/Crylia/crylia-theme
cd crylia-theme
chmod +x autoinstall_arch.sh
./autoinstall_arch.sh
```
>**Pop!_OS/Ubuntu**
```bash
git clone https://github.com/Crylia/crylia-theme
cd crylia-theme
chmod +x autoinstall_pop_os.sh
./autoinstall_pop_os.sh
```
<details>
<summary><b>1. Dependencies</b></summary>
@@ -224,6 +244,24 @@ sudo pacman -S lightdm light-locker
```bash
sudo apt install lightdm light-locker
```
#### **MesloLGS NF Font**
> **Arch**
```bash
sudo pacman -S ttf-meslo-nerd-font-powerlevel10k
```
> **Ubuntu**
```bash
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf
```
</details>
<details>

View File

@@ -10,6 +10,9 @@
# Set the window Width and Height in console columns.
# The window size will change if the font size changes.
window:
padding:
x: 24
y: 24
dimensions:
columns: 110
lines: 30
@@ -24,63 +27,61 @@ scrolling:
# Font family and style
font:
normal:
family: "MesloLGS NF"
family: "JetBrains Mono Nerd Font"
style: Regular
bold:
family: "MesloLGS NF"
family: "JetBrains Mono Nerd Font"
style: Bold
italic:
family: "MesloLGS NF"
family: "JetBrains Mono Nerd Font"
style: italic
bold_italic:
family: "MesloLGS NF"
family: "JetBrains Mono Nerd Font"
style: Bold Italic
size: 12.0
size: 13.0
offset:
x: 0
y: 0
draw_bold_text_with_bright_colors: false
glyph_offset:
y: 0
# Background opacity from 0.0 transparent, 1.0 Opaque
window:
opacity: 0.4
# Terminal colors
colors:
primary:
background: '#000000'
foreground: '#FFFFFF'
background: '0x131621'
foreground: '0xa6accd'
cursor:
cursor: '#00b8ff'
text: CellBackground
cursor: CellForeground
search:
matches:
foreground: '#000000'
background: '#EA80FC'
foreground: '0x1b1e28'
background: '0xadd7ff'
focus_match:
foreground: '#000000'
background: '#E040FB'
bar:
foreground: '#B388FF'
background: '#121212'
foreground: '0x1b1e28'
background: '0xadd7ff'
selection:
text: '#EA80FC'
background: '#121212'
text: CellForeground
background: '0x303340'
normal:
black: '#121212'
red: '#ff5252'
green: '#8BC34A'
yellow: '#FFFF00'
blue: '#82B1FF'
magenta: '#EA80FC'
cyan: '#84FFFF'
white: '#FFFFFF'
black: '0x1b1e28'
red: '0xd0679d'
green: '0x5de4c7'
yellow: '0xfffac2'
blue: '#435c89'
magenta: '0xfcc5e9'
cyan: '0xadd7ff'
white: '0xffffff'
bright:
black: '#363636'
red: '#ef9a9a'
green: '#A5D6A7'
yellow: '#FFF59D'
blue: '#90CAF9'
magenta: '#CE93D8'
cyan: '#80DEEA'
white: '#FFFFFF'
black: '0xa6accd'
red: '0xd0679d'
green: '0x5de4c7'
yellow: '0xfffac2'
blue: '0xadd7ff'
magenta: '0xfae4fc'
cyan: '0x89ddff'
white: '0xffffff'
# Cursor styling
cursor:
style: Beam

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

23
autoinstall_arch.sh Normal file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
echo " "
echo " ___ __ ____________ ____________ ____ _______ "
echo " / | / / / /_ __/ __ \/ ____/ __ \ \/ / / / _/ | "
echo " / /| |/ / / / / / / / / / / / /_/ /\ / / / // /| | "
echo " / ___ / /_/ / / / / /_/ / /___/ _, _/ / / /____/ // ___ | "
echo " /_/ |_\____/ /_/ \____/\____/_/ |_| /_/_____/___/_/ |_| "
echo " "
yay -S awesome-git rofi-git picom-jonaburg-git ttf-meslo-nerd-font-powerlevel10k
sudo pacman -S papirus-icon-theme pulseaudio-alsa upower bluez bluez-utils xorg-setxkbmap xfce4-power-manager playerctl lightdm light-locker alacritty thunar flameshot
cd
git clone --recurse-submodules https://github.com/Crylia/crylia-theme
cd crylia-theme
cp -r awesome ~/.config/.
cp -r picom.conf ~/.config/.
cp -r rofi ~/.config/.
cp -r alacritty ~/.config/.
echo " ===== make sure to reboot and select awesome desktop ====== "

58
autoinstall_pop_os.sh Normal file
View File

@@ -0,0 +1,58 @@
#!/bin/bash
echo " "
echo " ___ __ ____________ ____________ ____ _______ "
echo " / | / / / /_ __/ __ \/ ____/ __ \ \/ / / / _/ | "
echo " / /| |/ / / / / / / / / / / / /_/ /\ / / / // /| | "
echo " / ___ / /_/ / / / / /_/ / /___/ _, _/ / / /____/ // ___ | "
echo " /_/ |_\____/ /_/ \____/\____/_/ |_| /_/_____/___/_/ |_| "
echo " "
# dependencies for meson, ninja, rofi, awesome and all extra optional packages
sudo apt -y install meson ninja-build cmake cmake-data pkg-config papirus-icon-theme xorg build-essential git make autoconf automake flex bison check go-md2man doxygen cppcheck ohcount pulseaudio-utils upower bluez xorg xfce4-power-manager playerctl lightdm light-locker libxcb-ewmh-dev libxcb-xfixes0-dev libev-dev libxcb-damage0-dev libxcb-sync-dev libxcb-composite0-dev libxcb-present-dev uthash-dev libconfig-dev libgl-dev alacritty bison flex check
# fonts
cd
mkdir .fonts
cd .fonts
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf
wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf
# awesome-git (awesome from apt does NOT work)
cd
sudo apt build-dep -y awesome
git clone https://github.com/awesomewm/awesome
cd awesome
make package
cd build/
sudo dpkg -i awesome*.deb
# rofi (rofi from apt does NOT work)
cd
git clone https://github.com/davatorium/rofi/
cd rofi
meson setup build
ninja -C build
ninja -C build install
# picom (picom from apt does NOT work)
cd
git clone https://github.com/jonaburg/picom
cd picom
meson --buildtype=release . build
sudo ninja -C build
sudo ninja -C build install
cd
git clone --recurse-submodules https://github.com/Crylia/crylia-theme
cd crylia-theme
cp -r awesome ~/.config/.
cp -r picom.conf ~/.config/.
cp -r rofi ~/.config/.
cp -r alacritty ~/.config/.
echo " ===== make sure to reboot and select awesome desktop ====== "

View File

@@ -0,0 +1,447 @@
---------------------------------------------------------------------------
-- This widget can be used to type text and get the text from it.
--@DOC_wibox_widget_defaults_inputbox_EXAMPLE@
--
-- @author Rene Kievits
-- @copyright 2022, Rene Kievits
-- @module awful.widget.inputbox
---------------------------------------------------------------------------
local setmetatable = setmetatable
local beautiful = require('beautiful')
local gtable = require('gears.table')
local base = require('wibox.widget.base')
local gstring = require('gears.string')
local akeygrabber = require('awful.keygrabber')
local akey = require('awful.key')
local textbox = require('wibox.widget.textbox')
local capi = {
selection = selection,
mousegrabber = mousegrabber,
mouse = mouse,
}
local inputbox = { mt = {} }
--- Formats the text with a cursor and highlights if set.
local function text_with_cursor(text, cursor_pos, self)
local char, spacer, text_start, text_end
local cursor_fg = beautiful.inputbox_cursor_fg or '#313131'
local cursor_bg = beautiful.inputbox_cursor_bg or '#0dccfc'
local placeholder_text = self.hint_text or ''
local placeholder_fg = beautiful.inputbox_placeholder_fg or '#777777'
local highlight_bg = beautiful.inputbox_highlight_bg or '#35ffe4'
local highlight_fg = beautiful.inputbox_highlight_fg or '#000000'
if text == '' then
return "<span foreground='" .. placeholder_fg .. "'>" .. placeholder_text .. '</span>'
end
local offset = 0
if text:sub(cursor_pos - 1, cursor_pos - 1) == -1 then
offset = 1
end
if #text < cursor_pos then
char = ' '
spacer = ''
text_start = gstring.xml_escape(text)
text_end = ''
else
char = gstring.xml_escape(text:sub(cursor_pos, cursor_pos + offset))
spacer = ' '
text_start = gstring.xml_escape(text:sub(1, cursor_pos - 1))
text_end = gstring.xml_escape(text:sub(cursor_pos + offset + 1))
end
if self._private.highlight and self._private.highlight.cur_pos_start and self._private.highlight.cur_pos_end then
-- split the text into 3 parts based on the highlight and cursor position
local text_start_highlight = gstring.xml_escape(text:sub(1, self._private.highlight.cur_pos_start - 1))
local text_highlighted = gstring.xml_escape(text:sub(self._private.highlight.cur_pos_start,
self._private.highlight.cur_pos_end))
local text_end_highlight = gstring.xml_escape(text:sub(self._private.highlight.cur_pos_end + 1))
return text_start_highlight ..
"<span foreground='" .. highlight_fg .. "' background='" .. highlight_bg .. "'>" ..
text_highlighted .. '</span>' .. text_end_highlight
else
return text_start .. "<span background='" .. cursor_bg .. "' foreground='" .. cursor_fg .. "'>" ..
char .. '</span>' .. text_end .. spacer
end
end
function inputbox:layout(_, width, height)
if self._private.widget then
return { base.place_widget_at(self._private.widget, 0, 0, width, height) }
end
end
function inputbox:fit(context, width, height)
local w, h = 0, 0
if self._private.widget then
w, h = base.fit_widget(self, context, self._private.widget, width, height)
end
return w, h
end
inputbox.set_widget = base.set_widget_common
--- Clears the current text
function inputbox:clear()
self:set_text('')
end
function inputbox:get_text()
return self._private.text or ''
end
function inputbox:set_text(text)
self._private.text = text
self.markup = text_with_cursor(self:get_text(), #self:get_text(), self)
self:emit_signal('property::text', text)
end
--- Stop the keygrabber and mousegrabber
function inputbox:stop()
if (not self.akeygrabber) or (not self.akeygrabber.is_running) then return end
self:emit_signal('stopped')
self.akeygrabber.stop()
end
function inputbox:focus()
if (not self.akeygrabber) or (not self.akeygrabber.is_running) then
akeygrabber.stop()
self:run()
end
self:connect_signal('button::press', function()
if capi.mouse.current_widget ~= self then
self:emit_signal('keygrabber::stop', '')
end
end)
end
--- Init the inputbox and start the keygrabber
function inputbox:run()
if not self._private.text then self._private.text = '' end
-- Init the cursor position, but causes on refocus the cursor to move to the left
local cursor_pos = #self:get_text() + 1
-- Init and reset(when refocused) the highlight
self._private.highlight = {}
self.akeygrabber = akeygrabber {
autostart = true,
start_callback = function()
self:emit_signal('started')
end,
stop_callback = function(_, stop_key)
if stop_key == 'Return' then
self:emit_signal('submit', self:get_text(), stop_key)
else
self:emit_signal('stopped', stop_key)
end
end,
stop_key = { 'Escape', 'Return' },
keybindings = {
--lShift, rShift = #50, #62
--lControl, rControl = #37, #105
akey {
modifiers = { 'Shift' },
key = 'Left', -- left
on_press = function()
if cursor_pos > 1 then
local offset = (self._private.text:sub(cursor_pos - 1, cursor_pos - 1):wlen() == -1) and 1 or 0
if not self._private.highlight.cur_pos_start then
self._private.highlight.cur_pos_start = cursor_pos - 1
end
if not self._private.highlight.cur_pos_end then
self._private.highlight.cur_pos_end = cursor_pos
end
if self._private.highlight.cur_pos_start < cursor_pos then
self._private.highlight.cur_pos_end = self._private.highlight.cur_pos_end - 1
else
self._private.highlight.cur_pos_start = self._private.highlight.cur_pos_start
end
cursor_pos = cursor_pos - 1
end
if cursor_pos < 1 then
cursor_pos = 1
elseif cursor_pos > #self._private.text + 1 then
cursor_pos = #self._private.text + 1
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', 'Shift', 'Left')
end,
},
akey {
modifiers = { 'Shift' },
key = 'Right', -- right
on_press = function()
if #self._private.text >= cursor_pos then
if not self._private.highlight.cur_pos_end then
self._private.highlight.cur_pos_end = cursor_pos - 1
end
if not self._private.highlight.cur_pos_start then
self._private.highlight.cur_pos_start = cursor_pos
end
if self._private.highlight.cur_pos_end <= cursor_pos then
self._private.highlight.cur_pos_end = self._private.highlight.cur_pos_end + 1
else
self._private.highlight.cur_pos_start = self._private.highlight.cur_pos_start + 1
end
cursor_pos = cursor_pos + 1
if cursor_pos > #self._private.text + 1 then
self._private.highlight = {}
end
end
if cursor_pos < 1 then
cursor_pos = 1
elseif cursor_pos > #self._private.text + 1 then
cursor_pos = #self._private.text + 1
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', 'Shift', 'Right')
end,
},
akey {
modifiers = { 'Control' },
key = 'a', -- a
on_press = function()
-- Mark the entire text
self._private.highlight = {
cur_pos_start = 1,
cur_pos_end = #self._private.text,
}
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', 'Control', 'a')
end,
},
akey {
modifiers = { 'Control' },
key = 'v', -- v
on_press = function()
local sel = capi.selection()
if sel then
sel = sel:gsub('\n', '')
if self._private.highlight and self._private.highlight.cur_pos_start and
self._private.highlight.cur_pos_end then
-- insert the text into the selected part
local text_start = self._private.text:sub(1, self._private.highlight.cur_pos_start - 1)
local text_end = self._private.text:sub(self._private.highlight.cur_pos_end + 1)
self:set_text(text_start .. sel .. text_end)
self._private.highlight = {}
cursor_pos = #text_start + #sel + 1
else
self:set_text(self._private.text:sub(1, cursor_pos - 1) ..
sel .. self._private.text:sub(cursor_pos))
cursor_pos = cursor_pos + #sel
end
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', 'Control', 'v')
end,
},
akey {
modifiers = { 'Control' },
key = 'c', -- c
on_press = function()
--TODO
end,
},
akey {
modifiers = { 'Control' },
key = 'x', -- x
on_press = function()
--TODO
end,
},
akey {
modifiers = { 'Control' },
key = 'Left', -- left
on_press = function()
-- Find all spaces
local spaces = {}
local t, i = self._private.text, 0
while t:find('%s') do
i = t:find('%s')
table.insert(spaces, i)
t = t:sub(1, i - 1) .. '-' .. t:sub(i + 1)
end
local cp = 1
for _, v in ipairs(spaces) do
if (v < cursor_pos) then
cp = v
end
end
cursor_pos = cp
if cursor_pos < 1 then
cursor_pos = 1
elseif cursor_pos > #self._private.text + 1 then
cursor_pos = #self._private.text + 1
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', 'Control', 'Left')
end,
},
akey {
modifiers = { 'Control' },
key = 'Right', -- right
on_press = function()
local next_space = self._private.text:sub(cursor_pos):find('%s')
if next_space then
cursor_pos = cursor_pos + next_space
else
cursor_pos = #self._private.text + 1
end
if cursor_pos < 1 then
cursor_pos = 1
elseif cursor_pos > #self._private.text + 1 then
cursor_pos = #self._private.text + 1
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', 'Control', 'Right')
end,
},
akey {
modifiers = {},
key = 'BackSpace', --BackSpace
on_press = function()
-- If text is highlighted delete that, else just delete the character to the left
if self._private.highlight and self._private.highlight.cur_pos_start and
self._private.highlight.cur_pos_end then
local text_start = self._private.text:sub(1, self._private.highlight.cur_pos_start - 1)
local text_end = self._private.text:sub(self._private.highlight.cur_pos_end + 1)
self:set_text(text_start .. text_end)
self._private.highlight = {}
cursor_pos = #text_start + 1
else
if cursor_pos > 1 then
local offset = (self._private.text:sub(cursor_pos - 1, cursor_pos - 1):wlen() == -1) and 1 or
0
self:set_text(self._private.text:sub(1, cursor_pos - 2 - offset) ..
self._private.text:sub(cursor_pos))
cursor_pos = cursor_pos - 1 - offset
end
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', nil, 'BackSpace')
end,
},
akey {
modifiers = {},
key = 'Delete', --delete
on_press = function()
-- If text is highlighted delete that, else just delete the character to the right
if self._private.highlight and self._private.highlight.cur_pos_start and
self._private.highlight.cur_pos_end then
local text_start = self._private.text:sub(1, self._private.highlight.cur_pos_start - 1)
local text_end = self._private.text:sub(self._private.highlight.cur_pos_end + 1)
self:set_text(text_start .. text_end)
self._private.highlight = {}
cursor_pos = #text_start + 1
else
if cursor_pos <= #self._private.text then
self:set_text(self._private.text:sub(1, cursor_pos - 1) ..
self._private.text:sub(cursor_pos + 1))
end
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', nil, 'Delete')
end,
},
akey {
modifiers = {},
key = 'Left', --left
on_press = function()
-- Move cursor ro the left
if cursor_pos > 1 then
cursor_pos = cursor_pos - 1
end
self._private.highlight = {}
end,
},
akey {
modifiers = {},
key = 'Right', --right
on_press = function()
-- Move cursor to the right
if cursor_pos <= #self._private.text then
cursor_pos = cursor_pos + 1
end
self._private.highlight = {}
end,
},
--self.keybindings
},
keypressed_callback = function(_, modifiers, key)
if modifiers[1] == 'Shift' then
if key:wlen() == 1 then
self:set_text(self._private.text:sub(1, cursor_pos - 1) ..
string.upper(key) .. self._private.text:sub(cursor_pos))
cursor_pos = cursor_pos + #key
end
elseif modifiers[1] == 'Mod2' or '' then
if key:wlen() == 1 then
self:set_text(self._private.text:sub(1, cursor_pos - 1) ..
key .. self._private.text:sub(cursor_pos))
cursor_pos = cursor_pos + #key
end
end
if cursor_pos < 1 then
cursor_pos = 1
elseif cursor_pos > #self._private.text + 1 then
cursor_pos = #self._private.text + 1
end
self.markup = text_with_cursor(self:get_text(), cursor_pos, self)
self:emit_signal('inputbox::key_pressed', modifiers, key)
end,
}
end
--- Creates a new inputbox widget
-- @tparam table args Arguments for the inputbox widget
-- @tparam string args.text The text to display in the inputbox
-- @tparam[opt=beautiful.fg_normal] string args.fg Text foreground color
-- @tparam[opt=beautiful.border_focus] string args.border_focus_color Border color when focused
-- @tparam[opt=""] string args.placeholder_text placeholder text to be shown when not focused and
-- @tparam[opt=beautiful.inputbox_placeholder_fg] string args.placeholder_fg placeholder text foreground color
-- @tparam[opt=beautiful.inputbox_cursor_bg] string args.cursor_bg Cursor background color
-- @tparam[opt=beautiful.inputbox_cursor_fg] string args.cursor_fg Cursor foreground color
-- @tparam[opt=beautiful.inputbox_highlight_bg] string args.highlight_bg Highlight background color
-- @tparam[opt=beautiful.inputbox_highlight_fg] string args.highlight_fg Highlight foreground color
-- @treturn awful.widget.inputbox The inputbox widget.
-- @constructorfct awful.widget.inputbox
function inputbox.new(args)
args = args or {}
-- directly pass a possible default text(this is not meant to be a hint)
local w = textbox()
--gtable.crush(w, args)
gtable.crush(w, inputbox, true)
w.font = args.font or beautiful.font
w.keybindings = args.keybindings or {}
w.hint_text = args.hint_text
w.markup = args.text or text_with_cursor('', 1, w)
return w
end
function inputbox.mt:__call(...)
return inputbox.new(...)
end
return setmetatable(inputbox, inputbox.mt)

View File

@@ -0,0 +1,160 @@
local base = require('wibox.widget.base')
local gtable = require('gears.table')
local gcolor = require('gears.color')
local beautiful = require('beautiful')
local dpi = require('beautiful').xresources.apply_dpi
local wibox = require('wibox')
local gshape = require('gears.shape')
local rubato = require('src.lib.rubato')
local abutton = require('awful.button')
local toggle_widget = { mt = {} }
function toggle_widget:layout(_, width, height)
if self._private.widget then
return { base.place_widget_at(self._private.widget, 0, 0, width, height) }
end
end
function toggle_widget:fit(context, width, height)
local w, h = 0, 0
if self._private.widget then
w, h = base.fit_widget(self, context, self._private.widget, width, height)
end
return w, h
end
toggle_widget.set_widget = base.set_widget_common
function toggle_widget:get_widget()
return self._private.widget
end
function toggle_widget:set_enabled()
self.active = true
self.toggle_button.border_color = self.color
self.newcolor = self.color
self.rubato_timed.target = 39
end
function toggle_widget:set_disabled()
self.active = not self.active
self.toggle_button.border_color = beautiful.colorscheme.bg1
self.newcolor = beautiful.colorscheme.bg1
self.rubato_timed.target = 5
end
function toggle_widget:toggle_animation(pos, color)
if pos > 39 then return end
return function(_, _, cr, width, height)
cr:set_source(gcolor(beautiful.colorscheme.bg))
cr:paint()
cr:set_source(gcolor(color))
cr:move_to(pos, 0)
local x = pos
local y = 5
local newwidth = dpi(width / 2 - 6)
local newheight = height - 10
local radius = height / 6.0
local degrees = math.pi / 180.0
cr:new_sub_path()
cr:arc(x + newwidth - radius, y + radius, radius, -90 * degrees, 0 * degrees)
cr:arc(x + newwidth - radius, y + newheight - radius, radius, 0 * degrees, 90 * degrees)
cr:arc(x + radius, y + newheight - radius, radius, 90 * degrees, 180 * degrees)
cr:arc(x + radius, y + radius, radius, 180 * degrees, 270 * degrees)
cr:close_path()
cr:fill()
end
end
function toggle_widget.new(args)
args = args or {}
local ret = base.make_widget(nil, nil, {
enable_properties = true,
})
gtable.crush(ret, toggle_widget, true)
ret.newcolor = beautiful.colorscheme.bg1
ret.color = args.color
ret.toggle_button = wibox.widget {
{
widget = wibox.widget {
fit = function(_, width, height)
return width, height
end,
draw = ret:toggle_animation(0, ret.newcolor),
},
id = 'background',
},
active = false,
widget = wibox.container.background,
bg = beautiful.colorscheme.bg,
border_color = beautiful.colorscheme.border_color,
border_width = dpi(2),
forced_height = args.size,
forced_width = args.size * 2,
shape = beautiful.shape[10],
}
ret.rubato_timed = rubato.timed {
duration = 0.2,
pos = 5,
subscribed = function(pos)
ret.toggle_button:get_children_by_id('background')[1].draw = ret:toggle_animation(pos, ret.newcolor)
ret.toggle_button:emit_signal('widget::redraw_needed')
end,
}
ret:set_widget(wibox.widget {
{
{
args.text and {
text = args.text,
valign = 'center',
align = 'center',
widget = wibox.widget.textbox,
id = 'clearall',
} or nil,
ret.toggle_button,
spacing = args.text and dpi(10) or dpi(0),
layout = wibox.layout.fixed.horizontal,
id = 'layout12',
},
id = 'background4',
fg = args.fg,
shape = beautiful.shape[12],
widget = wibox.container.background,
},
id = 'place',
widget = wibox.container.place,
valign = 'bottom',
halign = 'right',
})
ret.toggle_button:buttons(
gtable.join(
abutton({}, 1, function()
if ret.active then
ret:set_disabled()
else
ret:set_enabled()
end
ret:emit_signal('dnd::toggle', ret.active)
end
)
)
)
return ret
end
function toggle_widget.mt:__call(...)
return toggle_widget.new(...)
end
return setmetatable(toggle_widget, toggle_widget.mt)

View File

@@ -1,122 +0,0 @@
--------------------------------------------------------------------------------------------------------------
-- This is the statusbar, every widget, module and so on is combined to all the stuff you see on the screen --
--------------------------------------------------------------------------------------------------------------
-- Awesome Libs
local awful = require("awful")
local color = require("src.theme.colors")
local dpi = require("beautiful").xresources.apply_dpi
local gears = require("gears")
local wibox = require("wibox")
return function(s, widgets)
local top_center = awful.popup {
screen = s,
widget = wibox.container.background,
ontop = false,
bg = color["Grey900"],
visible = true,
maximum_width = dpi(500),
placement = function(c) awful.placement.top(c, { margins = dpi(10) }) end,
shape = function(cr, width, height)
gears.shape.rounded_rect(cr, width, height, 5)
end
}
top_center:struts {
top = 55
}
local function prepare_widgets(widgets)
local layout = {
forced_height = 45,
layout = wibox.layout.fixed.horizontal
}
for i, widget in pairs(widgets) do
if i == 1 then
table.insert(layout,
{
widget,
left = dpi(6),
right = dpi(6),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
elseif i == #widgets then
table.insert(layout,
{
widget,
left = dpi(3),
right = dpi(6),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
else
table.insert(layout,
{
widget,
left = dpi(3),
right = dpi(3),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
end
end
return layout
end
top_center:setup {
nil,
prepare_widgets(widgets),
nil,
layout = wibox.layout.fixed.horizontal
}
client.connect_signal(
"manage",
function(c)
if #s.selected_tag:clients() < 1 then
top_center.visible = false
else
top_center.visible = true
end
end
)
client.connect_signal(
"unmanage",
function(c)
if #s.selected_tag:clients() < 1 then
top_center.visible = false
else
top_center.visible = true
end
end
)
client.connect_signal(
"tag::switched",
function(c)
if #s.selected_tag:clients() < 1 then
top_center.visible = false
else
top_center.visible = true
end
end
)
awesome.connect_signal(
"refresh",
function(c)
if #s.selected_tag:clients() < 1 then
top_center.visible = false
else
top_center.visible = true
end
end
)
end

View File

@@ -1,313 +0,0 @@
--------------------------------------------------------------------------------------------------------------
-- This is the statusbar, every widget, module and so on is combined to all the stuff you see on the screen --
--------------------------------------------------------------------------------------------------------------
-- Awesome Libs
local awful = require("awful")
local color = require("src.theme.colors")
local dpi = require("beautiful").xresources.apply_dpi
local gears = require("gears")
local wibox = require("wibox")
return function(screen, programs)
local function create_dock_element(class, program, name, user_icon, is_steam, size)
if program == nil or class == nil then
return
end
is_steam = is_steam or false
user_icon = user_icon or nil
local dock_element = wibox.widget {
{
{
{
resize = true,
forced_width = size,
forced_height = size,
image = user_icon or Get_icon(user_vars.icon_theme, nil, program, class, is_steam),
widget = wibox.widget.imagebox,
id = "icon",
},
margins = dpi(5),
widget = wibox.container.margin,
id = "margin"
},
shape = function(cr, width, height)
gears.shape.rounded_rect(cr, width, height, 10)
end,
bg = color["Grey900"],
widget = wibox.container.background,
id = "background"
},
top = dpi(5),
left = dpi(5),
right = dpi(5),
widget = wibox.container.margin
}
for _, c in ipairs(client.get()) do
if string.lower(c.class):match(program) and c == client.focus then
dock_element.background.bg = color["Grey800"]
end
end
Hover_signal(dock_element.background, color["Grey800"], color["White"])
dock_element:connect_signal(
"button::press",
function()
if is_steam then
awful.spawn("steam steam://rungameid/" .. program)
else
awful.spawn(program)
end
end
)
awful.tooltip {
objects = { dock_element },
text = name,
mode = "outside",
preferred_alignments = "middle",
margins = dpi(10)
}
return dock_element
end
local dock = awful.popup {
widget = wibox.container.background,
ontop = true,
bg = color["Grey900"],
visible = true,
screen = screen,
type = "dock",
height = user_vars.dock_icon_size + 10,
placement = function(c) awful.placement.bottom(c, { margins = dpi(10) }) end,
shape = function(cr, width, height)
gears.shape.rounded_rect(cr, width, height, 15)
end
}
local fakedock = awful.popup {
widget = wibox.container.background,
ontop = true,
bg = '#00000000',
visible = true,
screen = screen,
type = "dock",
id = "fakedock",
height = dpi(10),
placement = function(c) awful.placement.bottom(c, { margins = dpi(0) }) end,
}
local function get_dock_elements(pr)
local dock_elements = { layout = wibox.layout.fixed.horizontal }
for i, p in ipairs(pr) do
dock_elements[i] = create_dock_element(p[1], p[2], p[3], p[4], p[5], user_vars.dock_icon_size)
end
return dock_elements
end
local dock_elements = get_dock_elements(programs)
local function get_fake_elements(amount)
local fake_elements = { layout = wibox.layout.fixed.horizontal }
for i = 0, amount, 1 do
fake_elements[i] = wibox.widget {
bg = '00000000',
forced_width = user_vars.dock_icon_size + dpi(20),
forced_height = dpi(10),
id = "fake",
widget = wibox.container.background
}
end
return fake_elements
end
local function create_incicator_widget(prog)
local container = { layout = wibox.layout.flex.horizontal }
local clients = client.get()
for index, pr in ipairs(prog) do
local indicators = { layout = wibox.layout.flex.horizontal, spacing = dpi(5) }
local col = color["Grey600"]
for i, c in ipairs(clients) do
if string.lower(c.class or c.name):match(string.lower(pr[1]) or string.lower(pr[2])) then
if c == client.focus then
col = color["YellowA200"]
elseif c.urgent then
col = color["RedA200"]
elseif c.maximized then
col = color["GreenA200"]
elseif c.minimized then
col = color["BlueA200"]
elseif c.fullscreen then
col = color["PinkA200"]
else
col = color["Grey600"]
end
indicators[i] = wibox.widget {
widget = wibox.container.background,
shape = gears.shape.rounded_rect,
forced_height = dpi(3),
bg = col,
forced_width = dpi(5),
}
end
end
container[index] = wibox.widget {
indicators,
forced_height = dpi(5),
forced_width = dpi(50),
left = dpi(5),
right = dpi(5),
widget = wibox.container.margin,
}
end
return wibox.widget {
container,
bottom = dpi(5),
widget = wibox.container.margin,
}
end
fakedock:setup {
get_fake_elements(#programs),
type = 'dock',
layout = wibox.layout.fixed.vertical
}
local function check_for_dock_hide(s)
for _, client in ipairs(s.selected_tag:clients()) do
if client.fullscreen then
dock.visible = false
fakedock.visible = false
else
fakedock.visible = true
end
end
if #s.selected_tag:clients() < 1 then
dock.visible = true
return
end
if s == mouse.screen then
local minimized
for _, c in ipairs(s.selected_tag:clients()) do
if c.minimized then
minimized = true
end
if c.maximized or c.fullscreen then
dock.visible = false
return
end
if not c.minimized then
local y = c:geometry().y
local h = c.height
if (y + h) >= s.geometry.height - user_vars.dock_icon_size - 35 then
dock.visible = false
return
else
dock.visible = true
end
end
end
if minimized then
dock.visible = true
end
else
dock.visible = false
end
end
local dock_intelligent_hide = gears.timer {
timeout = 1,
autostart = true,
call_now = true,
callback = function()
check_for_dock_hide(screen)
end
}
fakedock:connect_signal(
"mouse::enter",
function()
for _, c in ipairs(screen.clients) do
if not c.fullscreen then
dock_intelligent_hide:stop()
dock.visible = true
end
end
end
)
client.connect_signal(
"manage",
function()
check_for_dock_hide(screen)
dock:setup {
dock_elements,
create_incicator_widget(programs),
layout = wibox.layout.fixed.vertical
}
end
)
client.connect_signal(
"property::minimized",
function()
check_for_dock_hide(screen)
dock:setup {
dock_elements,
create_incicator_widget(programs),
layout = wibox.layout.fixed.vertical
}
end
)
client.connect_signal(
"unmanage",
function()
check_for_dock_hide(screen)
dock:setup {
dock_elements,
create_incicator_widget(programs),
layout = wibox.layout.fixed.vertical
}
end
)
client.connect_signal(
"focus",
function()
check_for_dock_hide(screen)
dock:setup {
dock_elements,
create_incicator_widget(programs),
layout = wibox.layout.fixed.vertical
}
end
)
dock:connect_signal(
"mouse::enter",
function()
dock_intelligent_hide:stop()
end
)
dock:connect_signal(
"mouse::leave",
function()
dock_intelligent_hide:again()
end
)
dock:setup {
get_dock_elements(programs),
create_incicator_widget(programs),
layout = wibox.layout.fixed.vertical
}
end

View File

@@ -1,65 +0,0 @@
--------------------------------------------------------------------------------------------------------------
-- This is the statusbar, every widget, module and so on is combined to all the stuff you see on the screen --
--------------------------------------------------------------------------------------------------------------
-- Awesome Libs
local awful = require("awful")
awful.screen.connect_for_each_screen(
-- For each screen this function is called once
-- If you want to change the modules per screen use the indices
-- e.g. 1 would be the primary screen and 2 the secondary screen.
function(s)
-- Create 9 tags
awful.layout.layouts = user_vars.layouts
awful.tag(
{ "1", "2", "3", "4", "5", "6", "7", "8", "9" },
s,
user_vars.layouts[1]
)
require("src.modules.powermenu")(s)
-- TODO: rewrite calendar osd, maybe write an own inplementation
-- require("src.modules.calendar_osd")(s)
require("src.modules.volume_osd")(s)
require("src.modules.brightness_osd")(s)
require("src.modules.titlebar")
require("src.modules.volume_controller")(s)
-- Widgets
--s.battery = require("src.widgets.battery")()
s.audio = require("src.widgets.audio")(s)
s.date = require("src.widgets.date")()
s.clock = require("src.widgets.clock")()
--s.bluetooth = require("src.widgets.bluetooth")()
s.layoutlist = require("src.widgets.layout_list")()
s.powerbutton = require("src.widgets.power")()
s.kblayout = require("src.widgets.kblayout")(s)
s.taglist = require("src.widgets.taglist")(s)
s.tasklist = require("src.widgets.tasklist")(s)
--s.cpu_freq = require("src.widgets.cpu_info")("freq", "average")
-- Add more of these if statements if you want to change
-- the modules/widgets per screen.
if s.index == 1 then
s.systray = require("src.widgets.systray")(s)
s.cpu_usage = require("src.widgets.cpu_info")("usage")
s.cpu_temp = require("src.widgets.cpu_info")("temp")
s.gpu_usage = require("src.widgets.gpu_info")("usage")
s.gpu_temp = require("src.widgets.gpu_info")("temp")
require("crylia_bar.left_bar")(s, { s.layoutlist, s.systray, s.taglist })
require("crylia_bar.center_bar")(s, { s.tasklist })
require("crylia_bar.right_bar")(s, { s.gpu_usage, s.gpu_temp, s.cpu_usage, s.cpu_temp, s.audio, s.kblayout, s.date, s.clock, s.powerbutton })
require("crylia_bar.dock")(s, user_vars.dock_programs)
end
if s.index == 2 then
s.network = require("src.widgets.network")()
s.ram_info = require("src.widgets.ram_info")()
require("crylia_bar.left_bar")(s, { s.layoutlist, s.taglist })
require("crylia_bar.center_bar")(s, { s.tasklist })
require("crylia_bar.right_bar")(s, { s.ram_info, s.audio, s.kblayout, s.network, s.date, s.clock, s.powerbutton })
end
end
)

View File

@@ -1,77 +0,0 @@
--------------------------------------------------------------------------------------------------------------
-- This is the statusbar, every widget, module and so on is combined to all the stuff you see on the screen --
--------------------------------------------------------------------------------------------------------------
-- Awesome Libs
local awful = require("awful")
local color = require("src.theme.colors")
local dpi = require("beautiful").xresources.apply_dpi
local gears = require("gears")
local wibox = require("wibox")
return function(s, widgets)
local top_left = awful.popup {
screen = s,
widget = wibox.container.background,
ontop = false,
bg = color["Grey900"],
visible = true,
maximum_width = dpi(650),
placement = function(c) awful.placement.top_left(c, { margins = dpi(10) }) end,
shape = function(cr, width, height)
gears.shape.rounded_rect(cr, width, height, 5)
end
}
top_left:struts {
top = 55
}
local function prepare_widgets(widgets)
local layout = {
forced_height = 45,
layout = wibox.layout.fixed.horizontal
}
for i, widget in pairs(widgets) do
if i == 1 then
table.insert(layout,
{
widget,
left = dpi(6),
right = dpi(3),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
elseif i == #widgets then
table.insert(layout,
{
widget,
left = dpi(3),
right = dpi(6),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
else
table.insert(layout,
{
widget,
left = dpi(3),
right = dpi(3),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
end
end
return layout
end
top_left:setup {
prepare_widgets(widgets),
nil,
nil,
layout = wibox.layout.fixed.horizontal
}
end

View File

@@ -1,76 +0,0 @@
--------------------------------------------------------------------------------------------------------------
-- This is the statusbar, every widget, module and so on is combined to all the stuff you see on the screen --
--------------------------------------------------------------------------------------------------------------
-- Awesome Libs
local awful = require("awful")
local color = require("src.theme.colors")
local dpi = require("beautiful").xresources.apply_dpi
local gears = require("gears")
local wibox = require("wibox")
return function(s, widgets)
local top_right = awful.popup {
widget = wibox.container.background,
ontop = false,
bg = color["Grey900"],
visible = true,
screen = s,
placement = function(c) awful.placement.top_right(c, { margins = dpi(10) }) end,
shape = function(cr, width, height)
gears.shape.rounded_rect(cr, width, height, 5)
end
}
top_right:struts {
top = 55
}
local function prepare_widgets(widgets)
local layout = {
forced_height = 45,
layout = wibox.layout.fixed.horizontal
}
for i, widget in pairs(widgets) do
if i == 1 then
table.insert(layout,
{
widget,
left = dpi(6),
right = dpi(3),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
elseif i == #widgets then
table.insert(layout,
{
widget,
left = dpi(3),
right = dpi(6),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
else
table.insert(layout,
{
widget,
left = dpi(3),
right = dpi(3),
top = dpi(6),
bottom = dpi(6),
widget = wibox.container.margin
})
end
end
return layout
end
top_right:setup {
nil,
nil,
prepare_widgets(widgets),
layout = wibox.layout.align.horizontal
}
end

View File

@@ -1,67 +0,0 @@
-- Awesome Libs
local awful = require("awful")
local gears = require("gears")
local globalkeys = require("../mappings/global_keys")
local modkey = user_vars.modkey
for i = 1, 9 do
globalkeys = gears.table.join(globalkeys,
-- View tag only
awful.key(
{ modkey },
"#" .. i + 9,
function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
tag:view_only()
end
client.emit_signal("tag::switched")
end,
{ description = "View Tag " .. i, group = "Tag" }
),
-- Brings the window over without chaning the tag, reverts automatically on tag change
awful.key(
{ modkey, "Control" },
"#" .. 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" }
),
-- Brings the window over without chaning the tag, reverts automatically on tag change
awful.key(
{ modkey, "Shift" },
"#" .. i + 9,
function()
local screen = awful.screen.focused()
if client.focus then
local tag = screen.tags[i]
if tag then
client.focus:move_to_tag(tag)
end
end
end,
{ description = "Move focused client on tag " .. i, group = "Tag" }
),
-- Brings the window over without chaning the tag, reverts automatically on tag change
awful.key(
{ modkey, "Control", "Shift" },
"#" .. i + 9,
function()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
awful.tag.viewtoggle(tag)
end
end,
{ description = "Move focused client on tag " .. i, group = "Tag" }
)
)
end
root.keys(globalkeys)

View File

@@ -1,19 +0,0 @@
-- Awesome Libs
local awful = require("awful")
local gears = require("gears")
local modkey = user_vars.modkey
return gears.table.join(
awful.button({}, 1, function(c)
c:emit_signal("request::activate", "mouse_click", { raise = true })
end),
awful.button({ modkey }, 1, function(c)
c:emit_signal("request::activate", "mouse_click", { raise = true })
awful.mouse.client.move(c)
end),
awful.button({ modkey }, 3, function(c)
c:emit_signal("request::activate", "mouse_click", { raise = true })
awful.mouse.client.resize(c)
end)
)

View File

@@ -1,57 +0,0 @@
-- Awesome Libs
local awful = require("awful")
local gears = require("gears")
local modkey = user_vars.modkey
return gears.table.join(
awful.key(
{ modkey },
"#41",
function(c)
c.fullscreen = not c.fullscreen
c:raise()
end,
{ description = "Toggle fullscreen", group = "Client" }
),
awful.key(
{ modkey },
"#24",
function(c)
c:kill()
end,
{ description = "Close focused client", group = "Client" }
),
awful.key(
{ modkey },
"#42",
awful.client.floating.toggle,
{ description = "Toggle floating window", group = "Client" }
),
awful.key(
{ modkey },
"#58",
function(c)
c.maximized = not c.maximized
c:raise()
end,
{ description = "(un)maximize", group = "Client" }
),
awful.key(
{ modkey },
"#57",
function(c)
if c == client.focus then
c.minimized = true
else
c.minimized = false
if not c:isvisible() and c.first_tag then
c.first_tag:view_only()
end
c:emit_signal('request::activate')
c:raise()
end
end,
{ description = "(un)hide", group = "Client" }
)
)

View File

@@ -1,8 +0,0 @@
-- Awesome Libs
local gears = require("gears")
local awful = require("awful")
root.buttons = gears.table.join(
awful.button({}, 4, awful.tag.viewnext),
awful.button({}, 5, awful.tag.viewprev)
)

View File

@@ -1,373 +0,0 @@
-- Awesome Libs
local gears = require("gears")
local awful = require("awful")
local hotkeys_popup = require("awful.hotkeys_popup")
local ruled = require("ruled")
local modkey = user_vars.modkey
return gears.table.join(
awful.key(
{ modkey },
"#39",
hotkeys_popup.show_help,
{ description = "Cheat sheet", group = "Awesome" }
),
-- Tag browsing
awful.key(
{ modkey },
"#113",
awful.tag.viewprev,
{ description = "View previous tag", group = "Tag" }
),
awful.key(
{ modkey },
"#114",
awful.tag.viewnext,
{ description = "View next tag", group = "Tag" }
),
awful.key(
{ modkey },
"#66",
awful.tag.history.restore,
{ description = "Go back to last tag", group = "Tag" }
),
awful.key(
{ modkey },
"#44",
function()
awful.client.focus.byidx(1)
end,
{ description = "Focus next client by index", group = "Client" }
),
awful.key(
{ modkey },
"#45",
function()
awful.client.focus.byidx(-1)
end,
{ description = "Focus previous client by index", group = "Client" }
),
awful.key(
{ modkey, "Shift" },
"#44",
function()
awful.client.swap.byidx(1)
end,
{ description = "Swap with next client by index", group = "Client" }
),
awful.key(
{ modkey, "Shift" },
"#45",
function()
awful.client.swap.byidx(-1)
end,
{ description = "Swap with previous client by index", group = "Client" }
),
awful.key(
{ modkey, "Control" },
"#44",
function()
awful.screen.focus_relative(1)
end,
{ description = "Focus the next screen", group = "Screen" }
),
awful.key(
{ modkey, "Control" },
"#45",
function()
awful.screen.focus_relative(-1)
end,
{ description = "Focus the previous screen", group = "Screen" }
),
awful.key(
{ modkey },
"#30",
awful.client.urgent.jumpto,
{ description = "Jump to urgent client", group = "Client" }
),
awful.key(
{ modkey },
"#36",
function()
awful.spawn(user_vars.terminal)
end,
{ description = "Open terminal", group = "Applications" }
),
awful.key(
{ modkey, "Control" },
"#27",
awesome.restart,
{ description = "Reload awesome", group = "Awesome" }
),
awful.key(
{ modkey },
"#46",
function()
awful.tag.incmwfact(0.05)
end,
{ description = "Increase client width", group = "Layout" }
),
awful.key(
{ modkey },
"#43",
function()
awful.tag.incmwfact(-0.05)
end,
{ description = "Decrease client width", group = "Layout" }
),
awful.key(
{ modkey, "Control" },
"#43",
function()
awful.tag.incncol(1, nil, true)
end,
{ description = "Increase the number of columns", group = "Layout" }
),
awful.key(
{ modkey, "Control" },
"#46",
function()
awful.tag.incncol(-1, nil, true)
end,
{ description = "Decrease the number of columns", group = "Layout" }
),
awful.key(
{ modkey, "Shift" },
"#65",
function()
awful.layout.inc(-1)
end,
{ description = "Select previous layout", group = "Layout" }
),
awful.key(
{ modkey, "Shift" },
"#36",
function()
awful.layout.inc(1)
end,
{ description = "Select next layout", group = "Layout" }
),
awful.key(
{ modkey },
"#40",
function()
awful.spawn("rofi -show drun -theme ~/.config/rofi/rofi.rasi")
end,
{ descripton = "Application launcher", group = "Application" }
),
awful.key(
{ modkey },
"#23",
function()
awful.spawn("rofi -show window -theme ~/.config/rofi/window.rasi")
end,
{ descripton = "Client switcher (alt+tab)", group = "Application" }
),
awful.key(
{ "Mod1" },
"#23",
function()
awful.spawn("rofi -show window -theme ~/.config/rofi/window.rasi")
end,
{ descripton = "Client switcher (alt+tab)", group = "Application" }
),
awful.key(
{ modkey },
"#26",
function()
awful.spawn(user_vars.file_manager)
end,
{ descripton = "Open file manager", group = "System" }
),
awful.key(
{ modkey, "Shift" },
"#26",
function()
awesome.emit_signal("module::powermenu:show")
end,
{ descripton = "Session options", group = "System" }
),
awful.key(
{},
"#107",
function()
awful.spawn(user_vars.screenshot_program)
end,
{ description = "Screenshot", group = "Applications" }
),
awful.key(
{},
"XF86AudioLowerVolume",
function(c)
awful.spawn.easy_async_with_shell("pactl set-sink-volume @DEFAULT_SINK@ -2%", function()
awesome.emit_signal("module::volume_osd:show", true)
awesome.emit_signal("module::slider:update")
awesome.emit_signal("widget::volume_osd:rerun")
end)
end,
{ description = "Lower volume", group = "System" }
),
awful.key(
{},
"XF86AudioRaiseVolume",
function(c)
awful.spawn.easy_async_with_shell("pactl set-sink-volume @DEFAULT_SINK@ +2%", function()
awesome.emit_signal("module::volume_osd:show", true)
awesome.emit_signal("module::slider:update")
awesome.emit_signal("widget::volume_osd:rerun")
end)
end,
{ description = "Increase volume", group = "System" }
),
awful.key(
{},
"XF86AudioMute",
function(c)
awful.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle")
awesome.emit_signal("module::volume_osd:show", true)
awesome.emit_signal("module::slider:update")
awesome.emit_signal("widget::volume_osd:rerun")
end,
{ description = "Mute volume", group = "System" }
),
awful.key(
{},
"XF86MonBrightnessUp",
function(c)
--awful.spawn("xbacklight -time 100 -inc 10%+")
awful.spawn.easy_async_with_shell(
"pkexec xfpm-power-backlight-helper --get-brightness",
function(stdout)
awful.spawn.easy_async_with_shell("pkexec xfpm-power-backlight-helper --set-brightness " .. tostring(tonumber(stdout) + BACKLIGHT_SEPS), function(stdou2)
end)
awesome.emit_signal("module::brightness_osd:show", true)
awesome.emit_signal("module::brightness_slider:update")
awesome.emit_signal("widget::brightness_osd:rerun")
end
)
end,
{ description = "Raise backlight brightness", group = "System" }
),
awful.key(
{},
"XF86MonBrightnessDown",
function(c)
awful.spawn.easy_async_with_shell(
"pkexec xfpm-power-backlight-helper --get-brightness",
function(stdout)
awful.spawn.easy_async_with_shell("pkexec xfpm-power-backlight-helper --set-brightness " .. tostring(tonumber(stdout) - BACKLIGHT_SEPS), function(stdout2)
end)
awesome.emit_signal("module::brightness_osd:show", true)
awesome.emit_signal("module::brightness_slider:update")
awesome.emit_signal("widget::brightness_osd:rerun")
end
)
end,
{ description = "Lower backlight brightness", group = "System" }
),
awful.key(
{},
"XF86AudioPlay",
function(c)
awful.spawn("playerctl play-pause")
end,
{ description = "Play / Pause audio", group = "System" }
),
awful.key(
{},
"XF86AudioNext",
function(c)
awful.spawn("playerctl next")
end,
{ description = "Play / Pause audio", group = "System" }
),
awful.key(
{},
"XF86AudioPrev",
function(c)
awful.spawn("playerctl previous")
end,
{ description = "Play / Pause audio", group = "System" }
),
awful.key(
{ modkey },
"#65",
function()
awesome.emit_signal("kblayout::toggle")
end,
{ description = "Toggle keyboard layout", group = "System" }
),
awful.key(
{ modkey },
"#22",
function()
awful.spawn.easy_async_with_shell(
[[xprop | grep WM_CLASS | awk '{gsub(/"/, "", $4); print $4}']],
function(stdout)
if stdout then
ruled.client.append_rule {
rule = { class = stdout:gsub("\n", "") },
properties = {
floating = true
},
}
awful.spawn.easy_async_with_shell(
"cat ~/.config/awesome/src/assets/rules.txt",
function(stdout2)
for class in stdout2:gmatch("%a+") do
if class:match(stdout:gsub("\n", "")) then
return
end
end
awful.spawn.with_shell("echo -n '" .. stdout:gsub("\n", "") .. ";' >> ~/.config/awesome/src/assets/rules.txt")
local c = mouse.screen.selected_tag:clients()
for j, client in ipairs(c) do
if client.class:match(stdout:gsub("\n", "")) then
client.floating = true
end
end
end
)
end
end
)
end
),
awful.key(
{ modkey, "Shift" },
"#22",
function()
awful.spawn.easy_async_with_shell(
[[xprop | grep WM_CLASS | awk '{gsub(/"/, "", $4); print $4}']],
function(stdout)
if stdout then
ruled.client.append_rule {
rule = { class = stdout:gsub("\n", "") },
properties = {
floating = false
},
}
awful.spawn.easy_async_with_shell(
[[
REMOVE="]] .. stdout:gsub("\n", "") .. [[;"
STR=$(cat ~/.config/awesome/src/assets/rules.txt)
echo -n ${STR//$REMOVE/} > ~/.config/awesome/src/assets/rules.txt
]],
function(stdout2)
local c = mouse.screen.selected_tag:clients()
for j, client in ipairs(c) do
if client.class:match(stdout:gsub("\n", "")) then
client.floating = false
end
end
end
)
end
end
)
end
)
)

View File

@@ -1,19 +1,49 @@
-----------------------------------------------------------------------------------------
-- █████╗ ██╗ ██╗███████╗███████╗ ██████╗ ███╗ ███╗███████╗██╗ ██╗███╗ ███╗ --
-- ██╔══██╗██║ ██║██╔════╝██╔════╝██╔═══██╗████╗ ████║██╔════╝██║ ██║████╗ ████║ --
-- ███████║██║ █╗ ██║█████╗ ███████╗██║ ██║██╔████╔██║█████╗ ██║ █╗ ██║██╔████╔██║ --
-- ██╔══██║██║███╗██║██╔══╝ ╚════██║██║ ██║██║╚██╔╝██║██╔══╝ ██║███╗██║██║╚██╔╝██║ --
-- ██║ ██║╚███╔███╔╝███████╗███████║╚██████╔╝██║ ╚═╝ ██║███████╗╚███╔███╔╝██║ ╚═╝ ██║ --
-- ╚═╝ ╚═╝ ╚══╝╚══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ --
-----------------------------------------------------------------------------------------
-- Initialising, order is important!
require("src.theme.user_variables")
require("src.theme.init")
require("src.core.error_handling")
require("src.core.signals")
require("src.core.notifications")
require("src.core.rules")
require("mappings.global_buttons")
require("mappings.bind_to_tags")
require("crylia_bar.init")
require("src.tools.auto_starter")(user_vars.autostart)
---@diagnostic disable: lowercase-global
--[[
╭─────────────────────────────────────────────────────────────────╮
│ ______ ___ ________ │
│ / ____/______ __/ (_)___ _ /_ __/ /_ ___ ____ ___ ___ │
│ / / / ___/ / / / / / __ `/ / / / __ \/ _ \/ __ `__ \/ _ \ │
│ / /___/ / / /_/ / / / /_/ / / / / / / / __/ / / / / / __/ │
│ \____/_/ \__, /_/_/\__,_/ /_/ /_/ /_/\___/_/ /_/ /_/\___/ │
│ /____/ │
╰─────────────────────────────────────────────────────────────────╯
]]
--#region s
io.stdout:write([[
]] .. '\n\27[32m' .. [[╭─────────────────────────────────────────────────────────────────╮
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ ______ ___ ________ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ / ____/______ __/ (_)___ _ /_ __/ /_ ___ ____ ___ ___ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ / / / ___/ / / / / / __ `/ / / / __ \/ _ \/ __ `__ \/ _ \ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ / /___/ / / /_/ / / / /_/ / / / / / / / __/ / / / / / __/ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ \____/_/ \__, /_/_/\__,_/ /_/ /_/ /_/\___/_/ /_/ /_/\___/ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ /____/ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[╰─────────────────────────────────────────────────────────────────╯
]] .. '\27[0m\n')
io.stderr:write([[
]] .. '\n\27[32m' .. [[╭─────────────────────────────────────────────────────────────────╮
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ ______ ___ ________ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ / ____/______ __/ (_)___ _ /_ __/ /_ ___ ____ ___ ___ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ / / / ___/ / / / / / __ `/ / / / __ \/ _ \/ __ `__ \/ _ \ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ / /___/ / / /_/ / / / /_/ / / / / / / / __/ / / / / / __/ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ \____/_/ \__, /_/_/\__,_/ /_/ /_/ /_/\___/_/ /_/ /_/\___/ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[│]] .. '\27[1;36m' .. [[ /____/ ]] .. '\27[32m' .. [[│
]] .. '\27[32m' .. [[╰─────────────────────────────────────────────────────────────────╯
]] .. '\27[0m\n')
--#endregion
require('src.core.error_handling') {}
require('src.theme') {}
require('src.core.signals') {}
require('src.core.notifications') {}
require('src.core.rules') {}
require('src.bindings.global_buttons')
require('src.bindings.bind_to_tags')
require('src.modules') {}
require('src.tools.auto_starter') {}
--require('src.core.setup')()
require('src.tools.network')()

422
awesome/schema.json Normal file
View File

@@ -0,0 +1,422 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "theme completion",
"description": "completion for crylia-theme config",
"type": "object",
"properties": {
"autostart": {
"description": "Commands that run on startup",
"type": "array",
"items": {
"type": "string"
}
},
"battery_kind": {
"description": "Where to fetch the battery information from",
"type": "string",
"enum": [
"UNKNOWN",
"LINE_POWER",
"TABLET",
"COMPUTER",
"GAMING_INPUT",
"LAST",
"BATTERY",
"UPS",
"MONITOR",
"MOUSE",
"KEYBOARD",
"PDA",
"PHONE",
"MEDIA_PLAYER"
]
},
"battery_path": {
"description": "Custom battery path",
"type": [
"string",
"null"
]
},
"brightness_step": {
"description": "Brightness step in %",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"dock_icon_size": {
"description": "Dock icon size",
"type": "integer"
},
"energy_manager": {
"description": "Program started when battery widget is clicked",
"type": "string"
},
"file_manager": {
"description": "Default File manager",
"type": "string"
},
"font": {
"description": "Font used for UI elements",
"type": "string"
},
"font-size": {
"description": "Font size",
"type": "integer",
"exclusiveMinimum": 0
},
"font-weight": {
"description": "Font weight",
"type": "string"
},
"gtk_settings": {
"description": "Program used for GTK settings",
"type": "string"
},
"icon_theme": {
"description": "Icon theme",
"type": "string"
},
"kblayout": {
"description": "Keyboard layouts to use",
"type": "array",
"items": {
"type": "string"
}
},
"layouts": {
"description": "Layouts",
"type": "array",
"items": {
"enum": [
"awful.layout.suit.fair",
"awful.layout.suit.floating"
],
"type": "string"
}
},
"modkey": {
"description": "Modkey",
"type": "string",
"enum": [
"Mod5",
"Mod4",
"Mod3",
"Mod2",
"Mod1"
]
},
"namestyle": {
"description": "Name formatting used for power menu",
"type": "string",
"enum": [
"userhost",
"fullname"
]
},
"screen_settings": {
"description": "Program used for screen settings",
"type": "string"
},
"screenshot_program": {
"description": "Program used for screenshots",
"type": "string"
},
"status_bar_widgets": {
"description": "Widgets used in the notification center",
"type": "array",
"items": {
"type": "string",
"enum": [
"cpu_usage",
"cpu_temp",
"ram_usage",
"microphone",
"volume",
"gpu_temp",
"gpu_usage",
"battery",
"backlight"
]
}
},
"taskbar_use_name": {
"description": "If the taskbar should use the name or class",
"type": "boolean"
},
"terminal": {
"description": "Default terminal",
"type": "string"
},
"text_editor": {
"description": "Default texteditor",
"type": "string"
},
"titlebar_exception": {
"description": "Exceptions for titlebars",
"type": "array",
"items": {
"type": "string"
}
},
"titlebar_position": {
"description": "Position of the titlebar",
"type": "string",
"enum": [
"top",
"left"
]
},
"titlebar_items": {
"description": "Items in the titlebar",
"type": "object",
"properties": {
"left_and_bottom": {
"type": "array",
"items": {
"type": "string",
"enum": [
"icon",
"close",
"maximize",
"minimize",
"title"
]
}
},
"right_and_top": {
"type": "array",
"items": {
"type": "string",
"enum": [
"icon",
"close",
"maximize",
"minimize",
"title"
]
}
}
}
},
"wallpaper": {
"description": "wallpaper",
"type": "string"
},
"weather_secrets": {
"description": "weather api secrets",
"type": "object",
"properties": {
"type": "string",
"key": {
"type": "string",
"minLength": 32,
"maxLength": 32
},
"city_id": {
"type": "string",
"minLength": 7,
"maxLength": 7
},
"unit": {
"type": "string",
"enum": [
"metric",
"imperial"
]
}
}
},
"web_browser": {
"description": "Browser",
"type": "string"
},
"crylia_bar": {
"description": "Default bar widgets",
"type": "array",
"items": {
"type": "object",
"properties": {
"left_bar": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tiling Layout",
"Systray",
"Taglist",
"Tasklist",
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Cpu Temp",
"Cpu Freq",
"Gpu Usage",
"Gpu Temp",
"Ram Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
},
"center_bar": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tiling Layout",
"Systray",
"Taglist",
"Tasklist",
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Cpu Temp",
"Cpu Freq",
"Gpu Usage",
"Gpu Temp",
"Ram Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
},
"right_bar": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tiling Layout",
"Systray",
"Taglist",
"Tasklist",
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Cpu Temp",
"Cpu Freq",
"Gpu Usage",
"Gpu Temp",
"Ram Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
}
}
}
},
"crylia_wibox": {
"description": "Default bar widgets",
"type": "array",
"items": {
"type": "object",
"properties": {
"left": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tiling Layout",
"Systray",
"Taglist",
"Tasklist",
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Cpu Temp",
"Cpu Freq",
"Gpu Usage",
"Gpu Temp",
"Ram Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
},
"center": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tiling Layout",
"Systray",
"Taglist",
"Tasklist",
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Cpu Temp",
"Cpu Freq",
"Gpu Usage",
"Gpu Temp",
"Ram Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
},
"right": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tiling Layout",
"Systray",
"Taglist",
"Tasklist",
"Bluetooth",
"Network",
"Battery",
"Cpu Usage",
"Cpu Temp",
"Cpu Freq",
"Gpu Usage",
"Gpu Temp",
"Ram Usage",
"Audio",
"Keyboard Layout",
"Date",
"Clock",
"Power Button"
]
}
}
}
}
}
},
"anyOf": [
{
"required": [
"crylia_bar"
]
},
{
"required": [
"crylia_wibox"
]
}
]
}

View File

@@ -0,0 +1 @@
<svg id="ct" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" shape-rendering="geometricPrecision" text-rendering="geometricPrecision"><defs><linearGradient id="ct-s-path1-stroke" x1="-0.024162" y1="0.504999" x2="0.975838" y2="0.504455" spreadMethod="pad" gradientUnits="objectBoundingBox" gradientTransform="translate(0 0)"><stop id="ct-s-path1-stroke-0" offset="0%" stop-color="#faa3ff"/><stop id="ct-s-path1-stroke-1" offset="50%" stop-color="#ffd9fd"/><stop id="ct-s-path1-stroke-2" offset="100%" stop-color="#7ef2ff"/></linearGradient></defs><path id="ct-s-path1" d="M281.200226,185.600197L215.59979,316.799803L346.800008,316.8l-32.800004,65.6h-131.200023l-32.800005-65.600197L248.400073,120h196.799951h196.799951l-32.800004,65.6h-65.600012L461.599945,382.4h-65.600011l85.280014-196.799803-68.470031.000003L445.200024,120l-32.390106,65.6h-131.609692" transform="translate(-139.999975-.535)" fill="#fff" fill-opacity="0" stroke="url(#ct-s-path1-stroke)" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-dashoffset="5"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

0
awesome/src/assets/cache/rules.txt vendored Normal file
View File

View File

@@ -0,0 +1,93 @@
Copyright 2011 The Comfortaa Project Authors (https://github.com/alexeiva/comfortaa), with Reserved Font Name "Comfortaa".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@@ -0,0 +1,67 @@
Comfortaa Variable Font
=======================
This download contains Comfortaa as both a variable font and static fonts.
Comfortaa is a variable font with this axis:
wght
This means all the styles are contained in a single file:
Comfortaa-VariableFont_wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that arent available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Comfortaa:
static/Comfortaa-Light.ttf
static/Comfortaa-Regular.ttf
static/Comfortaa-Medium.ttf
static/Comfortaa-SemiBold.ttf
static/Comfortaa-Bold.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
You can use them in your products & projects print or digital,
commercial or otherwise.
This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.

View File

@@ -0,0 +1,93 @@
Copyright 2010 The Raleway Project Authors (impallari@gmail.com), with Reserved Font Name "Raleway".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@@ -0,0 +1,81 @@
Raleway Variable Font
=====================
This download contains Raleway as both variable fonts and static fonts.
Raleway is a variable font with this axis:
wght
This means all the styles are contained in these files:
Raleway-VariableFont_wght.ttf
Raleway-Italic-VariableFont_wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that arent available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Raleway:
static/Raleway-Thin.ttf
static/Raleway-ExtraLight.ttf
static/Raleway-Light.ttf
static/Raleway-Regular.ttf
static/Raleway-Medium.ttf
static/Raleway-SemiBold.ttf
static/Raleway-Bold.ttf
static/Raleway-ExtraBold.ttf
static/Raleway-Black.ttf
static/Raleway-ThinItalic.ttf
static/Raleway-ExtraLightItalic.ttf
static/Raleway-LightItalic.ttf
static/Raleway-Italic.ttf
static/Raleway-MediumItalic.ttf
static/Raleway-SemiBoldItalic.ttf
static/Raleway-BoldItalic.ttf
static/Raleway-ExtraBoldItalic.ttf
static/Raleway-BlackItalic.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
You can use them in your products & projects print or digital,
commercial or otherwise.
This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" /></svg>

After

Width:  |  Height:  |  Size: 552 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M2,7V8.5H3V17H4.5V7C3.7,7 2.8,7 2,7M6,7V7L6,16H7V17H14V16H22V7H6M17.5,9A2.5,2.5 0 0,1 20,11.5A2.5,2.5 0 0,1 17.5,14A2.5,2.5 0 0,1 15,11.5A2.5,2.5 0 0,1 17.5,9Z" />
</svg>

After

Width:  |  Height:  |  Size: 463 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M12,1C7,1 3,5 3,10V17A3,3 0 0,0 6,20H9V12H5V10A7,7 0 0,1 12,3A7,7 0 0,1 19,10V12H15V20H18A3,3 0 0,0 21,17V10C21,5 16.97,1 12,1Z" />
</svg>

After

Width:  |  Height:  |  Size: 431 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M12,1C7,1 3,5 3,10V17A3,3 0 0,0 6,20H9V12H5V10A7,7 0 0,1 12,3A7,7 0 0,1 19,10V12H15V20H19V21H12V23H18A3,3 0 0,0 21,20V10C21,5 16.97,1 12,1Z" />
</svg>

After

Width:  |  Height:  |  Size: 443 B

View File

@@ -1 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M13,5.83L14.88,7.71L13.28,9.31L14.69,10.72L17.71,7.7L12,2H11V7.03L13,9.03M5.41,4L4,5.41L10.59,12L5,17.59L6.41,19L11,14.41V22H12L16.29,17.71L18.59,20L20,18.59M13,18.17V14.41L14.88,16.29" /></svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M13,5.83L14.88,7.71L13.28,9.31L14.69,10.72L17.71,7.7L12,2H11V7.03L13,9.03M5.41,4L4,5.41L10.59,12L5,17.59L6.41,19L11,14.41V22H12L16.29,17.71L18.59,20L20,18.59M13,18.17V14.41L14.88,16.29" />
</svg>

Before

Width:  |  Height:  |  Size: 479 B

After

Width:  |  Height:  |  Size: 486 B

View File

@@ -1 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M14.88,16.29L13,18.17V14.41M13,5.83L14.88,7.71L13,9.58M17.71,7.71L12,2H11V9.58L6.41,5L5,6.41L10.59,12L5,17.58L6.41,19L11,14.41V22H12L17.71,16.29L13.41,12L17.71,7.71Z" /></svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M14.88,16.29L13,18.17V14.41M13,5.83L14.88,7.71L13,9.58M17.71,7.71L12,2H11V9.58L6.41,5L5,6.41L10.59,12L5,17.58L6.41,19L11,14.41V22H12L17.71,16.29L13.41,12L17.71,7.71Z" />
</svg>

Before

Width:  |  Height:  |  Size: 460 B

After

Width:  |  Height:  |  Size: 467 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M4,5H7L9,3H15L17,5H20A2,2 0 0,1 22,7V19A2,2 0 0,1 20,21H4A2,2 0 0,1 2,19V7A2,2 0 0,1 4,5M13.09,9.45L11.05,12.18L12.6,14.25L11.73,14.91L9.27,11.64L6,16H18L13.09,9.45Z" />
</svg>

After

Width:  |  Height:  |  Size: 469 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M4,4H7L9,2H15L17,4H20A2,2 0 0,1 22,6V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4M12,7A5,5 0 0,0 7,12A5,5 0 0,0 12,17A5,5 0 0,0 17,12A5,5 0 0,0 12,7M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9Z" />
</svg>

After

Width:  |  Height:  |  Size: 527 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M4,6H20V16H4M20,18A2,2 0 0,0 22,16V6C22,4.89 21.1,4 20,4H4C2.89,4 2,4.89 2,6V16A2,2 0 0,0 4,18H0V20H24V18H20Z" />
</svg>

After

Width:  |  Height:  |  Size: 413 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6,19C6,20.1 6.9,21 8,21H16C17.1,21 18,20.1 18,19V7H6V19M8,9H16V19H8V9M15.5,4L14.5,3H9.5L8.5,4H5V6H19V4H15.5Z" /></svg>

After

Width:  |  Height:  |  Size: 188 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z" /></svg>

After

Width:  |  Height:  |  Size: 305 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M7.97,16L5,19C4.67,19.3 4.23,19.5 3.75,19.5A1.75,1.75 0 0,1 2,17.75V17.5L3,10.12C3.21,7.81 5.14,6 7.5,6H16.5C18.86,6 20.79,7.81 21,10.12L22,17.5V17.75A1.75,1.75 0 0,1 20.25,19.5C19.77,19.5 19.33,19.3 19,19L16.03,16H7.97M7,8V10H5V11H7V13H8V11H10V10H8V8H7M16.5,8A0.75,0.75 0 0,0 15.75,8.75A0.75,0.75 0 0,0 16.5,9.5A0.75,0.75 0 0,0 17.25,8.75A0.75,0.75 0 0,0 16.5,8M14.75,9.75A0.75,0.75 0 0,0 14,10.5A0.75,0.75 0 0,0 14.75,11.25A0.75,0.75 0 0,0 15.5,10.5A0.75,0.75 0 0,0 14.75,9.75M18.25,9.75A0.75,0.75 0 0,0 17.5,10.5A0.75,0.75 0 0,0 18.25,11.25A0.75,0.75 0 0,0 19,10.5A0.75,0.75 0 0,0 18.25,9.75M16.5,11.5A0.75,0.75 0 0,0 15.75,12.25A0.75,0.75 0 0,0 16.5,13A0.75,0.75 0 0,0 17.25,12.25A0.75,0.75 0 0,0 16.5,11.5Z" />
</svg>

After

Width:  |  Height:  |  Size: 1015 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M19,10H17V8H19M19,13H17V11H19M16,10H14V8H16M16,13H14V11H16M16,17H8V15H16M7,10H5V8H7M7,13H5V11H7M8,11H10V13H8M8,8H10V10H8M11,11H13V13H11M11,8H13V10H11M20,5H4C2.89,5 2,5.89 2,7V17A2,2 0 0,0 4,19H20A2,2 0 0,0 22,17V7C22,5.89 21.1,5 20,5Z" />
</svg>

After

Width:  |  Height:  |  Size: 538 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M11,1.07C7.05,1.56 4,4.92 4,9H11M4,15A8,8 0 0,0 12,23A8,8 0 0,0 20,15V11H4M13,1.07V9H20C20,4.92 16.94,1.56 13,1.07Z" />
</svg>

After

Width:  |  Height:  |  Size: 419 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M19,18H5V6H19M21,4H3C1.89,4 1,4.89 1,6V18A2,2 0 0,0 3,20H21A2,2 0 0,0 23,18V6C23,4.89 22.1,4 21,4Z" />
</svg>

After

Width:  |  Height:  |  Size: 402 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.43 19.12,14.63 17.79,15L19.25,16.44C20.88,15.61 22,13.95 22,12A5,5 0 0,0 17,7M16,11H13.81L15.81,13H16V11M2,4.27L5.11,7.38C3.29,8.12 2,9.91 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12C3.9,10.41 5.11,9.1 6.66,8.93L8.73,11H8V13H10.73L13,15.27V17H14.73L18.74,21L20,19.74L3.27,3L2,4.27Z" />
</svg>

After

Width:  |  Height:  |  Size: 649 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M3.9,12C3.9,10.29 5.29,8.9 7,8.9H11V7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12M8,13H16V11H8V13M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.71 18.71,15.1 17,15.1H13V17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7Z" />
</svg>

After

Width:  |  Height:  |  Size: 539 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M7,10L12,15L17,10H7Z" />
</svg>

After

Width:  |  Height:  |  Size: 322 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M7,15L12,10L17,15H7Z" />
</svg>

After

Width:  |  Height:  |  Size: 322 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M13,2.05V4.05C17.39,4.59 20.5,8.58 19.96,12.97C19.5,16.61 16.64,19.5 13,19.93V21.93C18.5,21.38 22.5,16.5 21.95,11C21.5,6.25 17.73,2.5 13,2.03V2.05M5.67,19.74C7.18,21 9.04,21.79 11,22V20C9.58,19.82 8.23,19.25 7.1,18.37L5.67,19.74M7.1,5.74C8.22,4.84 9.57,4.26 11,4.06V2.06C9.05,2.25 7.19,3 5.67,4.26L7.1,5.74M5.69,7.1L4.26,5.67C3,7.19 2.25,9.04 2.05,11H4.05C4.24,9.58 4.8,8.23 5.69,7.1M4.06,13H2.06C2.26,14.96 3.03,16.81 4.27,18.33L5.69,16.9C4.81,15.77 4.24,14.42 4.06,13M10,16.5L16,12L10,7.5V16.5Z" />
</svg>

After

Width:  |  Height:  |  Size: 800 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M12,3C7.79,3 3.7,4.41 0.38,7C4.41,12.06 7.89,16.37 12,21.5C16.08,16.42 20.24,11.24 23.65,7C20.32,4.41 16.22,3 12,3Z" />
</svg>

After

Width:  |  Height:  |  Size: 419 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M17,19H7V5H17M17,1H7C5.89,1 5,1.89 5,3V21A2,2 0 0,0 7,23H17A2,2 0 0,0 19,21V3C19,1.89 18.1,1 17,1Z" />
</svg>

After

Width:  |  Height:  |  Size: 402 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24">
<path d="M16.56,5.44L15.11,6.89C16.84,7.94 18,9.83 18,12A6,6 0 0,1 12,18A6,6 0 0,1 6,12C6,9.83 7.16,7.94 8.88,6.88L7.44,5.44C5.36,6.88 4,9.28 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12C20,9.28 18.64,6.88 16.56,5.44M13,3H11V13H13" />
</svg>

After

Width:  |  Height:  |  Size: 515 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z" />
</svg>

After

Width:  |  Height:  |  Size: 458 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z" />
</svg>

After

Width:  |  Height:  |  Size: 294 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M4.2,10.7L19.8,5L20.5,6.9L6.4,12H19A2,2 0 0,1 21,14V18A2,2 0 0,1 19,20H5A2,2 0 0,1 3,18V12.5C3,11.7 3.5,10.9 4.2,10.7M17,17H19V15H17V17M5,17H15V15H5V17Z" />
</svg>

After

Width:  |  Height:  |  Size: 456 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M21,17H3V5H21M21,3H3A2,2 0 0,0 1,5V17A2,2 0 0,0 3,19H8V21H16V19H21A2,2 0 0,0 23,17V5A2,2 0 0,0 21,3Z" />
</svg>

After

Width:  |  Height:  |  Size: 404 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23,12L20.6,9.2L20.9,5.5L17.3,4.7L15.4,1.5L12,3L8.6,1.5L6.7,4.7L3.1,5.5L3.4,9.2L1,12L3.4,14.8L3.1,18.5L6.7,19.3L8.6,22.5L12,21L15.4,22.5L17.3,19.3L20.9,18.5L20.6,14.8L23,12M18.7,16.9L16,17.5L14.6,19.9L12,18.8L9.4,19.9L8,17.5L5.3,16.9L5.5,14.1L3.7,12L5.5,9.9L5.3,7.1L8,6.5L9.4,4.1L12,5.2L14.6,4.1L16,6.5L18.7,7.1L18.5,9.9L20.3,12L18.5,14.1L18.7,16.9M16.6,7.6L18,9L10,17L6,13L7.4,11.6L10,14.2L16.6,7.6Z" /></svg>

After

Width:  |  Height:  |  Size: 479 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23,12L20.56,14.78L20.9,18.46L17.29,19.28L15.4,22.46L12,21L8.6,22.47L6.71,19.29L3.1,18.47L3.44,14.78L1,12L3.44,9.21L3.1,5.53L6.71,4.72L8.6,1.54L12,3L15.4,1.54L17.29,4.72L20.9,5.54L20.56,9.22L23,12M20.33,12L18.5,9.89L18.74,7.1L16,6.5L14.58,4.07L12,5.18L9.42,4.07L8,6.5L5.26,7.09L5.5,9.88L3.67,12L5.5,14.1L5.26,16.9L8,17.5L9.42,19.93L12,18.81L14.58,19.92L16,17.5L18.74,16.89L18.5,14.1L20.33,12Z" /></svg>

After

Width:  |  Height:  |  Size: 471 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z" />
</svg>

After

Width:  |  Height:  |  Size: 425 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" viewBox="0 0 24 24">
<path d="M6,12A6,6 0 0,1 12,6A6,6 0 0,1 18,12A6,6 0 0,1 12,18A6,6 0 0,1 6,12M20,12C20,9.45 18.81,7.19 16.95,5.73L16,0H8L7.05,5.73C5.19,7.19 4,9.45 4,12C4,14.54 5.19,16.81 7.05,18.27L8,24H16L16.95,18.27C18.81,16.81 20,14.54 20,12Z" />
</svg>

After

Width:  |  Height:  |  Size: 524 B

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