Compare commits
No commits in common. "fish-shell" and "main" have entirely different histories.
fish-shell
...
main
6
.bw-password.asc
Normal file
|
@ -0,0 +1,6 @@
|
|||
-----BEGIN PGP MESSAGE-----
|
||||
|
||||
jA0ECQMIAdvrnwZA6vH/0k4BbpJaxRE/WBrPHh/+FEz76PXX3zGkiu+ETcqKY10+
|
||||
RX68z4fcbzxK3nWltb8k7TPjjgLgUkoAYJD7wGVp/v7tijhWcfyH5/sS+lF80ao=
|
||||
=1IPu
|
||||
-----END PGP MESSAGE-----
|
65
.chezmoi.toml.tmpl
Normal file
|
@ -0,0 +1,65 @@
|
|||
{{- $passphrase := promptStringOnce . "passphrase" "passphrase" -}}
|
||||
{{- $colorscheme := "rose-pine" -}}
|
||||
{{- $gpgKey := promptStringOnce . "gpgKey" "gpgKey" -}}
|
||||
|
||||
{{- $osid := .chezmoi.os -}}
|
||||
{{- if hasKey .chezmoi.osRelease "id" -}}
|
||||
{{- $osid = printf "%s-%s" .chezmoi.os .chezmoi.osRelease.id -}}
|
||||
{{- end -}}
|
||||
|
||||
progress = true
|
||||
encryption = "gpg"
|
||||
|
||||
[diff]
|
||||
{{ if lookPath "delta" -}}
|
||||
command = "delta"
|
||||
args = ["--syntax-theme", {{ $colorscheme | quote }}, "--features", "mellow-barbet", "{{ "{{" }} .Destination {{ "}}" }}", "{{ "{{" }} .Target {{ "}}" }}"]
|
||||
pager = "delta"
|
||||
{{ end -}}
|
||||
exclude = ["scripts"]
|
||||
|
||||
[gpg]
|
||||
symmetric = true
|
||||
args = ["--batch", "--passphrase", {{ $passphrase | quote }}, "--no-symkey-cache", "--quiet"]
|
||||
|
||||
[git]
|
||||
autoPush = true
|
||||
|
||||
[hooks.read-source-state.pre]
|
||||
command = ".local/share/chezmoi/.install-bw.sh"
|
||||
|
||||
[data]
|
||||
gpgKey = {{ $gpgKey | quote }}
|
||||
passphrase = {{ $passphrase | quote }}
|
||||
osid = {{ $osid | quote }}
|
||||
{{ if eq $osid "linux-debian" -}}
|
||||
isServer = true
|
||||
{{ else }}
|
||||
isServer = false
|
||||
{{ end }}
|
||||
|
||||
[data.drapeau]
|
||||
colorscheme = {{ $colorscheme | quote }}
|
||||
rofi = "type-1"
|
||||
|
||||
# Defaults for when config is regenerated.
|
||||
[data.drapeau.colors]
|
||||
name = "catppuccin"
|
||||
flavor = "frappe"
|
||||
|
||||
base00 = "#303446" # base
|
||||
base01 = "#292c3c" # mantle
|
||||
base02 = "#414559" # surface0
|
||||
base03 = "#51576d" # surface1
|
||||
base04 = "#626880" # surface2
|
||||
base05 = "#c6d0f5" # text
|
||||
base06 = "#f2d5cf" # rosewater
|
||||
base07 = "#babbf1" # lavender
|
||||
base08 = "#e78284" # red
|
||||
base09 = "#ef9f76" # peach
|
||||
base0A = "#e5c890" # yellow
|
||||
base0B = "#a6d189" # green
|
||||
base0C = "#81c8be" # teal
|
||||
base0D = "#8caaee" # blue
|
||||
base0E = "#ca9ee6" # mauve
|
||||
base0F = "#eebebe" # flamingo
|
18
.chezmoidata/arch-packages.toml
Normal file
|
@ -0,0 +1,18 @@
|
|||
[packages.arch]
|
||||
archgirlie = [
|
||||
"lib32-gamemode",
|
||||
"lib32-vkd3d",
|
||||
"vkd3d",
|
||||
"vulkan-tools",
|
||||
"libva-nvidia-driver-git",
|
||||
"nvidia",
|
||||
"nvidia-settings",
|
||||
"xf86-video-nouveau",
|
||||
]
|
||||
archbaby = [
|
||||
"amd-ucode",
|
||||
"libva-mesa-driver",
|
||||
"vulkan-radeon",
|
||||
"xf86-video-amdgpu",
|
||||
"steamlink",
|
||||
]
|
2
.chezmoidata/gh-extensions.toml
Normal file
|
@ -0,0 +1,2 @@
|
|||
[packages.gh]
|
||||
install = ["dlvhdr/gh-dash"]
|
34
.chezmoiexternals/amfora.toml
Normal file
|
@ -0,0 +1,34 @@
|
|||
[".config/amfora/themes/catppuccin-frappe"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/amfora/refs/heads/main/themes/frappe.toml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/amfora/themes/catppuccin-latte"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/amfora/refs/heads/main/themes/latte.toml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/amfora/themes/catppuccin-macchiato"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/amfora/refs/heads/main/themes/macchiato.toml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/amfora/themes/catppuccin-mocha"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/amfora/refs/heads/main/themes/mocha.toml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/amfora/themes/rose-pine"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/amfora/refs/heads/main/themes/rose-pine.toml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/amfora/themes/rose-pine-dawn"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/amfora/refs/heads/main/themes/rose-pine-dawn.toml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/amfora/themes/rose-pine-moon"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/amfora/refs/heads/main/themes/rose-pine-moon.toml"
|
||||
refreshPeriod = "672h"
|
21
.chezmoiexternals/awesomewm.toml
Normal file
|
@ -0,0 +1,21 @@
|
|||
{{- if eq .osid "linux-arch" -}}
|
||||
[".config/awesome/lib/bling"]
|
||||
type = "git-repo"
|
||||
url = "https://github.com/BlingCorp/bling.git"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/awesome/lib/catppuccin"]
|
||||
type = "git-repo"
|
||||
url = "https://github.com/catppuccin/lua.git"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/awesome/lib/layout-machi"]
|
||||
type = "git-repo"
|
||||
url = "https://github.com/xinhaoyuan/layout-machi.git"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/awesome/lib/rubato"]
|
||||
type = "git-repo"
|
||||
url = "https://github.com/andOrlando/rubato.git"
|
||||
refreshPeriod = "672h"
|
||||
{{- end -}}
|
34
.chezmoiexternals/bat.toml
Normal file
|
@ -0,0 +1,34 @@
|
|||
[".config/bat/themes/catppuccin-latte.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/bat/main/themes/Catppuccin%20Latte.tmTheme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/bat/themes/catppuccin-frappe.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/bat/main/themes/Catppuccin%20Frappe.tmTheme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/bat/themes/catppuccin-macchiato.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/bat/main/themes/Catppuccin%20Macchiato.tmTheme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/bat/themes/catppuccin-mocha.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/bat/main/themes/Catppuccin%20Mocha.tmTheme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/bat/themes/rose-pine-dawn.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/tm-theme/main/dist/themes/rose-pine-dawn.tmTheme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/bat/themes/rose-pine-moon.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/tm-theme/main/dist/themes/rose-pine-moon.tmTheme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/bat/themes/rose-pine.tmTheme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/tm-theme/main/dist/themes/rose-pine.tmTheme"
|
||||
refreshPeriod = "672h"
|
34
.chezmoiexternals/btop.toml
Normal file
|
@ -0,0 +1,34 @@
|
|||
[".config/btop/themes/catppuccin-frappe.theme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/btop/main/themes/catppuccin_frappe.theme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/btop/themes/catppuccin-latte.theme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/btop/main/themes/catppuccin_latte.theme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/btop/themes/catppuccin-macchiato.theme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/btop/main/themes/catppuccin_macchiato.theme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/btop/themes/catppuccin-mocha.theme"]
|
||||
type = "file"
|
||||
url = "https://github.com/catppuccin/btop/blob/main/themes/catppuccin_mocha.theme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/btop/themes/rose-pine-dawn.theme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/btop/main/rose-pine-dawn.theme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/btop/themes/rose-pine-moon.theme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/btop/main/rose-pine-moon.theme"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/btop/themes/rose-pine.theme"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/rose-pine/btop/main/rose-pine.theme"
|
||||
refreshPeriod = "672h"
|
19
.chezmoiexternals/glow.toml
Normal file
|
@ -0,0 +1,19 @@
|
|||
[".config/glow/themes/catppuccin-frappe.json"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/glamour/main/themes/catppuccin-frappe.json"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/glow/themes/catppuccin-latte.json"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/glamour/main/themes/catppuccin-latte.json"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/glow/themes/catppuccin-macchiato.json"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/glamour/main/themes/catppuccin-macchiato.json"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/glow/themes/catppuccin-mocha.json"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/glamour/main/themes/catppuccin-mocha.json"
|
||||
refreshPeriod = "672h"
|
21
.chezmoiexternals/lazygit.toml
Normal file
|
@ -0,0 +1,21 @@
|
|||
{{- if (not .isServer) -}}
|
||||
[".config/lazygit/catppuccin/frappe.yml"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/lazygit/main/themes-mergable/frappe/pink.yml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/lazygit/catppuccin/latte.yml"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/lazygit/main/themes-mergable/latte/pink.yml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/lazygit/catppuccin/macchiato.yml"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/lazygit/main/themes-mergable/macchiato/pink.yml"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/lazygit/catppuccin/mocha.yml"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/lazygit/main/themes-mergable/mocha/pink.yml"
|
||||
refreshPeriod = "672h"
|
||||
{{- end -}}
|
21
.chezmoiexternals/qt5ct.toml
Normal file
|
@ -0,0 +1,21 @@
|
|||
{{- if (and (not .isServer) (eq .chezmoi.os "linux")) -}}
|
||||
[".config/qt5ct/colors/Catppuccin-Frappe.conf"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/qt5ct/main/themes/Catppuccin-Frappe.conf"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/qt5ct/colors/Catppuccin-Latte.conf"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/qt5ct/main/themes/Catppuccin-Latte.conf"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/qt5ct/colors/Catppuccin-Macchiato.conf"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/qt5ct/main/themes/Catppuccin-Macchiato.conf"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/qt5ct/colors/Catppuccin-Mocha.conf"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/qt5ct/main/themes/Catppuccin-Mocha.conf"
|
||||
refreshPeriod = "672h"
|
||||
{{- end -}}
|
36
.chezmoiexternals/zathura.toml
Normal file
|
@ -0,0 +1,36 @@
|
|||
{{- if (and (not .isServer) (eq .chezmoi.os "linux")) -}}
|
||||
[".config/zathura/catppuccin-frappe"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/zathura/main/src/catppuccin-frappe"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/zathura/catppuccin-latte"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/zathura/main/src/catppuccin-latte"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/zathura/catppuccin-macchiato"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/zathura/main/src/catppuccin-macchiato"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/zathura/catppuccin-mocha"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/catppuccin/zathura/main/src/catppuccin-mocha"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/zathura/rose-pine"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/edunfelt/zathura/main/rose-pine"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/zathura/rose-pine-dawn"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/edunfelt/zathura/main/rose-pine-dawn"
|
||||
refreshPeriod = "672h"
|
||||
|
||||
[".config/zathura/rose-pine-moon"]
|
||||
type = "file"
|
||||
url = "https://raw.githubusercontent.com/edunfelt/zathura/main/rose-pine-moon"
|
||||
refreshPeriod = "672h"
|
||||
{{- end -}}
|
67
.chezmoiignore
Normal file
|
@ -0,0 +1,67 @@
|
|||
README.md
|
||||
tags*
|
||||
**/*.src.ini
|
||||
|
||||
{{- if ne .chezmoi.hostname "archbaby" }}
|
||||
.config/fish/functions/batt.fish
|
||||
{{- end }}
|
||||
|
||||
{{- if .isServer }}
|
||||
.config/awesome
|
||||
.config/cava
|
||||
.config/composer
|
||||
.config/dunst
|
||||
.config/fehbg
|
||||
.config/firefox
|
||||
.config/fish/conf.d/30-gtk.fish
|
||||
.config/fish/conf.d/30-qt.fish
|
||||
.config/gtk-3.0
|
||||
.config/gtk-4.0
|
||||
.config/i3
|
||||
.config/mpd
|
||||
.config/ncmpcpp
|
||||
.config/openrazer
|
||||
.config/picom
|
||||
.config/polybar
|
||||
.config/razercommander
|
||||
.config/rofi
|
||||
.config/wezterm
|
||||
.config/X11
|
||||
.config/zathura
|
||||
.icons
|
||||
{{- end }}
|
||||
|
||||
{{- if ne .osid "darwin" }}
|
||||
.config/packages/Brewfile
|
||||
{{- end }}
|
||||
|
||||
{{- if ne .chezmoi.os "linux" }}
|
||||
.config/fish/conf.d/30-gtk.fish
|
||||
.config/fish/conf.d/30-qt.fish
|
||||
.config/gtk-3.0
|
||||
.config/gtk-4.0
|
||||
.config/mpd
|
||||
.config/ncmpcpp
|
||||
.config/openrazer
|
||||
.config/razercommander
|
||||
.config/zathura
|
||||
.icons
|
||||
{{- end }}
|
||||
|
||||
{{- if ne .osid "linux-arch" }}
|
||||
.config/awesome
|
||||
.config/copyq
|
||||
.config/dunst
|
||||
.config/fehbg
|
||||
.config/i3
|
||||
.config/packages/arch*
|
||||
.config/pacman
|
||||
.config/picom
|
||||
.config/polybar
|
||||
.config/rofi
|
||||
.config/yay
|
||||
.config/xrandr
|
||||
.local/bin/update-package-list
|
||||
.xprofile
|
||||
.Xresources
|
||||
{{- end }}
|
2
.chezmoiremove
Normal file
|
@ -0,0 +1,2 @@
|
|||
.bash_logout
|
||||
.bash_profile
|
55
.chezmoiscripts/run_after_00-drapeau.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env python
|
||||
import os
|
||||
import toml
|
||||
|
||||
|
||||
def main():
|
||||
# Chech if config file exists
|
||||
chezmoi_config_dir = os.path.join(os.environ["HOME"], ".config", "chezmoi")
|
||||
if os.path.exists(os.path.join(chezmoi_config_dir, "chezmoi.toml")):
|
||||
chezmoi_config_file = os.path.join(chezmoi_config_dir, "chezmoi.toml")
|
||||
else:
|
||||
return "=== ERROR: No chezmoi.toml found ==="
|
||||
|
||||
# Load config file into memory
|
||||
chezmoi_config_dict = toml.load(chezmoi_config_file)
|
||||
|
||||
# Extract drapeau data
|
||||
if "drapeau" not in chezmoi_config_dict["data"]:
|
||||
chezmoi_config_dict["data"]["drapeau"] = {}
|
||||
|
||||
# Get colorscheme
|
||||
if "colorscheme" in chezmoi_config_dict["data"]["drapeau"]:
|
||||
drapeau_color_scheme = chezmoi_config_dict["data"]["drapeau"]["colorscheme"]
|
||||
else:
|
||||
drapeau_color_scheme = "default"
|
||||
chezmoi_config_dict["data"]["drapeau"]["colorscheme"] = drapeau_color_scheme
|
||||
|
||||
# Find colorscheme files
|
||||
# Produce dict of {"name": "path"} for all schemes
|
||||
drapeau_config_dir = os.path.join(os.environ["HOME"], ".config", "drapeau")
|
||||
if os.path.exists(drapeau_config_dir):
|
||||
drapeau_color_scheme_files = {
|
||||
".".join(scheme.split(".")[:-1]): os.path.join(drapeau_config_dir, scheme)
|
||||
for scheme in os.listdir(drapeau_config_dir)
|
||||
if os.path.isfile(os.path.join(drapeau_config_dir, scheme))
|
||||
}
|
||||
else:
|
||||
drapeau_color_scheme_files = {}
|
||||
|
||||
# Extract colorscheme data from desired scheme
|
||||
drapeau_color_scheme_dict = toml.load(
|
||||
drapeau_color_scheme_files[drapeau_color_scheme]
|
||||
)
|
||||
|
||||
# Add colorscheme to chezmoi config data
|
||||
chezmoi_config_dict["data"]["drapeau"]["colors"] = drapeau_color_scheme_dict
|
||||
|
||||
# Write out modified dict to chezmoi config file
|
||||
with open(chezmoi_config_file, "w") as f:
|
||||
toml.dump(chezmoi_config_dict, f)
|
||||
|
||||
return "=== SUCCESS ==="
|
||||
|
||||
|
||||
main()
|
13
.chezmoiscripts/run_before_10-unlock-bw.sh.tmpl
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
type bw >/dev/null 2>&1 || exit
|
||||
|
||||
pass={{ joinPath .chezmoi.sourceDir ".bw-password.asc" | include | decrypt }}
|
||||
|
||||
if ! bw login --check; then
|
||||
BW_SESSION=$(bw login "bitwarden@punkfairie.net" "$pass" --raw)
|
||||
else
|
||||
BW_SESSION=$(bw unlock "$pass" --raw)
|
||||
fi
|
||||
|
||||
export BW_SESSION
|
6
.chezmoiscripts/run_once_after_20-pacman.sh
Normal file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if command -v pacman-key &>/dev/null; then
|
||||
sudo pacman-key --init
|
||||
sudo pacman-key --populate archlinux
|
||||
fi
|
12
.chezmoiscripts/run_once_before_00-aur.sh.tmpl
Normal file
|
@ -0,0 +1,12 @@
|
|||
{{- if (and (eq .osid "linux-arch") (not (lookPath "yay"))) -}}
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo pacman -S --needed git base-devel
|
||||
git clone https://aur.archlinux.org/yay-bin.git
|
||||
cd yay-bin
|
||||
makepkg -si
|
||||
cd ..
|
||||
rm -rf yay-bin
|
||||
|
||||
yay -Syu
|
||||
{{- end -}}
|
8
.chezmoiscripts/run_once_before_00-chaotic-aur.sh.tmpl
Normal file
|
@ -0,0 +1,8 @@
|
|||
{{- if eq .osid "linux-arch" -}}
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
|
||||
sudo pacman-key --lsign-key 3056513887B78AEB
|
||||
sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst'
|
||||
sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
|
||||
{{- end -}}
|
|
@ -0,0 +1,7 @@
|
|||
{{- if eq .osid "linux-arch" -}}
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# {{ include "dot_config/pacman/pacman.conf.tmpl" | sha256sum }}
|
||||
|
||||
sudo cp -v "$HOME/.config/pacman/pacman.conf" "/etc/pacman.conf"
|
||||
{{ end -}}
|
146
.chezmoitemplates/starship_rose_pine_toml.tmpl
Normal file
|
@ -0,0 +1,146 @@
|
|||
format = """
|
||||
$username \
|
||||
$directory \
|
||||
$git_branch \
|
||||
$git_status \
|
||||
$fill \
|
||||
$c \
|
||||
$elixir \
|
||||
$elm \
|
||||
$golang \
|
||||
$haskell \
|
||||
$java \
|
||||
$julia \
|
||||
$nodejs \
|
||||
$nim \
|
||||
$rust \
|
||||
$scala \
|
||||
$python \
|
||||
$time\n \
|
||||
[](fg:iris) \
|
||||
"""
|
||||
|
||||
palette = "rose-pine"
|
||||
|
||||
[palettes.rose-pine]
|
||||
overlay = '#26233a'
|
||||
love = '#eb6f92'
|
||||
gold = '#f6c177'
|
||||
rose = '#ebbcba'
|
||||
pine = '#31748f'
|
||||
foam = '#9ccfd8'
|
||||
iris = '#c4a7e7'
|
||||
|
||||
[directory]
|
||||
format = "[](fg:overlay)[ $path ]($style)[](fg:overlay)"
|
||||
style = "bg:overlay fg:pine"
|
||||
truncation_length = 3
|
||||
truncation_symbol = "…/"
|
||||
|
||||
[directory.substitutions]
|
||||
Documents = ""
|
||||
Downloads = " "
|
||||
Music = " "
|
||||
Pictures = " "
|
||||
|
||||
[fill]
|
||||
style = "fg:overlay"
|
||||
symbol = " "
|
||||
|
||||
[git_branch]
|
||||
format = "[](fg:overlay)[ $symbol $branch ]($style)[](fg:overlay)"
|
||||
style = "bg:overlay fg:foam"
|
||||
symbol = ""
|
||||
|
||||
[git_status]
|
||||
style = "bg:overlay fg:love"
|
||||
format = '[](fg:overlay)[$all_status$ahead_behind]($style)[](fg:overlay)'
|
||||
disabled = true
|
||||
|
||||
[time]
|
||||
disabled = false
|
||||
format = "[](fg:overlay)[ $time ]($style)[](fg:overlay)"
|
||||
style = "bg:overlay fg:rose"
|
||||
time_format = "%I:%M%P"
|
||||
use_12hr = true
|
||||
|
||||
[username]
|
||||
disabled = false
|
||||
format = "[](fg:overlay)[ $user ]($style)[](fg:overlay)"
|
||||
show_always = true
|
||||
style_root = "bg:overlay fg:iris"
|
||||
style_user = "bg:overlay fg:iris"
|
||||
|
||||
# Languages
|
||||
|
||||
[c]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[elixir]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[elm]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[golang]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[haskell]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[java]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[julia]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[nodejs]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[nim]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[rust]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = ""
|
||||
|
||||
[scala]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = " "
|
||||
|
||||
[python]
|
||||
style = "bg:overlay fg:pine"
|
||||
format = "[](fg:overlay)[$symbol$version]($style)[](fg:overlay) "
|
||||
disabled = false
|
||||
symbol = ' '
|
188
.chezmoitemplates/starship_toml.tmpl
Normal file
|
@ -0,0 +1,188 @@
|
|||
"$schema" = 'https://starship.rs/config-schema.json'
|
||||
|
||||
[character]
|
||||
success_symbol = "[[]({{ .drapeau.colors.base0F }}) ]({{ .drapeau.colors.base0B }})"
|
||||
error_symbol = "[]({{ .drapeau.colors.base08 }})"
|
||||
vimcmd_symbol = "[]({{ .drapeau.colors.base0B }})"
|
||||
vimcmd_replace_one_symbol = "[]({{ .drapeau.colors.base0B }})"
|
||||
vimcmd_replace_symbol = "[]({{ .drapeau.colors.base0B }})"
|
||||
vimcmd_visual_symbol = "[]({{ .drapeau.colors.base09 }})"
|
||||
|
||||
[aws]
|
||||
symbol = " "
|
||||
|
||||
[buf]
|
||||
symbol = " "
|
||||
|
||||
[c]
|
||||
symbol = " "
|
||||
|
||||
[conda]
|
||||
symbol = " "
|
||||
|
||||
[crystal]
|
||||
symbol = " "
|
||||
|
||||
[dart]
|
||||
symbol = " "
|
||||
|
||||
[directory]
|
||||
read_only = " "
|
||||
|
||||
[docker_context]
|
||||
symbol = " "
|
||||
|
||||
[elixir]
|
||||
symbol = " "
|
||||
|
||||
[elm]
|
||||
symbol = " "
|
||||
|
||||
[fennel]
|
||||
symbol = " "
|
||||
|
||||
[fossil_branch]
|
||||
symbol = " "
|
||||
|
||||
[git_branch]
|
||||
symbol = " "
|
||||
|
||||
[golang]
|
||||
symbol = " "
|
||||
|
||||
[guix_shell]
|
||||
symbol = " "
|
||||
|
||||
[haskell]
|
||||
symbol = " "
|
||||
|
||||
[haxe]
|
||||
symbol = " "
|
||||
|
||||
[hg_branch]
|
||||
symbol = " "
|
||||
|
||||
[hostname]
|
||||
ssh_symbol = " "
|
||||
style = 'bold {{ .drapeau.colors.base07 }}'
|
||||
|
||||
[java]
|
||||
symbol = " "
|
||||
|
||||
[julia]
|
||||
symbol = " "
|
||||
|
||||
[kotlin]
|
||||
symbol = " "
|
||||
|
||||
[lua]
|
||||
symbol = " "
|
||||
|
||||
[memory_usage]
|
||||
symbol = " "
|
||||
|
||||
[meson]
|
||||
symbol = " "
|
||||
|
||||
[nim]
|
||||
symbol = " "
|
||||
|
||||
[nix_shell]
|
||||
symbol = " "
|
||||
|
||||
[nodejs]
|
||||
symbol = " "
|
||||
|
||||
[ocaml]
|
||||
symbol = " "
|
||||
|
||||
[os.symbols]
|
||||
Alpaquita = " "
|
||||
Alpine = " "
|
||||
Amazon = " "
|
||||
Android = " "
|
||||
Arch = " "
|
||||
Artix = " "
|
||||
CentOS = " "
|
||||
Debian = " "
|
||||
DragonFly = " "
|
||||
Emscripten = " "
|
||||
EndeavourOS = " "
|
||||
Fedora = " "
|
||||
FreeBSD = " "
|
||||
Garuda = " "
|
||||
Gentoo = " "
|
||||
HardenedBSD = " "
|
||||
Illumos = " "
|
||||
Linux = " "
|
||||
Mabox = " "
|
||||
Macos = " "
|
||||
Manjaro = " "
|
||||
Mariner = " "
|
||||
MidnightBSD = " "
|
||||
Mint = " "
|
||||
NetBSD = " "
|
||||
NixOS = " "
|
||||
OpenBSD = " "
|
||||
openSUSE = " "
|
||||
OracleLinux = " "
|
||||
Pop = " "
|
||||
Raspbian = " "
|
||||
Redhat = " "
|
||||
RedHatEnterprise = " "
|
||||
Redox = " "
|
||||
Solus = " "
|
||||
SUSE = " "
|
||||
Ubuntu = " "
|
||||
Unknown = " "
|
||||
Windows = " "
|
||||
|
||||
[package]
|
||||
symbol = " "
|
||||
|
||||
[perl]
|
||||
symbol = " "
|
||||
|
||||
[php]
|
||||
symbol = " "
|
||||
|
||||
[pijul_channel]
|
||||
symbol = " "
|
||||
|
||||
[python]
|
||||
symbol = " "
|
||||
|
||||
[rlang]
|
||||
symbol = " "
|
||||
|
||||
[ruby]
|
||||
symbol = " "
|
||||
|
||||
[rust]
|
||||
symbol = " "
|
||||
|
||||
[scala]
|
||||
symbol = " "
|
||||
|
||||
[status]
|
||||
disabled = false
|
||||
style = '{{ .drapeau.colors.base08 }}'
|
||||
symbol = '✗'
|
||||
not_executable_symbol = ''
|
||||
not_found_symbol = ''
|
||||
sigint_symbol = ''
|
||||
signal_symbol = ''
|
||||
|
||||
[sudo]
|
||||
disabled = false
|
||||
style = '{{ .drapeau.colors.base0D }}'
|
||||
symbol = ' '
|
||||
|
||||
[swift]
|
||||
symbol = " "
|
||||
|
||||
[username]
|
||||
format = '[$user]($style) on '
|
||||
|
||||
[zig]
|
||||
symbol = " "
|
2
.gitignore
vendored
|
@ -1 +1 @@
|
|||
Brewfile
|
||||
tags.*
|
||||
|
|
21
.install-bw.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
type bw >/dev/null 2>&1 && exit
|
||||
|
||||
case "$(uname -s)" in
|
||||
Darwin)
|
||||
brew install bitwarden-cli
|
||||
;;
|
||||
Linux)
|
||||
if command -v yay 2>&1; then
|
||||
yay -S bitwarden-cli
|
||||
elif command -v pacman 2>&1; then
|
||||
pacman -S bitwarden-cli
|
||||
elif command -v npm 2>&1; then
|
||||
npm install -g @bitwarden/cli
|
||||
else
|
||||
echo "unsupported OS"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
339
LICENSE
|
@ -1,339 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
83
README.md
|
@ -1,22 +1,83 @@
|
|||
# dotfiles
|
||||
# mar does dotfiles
|
||||
|
||||
mar does dotfiles
|
||||
Welcome to my dotfiles :)
|
||||
|
||||
# post install
|
||||
Feel free to steal what you like, though I'd advise against wholesale using my
|
||||
config. Things are likely to break. At the very least - change the values in
|
||||
dot_config/git/config.local.
|
||||
|
||||
Set iTerm2 to use the preferences file, if applicable.
|
||||
I apologize for the disgusting Chezmoi format - I resisted it for ages and then
|
||||
things got complex enough that I needed it.
|
||||
|
||||
## tmux
|
||||
The branches all contain previous iterations, with the exception of fish-shell
|
||||
which was used to test out using fish as my login shell before committing.
|
||||
|
||||
## First-Time Setup
|
||||
|
||||
### GPG makes me want to toss the computer out the window
|
||||
|
||||
```fish
|
||||
tmux attach || tmux new -s main
|
||||
gpg --full-gen-key
|
||||
# kind of key: 4
|
||||
# key size: 4096
|
||||
# expiration: 0 && y
|
||||
# real name: punkfairie
|
||||
# email: 23287005+punkfairie@users.noreply.github.com
|
||||
|
||||
sudo -k
|
||||
chown -R (whoami) "$HOME/.gnupg/"
|
||||
find "$HOME/.gnupg" -type f -exec chmod 600 {} \;
|
||||
find "$HOME/.gnupg" -type d -exec chmod 700 {} \;
|
||||
|
||||
chezmoi init --apply punkfairie
|
||||
```
|
||||
`<ctrl-a I>` to install plugins.
|
||||
|
||||
## sources
|
||||
### Arch
|
||||
|
||||
[oh-my-zsh git](https://kapeli.com/cheat_sheets/Oh-My-Zsh_Git.docset/Contents/Resources/Documents/index)
|
||||
```fish
|
||||
pacman -S --needed git base-devel
|
||||
git clone https://aur.archlinux.org/yay-bin.git
|
||||
cd yay-bin
|
||||
makepkg -si
|
||||
cd ..
|
||||
rm -rf yay-bin
|
||||
|
||||
[git-prevision](https://gist.github.com/TheCodeArtist/a90978ebca0ff6743036)
|
||||
yay -Syu
|
||||
yay -S --needed - < ~/.config/packages/arch
|
||||
|
||||
[iTerm2 keymaps for tmux](https://web.archive.org/web/20230921160724/https://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/)
|
||||
gpg --armor --export (get-gpg-key) | copyq copy -
|
||||
```
|
||||
|
||||
### General
|
||||
|
||||
Go to <https://github.com/settings/keys> and add the copied key to your account.
|
||||
|
||||
```fish
|
||||
volta install node
|
||||
topgrade
|
||||
```
|
||||
|
||||
## Themes
|
||||
|
||||
### GRUB
|
||||
|
||||
```conf
|
||||
# /etc/default/grub
|
||||
GRUB_THEME="/usr/share/grub/themes/catppuccin-<flavor>/theme.txt"
|
||||
```
|
||||
|
||||
`sudo grub-mkconfig -o /boot/grub/grub.cfg`
|
||||
|
||||
### SDDM
|
||||
|
||||
### TTY
|
||||
|
||||
```fish
|
||||
git clone https://github.com/catppuccin/tty.git
|
||||
cd tty
|
||||
./generate.sh <flavor> | copyq copy -
|
||||
```
|
||||
|
||||
Edit `/etc/default/grub` and append copied content to `GRUB_CMDLINE_LINUX`.
|
||||
|
||||
`sudo grub-mkconfig -o /boot/grub/grub.cfg`
|
||||
|
|
40
dot_config/X11/dot_Xresources.tmpl
Normal file
|
@ -0,0 +1,40 @@
|
|||
*background: {{ .drapeau.colors.base00 }}
|
||||
*foreground: {{ .drapeau.colors.base05 }}
|
||||
|
||||
! black
|
||||
*color0: {{ .drapeau.colors.base03 }}
|
||||
*color8: {{ .drapeau.colors.base04 }}
|
||||
|
||||
! red
|
||||
*color1: {{ .drapeau.colors.base08 }}
|
||||
*color9: {{ .drapeau.colors.base08 }}
|
||||
|
||||
! green
|
||||
*color2: {{ .drapeau.colors.base0B }}
|
||||
*color10: {{ .drapeau.colors.base0B }}
|
||||
|
||||
! yellow
|
||||
*color3: {{ .drapeau.colors.base0A }}
|
||||
*color11: {{ .drapeau.colors.base0A }}
|
||||
|
||||
! blue
|
||||
*color4: {{ .drapeau.colors.base0D }}
|
||||
*color12: {{ .drapeau.colors.base0D }}
|
||||
|
||||
! magenta
|
||||
*color5: {{ .drapeau.colors.base0F }}
|
||||
*color13: {{ .drapeau.colors.base0F }}
|
||||
|
||||
! cyan
|
||||
*color6: {{ .drapeau.colors.base0C }}
|
||||
*color14: {{ .drapeau.colors.base0C }}
|
||||
|
||||
! white
|
||||
*color7: {{ .drapeau.colors.base05 }}
|
||||
*color15: {{ .drapeau.colors.base05 }}
|
||||
|
||||
{{ if lookPath "rofi" -}}
|
||||
! Make Rofi use fish shell
|
||||
rofi.run-command: fish -c '{cmd}'
|
||||
rofi.run-list-command: 'fish -c functions'
|
||||
{{- end -}}
|
435
dot_config/amfora/config.toml.tmpl
Normal file
|
@ -0,0 +1,435 @@
|
|||
# This is the default config file.
|
||||
# It also shows all the default values, if you don't create the file.
|
||||
# You can edit this file to set your own configuration for Amfora.
|
||||
|
||||
# When Amfora updates, defaults may change, but this file on your drive will not.
|
||||
# You can always get the latest defaults on GitHub.
|
||||
# https://github.com/makeworld-the-better-one/amfora/blob/master/default-config.toml
|
||||
|
||||
# Please also check out the Amfora Wiki for more help
|
||||
# https://github.com/makeworld-the-better-one/amfora/wiki
|
||||
# gemini://makeworld.space/amfora-wiki/
|
||||
|
||||
|
||||
# All URL values may omit the scheme and/or port, as well as the beginning double slash
|
||||
# Valid URL examples:
|
||||
# gemini://example.com
|
||||
# //example.com
|
||||
# example.com
|
||||
# example.com:123
|
||||
|
||||
include = "./themes/{{ .drapeau.colorscheme }}.toml"
|
||||
|
||||
[a-general]
|
||||
# Press Ctrl-H to access it
|
||||
home = "gemini://geminiprotocol.net"
|
||||
|
||||
# Follow up to 5 Gemini redirects without prompting.
|
||||
# A prompt is always shown after the 5th redirect and for redirects to protocols other than Gemini.
|
||||
# If set to false, a prompt will be shown before following redirects.
|
||||
auto_redirect = false
|
||||
|
||||
# What command to run to open a HTTP(S) URL.
|
||||
# Set to "default" to try to guess the browser, or set to "off" to not open HTTP(S) URLs.
|
||||
# If a command is set, than the URL will be added (in quotes) to the end of the command.
|
||||
# A space will be prepended to the URL.
|
||||
#
|
||||
# The best way to define a command is using a string array.
|
||||
# Examples:
|
||||
# http = ['firefox']
|
||||
# http = ['custom-browser', '--flag', '--option=2']
|
||||
# http = ['/path/with spaces/in it/firefox']
|
||||
#
|
||||
# Note the use of single quotes, so that backslashes will not be escaped.
|
||||
# Using just a string will also work, but it is deprecated, and will degrade if
|
||||
# you use paths with spaces.
|
||||
|
||||
http = 'default'
|
||||
|
||||
# Any URL that will accept a query string can be put here
|
||||
search = "gemini://geminispace.info/search"
|
||||
|
||||
# Whether colors will be used in the terminal
|
||||
color = true
|
||||
|
||||
# Whether ANSI color codes from the page content should be rendered
|
||||
ansi = true
|
||||
|
||||
# Whether or not to support source code highlighting in preformatted blocks based on alt text
|
||||
highlight_code = true
|
||||
|
||||
# Which highlighting style to use (see https://xyproto.github.io/splash/docs/)
|
||||
highlight_style = {{ .drapeau.colorscheme | quote }}
|
||||
|
||||
# Whether to replace list asterisks with unicode bullets
|
||||
bullets = true
|
||||
|
||||
# Whether to show link after link text
|
||||
show_link = false
|
||||
|
||||
# The max number of columns to wrap a page's text to. Preformatted blocks are not wrapped.
|
||||
max_width = 80
|
||||
|
||||
# 'downloads' is the path to a downloads folder.
|
||||
# An empty value means the code will find the default downloads folder for your system.
|
||||
# If the path does not exist it will be created.
|
||||
# Note the use of single quotes, so that backslashes will not be escaped.
|
||||
downloads = ''
|
||||
|
||||
# Max size for displayable content in bytes - after that size a download window pops up
|
||||
page_max_size = 2097152 # 2 MiB
|
||||
# Max time it takes to load a page in seconds - after that a download window pops up
|
||||
page_max_time = 10
|
||||
|
||||
# When a scrollbar appears. "never", "auto", and "always" are the only valid values.
|
||||
# "auto" means the scrollbar only appears when the page is longer than the window.
|
||||
scrollbar = "auto"
|
||||
|
||||
# Underline non-gemini URLs
|
||||
# This is done to help color blind users
|
||||
underline = true
|
||||
|
||||
|
||||
[auth]
|
||||
# Authentication settings
|
||||
# Note the use of single quotes for values, so that backslashes will not be escaped.
|
||||
|
||||
[auth.certs]
|
||||
# Client certificates
|
||||
# Set URL equal to path to client cert file
|
||||
#
|
||||
# "example.com" = 'mycert.crt' # Cert is used for all paths on this domain
|
||||
# "example.com/dir/"= 'mycert.crt' # Cert is used for /dir/ and everything below only
|
||||
#
|
||||
# See the comment at the beginning of this file for examples of all valid types of
|
||||
# URLs, ports and schemes can be used too
|
||||
|
||||
[auth.keys]
|
||||
# Client certificate keys
|
||||
# Same as [auth.certs] but the path is to the client key file.
|
||||
|
||||
|
||||
[keybindings]
|
||||
# If you have a non-US keyboard, use bind_tab1 through bind_tab0 to
|
||||
# setup the shift-number bindings: Eg, for US keyboards (the default):
|
||||
# bind_tab1 = "!"
|
||||
# bind_tab2 = "@"
|
||||
# bind_tab3 = "#"
|
||||
# bind_tab4 = "$"
|
||||
# bind_tab5 = "%"
|
||||
# bind_tab6 = "^"
|
||||
# bind_tab7 = "&"
|
||||
# bind_tab8 = "*"
|
||||
# bind_tab9 = "("
|
||||
# bind_tab0 = ")"
|
||||
|
||||
# Whitespace is not allowed in any of the keybindings! Use 'Space' and 'Tab' to bind to those keys.
|
||||
# Multiple keys can be bound to one command, just use a TOML array.
|
||||
# To add the Alt modifier, the binding must start with Alt-, should be reasonably universal
|
||||
# Ctrl- won't work on all keys, see this for a list:
|
||||
# https://github.com/gdamore/tcell/blob/cb1e5d6fa606/key.go#L83
|
||||
|
||||
# An example of a TOML array for multiple keys being bound to one command is the default
|
||||
# binding for reload:
|
||||
# bind_reload = ["R","Ctrl-R"]
|
||||
# One thing to note here is that "R" is capitalization sensitive, so it means shift-r.
|
||||
# "Ctrl-R" means both ctrl-r and ctrl-shift-R (this is a quirk of what ctrl-r means on
|
||||
# an ANSI terminal)
|
||||
|
||||
# The default binding for opening the bottom bar for entering a URL or link number is:
|
||||
# bind_bottom = "Space"
|
||||
# This is how to get the Spacebar as a keybinding, if you try to use " ", it won't work.
|
||||
# And, finally, an example of a simple, unmodified character is:
|
||||
# bind_edit = "e"
|
||||
# This binds the "e" key to the command to edit the current URL.
|
||||
|
||||
# The bind_link[1-90] options are for the commands to go to the first 10 links on a page,
|
||||
# typically these are bound to the number keys:
|
||||
# bind_link1 = "1"
|
||||
# bind_link2 = "2"
|
||||
# bind_link3 = "3"
|
||||
# bind_link4 = "4"
|
||||
# bind_link5 = "5"
|
||||
# bind_link6 = "6"
|
||||
# bind_link7 = "7"
|
||||
# bind_link8 = "8"
|
||||
# bind_link9 = "9"
|
||||
# bind_link0 = "0"
|
||||
|
||||
# All keybindings:
|
||||
#
|
||||
# bind_bottom
|
||||
# bind_edit
|
||||
# bind_home
|
||||
# bind_bookmarks
|
||||
# bind_add_bookmark
|
||||
# bind_save
|
||||
# bind_reload
|
||||
# bind_back
|
||||
# bind_forward
|
||||
# bind_moveup
|
||||
# bind_movedown
|
||||
# bind_moveleft
|
||||
# bind_moveright
|
||||
# bind_pgup
|
||||
# bind_pgdn
|
||||
# bind_new_tab
|
||||
# bind_close_tab
|
||||
# bind_next_tab
|
||||
# bind_prev_tab
|
||||
# bind_quit
|
||||
# bind_help
|
||||
# bind_sub: for viewing the subscriptions page
|
||||
# bind_add_sub
|
||||
# bind_copy_page_url
|
||||
# bind_copy_target_url
|
||||
# bind_beginning: moving to beginning of page (top left)
|
||||
# bind_end: same but the for the end (bottom left)
|
||||
# bind_url_handler_open: Open highlighted URL with URL handler (#143)
|
||||
|
||||
[url-handlers]
|
||||
# Allows setting the commands to run for various URL schemes.
|
||||
# E.g. to open FTP URLs with FileZilla set the following key:
|
||||
# ftp = ['filezilla']
|
||||
# You can set any scheme to 'off' or '' to disable handling it, or
|
||||
# just leave the key unset.
|
||||
#
|
||||
# DO NOT use this for setting the HTTP command.
|
||||
# Use the http setting in the "a-general" section above.
|
||||
#
|
||||
# NOTE: These settings are overrided by the ones in the proxies section.
|
||||
#
|
||||
# The best way to define a command is using a string array.
|
||||
# Examples:
|
||||
# magnet = ['transmission']
|
||||
# foo = ['custom-browser', '--flag', '--option=2']
|
||||
# tel = ['/path/with spaces/in it/telephone']
|
||||
#
|
||||
# Note the use of single quotes, so that backslashes will not be escaped.
|
||||
# Using just a string will also work, but it is deprecated, and will degrade if
|
||||
# you use paths with spaces.
|
||||
|
||||
# This is a special key that defines the handler for all URL schemes for which
|
||||
# no handler is defined.
|
||||
# It uses the special value 'default', which will try and use the default
|
||||
# application on your computer for opening this kind of URI.
|
||||
other = 'default'
|
||||
|
||||
[url-prompts]
|
||||
# Specify whether a confirmation prompt should be shown before following URL schemes.
|
||||
# The special key 'other' matches all schemes that don't match any other key.
|
||||
#
|
||||
# Example: prompt on every non-gemini URL
|
||||
# other = true
|
||||
# gemini = false
|
||||
#
|
||||
# Example: only prompt on HTTP(S)
|
||||
# other = false
|
||||
# http = true
|
||||
# https = true
|
||||
|
||||
# [[mediatype-handlers]] section
|
||||
# ---------------------------------
|
||||
#
|
||||
# Specify what applications will open certain media types.
|
||||
# By default your default application will be used to open the file when you select "Open".
|
||||
# You only need to configure this section if you want to override your default application,
|
||||
# or do special things like streaming.
|
||||
#
|
||||
# Note the use of single quotes for commands, so that backslashes will not be escaped.
|
||||
#
|
||||
#
|
||||
# To open jpeg files with the feh command:
|
||||
#
|
||||
# [[mediatype-handlers]]
|
||||
# cmd = ['feh']
|
||||
# types = ["image/jpeg"]
|
||||
#
|
||||
# Each command that you specify must come under its own [[mediatype-handlers]]. You may
|
||||
# specify as many [[mediatype-handlers]] as you want to setup multiple commands.
|
||||
#
|
||||
# If the subtype is omitted then the specified command will be used for the
|
||||
# entire type:
|
||||
#
|
||||
# [[mediatype-handlers]]
|
||||
# command = ['vlc', '--flag']
|
||||
# types = ["audio", "video"]
|
||||
#
|
||||
# A catch-all handler can by specified with "*".
|
||||
# Note that there are already catch-all handlers in place for all OSes,
|
||||
# that open the file using your default application. This is only if you
|
||||
# want to override that.
|
||||
#
|
||||
# [[mediatype-handlers]]
|
||||
# cmd = ['some-command']
|
||||
# types = [
|
||||
# "application/pdf",
|
||||
# "*",
|
||||
# ]
|
||||
#
|
||||
# You can also choose to stream the data instead of downloading it all before
|
||||
# opening it. This is especially useful for large video or audio files, as
|
||||
# well as radio streams, which will never complete. You can do this like so:
|
||||
#
|
||||
# [[mediatype-handlers]]
|
||||
# cmd = ['vlc', '-']
|
||||
# types = ["audio", "video"]
|
||||
# stream = true
|
||||
#
|
||||
# This uses vlc to stream all video and audio content.
|
||||
# By default stream is set to off for all handlers
|
||||
#
|
||||
#
|
||||
# If you want to always open a type in its viewer without the download or open
|
||||
# prompt appearing, you can add no_prompt = true
|
||||
#
|
||||
# [[mediatype-handlers]]
|
||||
# cmd = ['feh']
|
||||
# types = ["image"]
|
||||
# no_prompt = true
|
||||
#
|
||||
# Note: Multiple handlers cannot be defined for the same full media type, but
|
||||
# still there needs to be an order for which handlers are used. The following
|
||||
# order applies regardless of the order written in the config:
|
||||
#
|
||||
# 1. Full media type: "image/jpeg"
|
||||
# 2. Just type: "image"
|
||||
# 3. Catch-all: "*"
|
||||
|
||||
|
||||
[cache]
|
||||
# Options for page cache - which is only for text pages
|
||||
# Increase the cache size to speed up browsing at the expense of memory
|
||||
# Zero values mean there is no limit
|
||||
|
||||
max_size = 0 # Size in bytes
|
||||
max_pages = 30 # The maximum number of pages the cache will store
|
||||
|
||||
# How long a page will stay in cache, in seconds.
|
||||
timeout = 1800 # 30 mins
|
||||
|
||||
[proxies]
|
||||
# Allows setting a Gemini proxy for different schemes.
|
||||
# The settings are similar to the url-handlers section above.
|
||||
# E.g. to open a gopher page by connecting to a Gemini proxy server:
|
||||
# gopher = "example.com:123"
|
||||
#
|
||||
# Port 1965 is assumed if no port is specified.
|
||||
#
|
||||
# NOTE: These settings override any external handlers specified in
|
||||
# the url-handlers section.
|
||||
#
|
||||
# Note that HTTP and HTTPS are treated as separate protocols here.
|
||||
|
||||
|
||||
[subscriptions]
|
||||
# For tracking feeds and pages
|
||||
|
||||
# Whether a pop-up appears when viewing a potential feed
|
||||
popup = true
|
||||
|
||||
# How often to check for updates to subscriptions in the background, in seconds.
|
||||
# Set it to 0 to disable this feature. You can still update individual feeds
|
||||
# manually, or restart the browser.
|
||||
#
|
||||
# Note Amfora will check for updates on browser start no matter what this setting is.
|
||||
update_interval = 1800 # 30 mins
|
||||
|
||||
# How many subscriptions can be checked at the same time when updating.
|
||||
# If you have many subscriptions you may want to increase this for faster
|
||||
# update times. Any value below 1 will be corrected to 1.
|
||||
workers = 3
|
||||
|
||||
# The number of subscription updates displayed per page.
|
||||
entries_per_page = 20
|
||||
|
||||
# Set to false to remove the explanatory text from the top of the subscription page
|
||||
header = true
|
||||
|
||||
|
||||
[theme]
|
||||
# This section is for changing the COLORS used in Amfora.
|
||||
# These colors only apply if 'color' is enabled above.
|
||||
# Colors can be set using a W3C color name, or a hex value such as "#ffffff".
|
||||
# Setting a background to "default" keeps the terminal default
|
||||
# If your terminal has transparency, set any background to "default" to keep it transparent
|
||||
# The key "bg" is already set to "default", but this can be used on other backgrounds,
|
||||
# like for modals.
|
||||
|
||||
# Note that not all colors will work on terminals that do not have truecolor support.
|
||||
# If you want to stick to the standard 16 or 256 colors, you can get
|
||||
# a list of those here: https://jonasjacek.github.io/colors/
|
||||
# DO NOT use the names from that site, just the hex codes.
|
||||
|
||||
# Definitions:
|
||||
# bg = background
|
||||
# fg = foreground
|
||||
# dl = download
|
||||
# btn = button
|
||||
# hdg = heading
|
||||
# bkmk = bookmark
|
||||
# modal = a popup window/box in the middle of the screen
|
||||
|
||||
# EXAMPLES:
|
||||
# hdg_1 = "green"
|
||||
# hdg_2 = "#5f0000"
|
||||
# bg = "default"
|
||||
|
||||
# Available keys to set:
|
||||
|
||||
# bg: background for pages, tab row, app in general
|
||||
# tab_num: The number/highlight of the tabs at the top
|
||||
# tab_divider: The color of the divider character between tab numbers: |
|
||||
# bottombar_label: The color of the prompt that appears when you press space
|
||||
# bottombar_text: The color of the text you type
|
||||
# bottombar_bg
|
||||
# scrollbar: The scrollbar that appears on the right for long pages
|
||||
|
||||
# You can also set an 'include' key to process another TOML file that contains theme keys.
|
||||
# Example:
|
||||
# include = "my/path/to/special-theme.toml"
|
||||
#
|
||||
# Any other theme keys will override this external file.
|
||||
# You can use this special key to switch between themes easily.
|
||||
# Download other themes here: https://github.com/makeworld-the-better-one/amfora/tree/master/contrib/themes
|
||||
|
||||
|
||||
# hdg_1
|
||||
# hdg_2
|
||||
# hdg_3
|
||||
# amfora_link: A link that Amfora supports viewing. For now this is only gemini://
|
||||
# foreign_link: HTTP(S), Gopher, etc
|
||||
# link_number: The silver number that appears to the left of a link
|
||||
# regular_text: Normal gemini text, and plaintext documents
|
||||
# quote_text
|
||||
# preformatted_text
|
||||
# list_text
|
||||
|
||||
# btn_bg: The bg color for all modal buttons
|
||||
# btn_text: The text color for all modal buttons
|
||||
|
||||
# dl_choice_modal_bg
|
||||
# dl_choice_modal_text
|
||||
# dl_modal_bg
|
||||
# dl_modal_text
|
||||
# info_modal_bg
|
||||
# info_modal_text
|
||||
# error_modal_bg
|
||||
# error_modal_text
|
||||
# yesno_modal_bg
|
||||
# yesno_modal_text
|
||||
# tofu_modal_bg
|
||||
# tofu_modal_text
|
||||
# subscription_modal_bg
|
||||
# subscription_modal_text
|
||||
|
||||
# input_modal_bg
|
||||
# input_modal_text
|
||||
# input_modal_field_bg: The bg of the input field, where you type the text
|
||||
# input_modal_field_text: The color of the text you type
|
||||
|
||||
# bkmk_modal_bg
|
||||
# bkmk_modal_text
|
||||
# bkmk_modal_label
|
||||
# bkmk_modal_field_bg
|
||||
# bkmk_modal_field_text
|
105
dot_config/awesome/config.lua.tmpl
Normal file
|
@ -0,0 +1,105 @@
|
|||
local config_dir = require("gears.filesystem").get_configuration_dir()
|
||||
|
||||
local M = {}
|
||||
|
||||
M.keys = {
|
||||
mod = "Mod4",
|
||||
alt = "Mod1",
|
||||
}
|
||||
|
||||
M.apps = {
|
||||
terminal = "wezterm",
|
||||
launcher = "rofi -show drun",
|
||||
browser = "firefox",
|
||||
file_manager = "thunar",
|
||||
editor = os.getenv("EDITOR") or "nvim",
|
||||
}
|
||||
|
||||
M.apps.start_editor = M.apps.terminal .. "-e" .. M.apps.editor
|
||||
M.apps.music_player = M.apps.terminal .. "--class music -e ncmpcpp"
|
||||
|
||||
M.theme = {
|
||||
flavor = {{ .drapeau.colors.flavor | quote }},
|
||||
accent1 = "pink",
|
||||
accent2 = "rosewater",
|
||||
{{- if eq .chezmoi.hostname "archgirlie" -}}
|
||||
wallpaper = "~/data/photos/wallpaper/city.png",
|
||||
{{ else }}
|
||||
wallpaper = config_dir .. "themes/catppuccin/buttons.png",
|
||||
{{- end }}
|
||||
pfp = config_dir .. "themes/catppuccin/assets/pfp.jpg",
|
||||
icon_theme = "Papirus",
|
||||
font = {
|
||||
family = "FairiesevkaSans Nerd Font Propo",
|
||||
size = "10",
|
||||
},
|
||||
}
|
||||
|
||||
M.icons = {
|
||||
menu = "",
|
||||
power = "",
|
||||
restart = "",
|
||||
sleep = "",
|
||||
exit = "",
|
||||
lock = "",
|
||||
music = {
|
||||
next = "",
|
||||
prev = "",
|
||||
pause = "",
|
||||
play = "",
|
||||
},
|
||||
tags = {
|
||||
general = " ",
|
||||
files = " ",
|
||||
media = " ",
|
||||
terminal = " ",
|
||||
coding = " ",
|
||||
misc = " ",
|
||||
},
|
||||
cal = "",
|
||||
clock = "",
|
||||
arr = {
|
||||
r = "»",
|
||||
l = "«",
|
||||
},
|
||||
vol = {
|
||||
on = "",
|
||||
off = "",
|
||||
low = "",
|
||||
med = "",
|
||||
high = "",
|
||||
},
|
||||
mem = "",
|
||||
cpu = "",
|
||||
disk = "",
|
||||
}
|
||||
|
||||
M.widget = {}
|
||||
|
||||
M.widget.clock = {
|
||||
format = "%I:%M %p",
|
||||
}
|
||||
|
||||
M.widget.date = {
|
||||
format = "%a %b %d",
|
||||
}
|
||||
|
||||
M.widget.weather = {
|
||||
api_key = "e894c3e6c1a9d2217eee94791e845c96",
|
||||
coordinates = { lat = "47.773140", lon = "-122.303660" },
|
||||
units = "imperial",
|
||||
}
|
||||
|
||||
M.widget.github = {
|
||||
username = "punkfairie",
|
||||
}
|
||||
|
||||
M.widget.mic = {
|
||||
name = "",
|
||||
}
|
||||
|
||||
M.widget.disk = {
|
||||
name = "/dev/sdb3",
|
||||
}
|
||||
|
||||
return M
|
3
dot_config/awesome/helpers/init.lua
Normal file
|
@ -0,0 +1,3 @@
|
|||
return {
|
||||
ui = require("helpers.ui"),
|
||||
}
|
188
dot_config/awesome/helpers/ui.lua
Normal file
|
@ -0,0 +1,188 @@
|
|||
local awful = require("awful")
|
||||
local wibox = require("wibox")
|
||||
local gshape = require("gears.shape")
|
||||
local gmatrix = require("gears.matrix")
|
||||
local beautiful = require("beautiful")
|
||||
|
||||
local capi = { mouse = mouse }
|
||||
local theme = beautiful.get()
|
||||
|
||||
local ui = {}
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
---Set text color
|
||||
---@param text string
|
||||
---@param color string
|
||||
---@return string
|
||||
function ui.colorize_text(text, color)
|
||||
return "<span foreground='" .. color .. "'>" .. text .. "</span>"
|
||||
end
|
||||
|
||||
---Change a font attribute
|
||||
---@param attr string attribute(s) to add, e.g. "Bold 16"
|
||||
---@param font? string base font to use, for use in the theme file itself
|
||||
---@return string
|
||||
function ui.set_font(attr, font)
|
||||
font = font or theme.font
|
||||
|
||||
return beautiful.get_merged_font(font, attr):to_string()
|
||||
end
|
||||
|
||||
---Create an icon widget
|
||||
---@param i string the icon
|
||||
---@param c string the icon's color
|
||||
---@return table widget the widget
|
||||
function ui.create_icon(i, c)
|
||||
local widget = {
|
||||
{
|
||||
font = ui.set_font("12.5"),
|
||||
text = " " .. i,
|
||||
widget = wibox.widget.textbox,
|
||||
},
|
||||
fg = c,
|
||||
widget = wibox.container.background,
|
||||
}
|
||||
return widget
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
---Change cursor on hovering
|
||||
---@param w any widget to change cursor on
|
||||
---@param hover_cursor string cursor to change to
|
||||
function ui.add_hover_cursor(w, hover_cursor)
|
||||
local original_cursor = "left_ptr"
|
||||
|
||||
w:connect_signal("mouse::enter", function()
|
||||
local widget = capi.mouse.current_wibox
|
||||
if widget then
|
||||
widget.cursor = hover_cursor
|
||||
end
|
||||
end)
|
||||
|
||||
w:connect_signal("mouse::leave", function()
|
||||
local widget = capi.mouse.current_wibox
|
||||
if widget then
|
||||
widget.cursor = original_cursor
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.vertical_pad(height)
|
||||
return wibox.widget({
|
||||
forced_height = height,
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
})
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.horizontal_pad(width)
|
||||
return wibox.widget({
|
||||
forced_width = width,
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
})
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.rrect(radius)
|
||||
return function(cr, width, height)
|
||||
gshape.rounded_rect(cr, width, height, radius)
|
||||
end
|
||||
end
|
||||
|
||||
function ui.pie(width, height, start_angle, end_angle, radius)
|
||||
return function(cr)
|
||||
gshape.pie(cr, width, height, start_angle, end_angle, radius)
|
||||
end
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.prgram(height, base)
|
||||
return function(cr, width)
|
||||
gshape.parallelogram(cr, width, height, base)
|
||||
end
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.prrect(radius, tl, tr, br, bl)
|
||||
return function(cr, width, height)
|
||||
gshape.partially_rounded_rect(cr, width, height, tl, tr, br, bl, radius)
|
||||
end
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.custom_shape(cr, width, height)
|
||||
cr:move_to(0, height / 25)
|
||||
cr:line_to(height / 25, 0)
|
||||
cr:line_to(width, 0)
|
||||
cr:line_to(width, height - height / 25)
|
||||
cr:line_to(width - height / 25, height)
|
||||
cr:line_to(0, height)
|
||||
cr:close_path()
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
local function _get_widget_geometry(_hierarchy, widget)
|
||||
local width, height = _hierarchy:get_size()
|
||||
if _hierarchy:get_widget() == widget then
|
||||
-- Get the extents of this widget in the device space
|
||||
local x, y, w, h = gmatrix.transform_rectangle(_hierarchy:get_matrix_to_device(), 0, 0, width, height)
|
||||
return { x = x, y = y, width = w, height = h, hierarchy = _hierarchy }
|
||||
end
|
||||
|
||||
for _, child in ipairs(_hierarchy:get_children()) do
|
||||
local ret = _get_widget_geometry(child, widget)
|
||||
if ret then
|
||||
return ret
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ui.get_widget_geometry(_wibox, widget)
|
||||
return _get_widget_geometry(_wibox._drawable._widget_hierarchy, widget)
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.screen_mask(s, bg)
|
||||
local mask = wibox({
|
||||
visible = false,
|
||||
ontop = true,
|
||||
type = "splash",
|
||||
screen = s,
|
||||
})
|
||||
awful.placement.maximize(mask)
|
||||
mask.bg = bg
|
||||
return mask
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
function ui.grouping_widget(w1, w2, dpi1)
|
||||
local container = wibox.widget({
|
||||
w1,
|
||||
{
|
||||
nil,
|
||||
w2,
|
||||
expand = "none",
|
||||
layout = wibox.layout.flex.vertical,
|
||||
},
|
||||
spacing = dpi1,
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
})
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
return ui
|
225
dot_config/awesome/lib/animation/init.lua
Normal file
|
@ -0,0 +1,225 @@
|
|||
-------------------------------------------
|
||||
-- @author https://github.com/Kasper24
|
||||
-- @copyright 2021-2022 Kasper24
|
||||
-------------------------------------------
|
||||
|
||||
local GLib = require("lgi").GLib
|
||||
local gobject = require("gears.object")
|
||||
local gtable = require("gears.table")
|
||||
local subscribable = require("lib.animation.subscribable")
|
||||
local tween = require("lib.animation.tween")
|
||||
local ipairs = ipairs
|
||||
local table = table
|
||||
local pairs = pairs
|
||||
|
||||
local animation_manager = {}
|
||||
animation_manager.easing = {
|
||||
linear = "linear",
|
||||
inQuad = "inQuad",
|
||||
outQuad = "outQuad",
|
||||
inOutQuad = "inOutQuad",
|
||||
outInQuad = "outInQuad",
|
||||
inCubic = "inCubic",
|
||||
outCubic = "outCubic",
|
||||
inOutCubic = "inOutCubic",
|
||||
outInCubic = "outInCubic",
|
||||
inQuart = "inQuart",
|
||||
outQuart = "outQuart",
|
||||
inOutQuart = "inOutQuart",
|
||||
outInQuart = "outInQuart",
|
||||
inQuint = "inQuint",
|
||||
outQuint = "outQuint",
|
||||
inOutQuint = "inOutQuint",
|
||||
outInQuint = "outInQuint",
|
||||
inSine = "inSine",
|
||||
outSine = "outSine",
|
||||
inOutSine = "inOutSine",
|
||||
outInSine = "outInSine",
|
||||
inExpo = "inExpo",
|
||||
outExpo = "outExpo",
|
||||
inOutExpo = "inOutExpo",
|
||||
outInExpo = "outInExpo",
|
||||
inCirc = "inCirc",
|
||||
outCirc = "outCirc",
|
||||
inOutCirc = "inOutCirc",
|
||||
outInCirc = "outInCirc",
|
||||
inElastic = "inElastic",
|
||||
outElastic = "outElastic",
|
||||
inOutElastic = "inOutElastic",
|
||||
outInElastic = "outInElastic",
|
||||
inBack = "inBack",
|
||||
outBack = "outBack",
|
||||
inOutBack = "inOutBack",
|
||||
outInBack = "outInBack",
|
||||
inBounce = "inBounce",
|
||||
outBounce = "outBounce",
|
||||
inOutBounce = "inOutBounce",
|
||||
outInBounce = "outInBounce",
|
||||
}
|
||||
|
||||
local animation = {}
|
||||
|
||||
local instance = nil
|
||||
|
||||
local ANIMATION_FRAME_DELAY = 5
|
||||
|
||||
local function second_to_micro(sec)
|
||||
return sec * 1000000
|
||||
end
|
||||
|
||||
function animation:start(args)
|
||||
args = args or {}
|
||||
|
||||
-- Awestoer/Rubbto compatibility
|
||||
-- I'd rather this always be a table, but Awestoer/Rubbto
|
||||
-- except the :set() method to have 1 number value parameter
|
||||
-- used to set the target
|
||||
local is_table = type(args) == "table"
|
||||
local initial = is_table and (args.pos or self.pos) or self.pos
|
||||
local subject = is_table and (args.subject or self.subject) or self.subject
|
||||
local target = is_table and (args.target or self.target) or args
|
||||
local duration = is_table and (args.duration or self.duration) or self.duration
|
||||
local easing = is_table and (args.easing or self.easing) or self.easing
|
||||
|
||||
duration = self._private.anim_manager._private.instant == true and 0.01 or duration
|
||||
|
||||
if self.tween == nil or self.reset_on_stop == true then
|
||||
self.tween = tween.new({
|
||||
initial = initial,
|
||||
subject = subject,
|
||||
target = target,
|
||||
duration = second_to_micro(duration),
|
||||
easing = easing,
|
||||
})
|
||||
end
|
||||
|
||||
if self._private.anim_manager._private.animations[self.index] == nil then
|
||||
table.insert(self._private.anim_manager._private.animations, self)
|
||||
end
|
||||
|
||||
self.state = true
|
||||
self.last_elapsed = GLib.get_monotonic_time()
|
||||
|
||||
self.started:fire()
|
||||
self:emit_signal("started")
|
||||
end
|
||||
|
||||
function animation:set(args)
|
||||
self:start(args)
|
||||
self:emit_signal("set")
|
||||
end
|
||||
|
||||
function animation:stop()
|
||||
self.state = false
|
||||
self:emit_signal("stopped")
|
||||
end
|
||||
|
||||
function animation:abort()
|
||||
animation:stop()
|
||||
self:emit_signal("aborted")
|
||||
end
|
||||
|
||||
function animation:initial()
|
||||
return self._private.initial
|
||||
end
|
||||
|
||||
function animation_manager:set_instant(value)
|
||||
self._private.instant = value
|
||||
end
|
||||
|
||||
function animation_manager:new(args)
|
||||
args = args or {}
|
||||
|
||||
args.pos = args.pos or 0
|
||||
args.subject = args.subject or nil
|
||||
args.target = args.target or nil
|
||||
args.duration = args.duration or 0
|
||||
args.easing = args.easing or nil
|
||||
args.loop = args.loop or false
|
||||
args.signals = args.signals or {}
|
||||
args.update = args.update or nil
|
||||
args.reset_on_stop = args.reset_on_stop == nil and true or args.reset_on_stop
|
||||
|
||||
-- Awestoer/Rubbto compatibility
|
||||
args.subscribed = args.subscribed or nil
|
||||
local ret = subscribable()
|
||||
ret.started = subscribable()
|
||||
ret.ended = subscribable()
|
||||
if args.subscribed ~= nil then
|
||||
ret:subscribe(args.subscribed)
|
||||
end
|
||||
|
||||
for sig, sigfun in pairs(args.signals) do
|
||||
ret:connect_signal(sig, sigfun)
|
||||
end
|
||||
if args.update ~= nil then
|
||||
ret:connect_signal("update", args.update)
|
||||
end
|
||||
|
||||
gtable.crush(ret, args, true)
|
||||
gtable.crush(ret, animation, true)
|
||||
|
||||
ret._private = {}
|
||||
ret._private.anim_manager = self
|
||||
ret._private.initial = args.pos
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
local function new()
|
||||
local ret = gobject({})
|
||||
gtable.crush(ret, animation_manager, true)
|
||||
|
||||
ret._private = {}
|
||||
ret._private.animations = {}
|
||||
ret._private.instant = false
|
||||
|
||||
GLib.timeout_add(GLib.PRIORITY_DEFAULT, ANIMATION_FRAME_DELAY, function()
|
||||
---@diagnostic disable-next-line: redefined-local
|
||||
for index, animation in ipairs(ret._private.animations) do
|
||||
if animation.state == true then
|
||||
-- compute delta time
|
||||
local time = GLib.get_monotonic_time()
|
||||
local delta = time - animation.last_elapsed
|
||||
animation.last_elapsed = time
|
||||
|
||||
-- If pos is true, the animation has ended
|
||||
local pos = animation.tween:update(delta)
|
||||
if pos == true then
|
||||
-- Loop the animation, don't end it.
|
||||
-- Useful for widgets like the spinning cicle
|
||||
if animation.loop == true then
|
||||
animation.tween:reset()
|
||||
else
|
||||
-- Snap to end
|
||||
animation.pos = animation.tween.target
|
||||
animation:fire(animation.pos)
|
||||
animation:emit_signal("update", animation.pos)
|
||||
|
||||
animation.state = false
|
||||
animation.ended:fire(pos)
|
||||
table.remove(ret._private.animations, index)
|
||||
animation:emit_signal("ended", animation.pos)
|
||||
end
|
||||
-- Animation in process, keep updating
|
||||
else
|
||||
animation.pos = pos
|
||||
animation:fire(animation.pos)
|
||||
animation:emit_signal("update", animation.pos)
|
||||
end
|
||||
else
|
||||
table.remove(ret._private.animations, index)
|
||||
end
|
||||
end
|
||||
|
||||
-- call again the function after cooldown
|
||||
return true
|
||||
end)
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
if not instance then
|
||||
instance = new()
|
||||
end
|
||||
return instance
|
47
dot_config/awesome/lib/animation/subscribable.lua
Normal file
|
@ -0,0 +1,47 @@
|
|||
-------------------------------------------
|
||||
-- @author https://github.com/Kasper24
|
||||
-- @copyright 2021-2022 Kasper24
|
||||
-------------------------------------------
|
||||
|
||||
local gobject = require("gears.object")
|
||||
|
||||
-- Kidna copying awesotre's stores on a surface level for added compatibility
|
||||
local function subscribable()
|
||||
local ret = gobject({})
|
||||
local subscribed = {}
|
||||
|
||||
-- Subscrubes a function to the object so that it's called when `fire` is
|
||||
-- Calls subscribe_callback if it exists as well
|
||||
function ret:subscribe(func)
|
||||
local id = tostring(func):gsub("function: ", "")
|
||||
subscribed[id] = func
|
||||
|
||||
if self.subscribe_callback then
|
||||
self.subscribe_callback(func)
|
||||
end
|
||||
end
|
||||
|
||||
-- Unsubscribes a function and calls unsubscribe_callback if it exists
|
||||
function ret:unsubscribe(func)
|
||||
if not func then
|
||||
subscribed = {}
|
||||
else
|
||||
local id = tostring(func):gsub("function: ", "")
|
||||
subscribed[id] = nil
|
||||
end
|
||||
|
||||
if self.unsubscribe_callback then
|
||||
self.unsubscribe_callback(func)
|
||||
end
|
||||
end
|
||||
|
||||
function ret:fire(...)
|
||||
for _, func in pairs(subscribed) do
|
||||
func(...)
|
||||
end
|
||||
end
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
return subscribable
|
533
dot_config/awesome/lib/animation/tween.lua
Normal file
|
@ -0,0 +1,533 @@
|
|||
-------------------------------------------
|
||||
-- @author https://github.com/Kasper24
|
||||
-- @copyright 2021-2022 Kasper24
|
||||
-------------------------------------------
|
||||
|
||||
-- easing
|
||||
|
||||
-- Adapted from https://github.com/EmmanuelOga/easing. See LICENSE.txt for credits.
|
||||
-- For all easing functions:
|
||||
-- t = time == how much time has to pass for the tweening to complete
|
||||
-- b = begin == starting property value
|
||||
-- c = change == ending - beginning
|
||||
-- d = duration == running time. How much time has passed *right now*
|
||||
|
||||
local gobject = require("gears.object")
|
||||
local gtable = require("gears.table")
|
||||
|
||||
local tween = {
|
||||
_VERSION = "tween 2.1.1",
|
||||
_DESCRIPTION = "tweening for lua",
|
||||
_URL = "https://github.com/kikito/tween.lua",
|
||||
_LICENSE = [[
|
||||
MIT LICENSE
|
||||
Copyright (c) 2014 Enrique García Cota, Yuichi Tateno, Emmanuel Oga
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
]],
|
||||
}
|
||||
|
||||
local sin, cos, pi, sqrt, abs, asin = math.sin, math.cos, math.pi, math.sqrt, math.abs, math.asin
|
||||
|
||||
-- linear
|
||||
local function linear(t, b, c, d)
|
||||
return c * t / d + b
|
||||
end
|
||||
|
||||
-- quad
|
||||
local function inQuad(t, b, c, d)
|
||||
return c * ((t / d) ^ 2) + b
|
||||
end
|
||||
local function outQuad(t, b, c, d)
|
||||
t = t / d
|
||||
return -c * t * (t - 2) + b
|
||||
end
|
||||
local function inOutQuad(t, b, c, d)
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return c / 2 * (t ^ 2) + b
|
||||
end
|
||||
return -c / 2 * ((t - 1) * (t - 3) - 1) + b
|
||||
end
|
||||
local function outInQuad(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outQuad(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inQuad((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- cubic
|
||||
local function inCubic(t, b, c, d)
|
||||
return c * ((t / d) ^ 3) + b
|
||||
end
|
||||
local function outCubic(t, b, c, d)
|
||||
return c * (((t / d - 1) ^ 3) + 1) + b
|
||||
end
|
||||
local function inOutCubic(t, b, c, d)
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return c / 2 * t * t * t + b
|
||||
end
|
||||
t = t - 2
|
||||
return c / 2 * (t * t * t + 2) + b
|
||||
end
|
||||
local function outInCubic(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outCubic(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inCubic((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- quart
|
||||
local function inQuart(t, b, c, d)
|
||||
return c * ((t / d) ^ 4) + b
|
||||
end
|
||||
local function outQuart(t, b, c, d)
|
||||
return -c * (((t / d - 1) ^ 4) - 1) + b
|
||||
end
|
||||
local function inOutQuart(t, b, c, d)
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return c / 2 * (t ^ 4) + b
|
||||
end
|
||||
return -c / 2 * (((t - 2) ^ 4) - 2) + b
|
||||
end
|
||||
local function outInQuart(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outQuart(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inQuart((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- quint
|
||||
local function inQuint(t, b, c, d)
|
||||
return c * ((t / d) ^ 5) + b
|
||||
end
|
||||
local function outQuint(t, b, c, d)
|
||||
return c * (((t / d - 1) ^ 5) + 1) + b
|
||||
end
|
||||
local function inOutQuint(t, b, c, d)
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return c / 2 * (t ^ 5) + b
|
||||
end
|
||||
return c / 2 * (((t - 2) ^ 5) + 2) + b
|
||||
end
|
||||
local function outInQuint(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outQuint(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inQuint((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- sine
|
||||
local function inSine(t, b, c, d)
|
||||
return -c * cos(t / d * (pi / 2)) + c + b
|
||||
end
|
||||
local function outSine(t, b, c, d)
|
||||
return c * sin(t / d * (pi / 2)) + b
|
||||
end
|
||||
local function inOutSine(t, b, c, d)
|
||||
return -c / 2 * (cos(pi * t / d) - 1) + b
|
||||
end
|
||||
local function outInSine(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outSine(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inSine((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- expo
|
||||
local function inExpo(t, b, c, d)
|
||||
if t == 0 then
|
||||
return b
|
||||
end
|
||||
return c * (2 ^ (10 * (t / d - 1))) + b - c * 0.001
|
||||
end
|
||||
local function outExpo(t, b, c, d)
|
||||
if t == d then
|
||||
return b + c
|
||||
end
|
||||
return c * 1.001 * (-(2 ^ (-10 * t / d)) + 1) + b
|
||||
end
|
||||
local function inOutExpo(t, b, c, d)
|
||||
if t == 0 then
|
||||
return b
|
||||
end
|
||||
if t == d then
|
||||
return b + c
|
||||
end
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return c / 2 * (2 ^ (10 * (t - 1))) + b - c * 0.0005
|
||||
end
|
||||
return c / 2 * 1.0005 * (-(2 ^ (-10 * (t - 1))) + 2) + b
|
||||
end
|
||||
local function outInExpo(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outExpo(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inExpo((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- circ
|
||||
local function inCirc(t, b, c, d)
|
||||
return (-c * (sqrt(1 - ((t / d) ^ 2)) - 1) + b)
|
||||
end
|
||||
local function outCirc(t, b, c, d)
|
||||
return (c * sqrt(1 - ((t / d - 1) ^ 2)) + b)
|
||||
end
|
||||
local function inOutCirc(t, b, c, d)
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return -c / 2 * (sqrt(1 - t * t) - 1) + b
|
||||
end
|
||||
t = t - 2
|
||||
return c / 2 * (sqrt(1 - t * t) + 1) + b
|
||||
end
|
||||
local function outInCirc(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outCirc(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inCirc((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
-- elastic
|
||||
local function calculatePAS(p, a, c, d)
|
||||
p, a = p or d * 0.3, a or 0
|
||||
if a < abs(c) then
|
||||
return p, c, p / 4
|
||||
end -- p, a, s
|
||||
return p, a, p / (2 * pi) * asin(c / a) -- p,a,s
|
||||
end
|
||||
local function inElastic(t, b, c, d, a, p)
|
||||
local s
|
||||
if t == 0 then
|
||||
return b
|
||||
end
|
||||
t = t / d
|
||||
if t == 1 then
|
||||
return b + c
|
||||
end
|
||||
p, a, s = calculatePAS(p, a, c, d)
|
||||
t = t - 1
|
||||
return -(a * (2 ^ (10 * t)) * sin((t * d - s) * (2 * pi) / p)) + b
|
||||
end
|
||||
local function outElastic(t, b, c, d, a, p)
|
||||
local s
|
||||
if t == 0 then
|
||||
return b
|
||||
end
|
||||
t = t / d
|
||||
if t == 1 then
|
||||
return b + c
|
||||
end
|
||||
p, a, s = calculatePAS(p, a, c, d)
|
||||
return a * (2 ^ (-10 * t)) * sin((t * d - s) * (2 * pi) / p) + c + b
|
||||
end
|
||||
local function inOutElastic(t, b, c, d, a, p)
|
||||
local s
|
||||
if t == 0 then
|
||||
return b
|
||||
end
|
||||
t = t / d * 2
|
||||
if t == 2 then
|
||||
return b + c
|
||||
end
|
||||
p, a, s = calculatePAS(p, a, c, d)
|
||||
t = t - 1
|
||||
if t < 0 then
|
||||
return -0.5 * (a * (2 ^ (10 * t)) * sin((t * d - s) * (2 * pi) / p)) + b
|
||||
end
|
||||
return a * (2 ^ (-10 * t)) * sin((t * d - s) * (2 * pi) / p) * 0.5 + c + b
|
||||
end
|
||||
local function outInElastic(t, b, c, d, a, p)
|
||||
if t < d / 2 then
|
||||
return outElastic(t * 2, b, c / 2, d, a, p)
|
||||
end
|
||||
return inElastic((t * 2) - d, b + c / 2, c / 2, d, a, p)
|
||||
end
|
||||
|
||||
-- back
|
||||
local function inBack(t, b, c, d, s)
|
||||
s = s or 1.70158
|
||||
t = t / d
|
||||
return c * t * t * ((s + 1) * t - s) + b
|
||||
end
|
||||
local function outBack(t, b, c, d, s)
|
||||
s = s or 1.70158
|
||||
t = t / d - 1
|
||||
return c * (t * t * ((s + 1) * t + s) + 1) + b
|
||||
end
|
||||
local function inOutBack(t, b, c, d, s)
|
||||
s = (s or 1.70158) * 1.525
|
||||
t = t / d * 2
|
||||
if t < 1 then
|
||||
return c / 2 * (t * t * ((s + 1) * t - s)) + b
|
||||
end
|
||||
t = t - 2
|
||||
return c / 2 * (t * t * ((s + 1) * t + s) + 2) + b
|
||||
end
|
||||
local function outInBack(t, b, c, d, s)
|
||||
if t < d / 2 then
|
||||
return outBack(t * 2, b, c / 2, d, s)
|
||||
end
|
||||
return inBack((t * 2) - d, b + c / 2, c / 2, d, s)
|
||||
end
|
||||
|
||||
-- bounce
|
||||
local function outBounce(t, b, c, d)
|
||||
t = t / d
|
||||
if t < 1 / 2.75 then
|
||||
return c * (7.5625 * t * t) + b
|
||||
end
|
||||
if t < 2 / 2.75 then
|
||||
t = t - (1.5 / 2.75)
|
||||
return c * (7.5625 * t * t + 0.75) + b
|
||||
elseif t < 2.5 / 2.75 then
|
||||
t = t - (2.25 / 2.75)
|
||||
return c * (7.5625 * t * t + 0.9375) + b
|
||||
end
|
||||
t = t - (2.625 / 2.75)
|
||||
return c * (7.5625 * t * t + 0.984375) + b
|
||||
end
|
||||
local function inBounce(t, b, c, d)
|
||||
return c - outBounce(d - t, 0, c, d) + b
|
||||
end
|
||||
local function inOutBounce(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return inBounce(t * 2, 0, c, d) * 0.5 + b
|
||||
end
|
||||
return outBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b
|
||||
end
|
||||
local function outInBounce(t, b, c, d)
|
||||
if t < d / 2 then
|
||||
return outBounce(t * 2, b, c / 2, d)
|
||||
end
|
||||
return inBounce((t * 2) - d, b + c / 2, c / 2, d)
|
||||
end
|
||||
|
||||
tween.easing = {
|
||||
linear = linear,
|
||||
inQuad = inQuad,
|
||||
outQuad = outQuad,
|
||||
inOutQuad = inOutQuad,
|
||||
outInQuad = outInQuad,
|
||||
inCubic = inCubic,
|
||||
outCubic = outCubic,
|
||||
inOutCubic = inOutCubic,
|
||||
outInCubic = outInCubic,
|
||||
inQuart = inQuart,
|
||||
outQuart = outQuart,
|
||||
inOutQuart = inOutQuart,
|
||||
outInQuart = outInQuart,
|
||||
inQuint = inQuint,
|
||||
outQuint = outQuint,
|
||||
inOutQuint = inOutQuint,
|
||||
outInQuint = outInQuint,
|
||||
inSine = inSine,
|
||||
outSine = outSine,
|
||||
inOutSine = inOutSine,
|
||||
outInSine = outInSine,
|
||||
inExpo = inExpo,
|
||||
outExpo = outExpo,
|
||||
inOutExpo = inOutExpo,
|
||||
outInExpo = outInExpo,
|
||||
inCirc = inCirc,
|
||||
outCirc = outCirc,
|
||||
inOutCirc = inOutCirc,
|
||||
outInCirc = outInCirc,
|
||||
inElastic = inElastic,
|
||||
outElastic = outElastic,
|
||||
inOutElastic = inOutElastic,
|
||||
outInElastic = outInElastic,
|
||||
inBack = inBack,
|
||||
outBack = outBack,
|
||||
inOutBack = inOutBack,
|
||||
outInBack = outInBack,
|
||||
inBounce = inBounce,
|
||||
outBounce = outBounce,
|
||||
inOutBounce = inOutBounce,
|
||||
outInBounce = outInBounce,
|
||||
}
|
||||
|
||||
-- Private interface
|
||||
local function copyTables(destination, keysTable, valuesTable)
|
||||
valuesTable = valuesTable or keysTable
|
||||
local mt = getmetatable(keysTable)
|
||||
if mt and getmetatable(destination) == nil then
|
||||
setmetatable(destination, mt)
|
||||
end
|
||||
|
||||
for k, v in pairs(keysTable) do
|
||||
if type(v) == "table" then
|
||||
destination[k] = copyTables({}, v, valuesTable[k])
|
||||
else
|
||||
destination[k] = valuesTable[k]
|
||||
end
|
||||
end
|
||||
return destination
|
||||
end
|
||||
|
||||
local function checkSubjectAndTargetRecursively(subject, target, path)
|
||||
path = path or {}
|
||||
local targetType, newPath
|
||||
for k, targetValue in pairs(target) do
|
||||
targetType, newPath = type(targetValue), copyTables({}, path)
|
||||
table.insert(newPath, tostring(k))
|
||||
if targetType == "number" then
|
||||
assert(
|
||||
type(subject[k]) == "number",
|
||||
"Parameter '" .. table.concat(newPath, "/") .. "' is missing from subject or isn't a number"
|
||||
)
|
||||
elseif targetType == "table" then
|
||||
checkSubjectAndTargetRecursively(subject[k], targetValue, newPath)
|
||||
else
|
||||
assert(
|
||||
targetType == "number",
|
||||
"Parameter '" .. table.concat(newPath, "/") .. "' must be a number or table of numbers"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function checkNewParams(_, _, subject, target, easing)
|
||||
-- assert(type(initial) == 'number' and duration > 0, "duration must be a positive number. Was " .. tostring(duration))
|
||||
-- assert(type(duration) == 'number' and duration > 0, "duration must be a positive number. Was " .. tostring(duration))
|
||||
assert(type(easing) == "function", "easing must be a function. Was " .. tostring(easing))
|
||||
|
||||
if subject and target then
|
||||
local tsubject = type(subject)
|
||||
assert(
|
||||
tsubject == "table" or tsubject == "userdata",
|
||||
"subject must be a table or userdata. Was " .. tostring(subject)
|
||||
)
|
||||
assert(type(target) == "table", "target must be a table. Was " .. tostring(target))
|
||||
checkSubjectAndTargetRecursively(subject, target)
|
||||
end
|
||||
end
|
||||
|
||||
local function getEasingFunction(easing)
|
||||
easing = easing or "linear"
|
||||
if type(easing) == "string" then
|
||||
local name = easing
|
||||
easing = tween.easing[name]
|
||||
if type(easing) ~= "function" then
|
||||
error("The easing function name '" .. name .. "' is invalid")
|
||||
end
|
||||
end
|
||||
return easing
|
||||
end
|
||||
|
||||
local function performEasingOnSubject(subject, target, initial, clock, duration, easing)
|
||||
local t, b, c, d
|
||||
for k, v in pairs(target) do
|
||||
if type(v) == "table" then
|
||||
performEasingOnSubject(subject[k], v, initial[k], clock, duration, easing)
|
||||
else
|
||||
t, b, c, d = clock, initial[k], v - initial[k], duration
|
||||
subject[k] = easing(t, b, c, d)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function performEasing(table, initial, target, clock, duration, easing)
|
||||
if type(target) == "table" then
|
||||
local t, b, c, d
|
||||
for k, v in pairs(target) do
|
||||
if type(v) == "table" then
|
||||
table[k] = {}
|
||||
performEasing(table[k], initial[k], v, clock, duration, easing)
|
||||
else
|
||||
t, b, c, d = clock, initial[k], v - initial[k], duration
|
||||
table[k] = easing(t, b, c, d)
|
||||
end
|
||||
end
|
||||
|
||||
return table
|
||||
else
|
||||
local t, b, c, d = clock, initial, target - initial, duration
|
||||
return easing(t, b, c, d)
|
||||
end
|
||||
end
|
||||
|
||||
-- Public interface
|
||||
local Tween = {}
|
||||
|
||||
function Tween:set(clock)
|
||||
assert(type(clock) == "number", "clock must be a positive number or 0")
|
||||
|
||||
if self.subject and self.initial == 0 then
|
||||
self.initial = copyTables({}, self.target, self.subject)
|
||||
end
|
||||
|
||||
self.clock = clock
|
||||
|
||||
if self.clock <= 0 then
|
||||
self.clock = 0
|
||||
if self.subject then
|
||||
copyTables(self.subject, self.initial)
|
||||
end
|
||||
elseif self.clock >= self.duration then -- the tween has expired
|
||||
self.clock = self.duration
|
||||
|
||||
if self.subject then
|
||||
copyTables(self.subject, self.target)
|
||||
end
|
||||
else
|
||||
if self.subject then
|
||||
performEasingOnSubject(self.subject, self.target, self.initial, self.clock, self.duration, self.easing)
|
||||
else
|
||||
local pos = {}
|
||||
return performEasing(pos, self.initial, self.target, self.clock, self.duration, self.easing)
|
||||
end
|
||||
end
|
||||
|
||||
return self.clock >= self.duration
|
||||
end
|
||||
|
||||
function Tween:update(dt)
|
||||
assert(type(dt) == "number", "dt must be a number")
|
||||
return self:set(self.clock + dt)
|
||||
end
|
||||
|
||||
function Tween:reset()
|
||||
return self:set(0)
|
||||
end
|
||||
|
||||
function tween.new(args)
|
||||
args = args or {}
|
||||
|
||||
args.initial = args.initial or 0
|
||||
args.subject = args.subject or nil
|
||||
args.target = args.target or nil
|
||||
args.duration = args.duration or 0
|
||||
args.easing = args.easing or nil
|
||||
|
||||
args.easing = getEasingFunction(args.easing)
|
||||
checkNewParams(args.initial, args.duration, args.subject, args.target, args.easing)
|
||||
|
||||
local ret = gobject({})
|
||||
ret.clock = 0
|
||||
|
||||
gtable.crush(ret, args, true)
|
||||
gtable.crush(ret, Tween, true)
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
return tween
|
138
dot_config/awesome/lib/better-resize.lua
Normal file
|
@ -0,0 +1,138 @@
|
|||
local capi = {
|
||||
client = client,
|
||||
mouse = mouse,
|
||||
screen = screen,
|
||||
mousegrabber = mousegrabber,
|
||||
}
|
||||
local awful = require("awful")
|
||||
|
||||
local function mouse_resize_handler(m, c)
|
||||
awful.client.incwfact(0, c) -- needed to fix normalization at start
|
||||
local start = m(capi.mouse.coords())
|
||||
local x, y = start.x, start.y
|
||||
local wa = m(c.screen.workarea)
|
||||
local idx = awful.client.idx(c)
|
||||
local c_above
|
||||
local idx_above, idx_below
|
||||
local wfact_above, wfact_below
|
||||
local jump_to = { x = x, y = y }
|
||||
local move_mwfact = false
|
||||
|
||||
do
|
||||
local g = m(c:geometry())
|
||||
|
||||
local v_border = 0.2 * g.height
|
||||
|
||||
if idx and idx.idx > 1 and y >= g.y and y <= g.y + v_border then
|
||||
-- we are near the top edge of the window
|
||||
c_above = awful.client.next(-1, c)
|
||||
C_BELOW = c
|
||||
jump_to.y = g.y
|
||||
idx_above = idx.idx - 1
|
||||
idx_below = idx.idx
|
||||
elseif idx and idx.idx < idx.num and y >= g.y + g.height - v_border then
|
||||
-- we are near the bottom edge of the window
|
||||
c_above = c
|
||||
C_BELOW = awful.client.next(1, c)
|
||||
idx_above = idx.idx
|
||||
idx_below = idx.idx + 1
|
||||
jump_to.y = g.y + g.height
|
||||
end
|
||||
|
||||
local mw_split = wa.x + wa.width * c.screen.selected_tag.master_width_factor
|
||||
|
||||
if math.abs(mw_split - x) > wa.width / 6 then
|
||||
move_mwfact = false
|
||||
else
|
||||
move_mwfact = true
|
||||
jump_to.x = mw_split
|
||||
end
|
||||
end
|
||||
|
||||
if idx and idx_above then
|
||||
local t = c.screen.selected_tag
|
||||
local data = t.windowfact or {}
|
||||
local colfact = data[idx.col] or {}
|
||||
wfact_above = colfact[idx_above] or 1
|
||||
wfact_below = colfact[idx_below] or 1
|
||||
end
|
||||
|
||||
if idx_above and move_mwfact then
|
||||
CURSOR = "cross"
|
||||
elseif idx_above then
|
||||
CURSOR = m({ y = "sb_v_double_arrow", x = "sb_h_double_arrow" }).y
|
||||
elseif move_mwfact then
|
||||
CURSOR = m({ y = "sb_v_double_arrow", x = "sb_h_double_arrow" }).x
|
||||
else
|
||||
return false
|
||||
end
|
||||
|
||||
capi.mouse.coords(m(jump_to))
|
||||
|
||||
capi.mousegrabber.run(function(_mouse)
|
||||
if not c.valid then
|
||||
return false
|
||||
end
|
||||
|
||||
local pressed = false
|
||||
for _, v in ipairs(_mouse.buttons) do
|
||||
if v then
|
||||
pressed = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
_mouse = m(_mouse)
|
||||
|
||||
if pressed then
|
||||
if move_mwfact then
|
||||
c.screen.selected_tag.master_width_factor = math.min(math.max((_mouse.x - wa.x) / wa.width, 0.01), 0.99)
|
||||
end
|
||||
|
||||
if idx and idx_above then
|
||||
local factor_delta = (_mouse.y - jump_to.y) / wa.height
|
||||
|
||||
if factor_delta < 0 then
|
||||
factor_delta = math.max(factor_delta, -(wfact_above - 0.05))
|
||||
else
|
||||
factor_delta = math.min(factor_delta, wfact_below - 0.05)
|
||||
end
|
||||
|
||||
local t = c.screen.selected_tag
|
||||
local data = t.windowfact or {}
|
||||
local colfact = data[idx.col] or {}
|
||||
colfact[idx_above] = wfact_above + factor_delta
|
||||
colfact[idx_below] = wfact_below - factor_delta
|
||||
awful.client.incwfact(0, c_above) -- just in case
|
||||
end
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end, CURSOR)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
awful.layout.suit.tile.mouse_resize_handler = function(c)
|
||||
return mouse_resize_handler(function(x)
|
||||
return x
|
||||
end, c)
|
||||
end
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
awful.layout.suit.tile.bottom.mouse_resize_handler = function(c)
|
||||
return mouse_resize_handler(function(q)
|
||||
return { x = q.y, y = q.x, width = q.height, height = q.width }
|
||||
end, c)
|
||||
end
|
||||
|
||||
-- local old_coords = mouse.coords
|
||||
|
||||
-- mouse.coords = function(...)
|
||||
-- if select(1, ...) and not(select(1, ...).blah) then
|
||||
-- print("set mouse!!!")
|
||||
-- print(debug.traceback())
|
||||
|
||||
-- end
|
||||
-- return old_coords(...)
|
||||
-- end
|
186
dot_config/awesome/lib/exit-screen.lua
Normal file
|
@ -0,0 +1,186 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
local wibox = require("wibox")
|
||||
local beautiful = require("beautiful")
|
||||
local helpers = require("helpers")
|
||||
local config = require("config")
|
||||
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
local theme = beautiful.get()
|
||||
|
||||
--- Minimalist Exit Screen
|
||||
--- ~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
--- Icons
|
||||
local icon_font = helpers.ui.set_font("bold 45")
|
||||
local poweroff_text_icon = config.icons.power
|
||||
local reboot_text_icon = config.icons.restart
|
||||
local suspend_text_icon = config.icons.sleep
|
||||
local exit_text_icon = config.icons.exit
|
||||
local lock_text_icon = config.icons.lock
|
||||
|
||||
local button_bg = theme.color.base
|
||||
local button_size = dpi(120)
|
||||
|
||||
--- Commands
|
||||
local poweroff_command = function()
|
||||
awful.spawn.with_shell("systemctl poweroff")
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
end
|
||||
|
||||
local reboot_command = function()
|
||||
awful.spawn.with_shell("systemctl reboot")
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
end
|
||||
|
||||
local suspend_command = function()
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
awful.spawn.with_shell("systemctl suspend")
|
||||
end
|
||||
|
||||
local exit_command = function()
|
||||
awesome.quit()
|
||||
end
|
||||
|
||||
local lock_command = function()
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
end
|
||||
|
||||
local create_button = function(symbol, hover_color, _, command)
|
||||
local icon = wibox.widget({
|
||||
forced_height = button_size,
|
||||
forced_width = button_size,
|
||||
halign = "center",
|
||||
valign = "center",
|
||||
font = icon_font,
|
||||
markup = helpers.ui.colorize_text(symbol, theme.color.surface0),
|
||||
widget = wibox.widget.textbox(),
|
||||
})
|
||||
|
||||
local button = wibox.widget({
|
||||
{
|
||||
nil,
|
||||
icon,
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.horizontal,
|
||||
},
|
||||
forced_height = button_size,
|
||||
forced_width = button_size,
|
||||
border_width = dpi(8),
|
||||
border_color = theme.color.surface0,
|
||||
shape = helpers.ui.rrect(theme.border_width * 2),
|
||||
bg = button_bg,
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
|
||||
button:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
command()
|
||||
end)))
|
||||
|
||||
button:connect_signal("mouse::enter", function()
|
||||
icon.markup = helpers.ui.colorize_text(icon.text, hover_color)
|
||||
button.border_color = hover_color
|
||||
end)
|
||||
button:connect_signal("mouse::leave", function()
|
||||
icon.markup = helpers.ui.colorize_text(icon.text, theme.color.surface0)
|
||||
button.border_color = theme.color.surface0
|
||||
end)
|
||||
|
||||
helpers.ui.add_hover_cursor(button, "hand1")
|
||||
|
||||
return button
|
||||
end
|
||||
|
||||
--- Create the buttons
|
||||
local poweroff = create_button(poweroff_text_icon, theme.color.red, "Poweroff", poweroff_command)
|
||||
local reboot = create_button(reboot_text_icon, theme.color.green, "Reboot", reboot_command)
|
||||
local suspend = create_button(suspend_text_icon, theme.color.peach, "Suspend", suspend_command)
|
||||
local exit = create_button(exit_text_icon, theme.color.blue, "Exit", exit_command)
|
||||
local lock = create_button(lock_text_icon, theme.color.pink, "Lock", lock_command)
|
||||
|
||||
local create_exit_screen = function(s)
|
||||
s.exit_screen = wibox({
|
||||
screen = s,
|
||||
type = "splash",
|
||||
visible = false,
|
||||
ontop = true,
|
||||
bg = theme.color.transparent,
|
||||
fg = theme.fg_normal,
|
||||
height = s.geometry.height,
|
||||
width = s.geometry.width,
|
||||
x = s.geometry.x,
|
||||
y = s.geometry.y,
|
||||
})
|
||||
|
||||
s.exit_screen:buttons(gears.table.join(
|
||||
awful.button({}, 2, function()
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
end),
|
||||
awful.button({}, 3, function()
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
end)
|
||||
))
|
||||
|
||||
s.exit_screen:setup({
|
||||
nil,
|
||||
{
|
||||
nil,
|
||||
{
|
||||
poweroff,
|
||||
reboot,
|
||||
suspend,
|
||||
exit,
|
||||
lock,
|
||||
spacing = dpi(50),
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
},
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.horizontal,
|
||||
},
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.vertical,
|
||||
})
|
||||
end
|
||||
|
||||
screen.connect_signal("request::desktop_decoration", function(s)
|
||||
create_exit_screen(s)
|
||||
end)
|
||||
|
||||
screen.connect_signal("removed", function(s)
|
||||
create_exit_screen(s)
|
||||
end)
|
||||
|
||||
local exit_screen_grabber = awful.keygrabber({
|
||||
auto_start = true,
|
||||
stop_event = "release",
|
||||
keypressed_callback = function(_, _, key, _)
|
||||
if key == "s" then
|
||||
suspend_command()
|
||||
elseif key == "e" then
|
||||
exit_command()
|
||||
elseif key == "l" then
|
||||
lock_command()
|
||||
elseif key == "p" then
|
||||
poweroff_command()
|
||||
elseif key == "r" then
|
||||
reboot_command()
|
||||
elseif key == "Escape" or key == "q" or key == "x" then
|
||||
awesome.emit_signal("module::exit_screen:hide")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
awesome.connect_signal("module::exit_screen:show", function()
|
||||
for s in screen do
|
||||
s.exit_screen.visible = false
|
||||
end
|
||||
awful.screen.focused().exit_screen.visible = true
|
||||
exit_screen_grabber:start()
|
||||
end)
|
||||
|
||||
awesome.connect_signal("module::exit_screen:hide", function()
|
||||
exit_screen_grabber:stop()
|
||||
for s in screen do
|
||||
s.exit_screen.visible = false
|
||||
end
|
||||
end)
|
9
dot_config/awesome/lib/init.lua
Normal file
|
@ -0,0 +1,9 @@
|
|||
local req = {
|
||||
"better-resize",
|
||||
"savefloats",
|
||||
"exit-screen",
|
||||
}
|
||||
|
||||
for _, x in pairs(req) do
|
||||
require(... .. "." .. x)
|
||||
end
|
372
dot_config/awesome/lib/json.lua
Normal file
|
@ -0,0 +1,372 @@
|
|||
--
|
||||
-- json.lua
|
||||
--
|
||||
-- Copyright (c) 2020 rxi
|
||||
--
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
-- this software and associated documentation files (the "Software"), to deal in
|
||||
-- the Software without restriction, including without limitation the rights to
|
||||
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
-- of the Software, and to permit persons to whom the Software is furnished to do
|
||||
-- so, subject to the following conditions:
|
||||
--
|
||||
-- The above copyright notice and this permission notice shall be included in all
|
||||
-- copies or substantial portions of the Software.
|
||||
--
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
-- SOFTWARE.
|
||||
--
|
||||
|
||||
local json = { _version = "0.1.2" }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Encode
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local encode
|
||||
|
||||
local escape_char_map = {
|
||||
["\\"] = "\\",
|
||||
['"'] = '"',
|
||||
["\b"] = "b",
|
||||
["\f"] = "f",
|
||||
["\n"] = "n",
|
||||
["\r"] = "r",
|
||||
["\t"] = "t",
|
||||
}
|
||||
|
||||
local escape_char_map_inv = { ["/"] = "/" }
|
||||
for k, v in pairs(escape_char_map) do
|
||||
escape_char_map_inv[v] = k
|
||||
end
|
||||
|
||||
local function escape_char(c)
|
||||
return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
|
||||
end
|
||||
|
||||
local function encode_nil(_)
|
||||
return "null"
|
||||
end
|
||||
|
||||
local function encode_table(val, stack)
|
||||
local res = {}
|
||||
stack = stack or {}
|
||||
|
||||
-- Circular reference?
|
||||
if stack[val] then
|
||||
error("circular reference")
|
||||
end
|
||||
|
||||
stack[val] = true
|
||||
|
||||
if rawget(val, 1) ~= nil or next(val) == nil then
|
||||
-- Treat as array -- check keys are valid and it is not sparse
|
||||
local n = 0
|
||||
for k in pairs(val) do
|
||||
if type(k) ~= "number" then
|
||||
error("invalid table: mixed or invalid key types")
|
||||
end
|
||||
n = n + 1
|
||||
end
|
||||
if n ~= #val then
|
||||
error("invalid table: sparse array")
|
||||
end
|
||||
-- Encode
|
||||
for _, v in ipairs(val) do
|
||||
table.insert(res, encode(v, stack))
|
||||
end
|
||||
stack[val] = nil
|
||||
return "[" .. table.concat(res, ",") .. "]"
|
||||
else
|
||||
-- Treat as an object
|
||||
for k, v in pairs(val) do
|
||||
if type(k) ~= "string" then
|
||||
error("invalid table: mixed or invalid key types")
|
||||
end
|
||||
table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
|
||||
end
|
||||
stack[val] = nil
|
||||
return "{" .. table.concat(res, ",") .. "}"
|
||||
end
|
||||
end
|
||||
|
||||
local function encode_string(val)
|
||||
return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
|
||||
end
|
||||
|
||||
local function encode_number(val)
|
||||
-- Check for NaN, -inf and inf
|
||||
if val ~= val or val <= -math.huge or val >= math.huge then
|
||||
error("unexpected number value '" .. tostring(val) .. "'")
|
||||
end
|
||||
return string.format("%.14g", val)
|
||||
end
|
||||
|
||||
local type_func_map = {
|
||||
["nil"] = encode_nil,
|
||||
["table"] = encode_table,
|
||||
["string"] = encode_string,
|
||||
["number"] = encode_number,
|
||||
["boolean"] = tostring,
|
||||
}
|
||||
|
||||
encode = function(val, stack)
|
||||
local t = type(val)
|
||||
local f = type_func_map[t]
|
||||
if f then
|
||||
return f(val, stack)
|
||||
end
|
||||
error("unexpected type '" .. t .. "'")
|
||||
end
|
||||
|
||||
function json.encode(val)
|
||||
return (encode(val))
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Decode
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local parse
|
||||
|
||||
local function create_set(...)
|
||||
local res = {}
|
||||
for i = 1, select("#", ...) do
|
||||
res[select(i, ...)] = true
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
local space_chars = create_set(" ", "\t", "\r", "\n")
|
||||
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
|
||||
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
|
||||
local literals = create_set("true", "false", "null")
|
||||
|
||||
local literal_map = {
|
||||
["true"] = true,
|
||||
["false"] = false,
|
||||
["null"] = nil,
|
||||
}
|
||||
|
||||
local function next_char(str, idx, set, negate)
|
||||
for i = idx, #str do
|
||||
if set[str:sub(i, i)] ~= negate then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return #str + 1
|
||||
end
|
||||
|
||||
local function decode_error(str, idx, msg)
|
||||
local line_count = 1
|
||||
local col_count = 1
|
||||
for i = 1, idx - 1 do
|
||||
col_count = col_count + 1
|
||||
if str:sub(i, i) == "\n" then
|
||||
line_count = line_count + 1
|
||||
col_count = 1
|
||||
end
|
||||
end
|
||||
error(string.format("%s at line %d col %d", msg, line_count, col_count))
|
||||
end
|
||||
|
||||
local function codepoint_to_utf8(n)
|
||||
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
|
||||
local f = math.floor
|
||||
if n <= 0x7f then
|
||||
return string.char(n)
|
||||
elseif n <= 0x7ff then
|
||||
return string.char(f(n / 64) + 192, n % 64 + 128)
|
||||
elseif n <= 0xffff then
|
||||
return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
|
||||
elseif n <= 0x10ffff then
|
||||
return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, f(n % 4096 / 64) + 128, n % 64 + 128)
|
||||
end
|
||||
error(string.format("invalid unicode codepoint '%x'", n))
|
||||
end
|
||||
|
||||
local function parse_unicode_escape(s)
|
||||
local n1 = tonumber(s:sub(1, 4), 16)
|
||||
local n2 = tonumber(s:sub(7, 10), 16)
|
||||
-- Surrogate pair?
|
||||
if n2 then
|
||||
return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
|
||||
else
|
||||
return codepoint_to_utf8(n1)
|
||||
end
|
||||
end
|
||||
|
||||
local function parse_string(str, i)
|
||||
local res = ""
|
||||
local j = i + 1
|
||||
local k = j
|
||||
|
||||
while j <= #str do
|
||||
local x = str:byte(j)
|
||||
|
||||
if x < 32 then
|
||||
decode_error(str, j, "control character in string")
|
||||
elseif x == 92 then -- `\`: Escape
|
||||
res = res .. str:sub(k, j - 1)
|
||||
j = j + 1
|
||||
local c = str:sub(j, j)
|
||||
if c == "u" then
|
||||
local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
|
||||
or str:match("^%x%x%x%x", j + 1)
|
||||
or decode_error(str, j - 1, "invalid unicode escape in string")
|
||||
res = res .. parse_unicode_escape(hex)
|
||||
j = j + #hex
|
||||
else
|
||||
if not escape_chars[c] then
|
||||
decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
|
||||
end
|
||||
res = res .. escape_char_map_inv[c]
|
||||
end
|
||||
k = j + 1
|
||||
elseif x == 34 then -- `"`: End of string
|
||||
res = res .. str:sub(k, j - 1)
|
||||
return res, j + 1
|
||||
end
|
||||
|
||||
j = j + 1
|
||||
end
|
||||
|
||||
decode_error(str, i, "expected closing quote for string")
|
||||
end
|
||||
|
||||
local function parse_number(str, i)
|
||||
local x = next_char(str, i, delim_chars)
|
||||
local s = str:sub(i, x - 1)
|
||||
local n = tonumber(s)
|
||||
if not n then
|
||||
decode_error(str, i, "invalid number '" .. s .. "'")
|
||||
end
|
||||
return n, x
|
||||
end
|
||||
|
||||
local function parse_literal(str, i)
|
||||
local x = next_char(str, i, delim_chars)
|
||||
local word = str:sub(i, x - 1)
|
||||
if not literals[word] then
|
||||
decode_error(str, i, "invalid literal '" .. word .. "'")
|
||||
end
|
||||
return literal_map[word], x
|
||||
end
|
||||
|
||||
local function parse_array(str, i)
|
||||
local res = {}
|
||||
local n = 1
|
||||
i = i + 1
|
||||
while 1 do
|
||||
local x
|
||||
i = next_char(str, i, space_chars, true)
|
||||
-- Empty / end of array?
|
||||
if str:sub(i, i) == "]" then
|
||||
i = i + 1
|
||||
break
|
||||
end
|
||||
-- Read token
|
||||
x, i = parse(str, i)
|
||||
res[n] = x
|
||||
n = n + 1
|
||||
-- Next token
|
||||
i = next_char(str, i, space_chars, true)
|
||||
local chr = str:sub(i, i)
|
||||
i = i + 1
|
||||
if chr == "]" then
|
||||
break
|
||||
end
|
||||
if chr ~= "," then
|
||||
decode_error(str, i, "expected ']' or ','")
|
||||
end
|
||||
end
|
||||
return res, i
|
||||
end
|
||||
|
||||
local function parse_object(str, i)
|
||||
local res = {}
|
||||
i = i + 1
|
||||
while 1 do
|
||||
local key, val
|
||||
i = next_char(str, i, space_chars, true)
|
||||
-- Empty / end of object?
|
||||
if str:sub(i, i) == "}" then
|
||||
i = i + 1
|
||||
break
|
||||
end
|
||||
-- Read key
|
||||
if str:sub(i, i) ~= '"' then
|
||||
decode_error(str, i, "expected string for key")
|
||||
end
|
||||
key, i = parse(str, i)
|
||||
-- Read ':' delimiter
|
||||
i = next_char(str, i, space_chars, true)
|
||||
if str:sub(i, i) ~= ":" then
|
||||
decode_error(str, i, "expected ':' after key")
|
||||
end
|
||||
i = next_char(str, i + 1, space_chars, true)
|
||||
-- Read value
|
||||
val, i = parse(str, i)
|
||||
-- Set
|
||||
res[key] = val
|
||||
-- Next token
|
||||
i = next_char(str, i, space_chars, true)
|
||||
local chr = str:sub(i, i)
|
||||
i = i + 1
|
||||
if chr == "}" then
|
||||
break
|
||||
end
|
||||
if chr ~= "," then
|
||||
decode_error(str, i, "expected '}' or ','")
|
||||
end
|
||||
end
|
||||
return res, i
|
||||
end
|
||||
|
||||
local char_func_map = {
|
||||
['"'] = parse_string,
|
||||
["0"] = parse_number,
|
||||
["1"] = parse_number,
|
||||
["2"] = parse_number,
|
||||
["3"] = parse_number,
|
||||
["4"] = parse_number,
|
||||
["5"] = parse_number,
|
||||
["6"] = parse_number,
|
||||
["7"] = parse_number,
|
||||
["8"] = parse_number,
|
||||
["9"] = parse_number,
|
||||
["-"] = parse_number,
|
||||
["t"] = parse_literal,
|
||||
["f"] = parse_literal,
|
||||
["n"] = parse_literal,
|
||||
["["] = parse_array,
|
||||
["{"] = parse_object,
|
||||
}
|
||||
|
||||
parse = function(str, idx)
|
||||
local chr = str:sub(idx, idx)
|
||||
local f = char_func_map[chr]
|
||||
if f then
|
||||
return f(str, idx)
|
||||
end
|
||||
decode_error(str, idx, "unexpected character '" .. chr .. "'")
|
||||
end
|
||||
|
||||
function json.decode(str)
|
||||
if type(str) ~= "string" then
|
||||
error("expected argument of type string, got " .. type(str))
|
||||
end
|
||||
local res, idx = parse(str, next_char(str, 1, space_chars, true))
|
||||
idx = next_char(str, idx, space_chars, true)
|
||||
if idx <= #str then
|
||||
decode_error(str, idx, "trailing garbage")
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
return json
|
58
dot_config/awesome/lib/savefloats.lua
Normal file
|
@ -0,0 +1,58 @@
|
|||
local awful = require("awful")
|
||||
|
||||
local function rel(screen, win)
|
||||
return {
|
||||
x = (win.x - screen.x) / screen.width,
|
||||
y = (win.y - screen.y) / screen.height,
|
||||
width = win.width / screen.width,
|
||||
aspect = win.height / win.width,
|
||||
}
|
||||
end
|
||||
|
||||
local function unrel(s, _rel)
|
||||
return _rel
|
||||
and {
|
||||
x = s.x + s.width * _rel.x,
|
||||
y = s.y + s.height * _rel.y,
|
||||
width = s.width * _rel.width,
|
||||
height = _rel.aspect * s.width * _rel.width,
|
||||
}
|
||||
end
|
||||
|
||||
local stored = {}
|
||||
|
||||
local function forget(c)
|
||||
stored[c] = nil
|
||||
end
|
||||
|
||||
local floating = awful.layout.suit.floating
|
||||
|
||||
function Remember(c)
|
||||
if floating == awful.layout.get(c.screen) or c.floating then
|
||||
stored[c.window] = rel(c.screen.geometry, c:geometry())
|
||||
end
|
||||
end
|
||||
|
||||
function Restore(c)
|
||||
local s = stored[c.window]
|
||||
if s then
|
||||
c:geometry(unrel(c.screen.geometry, stored[c.window]))
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
client.connect_signal("manage", Remember)
|
||||
client.connect_signal("property::geometry", Remember)
|
||||
client.connect_signal("unmanage", forget)
|
||||
|
||||
tag.connect_signal("property::layout", function(t)
|
||||
if floating == awful.layout.get(t.screen) then
|
||||
for _, c in ipairs(t:clients()) do
|
||||
c:geometry(unrel(t.screen.geometry, stored[c.window]))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
return Restore
|
286
dot_config/awesome/main/bindings.lua
Normal file
|
@ -0,0 +1,286 @@
|
|||
local awful = require("awful")
|
||||
local hotkeys_popup = require("awful.hotkeys_popup")
|
||||
local menubar = require("menubar")
|
||||
local machi = require("lib.layout-machi")
|
||||
local menu = require("main.menu")
|
||||
|
||||
local config = require("config")
|
||||
local apps = config.apps
|
||||
local keys = config.keys
|
||||
|
||||
-- General awesome keybindings
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({ keys.mod, "Control" }, "r", awesome.restart, { description = "reload awesome", group = "awesome" }),
|
||||
|
||||
awful.key({ keys.mod, "Shift" }, "q", awesome.quit, { description = "quit awesome", group = "awesome" }),
|
||||
|
||||
awful.key({ keys.mod, "Control", "Shift" }, "x", function()
|
||||
awful.prompt.run({
|
||||
prompt = "Run Lua code: ",
|
||||
textbox = awful.screen.focused().promptbox.widget,
|
||||
exe_callback = awful.util.eval,
|
||||
history_path = awful.util.get_cache_dir() .. "/history_eval",
|
||||
})
|
||||
end, { description = "lua execute prompt", group = "awesome" }),
|
||||
|
||||
awful.key({ keys.mod }, "Return", function()
|
||||
awful.spawn(apps.terminal)
|
||||
end, { description = "open a terminal", group = "launcher" }),
|
||||
|
||||
awful.key({ keys.mod, "Shift" }, "c", function()
|
||||
menu.mainmenu:show()
|
||||
end, { description = "show main menu", group = "awesome" }),
|
||||
|
||||
awful.key({ keys.mod }, "p", function()
|
||||
menubar.show()
|
||||
end, { description = "show the menubar", group = "launcher" }),
|
||||
})
|
||||
|
||||
-- Tag bindings
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({ keys.mod, "Control" }, "s", hotkeys_popup.show_help, { description = "show help", group = "awesome" }),
|
||||
|
||||
awful.key({ keys.mod }, "Left", awful.tag.viewprev, { description = "view previous", group = "tag" }),
|
||||
|
||||
awful.key({ keys.mod }, "Right", awful.tag.viewnext, { description = "view next", group = "tag" }),
|
||||
|
||||
awful.key({ keys.mod }, "Tab", awful.tag.history.restore, { description = "go back", group = "tag" }),
|
||||
})
|
||||
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({
|
||||
modifiers = { keys.mod },
|
||||
keygroup = "numrow",
|
||||
description = "only view tag",
|
||||
group = "tag",
|
||||
on_press = function(index)
|
||||
local screen = awful.screen.focused()
|
||||
local tag = screen.tags[index]
|
||||
if tag then
|
||||
tag:view_only()
|
||||
end
|
||||
end,
|
||||
}),
|
||||
|
||||
awful.key({
|
||||
modifiers = { keys.mod, "Control" },
|
||||
keygroup = "numrow",
|
||||
description = "toggle tag",
|
||||
group = "tag",
|
||||
on_press = function(index)
|
||||
local screen = awful.screen.focused()
|
||||
local tag = screen.tags[index]
|
||||
if tag then
|
||||
awful.tag.viewtoggle(tag)
|
||||
end
|
||||
end,
|
||||
}),
|
||||
|
||||
awful.key({
|
||||
modifiers = { keys.mod, "Shift" },
|
||||
keygroup = "numrow",
|
||||
description = "move focused client to tag",
|
||||
group = "tag",
|
||||
on_press = function(index)
|
||||
if client.focus then
|
||||
local tag = client.focus.screen.tags[index]
|
||||
if tag then
|
||||
client.focus:move_to_tag(tag)
|
||||
end
|
||||
end
|
||||
end,
|
||||
}),
|
||||
|
||||
awful.key({
|
||||
modifiers = { keys.mod, "Control", "Shift" },
|
||||
keygroup = "numrow",
|
||||
description = "toggle focused client on tag",
|
||||
group = "tag",
|
||||
on_press = function(index)
|
||||
if client.focus then
|
||||
local tag = client.focus.screen.tags[index]
|
||||
if tag then
|
||||
client.focus:toggle_tag(tag)
|
||||
end
|
||||
end
|
||||
end,
|
||||
}),
|
||||
|
||||
awful.key({
|
||||
modifiers = { keys.mod },
|
||||
keygroup = "numpad",
|
||||
description = "select layout directly",
|
||||
group = "layout",
|
||||
on_press = function(index)
|
||||
local t = awful.screen.focused().selected_tag
|
||||
if t then
|
||||
t.layout = t.layouts[index] or t.layout
|
||||
end
|
||||
end,
|
||||
}),
|
||||
})
|
||||
|
||||
-- Focus bindings
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({ keys.mod }, "c", function()
|
||||
awful.client.focus.byidx(1)
|
||||
end, { description = "focus next by index", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "x", function()
|
||||
awful.client.focus.byidx(-1)
|
||||
end, { description = "focus previous by index", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "Escape", function()
|
||||
awful.client.focus.history.previous()
|
||||
if client.focus then
|
||||
client.focus:raise()
|
||||
end
|
||||
end, { description = "go back", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "j", function()
|
||||
awful.screen.focus_relative(1)
|
||||
end, { description = "focus the next screen", group = "screen" }),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "k", function()
|
||||
awful.screen.focus_relative(-1)
|
||||
end, { description = "focus the previous screen", group = "screen" }),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "n", function()
|
||||
local c = awful.client.restore()
|
||||
-- Focus restored client
|
||||
if c then
|
||||
c:activate({ raise = true, context = "key.unminimize" })
|
||||
end
|
||||
end, { description = "restore minimized", group = "client" }),
|
||||
})
|
||||
|
||||
-- Layout bindings
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({ keys.mod, "Shift" }, "j", function()
|
||||
awful.client.swap.byidx(1)
|
||||
end, { description = "swap with next client by index", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod, "Shift" }, "k", function()
|
||||
awful.client.swap.byidx(-1)
|
||||
end, { description = "swap with previous client by index", group = "client" }),
|
||||
|
||||
awful.key(
|
||||
{ keys.mod },
|
||||
"u",
|
||||
awful.client.urgent.jumpto,
|
||||
{ description = "jump to urgent client", group = "client" }
|
||||
),
|
||||
|
||||
awful.key({ keys.mod }, "l", function()
|
||||
awful.tag.incmwfact(0.05)
|
||||
end, { description = "increase master width factor", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod }, "h", function()
|
||||
awful.tag.incmwfact(-0.05)
|
||||
end, { description = "decrease master width factor", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod, "Shift" }, "h", function()
|
||||
awful.tag.incnmaster(1, nil, true)
|
||||
end, { description = "increase the number of master clients", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod, "Shift" }, "l", function()
|
||||
awful.tag.incnmaster(-1, nil, true)
|
||||
end, { description = "decrease the number of master clients", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "h", function()
|
||||
awful.tag.incncol(1, nil, true)
|
||||
end, { description = "increase the number of columns", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "l", function()
|
||||
awful.tag.incncol(-1, nil, true)
|
||||
end, { description = "decrease the number of columns", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod }, "-", function()
|
||||
machi.default_editor.start_interactive()
|
||||
end, { description = "edit the current layout if it is a machi layout", group = "layout" }),
|
||||
|
||||
awful.key({ keys.mod }, ".", function()
|
||||
machi.switcher.start(client.focus)
|
||||
end, { description = "switch between windows for a machi layout", group = "layout" }),
|
||||
})
|
||||
|
||||
-- Client bindings
|
||||
client.connect_signal("request::default_keybindings", function()
|
||||
awful.keyboard.append_client_keybindings({
|
||||
awful.key({ keys.mod }, "f", function(c)
|
||||
c.fullscreen = not c.fullscreen
|
||||
c:raise()
|
||||
end, { description = "toggle fullscreen", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "w", function(c)
|
||||
c:kill()
|
||||
end, { description = "close", group = "client" }),
|
||||
|
||||
awful.key(
|
||||
{ keys.mod, "Control" },
|
||||
"space",
|
||||
awful.client.floating.toggle,
|
||||
{ description = "toggle floating", group = "client" }
|
||||
),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "Return", function(c)
|
||||
c:swap(awful.client.getmaster())
|
||||
end, { description = "move to master", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "o", function(c)
|
||||
c:move_to_screen()
|
||||
end, { description = "move to screen", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "t", function(c)
|
||||
c.ontop = not c.ontop
|
||||
end, { description = "toggle keep on top", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "n", function(c)
|
||||
-- The client currently has the input focus, so it cannot be
|
||||
-- minimized, since minimized clients can't have the focus.
|
||||
c.minimized = true
|
||||
end, { description = "minimize", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod }, "m", function(c)
|
||||
c.maximized = not c.maximized
|
||||
c:raise()
|
||||
end, { description = "(un)maximize", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod, "Control" }, "m", function(c)
|
||||
c.maximized_vertical = not c.maximized_vertical
|
||||
c:raise()
|
||||
end, { description = "(un)maximize vertically", group = "client" }),
|
||||
|
||||
awful.key({ keys.mod, "Shift" }, "m", function(c)
|
||||
c.maximized_horizontal = not c.maximized_horizontal
|
||||
c:raise()
|
||||
end, { description = "(un)maximize horizontally", group = "client" }),
|
||||
})
|
||||
end)
|
||||
|
||||
-- Mouse bindings
|
||||
awful.mouse.append_global_mousebindings({
|
||||
awful.button({}, 3, function()
|
||||
menu.mainmenu:toggle()
|
||||
end),
|
||||
|
||||
awful.button({}, 4, awful.tag.viewprev),
|
||||
|
||||
awful.button({}, 5, awful.tag.viewnext),
|
||||
})
|
||||
|
||||
client.connect_signal("request::default_mousebindings", function()
|
||||
awful.mouse.append_client_mousebindings({
|
||||
awful.button({}, 1, function(c)
|
||||
c:activate({ context = "mouse_click" })
|
||||
end),
|
||||
|
||||
awful.button({ keys.mod }, 1, function(c)
|
||||
c:activate({ context = "mouse_click", action = "mouse_move" })
|
||||
end),
|
||||
|
||||
awful.button({ keys.mod }, 3, function(c)
|
||||
c:activate({ context = "mouse_click", action = "mouse_resize" })
|
||||
end),
|
||||
})
|
||||
end)
|
63
dot_config/awesome/main/custom_bindings.lua
Normal file
|
@ -0,0 +1,63 @@
|
|||
local awful = require("awful")
|
||||
local volume = require("ui.popups.volume")
|
||||
local filesystem = require("gears.filesystem")
|
||||
local config = require("config")
|
||||
|
||||
local keys = config.keys
|
||||
|
||||
local config_dir = filesystem.get_configuration_dir()
|
||||
local utils_dir = config_dir .. "utilities/"
|
||||
|
||||
local screenshot_area = utils_dir .. "screensht area"
|
||||
local screenshot_full = utils_dir .. "screensht full"
|
||||
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({ keys.mod }, "r", function()
|
||||
awful.spawn(config.apps.launcher)
|
||||
end, { description = "show rofi", group = "launcher" }),
|
||||
|
||||
awful.key({ keys.mod }, "Print", function()
|
||||
awful.spawn.easy_async_with_shell(screenshot_area, function() end)
|
||||
end, { description = "take a area screenshot", group = "Utils" }),
|
||||
|
||||
awful.key({}, "Print", function()
|
||||
awful.spawn.easy_async_with_shell(screenshot_full, function() end)
|
||||
end, { description = "take a full screenshot", group = "Utils" }),
|
||||
|
||||
awful.key({ keys.mod }, "q", function()
|
||||
awesome.emit_signal("module::exit_screen:show")
|
||||
end, { description = "show Exit Screen", group = "Utils" }),
|
||||
|
||||
awful.key({ keys.mod }, "s", function()
|
||||
awesome.emit_signal("scratchpad::toggle")
|
||||
end, { description = "show Scratchpad", group = "Utils" }),
|
||||
|
||||
awful.key({ keys.mod }, "b", function()
|
||||
awful.spawn.easy_async_with_shell("headsetcontrol -l 0", function() end)
|
||||
end, { description = "headsetcontrol", group = "Utils" }),
|
||||
|
||||
awful.key({ keys.mod }, "t", function()
|
||||
awful.titlebar.toggle(client.focus)
|
||||
end, { description = "toggle titlebar for active client", group = "Utils" }), -- Toggle titlebar
|
||||
})
|
||||
|
||||
-- Volume
|
||||
awful.keyboard.append_global_keybindings({
|
||||
awful.key({}, "XF86AudioRaiseVolume", function()
|
||||
volume.increase()
|
||||
awesome.emit_signal("widget::update_vol")
|
||||
awesome.emit_signal("module::volume_osd:show", true)
|
||||
end),
|
||||
|
||||
awful.key({}, "XF86AudioLowerVolume", function()
|
||||
volume.decrease()
|
||||
awesome.emit_signal("widget::update_vol")
|
||||
awesome.emit_signal("module::volume_osd:show", true)
|
||||
end),
|
||||
|
||||
awful.key({}, "XF86AudioMute", function()
|
||||
volume.mute()
|
||||
awesome.emit_signal("widget::update_vol")
|
||||
awesome.emit_signal("module::volume_osd:show", true)
|
||||
end),
|
||||
})
|
31
dot_config/awesome/main/error_handling.lua
Normal file
|
@ -0,0 +1,31 @@
|
|||
local naughty = require("naughty")
|
||||
|
||||
-- Error handling
|
||||
-- Check if awesome encountered an error during startup and fell back to
|
||||
-- another config (This code will only ever execute for the fallback config)
|
||||
if awesome.startup_errors then
|
||||
naughty.notify({
|
||||
preset = naughty.config.presets.critical,
|
||||
title = "Oops, there were errors during startup!",
|
||||
text = awesome.startup_errors,
|
||||
})
|
||||
end
|
||||
|
||||
-- Handle runtime errors after startup
|
||||
do
|
||||
local in_error = false
|
||||
awesome.connect_signal("debug::error", function(err)
|
||||
-- Make sure we don't go into an endless error loop
|
||||
if in_error then
|
||||
return
|
||||
end
|
||||
in_error = true
|
||||
|
||||
naughty.notify({
|
||||
preset = naughty.config.presets.critical,
|
||||
title = "Oops, an error happened!",
|
||||
text = tostring(err),
|
||||
})
|
||||
in_error = false
|
||||
end)
|
||||
end
|
14
dot_config/awesome/main/init.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local req = {
|
||||
"error_handling",
|
||||
"layout",
|
||||
"menu",
|
||||
"wallpaper",
|
||||
"bindings",
|
||||
"custom_bindings",
|
||||
"rules",
|
||||
"tags",
|
||||
}
|
||||
|
||||
for _, x in pairs(req) do
|
||||
require(... .. "." .. x)
|
||||
end
|
36
dot_config/awesome/main/layout.lua
Normal file
|
@ -0,0 +1,36 @@
|
|||
local awful = require("awful")
|
||||
local bling = require("lib.bling")
|
||||
local machi = require("lib.layout-machi")
|
||||
|
||||
-- Custom Layouts
|
||||
local mstab = bling.layout.mstab
|
||||
local centered = bling.layout.centered
|
||||
local equal = bling.layout.equalarea
|
||||
local deck = bling.layout.deck
|
||||
|
||||
machi.editor.nested_layouts = {
|
||||
["0"] = deck,
|
||||
["1"] = mstab,
|
||||
["2"] = awful.layout.suit.spiral,
|
||||
["3"] = awful.layout.suit.fair,
|
||||
["4"] = awful.layout.suit.fair.horizontal,
|
||||
}
|
||||
|
||||
-- Table of layouts to cover with awful.layout.inc, order matters.
|
||||
awful.layout.append_default_layouts({
|
||||
awful.layout.suit.tile,
|
||||
awful.layout.suit.spiral.dwindle,
|
||||
awful.layout.suit.floating,
|
||||
awful.layout.suit.max,
|
||||
centered,
|
||||
mstab,
|
||||
equal,
|
||||
machi.default_layout,
|
||||
})
|
||||
|
||||
client.connect_signal("manage", function(c)
|
||||
if awesome.startup and not c.size_hints.user_position and not c.size_hints.program_position then
|
||||
-- Prevent clients from being unreachable after screen count changes.
|
||||
awful.placement.no_offscreen(c)
|
||||
end
|
||||
end)
|
107
dot_config/awesome/main/menu.lua
Normal file
|
@ -0,0 +1,107 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
local wibox = require("wibox")
|
||||
local helpers = require("helpers")
|
||||
local hotkeys_popup = require("awful.hotkeys_popup")
|
||||
|
||||
local theme = require("beautiful").get()
|
||||
local apps = require("config").apps
|
||||
|
||||
local menu = {}
|
||||
|
||||
local rofi = {}
|
||||
rofi.timer = gears.timer({
|
||||
autostart = false,
|
||||
timeout = 0.1,
|
||||
single_shot = true,
|
||||
callback = function()
|
||||
awful.spawn(apps.launcher)
|
||||
end,
|
||||
})
|
||||
|
||||
menu.awesome = {
|
||||
{
|
||||
"Hotkeys",
|
||||
function()
|
||||
hotkeys_popup.show_help(nil, awful.screen.focused())
|
||||
end,
|
||||
},
|
||||
{ "Manual", apps.terminal .. " -e man awesome" },
|
||||
{ "Edit Config", apps.start_editor .. " " .. awesome.conffile },
|
||||
{ "Restart", awesome.restart },
|
||||
{
|
||||
"Quit",
|
||||
function()
|
||||
awesome.quit()
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
menu.mainmenu = awful.menu({
|
||||
items = {
|
||||
{
|
||||
"Applications",
|
||||
function()
|
||||
menu.mainmenu:hide()
|
||||
rofi.timer:start()
|
||||
end,
|
||||
},
|
||||
{ "Terminal", apps.terminal },
|
||||
{ "Web Browser", apps.browser },
|
||||
{ "File Manager", apps.file_manager },
|
||||
{ "Text Editor", apps.code_editor },
|
||||
{ "Music Player", apps.music_player },
|
||||
{
|
||||
"Info Panel",
|
||||
function()
|
||||
awesome.emit_signal("sidebar::toggle")
|
||||
end,
|
||||
},
|
||||
{
|
||||
"Notifications",
|
||||
function()
|
||||
awesome.emit_signal("action::toggle")
|
||||
end,
|
||||
},
|
||||
{
|
||||
"Exit",
|
||||
function()
|
||||
awesome.emit_signal("module::exit_screen:show")
|
||||
end,
|
||||
},
|
||||
{ "AwesomeWM", menu.awesome },
|
||||
},
|
||||
})
|
||||
|
||||
-- apply rounded corners to menus when picom isn't available, thanks to u/signalsourcesexy
|
||||
-- also applies antialiasing! - By me.
|
||||
menu.mainmenu.wibox.shape = helpers.ui.rrect(10)
|
||||
menu.mainmenu.wibox.bg = theme.bg_normal .. "00"
|
||||
menu.mainmenu.wibox:set_widget(wibox.widget({
|
||||
menu.mainmenu.wibox.widget,
|
||||
bg = theme.bg_normal,
|
||||
shape = helpers.ui.rrect(0),
|
||||
widget = wibox.container.background,
|
||||
}))
|
||||
|
||||
-- apply rounded corners to submenus, thanks to u/signalsourcesexy
|
||||
-- also applies antialiasing! - By me.
|
||||
awful.menu.original_new = awful.menu.new
|
||||
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
function awful.menu.new(...)
|
||||
local ret = awful.menu.original_new(...)
|
||||
|
||||
ret.wibox.shape = helpers.ui.rrect(10)
|
||||
ret.wibox.bg = theme.bg_normal .. "00"
|
||||
ret.wibox:set_widget(wibox.widget({
|
||||
ret.wibox.widget,
|
||||
widget = wibox.container.background,
|
||||
bg = theme.color.base,
|
||||
shape = helpers.ui.rrect(0),
|
||||
}))
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
return menu
|
87
dot_config/awesome/main/rules.lua
Normal file
|
@ -0,0 +1,87 @@
|
|||
local awful = require("awful")
|
||||
local ruled = require("ruled")
|
||||
local dpi = require("beautiful.xresources").apply_dpi
|
||||
local helpers = require("helpers")
|
||||
local config = require("config")
|
||||
|
||||
ruled.client.connect_signal("request::rules", function()
|
||||
ruled.client.append_rule({
|
||||
id = "global",
|
||||
rule = {},
|
||||
properties = {
|
||||
focus = awful.client.focus.filter,
|
||||
raise = true,
|
||||
screen = awful.screen.preferred,
|
||||
placement = awful.placement.no_overlap + awful.placement.no_offscreen,
|
||||
},
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
id = "titlebars",
|
||||
rule_any = {
|
||||
type = { "normal", "dialog" },
|
||||
},
|
||||
properties = {
|
||||
titlebars_enabled = false,
|
||||
},
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule = { class = config.apps.launcher },
|
||||
properties = {
|
||||
titlebars_enabled = false,
|
||||
},
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule = { instance = "origin.exe" },
|
||||
properties = {
|
||||
floating = true,
|
||||
titlebars_enabled = false,
|
||||
shape = helpers.ui.rrect(0),
|
||||
border_width = dpi(0),
|
||||
},
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule = { instance = "bf1.exe" },
|
||||
properties = { shape = helpers.ui.rrect(0), fullscreen = true, tag = "", switchtotag = true },
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule = { instance = "wine" },
|
||||
properties = { shape = helpers.ui.rrect(0), titlebars_enabled = false },
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule = { class = "steam_app_489830" },
|
||||
properties = { fullscreen = true },
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule_any = {
|
||||
floating = true,
|
||||
},
|
||||
properties = {
|
||||
placement = awful.placement.centered,
|
||||
ontop = true,
|
||||
},
|
||||
})
|
||||
|
||||
ruled.client.append_rule({
|
||||
rule_any = {
|
||||
class = {
|
||||
"xfce",
|
||||
},
|
||||
instance = {
|
||||
"xfce",
|
||||
},
|
||||
name = {
|
||||
"E:D Market Connector",
|
||||
},
|
||||
},
|
||||
properties = {
|
||||
floating = true,
|
||||
},
|
||||
})
|
||||
end)
|
10
dot_config/awesome/main/tags.lua
Normal file
|
@ -0,0 +1,10 @@
|
|||
local awful = require("awful")
|
||||
local icons = require("config").icons.tags
|
||||
|
||||
screen.connect_signal("request::desktop_decoration", function(s)
|
||||
awful.tag(
|
||||
{ icons.general, icons.files, icons.media, icons.terminal, icons.coding, icons.misc },
|
||||
s,
|
||||
awful.layout.layouts[1]
|
||||
)
|
||||
end)
|
26
dot_config/awesome/main/wallpaper.lua
Normal file
|
@ -0,0 +1,26 @@
|
|||
local awful = require("awful")
|
||||
local wibox = require("wibox")
|
||||
|
||||
local image = require("config").theme.wallpaper
|
||||
|
||||
local function set_wall(s)
|
||||
awful.wallpaper({
|
||||
screen = s,
|
||||
widget = {
|
||||
{
|
||||
image = image,
|
||||
upscale = true,
|
||||
downscale = true,
|
||||
widget = wibox.widget.imagebox,
|
||||
},
|
||||
valign = "center",
|
||||
halign = "center",
|
||||
tiled = true,
|
||||
widget = wibox.container.tile,
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
screen.connect_signal("request::wallpaper", function(s)
|
||||
set_wall(s)
|
||||
end)
|
26
dot_config/awesome/rc.lua
Normal file
|
@ -0,0 +1,26 @@
|
|||
pcall(require, "luarocks.loader")
|
||||
|
||||
local gears = require("gears")
|
||||
local beautiful = require("beautiful")
|
||||
local awful = require("awful")
|
||||
|
||||
require("awful.autofocus")
|
||||
|
||||
-- Theme --
|
||||
beautiful.init(gears.filesystem.get_configuration_dir() .. "themes/catppuccin/theme.lua")
|
||||
|
||||
-- Main/Configuration --
|
||||
require("main")
|
||||
|
||||
-- Libraries/Modules --
|
||||
require("lib")
|
||||
|
||||
-- Signals/Monitoring --
|
||||
require("signals")
|
||||
|
||||
-- Ui/Panels --
|
||||
require("ui")
|
||||
|
||||
-- Autostart --
|
||||
awful.spawn.with_shell("picom --config ~/.config/picom/awesomewm")
|
||||
awful.spawn.with_shell("~/.config/fehbg/awesomewm")
|
20
dot_config/awesome/signals/cpu.lua
Normal file
|
@ -0,0 +1,20 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
|
||||
local function get_cpu()
|
||||
local script = "echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]"
|
||||
|
||||
awful.spawn.easy_async_with_shell(script, function(cpu_perc)
|
||||
cpu_perc = cpu_perc:match("%d+")
|
||||
awesome.emit_signal("signal::cpu", cpu_perc)
|
||||
end)
|
||||
end
|
||||
|
||||
gears.timer({
|
||||
timeout = 1,
|
||||
call_now = true,
|
||||
autostart = true,
|
||||
callback = function()
|
||||
get_cpu()
|
||||
end,
|
||||
})
|
23
dot_config/awesome/signals/disk.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
|
||||
local config = require("config")
|
||||
local disk = config.widget.disk.name
|
||||
|
||||
local function get_disk()
|
||||
local script = "df -kH -B 1MB" .. disk .. "| tail -1 | awk '{printf $5}'"
|
||||
|
||||
awful.spawn.easy_async_with_shell(script, function(disk_perc)
|
||||
disk_perc = disk_perc:match("%d+")
|
||||
awesome.emit_signal("signal::disk", disk_perc)
|
||||
end)
|
||||
end
|
||||
|
||||
gears.timer({
|
||||
timeout = 2000,
|
||||
call_now = true,
|
||||
autostart = true,
|
||||
callback = function()
|
||||
get_disk()
|
||||
end,
|
||||
})
|
14
dot_config/awesome/signals/init.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local req = {
|
||||
"volume",
|
||||
"mic",
|
||||
"cpu",
|
||||
"mem",
|
||||
"player",
|
||||
"disk",
|
||||
"uptime",
|
||||
"playerctl",
|
||||
}
|
||||
|
||||
for _, x in pairs(req) do
|
||||
require("signals." .. x)
|
||||
end
|
22
dot_config/awesome/signals/mem.lua
Normal file
|
@ -0,0 +1,22 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
|
||||
local function get_mem()
|
||||
local script = [[
|
||||
free | grep Mem | awk '{print $3/$2 * 100.0}' | cut -f 1 -d "."
|
||||
]]
|
||||
|
||||
awful.spawn.easy_async_with_shell(script, function(mem_perc)
|
||||
mem_perc = mem_perc:match("%d+")
|
||||
awesome.emit_signal("signal::mem", mem_perc)
|
||||
end)
|
||||
end
|
||||
|
||||
gears.timer({
|
||||
timeout = 4,
|
||||
call_now = true,
|
||||
autostart = true,
|
||||
callback = function()
|
||||
get_mem()
|
||||
end,
|
||||
})
|
29
dot_config/awesome/signals/mic.lua
Normal file
|
@ -0,0 +1,29 @@
|
|||
local awful = require("awful")
|
||||
|
||||
local config = require("config")
|
||||
local microphone = config.widget.mic.name
|
||||
|
||||
local vol_sc = "pamixer --source " .. microphone .. " --get-volume"
|
||||
local mute_sc = "pamixer --source " .. microphone .. " --get-mute"
|
||||
|
||||
local function get_vol()
|
||||
awful.spawn.easy_async_with_shell(vol_sc, function(vol)
|
||||
awful.spawn.easy_async_with_shell(mute_sc, function(mute)
|
||||
local muted
|
||||
|
||||
if mute:match("false") then
|
||||
muted = false
|
||||
else
|
||||
muted = true
|
||||
end
|
||||
|
||||
awesome.emit_signal("signal::mic", vol, muted)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
awesome.connect_signal("widget::update_mic", function() -- Needs to be Updated if muted! For Mute in Sidebar Widget
|
||||
get_vol()
|
||||
end)
|
||||
|
||||
get_vol()
|
31
dot_config/awesome/signals/player.lua
Normal file
|
@ -0,0 +1,31 @@
|
|||
local awful = require("awful")
|
||||
|
||||
-- Script
|
||||
local title_sc = "mpc -f %title% | head -1"
|
||||
local artist_sc = "mpc -f %artist% | head -1"
|
||||
local length_sc = "mpc | awk '{print $3}' | awk 'NR==2'"
|
||||
local status_sc = "mpc | awk '{print $1}' | awk 'NR==2' | sed 's/[[]*//g' | sed 's/[]]*//g'"
|
||||
|
||||
-- function
|
||||
local function get_player()
|
||||
awful.spawn.easy_async_with_shell(title_sc, function(title)
|
||||
awful.spawn.easy_async_with_shell(artist_sc, function(artist)
|
||||
awful.spawn.easy_async_with_shell(length_sc, function(length)
|
||||
awful.spawn.easy_async_with_shell(status_sc, function(status)
|
||||
title = string.gsub(title, "\n", "")
|
||||
artist = string.gsub(artist, "\n", "")
|
||||
length = string.gsub(length, "\n", "")
|
||||
status = string.gsub(status, "\n", "")
|
||||
|
||||
awesome.emit_signal("signal::player", title, artist, length, status)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
awesome.connect_signal("widget::update_player", function()
|
||||
get_player()
|
||||
end)
|
||||
|
||||
get_player()
|
17
dot_config/awesome/signals/playerctl.lua
Normal file
|
@ -0,0 +1,17 @@
|
|||
local bling = require("lib.bling")
|
||||
|
||||
local instance = nil
|
||||
|
||||
local function new()
|
||||
return bling.signal.playerctl.lib({
|
||||
update_on_activity = true,
|
||||
player = { "mopidy", "spotify", "%any" },
|
||||
debounce_delay = 1,
|
||||
})
|
||||
end
|
||||
|
||||
if not instance then
|
||||
instance = new()
|
||||
end
|
||||
|
||||
return instance
|
16
dot_config/awesome/signals/uptime.lua
Normal file
|
@ -0,0 +1,16 @@
|
|||
local awful = require("awful")
|
||||
|
||||
local function get_uptime()
|
||||
local script = [[
|
||||
uptime -p | sed 's/up\s*//g' | sed 's/\s*days*/d/g' | sed 's/\s*hours*/h/g' | sed 's/\s*minutes*/m/g'
|
||||
]]
|
||||
|
||||
awful.spawn.easy_async_with_shell(script, function(uptime)
|
||||
uptime = string.gsub(uptime, "\n", "")
|
||||
awesome.emit_signal("signal::uptime", uptime)
|
||||
end)
|
||||
end
|
||||
awesome.connect_signal("widget::update_uptime", function()
|
||||
get_uptime()
|
||||
end)
|
||||
get_uptime()
|
26
dot_config/awesome/signals/volume.lua
Normal file
|
@ -0,0 +1,26 @@
|
|||
local awful = require("awful")
|
||||
|
||||
local vol_sc = "pamixer --get-volume"
|
||||
local mute_sc = "pamixer --get-mute"
|
||||
|
||||
local function get_vol()
|
||||
awful.spawn.easy_async_with_shell(vol_sc, function(vol)
|
||||
awful.spawn.easy_async_with_shell(mute_sc, function(mute)
|
||||
local muted
|
||||
|
||||
if mute:match("false") then
|
||||
muted = false
|
||||
else
|
||||
muted = true
|
||||
end
|
||||
|
||||
awesome.emit_signal("signal::volume", vol, muted)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
awesome.connect_signal("widget::update_vol", function() -- Needs to be Updated if muted! For Pulseaudio Widget
|
||||
get_vol()
|
||||
end)
|
||||
|
||||
get_vol()
|
BIN
dot_config/awesome/themes/catppuccin/assets/music.png
Normal file
After Width: | Height: | Size: 395 KiB |
BIN
dot_config/awesome/themes/catppuccin/assets/pfp.jpg
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
dot_config/awesome/themes/catppuccin/assets/volume-off.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
dot_config/awesome/themes/catppuccin/assets/volume-on.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
57
dot_config/awesome/themes/catppuccin/assets/volume.svg
Normal file
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="240"
|
||||
height="240"
|
||||
viewBox="0 0 240 240"
|
||||
id="svg4"
|
||||
sodipodi:docname="volume-high.svg"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1321"
|
||||
inkscape:window-height="740"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:zoom="0.98333333"
|
||||
inkscape:cx="-267.45763"
|
||||
inkscape:cy="120"
|
||||
inkscape:window-x="45"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
d="m 142.22222,22.555558 v 22.88889 c 32.11111,9.55555 55.55556,39.33333 55.55556,74.555552 0,35.22222 -23.44445,64.88888 -55.55556,74.44444 v 23 C 186.66667,207.33333 220,167.55555 220,120 220,72.444448 186.66667,32.666668 142.22222,22.555558 M 170,120 C 170,100.33333 158.88889,83.444448 142.22222,75.222228 V 164.44444 C 158.88889,156.55555 170,139.55555 170,120 M 20,86.666668 V 153.33333 H 64.444444 L 120,208.88888 V 31.111118 l -55.555556,55.55555 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;stroke-width:11.11111164" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
BIN
dot_config/awesome/themes/catppuccin/buttons.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/centered.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/dwindle.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/equalarea.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/floating.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/machi.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/max.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/mstab.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
dot_config/awesome/themes/catppuccin/layouts/tile.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
dot_config/awesome/themes/catppuccin/submenu.png
Normal file
After Width: | Height: | Size: 440 B |
BIN
dot_config/awesome/themes/catppuccin/taglist/squarefw.png
Normal file
After Width: | Height: | Size: 187 B |
BIN
dot_config/awesome/themes/catppuccin/taglist/squarew.png
Normal file
After Width: | Height: | Size: 193 B |
202
dot_config/awesome/themes/catppuccin/theme.lua
Normal file
|
@ -0,0 +1,202 @@
|
|||
local beautiful = require("beautiful")
|
||||
local gfs = require("gears.filesystem")
|
||||
local config = require("config")
|
||||
local helpers = require("helpers")
|
||||
|
||||
local palette = require("lib.catppuccin.catppuccin." .. config.theme.flavor)
|
||||
|
||||
local theme_assets = beautiful.theme_assets
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
|
||||
local theme_path = gfs.get_configuration_dir() .. "themes/catppuccin/"
|
||||
|
||||
local theme = {}
|
||||
|
||||
theme.color = {}
|
||||
|
||||
-- Transparent Color --
|
||||
theme.color.transparent = "#00000000"
|
||||
|
||||
-- Base --
|
||||
theme.color.crust = palette.crust.hex
|
||||
theme.color.mantle = palette.mantle.hex
|
||||
theme.color.base = palette.base.hex
|
||||
|
||||
-- Surface --
|
||||
theme.color.surface0 = palette.surface0.hex
|
||||
theme.color.surface1 = palette.surface1.hex
|
||||
theme.color.surface2 = palette.surface2.hex
|
||||
|
||||
-- Overlay --
|
||||
theme.color.overlay0 = palette.overlay0.hex
|
||||
theme.color.overlay1 = palette.overlay1.hex
|
||||
theme.color.overlay2 = palette.overlay2.hex
|
||||
|
||||
-- Text --
|
||||
theme.color.text = palette.text.hex
|
||||
theme.color.subtext0 = palette.subtext0.hex
|
||||
theme.color.subtext1 = palette.subtext1.hex
|
||||
|
||||
theme.color.lavender = palette.lavender.hex
|
||||
theme.color.blue = palette.blue.hex
|
||||
theme.color.sapphire = palette.sapphire.hex
|
||||
theme.color.sky = palette.sky.hex
|
||||
theme.color.teal = palette.teal.hex
|
||||
theme.color.green = palette.green.hex
|
||||
theme.color.yellow = palette.yellow.hex
|
||||
theme.color.peach = palette.peach.hex
|
||||
theme.color.maroon = palette.maroon.hex
|
||||
theme.color.red = palette.red.hex
|
||||
theme.color.mauve = palette.mauve.hex
|
||||
theme.color.pink = palette.pink.hex
|
||||
theme.color.flamingo = palette.flamingo.hex
|
||||
theme.color.rosewater = palette.rosewater.hex
|
||||
|
||||
theme.color.accent1 = theme.color[config.theme.accent1]
|
||||
theme.color.accent2 = theme.color[config.theme.accent2]
|
||||
|
||||
theme.music = theme_path .. "assets/music.png"
|
||||
theme.volume_on = theme_path .. "assets/volume-on.png"
|
||||
theme.volume_off = theme_path .. "assets/volume-off.png"
|
||||
theme.pfp = config.theme.pfp
|
||||
theme.wallpaper = config.theme.wallpaper
|
||||
theme.font = config.theme.font.family .. " " .. config.theme.font.size
|
||||
|
||||
theme.titlebar_bg_focus = theme.color.base
|
||||
theme.titlebar_bg = theme.color.base
|
||||
theme.bg_normal = theme.color.base
|
||||
theme.bg_focus = theme.color.surface0
|
||||
theme.bg_urgent = theme.color.red
|
||||
theme.bg_minimize = theme.color.surface1
|
||||
theme.bg_systray = theme.bg_normal
|
||||
|
||||
theme.fg_normal = theme.color.subtext1 -- text color
|
||||
theme.fg_focus = theme.color.accent1
|
||||
theme.fg_urgent = theme.color.text
|
||||
theme.fg_minimize = theme.color.text
|
||||
|
||||
theme.useless_gap = dpi(10)
|
||||
theme.border_width = dpi(3)
|
||||
theme.border_normal = theme.color.surface0
|
||||
theme.border_focus = theme.color.accent1
|
||||
theme.border_marked = theme.color.maroon
|
||||
|
||||
theme.menu_font = helpers.ui.set_font("12", theme.font)
|
||||
theme.menu_bg_focus = theme.color.base
|
||||
theme.menu_fg_focus = theme.color.accent2
|
||||
theme.menu_border_width = dpi(2)
|
||||
theme.menu_border_color = theme.color.surface0
|
||||
theme.submenu = config.icons.arr.r .. " "
|
||||
theme.menu_height = dpi(37)
|
||||
theme.menu_width = dpi(194)
|
||||
|
||||
theme.tasklist_bg_focus = theme.color.base
|
||||
theme.tasklist_fg_focus = theme.color.lavender
|
||||
theme.tasklist_disable_icon = true
|
||||
theme.tasklist_font = helpers.ui.set_font("11", theme.font)
|
||||
|
||||
theme.taglist_spacing = dpi(2)
|
||||
theme.taglist_bg_focus = theme.color.base
|
||||
theme.taglist_disable_icon = true
|
||||
theme.taglist_font = helpers.ui.set_font("11", theme.font)
|
||||
theme.taglist_fg_focus = theme.color.accent2
|
||||
theme.taglist_fg_empty = theme.color.surface2
|
||||
theme.taglist_fg_occupied = theme.color.sky
|
||||
|
||||
-- Generate taglist squares:
|
||||
local taglist_square_size = dpi(0)
|
||||
theme.taglist_squares_sel = theme_assets.taglist_squares_sel(taglist_square_size, theme.color.accent2)
|
||||
theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel(taglist_square_size, theme.taglist_fg_occupied)
|
||||
|
||||
-- Edge Snap
|
||||
theme.snap_bg = theme.color.accent1
|
||||
theme.snap_border_width = dpi(5)
|
||||
theme.snap_shape = helpers.ui.rrect(0)
|
||||
|
||||
-- Hotkey Popup
|
||||
theme.hotkeys_shape = helpers.ui.rrect(12)
|
||||
theme.hotkeys_border_color = theme.color.accent1
|
||||
theme.hotkeys_modifiers_fg = theme.color.overlay2
|
||||
theme.hotkeys_font = helpers.ui.set_font("10", theme.font)
|
||||
theme.hotkeys_description_font = helpers.ui.set_font("10", theme.font)
|
||||
|
||||
-- Layoutlist
|
||||
theme.layoutlist_shape_selected = helpers.ui.rrect(7)
|
||||
|
||||
-- Tabs
|
||||
theme.mstab_bar_height = dpi(1)
|
||||
theme.mstab_dont_resize_slaves = true
|
||||
theme.mstab_bar_padding = dpi(10)
|
||||
theme.mstab_border_radius = dpi(6)
|
||||
theme.mstab_bar_ontop = false
|
||||
theme.mstab_tabbar_position = "top"
|
||||
theme.mstab_tabbar_style = "default"
|
||||
theme.mstab_bar_disable = true
|
||||
|
||||
-- Layout Machi
|
||||
theme.machi_switcher_border_color = theme.color.surface0
|
||||
theme.machi_switcher_border_opacity = 0.4
|
||||
theme.machi_editor_border_color = theme.color.surface1
|
||||
theme.machi_editor_border_opacity = 0.4
|
||||
theme.machi_editor_active_opacity = 0.4
|
||||
|
||||
-- Bling
|
||||
theme.tag_preview_widget_border_radius = dpi(6)
|
||||
theme.tag_preview_client_border_radius = dpi(6)
|
||||
theme.tag_preview_client_opacity = 1
|
||||
theme.tag_preview_client_bg = theme.color.base
|
||||
theme.tag_preview_client_border_color = theme.color.surface0
|
||||
theme.tag_preview_client_border_width = dpi(2)
|
||||
theme.tag_preview_widget_border_color = theme.color.accent1
|
||||
theme.tag_preview_widget_border_width = dpi(2)
|
||||
theme.tag_preview_widget_margin = 4
|
||||
|
||||
-- Notifications
|
||||
theme.notification_spacing = dpi(4)
|
||||
theme.notification_bg = theme.color.base
|
||||
|
||||
-- Titlebar icons
|
||||
theme.titlebar_close_button_normal = theme_path .. "titlebar/unfocus.svg"
|
||||
theme.titlebar_close_button_focus = theme_path .. "titlebar/close.svg"
|
||||
theme.titlebar_close_button_normal_hover = theme_path .. "titlebar/close_hover.svg"
|
||||
theme.titlebar_close_button_focus_hover = theme_path .. "titlebar/close_hover.svg"
|
||||
|
||||
theme.titlebar_minimize_button_normal = theme_path .. "titlebar/unfocus.svg"
|
||||
theme.titlebar_minimize_button_focus = theme_path .. "titlebar/minimize.svg"
|
||||
theme.titlebar_minimize_button_normal_hover = theme_path .. "titlebar/minimize_hover.svg"
|
||||
theme.titlebar_minimize_button_focus_hover = theme_path .. "titlebar/minimize_hover.svg"
|
||||
|
||||
theme.titlebar_ontop_button_normal_inactive = theme_path .. "titlebar/unfocus.svg"
|
||||
theme.titlebar_ontop_button_focus_inactive = theme_path .. "titlebar/ontop.svg"
|
||||
|
||||
theme.titlebar_ontop_button_normal_active = theme_path .. "titlebar/unfocus.svg"
|
||||
theme.titlebar_ontop_button_focus_active = theme_path .. "titlebar/ontop.svg"
|
||||
|
||||
theme.titlebar_maximized_button_normal_active = theme_path .. "titlebar/unfocus.svg"
|
||||
theme.titlebar_maximized_button_focus_active = theme_path .. "titlebar/maximize.svg"
|
||||
theme.titlebar_maximized_button_normal_active_hover = theme_path .. "titlebar/maximize_hover.svg"
|
||||
theme.titlebar_maximized_button_focus_active_hover = theme_path .. "titlebar/maximize_hover.svg"
|
||||
|
||||
theme.titlebar_maximized_button_normal_inactive = theme_path .. "titlebar/unfocus.svg"
|
||||
theme.titlebar_maximized_button_focus_inactive = theme_path .. "titlebar/maximize.svg"
|
||||
theme.titlebar_maximized_button_normal_inactive_hover = theme_path .. "titlebar/maximize_hover.svg"
|
||||
theme.titlebar_maximized_button_focus_inactive_hover = theme_path .. "titlebar/maximize_hover.svg"
|
||||
|
||||
-- Layout icons
|
||||
theme.layout_floating = theme_path .. "layouts/floating.png"
|
||||
theme.layout_max = theme_path .. "layouts/max.png"
|
||||
theme.layout_tile = theme_path .. "layouts/tile.png"
|
||||
theme.layout_dwindle = theme_path .. "layouts/dwindle.png"
|
||||
theme.layout_centered = theme_path .. "layouts/centered.png"
|
||||
theme.layout_mstab = theme_path .. "layouts/mstab.png"
|
||||
theme.layout_equalarea = theme_path .. "layouts/equalarea.png"
|
||||
theme.layout_machi = theme_path .. "layouts/machi.png"
|
||||
|
||||
-- Generate Awesome icon:
|
||||
theme.awesome_icon = theme_assets.awesome_icon(theme.menu_height, theme.bg_focus, theme.fg_focus)
|
||||
|
||||
-- Define the icon theme for application icons. If not set then the icons
|
||||
-- from /usr/share/icons and /usr/share/icons/hicolor will be used.
|
||||
theme.icon_theme = config.theme.icon_theme
|
||||
|
||||
return theme
|
1
dot_config/awesome/themes/catppuccin/titlebar/close.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0,0,256,256"><g fill="#f38ba8" fill-rule="evenodd" stroke="none" stroke-width="0.26458" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="translate(0.0001,0.00009)"><g><g transform="translate(0,0.00001) scale(30.23622,30.23622)"><g id="layer1"><circle cx="4.23333" cy="4.23333" r="4.23333" id="mdi-close-normal"></circle></g></g></g></g></g></svg>
|
After Width: | Height: | Size: 656 B |
|
@ -0,0 +1 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0,0,256,256"><g fill="#f24f86" fill-rule="evenodd" stroke="none" stroke-width="0.26458" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="translate(0,0) scale(30.23622,30.23622)"><g id="layer1"><path d="M4.23333,0c-1.12275,0 -2.19951,0.44601 -2.99342,1.23991c-0.7939,0.7939 -1.23991,1.87067 -1.23991,2.99342c0,1.12275 0.44601,2.19951 1.23991,2.99342c0.7939,0.7939 1.87067,1.23991 2.99342,1.23991c1.12275,0 2.19951,-0.44601 2.99342,-1.23991c0.7939,-0.7939 1.23991,-1.87067 1.23991,-2.99342c0,-1.12275 -0.44601,-2.19951 -1.23991,-2.99342c-0.7939,-0.7939 -1.87067,-1.23991 -2.99342,-1.23991zM2.92334,2.36471c0.13935,0.00056 0.27812,0.05454 0.38447,0.16175l0.92863,0.93586l0.93586,-0.92811c0.21441,-0.2127 0.55831,-0.2113 0.77101,0.0031c0.2127,0.21441 0.2113,0.55831 -0.0031,0.77101l-0.93586,0.92811l0.92811,0.93586c0.2127,0.21441 0.21182,0.55831 -0.00258,0.77101c-0.21441,0.2127 -0.55831,0.2113 -0.77101,-0.0031l-0.92863,-0.93586l-0.93586,0.92863c-0.21441,0.2127 -0.55831,0.2113 -0.77101,-0.0031c-0.2127,-0.21441 -0.2113,-0.55831 0.0031,-0.77101l0.93586,-0.92863l-0.92811,-0.93586c-0.2127,-0.21441 -0.21182,-0.55831 0.00258,-0.77101c0.1072,-0.10635 0.24719,-0.1592 0.38654,-0.15865z" id="mdi-close-normal"></path></g></g></g></svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0,0,256,256"><g fill="#a6e3a1" fill-rule="evenodd" stroke="none" stroke-width="0.26458" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="translate(0.0001,0.00009)"><g><g transform="translate(0,0.00001) scale(30.23622,30.23622)"><g id="layer1"><circle cx="4.23333" cy="4.23333" r="4.23333" id="mdi-close-normal"></circle></g></g></g></g></g></svg>
|
After Width: | Height: | Size: 656 B |
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 8.4666665 8.4666666" version="1.1" id="svg4249" inkscape:export-filename="../../png/maximize/maximize_3.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)" sodipodi:docname="maximize_3.svg" fill="#52e0ad">
|
||||
<sodipodi:namedview id="namedview4251" pagecolor="#505050" bordercolor="#ffffff" borderopacity="1" inkscape:showpageshadow="0" inkscape:pageopacity="0" inkscape:pagecheckerboard="1" inkscape:deskcolor="#505050" inkscape:document-units="mm" showgrid="false" inkscape:zoom="5.6568543" inkscape:cx="27.577164" inkscape:cy="18.384776" inkscape:window-width="1260" inkscape:window-height="724" inkscape:window-x="10" inkscape:window-y="66" inkscape:window-maximized="1" inkscape:current-layer="layer1"/>
|
||||
<defs id="defs4246"/>
|
||||
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
|
||||
<path id="mdi-close-normal" style="fill: #52e0ad;fill-rule:evenodd;stroke-width:0.264583;paint-order:normal;fill-opacity:1" d="M 4.2333333 0 A 4.2333331 4.2333331 0 0 0 0 4.2333333 A 4.2333331 4.2333331 0 0 0 4.2333333 8.4666667 A 4.2333331 4.2333331 0 0 0 8.4666667 4.2333333 A 4.2333331 4.2333331 0 0 0 4.2333333 0 z M 3.0907674 2.0789429 L 5.7303996 2.0789429 C 6.0818693 2.0789429 6.369637 2.3661641 6.369637 2.7176636 L 6.369637 5.3572957 L 3.0907674 2.0789429 z M 2.0970296 3.0990356 L 5.3862345 6.3877238 L 2.7362671 6.3877238 C 2.3847577 6.3877238 2.0970296 6.1005024 2.0970296 5.7490031 L 2.0970296 3.0990356 z "/>
|
||||
<path style="fill: #52e0ad;fill-opacity:1;stroke-width:0.264583" d="M 10.768947,5.8246909 10.743132,3.2134246" id="path7007"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0,0,256,256"><g fill="#f9e2af" fill-rule="evenodd" stroke="none" stroke-width="0.26458" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="translate(0.0001,0.00009)"><g><g transform="translate(0,0.00001) scale(30.23622,30.23622)"><g id="layer1"><circle cx="4.23333" cy="4.23333" r="4.23333" id="mdi-close-normal"></circle></g></g></g></g></g></svg>
|
After Width: | Height: | Size: 656 B |
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 8.4666665 8.4666666" version="1.1" id="svg4249" inkscape:export-filename="../../png/minimize/minimize_3.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)" sodipodi:docname="minimize_3.svg" fill="#f0fc52">
|
||||
<sodipodi:namedview id="namedview4251" pagecolor="#505050" bordercolor="#ffffff" borderopacity="1" inkscape:showpageshadow="0" inkscape:pageopacity="0" inkscape:pagecheckerboard="1" inkscape:deskcolor="#505050" inkscape:document-units="mm" showgrid="false" inkscape:zoom="5.6568543" inkscape:cx="31.643028" inkscape:cy="18.384776" inkscape:window-width="1260" inkscape:window-height="724" inkscape:window-x="10" inkscape:window-y="66" inkscape:window-maximized="1" inkscape:current-layer="layer1"/>
|
||||
<defs id="defs4246"/>
|
||||
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
|
||||
<path id="mdi-close-normal" style="fill: #f0fc52;fill-rule:evenodd;stroke-width:0.264583;paint-order:normal;fill-opacity:1" d="M 4.2333333 0 A 4.2333331 4.2333331 0 0 0 0 4.2333333 A 4.2333331 4.2333331 0 0 0 4.2333333 8.4666667 A 4.2333331 4.2333331 0 0 0 8.4666667 4.2333333 A 4.2333331 4.2333331 0 0 0 4.2333333 0 z M 1.6810343 3.8137207 L 6.7856323 3.8137207 C 6.98317 3.8137207 7.1447835 3.9997533 7.1447835 4.2276489 L 7.1447835 4.2390177 C 7.1447835 4.4669017 6.98317 4.652946 6.7856323 4.652946 L 1.6810343 4.652946 C 1.4834557 4.652946 1.3218831 4.4669017 1.3218831 4.2390177 L 1.3218831 4.2276489 C 1.3218831 3.9997533 1.4834557 3.8137207 1.6810343 3.8137207 z "/>
|
||||
<path style="fill: #f0fc52;fill-opacity:1;stroke-width:0.264583" d="M 10.768947,5.8246909 10.743132,3.2134246" id="path7007"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2 KiB |
1
dot_config/awesome/themes/catppuccin/titlebar/ontop.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0,0,256,256"><g fill="#6394ed" fill-rule="evenodd" stroke="none" stroke-width="0.26458" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="translate(0,0.00001) scale(30.23622,30.23622)"><g id="layer1"><circle cx="4.23333" cy="4.23333" r="4.23333" id="mdi-close-normal"></circle></g></g></g></svg>
|
After Width: | Height: | Size: 604 B |
|
@ -0,0 +1 @@
|
|||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0,0,256,256"><g fill="#404358" fill-rule="evenodd" stroke="none" stroke-width="0.26458" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="translate(0,0.00001) scale(30.23622,30.23622)"><g id="layer1"><circle cx="4.23333" cy="4.23333" r="4.23333" id="mdi-close-normal"></circle></g></g></g></svg>
|
After Width: | Height: | Size: 604 B |
85
dot_config/awesome/ui/info-panel/calendar.lua
Normal file
|
@ -0,0 +1,85 @@
|
|||
local wibox = require("wibox")
|
||||
local beautiful = require("beautiful")
|
||||
local helpers = require("helpers")
|
||||
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
local theme = beautiful.get()
|
||||
|
||||
-- Creating Calendar
|
||||
----------------------
|
||||
|
||||
-- copied from awesome doc and adjusted a bit
|
||||
local styles = {}
|
||||
|
||||
styles.month = { bg_color = theme.color.surface0 }
|
||||
styles.normal = {
|
||||
bg_color = theme.color.surface0,
|
||||
padding = dpi(6),
|
||||
fg_color = theme.color.subtext1,
|
||||
}
|
||||
styles.focus = {
|
||||
fg_color = theme.color.yellow,
|
||||
padding = dpi(6),
|
||||
markup = function(t)
|
||||
return "<b>" .. t .. "</b>"
|
||||
end,
|
||||
}
|
||||
styles.header = {
|
||||
fg_color = theme.color.blue,
|
||||
markup = function(t)
|
||||
return "<b>" .. t .. "</b>"
|
||||
end,
|
||||
}
|
||||
styles.weekday = {
|
||||
fg_color = theme.color.subtext1,
|
||||
markup = function(t)
|
||||
local f = helpers.ui.set_font("16")
|
||||
return '<span font_desc="' .. f .. '">' .. t .. "</span>"
|
||||
end,
|
||||
}
|
||||
|
||||
-- The Function
|
||||
local function decorate_cell(widget, flag)
|
||||
if flag == "monthheader" and not styles.monthheader then
|
||||
flag = "header"
|
||||
end
|
||||
|
||||
local props = styles[flag] or {}
|
||||
|
||||
if props.markup and widget.get_text and widget.set_markup then
|
||||
widget:set_markup(props.markup(widget:get_text()))
|
||||
end
|
||||
|
||||
-- Change bg color for weekends
|
||||
local ret = wibox.widget({
|
||||
{
|
||||
widget,
|
||||
margins = props.padding,
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
fg = props.fg_color,
|
||||
bg = props.bg_color,
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
local calendar = wibox.widget({
|
||||
date = os.date("*t"),
|
||||
font = helpers.ui.set_font("14"),
|
||||
fn_embed = decorate_cell,
|
||||
widget = wibox.widget.calendar.month,
|
||||
})
|
||||
|
||||
return wibox.widget({
|
||||
nil,
|
||||
{
|
||||
nil,
|
||||
calendar,
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.horizontal,
|
||||
},
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.vertical,
|
||||
})
|
121
dot_config/awesome/ui/info-panel/init.lua
Normal file
|
@ -0,0 +1,121 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
local wibox = require("wibox")
|
||||
local beautiful = require("beautiful")
|
||||
local rubato = require("lib.rubato")
|
||||
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
local theme = beautiful.get()
|
||||
|
||||
-- Var
|
||||
local width = dpi(410)
|
||||
local height = awful.screen.focused().geometry.height - dpi(100)
|
||||
|
||||
-- Helper
|
||||
-----------
|
||||
|
||||
local function round_widget(radius)
|
||||
return function(cr, w, h)
|
||||
gears.shape.rounded_rect(cr, w, h, radius)
|
||||
end
|
||||
end
|
||||
|
||||
local function box_widget(widgets, _width, _height)
|
||||
return wibox.widget({
|
||||
{
|
||||
{
|
||||
widgets,
|
||||
margins = dpi(16),
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
forced_width = dpi(_width),
|
||||
forced_height = dpi(_height),
|
||||
shape = round_widget(8),
|
||||
bg = theme.bg_focus, --for widget Rounded and Border
|
||||
widget = wibox.container.background,
|
||||
},
|
||||
margins = { left = dpi(20), right = dpi(20) },
|
||||
widget = wibox.container.margin,
|
||||
})
|
||||
end
|
||||
|
||||
-- Get widgets
|
||||
local weather_widget = require("ui.info-panel.weather")
|
||||
local profile_widget = require("ui.info-panel.profile")
|
||||
|
||||
local calendar_widget = require("ui.info-panel.calendar")
|
||||
local music_widget = require("ui.info-panel.music-player")
|
||||
|
||||
-- Combine some widgets
|
||||
local weather = box_widget(weather_widget, 380, 180)
|
||||
local profile = box_widget(profile_widget, 380, 210)
|
||||
local calendar = box_widget(calendar_widget, 380, 340)
|
||||
|
||||
-- Sidebar
|
||||
local sidebar = wibox({
|
||||
visible = false,
|
||||
ontop = true,
|
||||
width = width,
|
||||
height = height,
|
||||
y = dpi(60),
|
||||
bg = theme.bg_normal,
|
||||
border_width = theme.border_width * 2,
|
||||
border_color = theme.border_normal,
|
||||
})
|
||||
|
||||
-- Sidebar widget setup
|
||||
sidebar:setup({
|
||||
{
|
||||
profile,
|
||||
music_widget,
|
||||
weather,
|
||||
calendar,
|
||||
spacing = dpi(20),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
margins = { top = dpi(20), bottom = dpi(20) },
|
||||
widget = wibox.container.margin,
|
||||
})
|
||||
|
||||
-- Slide animation
|
||||
local slide = rubato.timed({
|
||||
pos = awful.screen.focused().geometry.x - sidebar.width,
|
||||
rate = 60,
|
||||
intro = 0.2,
|
||||
duration = 0.4,
|
||||
subscribed = function(pos)
|
||||
sidebar.x = awful.screen.focused().geometry.x + pos
|
||||
end,
|
||||
})
|
||||
|
||||
-- Timer of sidebar's death
|
||||
sidebar.timer = gears.timer({
|
||||
timeout = 0.5,
|
||||
single_shot = true,
|
||||
callback = function()
|
||||
sidebar.visible = not sidebar.visible
|
||||
end,
|
||||
})
|
||||
|
||||
sidebar.shape = function(cr, w, h) --Rounded Corners
|
||||
gears.shape.rounded_rect(cr, w, h, 14)
|
||||
end
|
||||
|
||||
-- Toggle function
|
||||
sidebar.toggle = function()
|
||||
if sidebar.visible then
|
||||
slide.target = awful.screen.focused().geometry.x - sidebar.width
|
||||
sidebar.timer:start()
|
||||
else
|
||||
awesome.emit_signal("widget::update_uptime")
|
||||
slide.target = awful.screen.focused().geometry.x + dpi(20)
|
||||
sidebar.visible = not sidebar.visible
|
||||
end
|
||||
end
|
||||
|
||||
-- Get signal to execute the function (if that makes sense)
|
||||
awesome.connect_signal("sidebar::toggle", function()
|
||||
sidebar.toggle()
|
||||
end)
|
||||
|
||||
return sidebar
|
256
dot_config/awesome/ui/info-panel/music-player.lua
Normal file
|
@ -0,0 +1,256 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
local beautiful = require("beautiful")
|
||||
local wibox = require("wibox")
|
||||
local helpers = require("helpers")
|
||||
local playerctl_daemon = require("signals.playerctl")
|
||||
local config = require("config")
|
||||
|
||||
local theme = beautiful.get()
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
|
||||
---- Music Player
|
||||
---- ~~~~~~~~~~~~
|
||||
|
||||
local music_text = wibox.widget({
|
||||
font = helpers.ui.set_font("Medium 10"),
|
||||
valign = "center",
|
||||
widget = wibox.widget.textbox,
|
||||
})
|
||||
|
||||
local music_art = wibox.widget({
|
||||
image = theme.music,
|
||||
resize = true,
|
||||
widget = wibox.widget.imagebox,
|
||||
})
|
||||
|
||||
local music_art_container = wibox.widget({
|
||||
music_art,
|
||||
forced_height = dpi(200),
|
||||
forced_width = dpi(200),
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
|
||||
local filter_color = {
|
||||
type = "linear",
|
||||
from = { 0, 0 },
|
||||
to = { 0, 160 },
|
||||
stops = { { 0, theme.color.surface0 .. "cc" }, { 1, theme.color.surface0 } },
|
||||
}
|
||||
|
||||
local music_art_filter = wibox.widget({
|
||||
{
|
||||
bg = filter_color,
|
||||
forced_height = dpi(120),
|
||||
forced_width = dpi(120),
|
||||
widget = wibox.container.background,
|
||||
},
|
||||
direction = "east",
|
||||
widget = wibox.container.rotate,
|
||||
})
|
||||
|
||||
local music_title = wibox.widget({
|
||||
font = helpers.ui.set_font("Regular 13"),
|
||||
valign = "center",
|
||||
widget = wibox.widget.textbox,
|
||||
})
|
||||
|
||||
local music_artist = wibox.widget({
|
||||
font = helpers.ui.set_font("Bold 16"),
|
||||
valign = "center",
|
||||
widget = wibox.widget.textbox,
|
||||
})
|
||||
|
||||
--- Volume Control
|
||||
local function volume_control()
|
||||
local volume_bar = wibox.widget({
|
||||
max_value = 100,
|
||||
value = 100,
|
||||
bar_height = dpi(12),
|
||||
bar_width = dpi(4),
|
||||
shape = helpers.ui.rrect(6),
|
||||
bar_shape = helpers.ui.rrect(6),
|
||||
color = theme.color.blue,
|
||||
background_color = theme.color.surface0,
|
||||
border_width = 0,
|
||||
widget = wibox.widget.progressbar,
|
||||
})
|
||||
|
||||
-- Update bar
|
||||
local function set_slider_value(_, volume)
|
||||
volume_bar.value = volume * 100
|
||||
end
|
||||
|
||||
playerctl_daemon:connect_signal("volume", set_slider_value)
|
||||
|
||||
volume_bar:connect_signal("button::press", function()
|
||||
playerctl_daemon:disconnect_signal("volume", set_slider_value)
|
||||
end)
|
||||
|
||||
volume_bar:connect_signal("button::release", function()
|
||||
playerctl_daemon:connect_signal("volume", set_slider_value)
|
||||
end)
|
||||
|
||||
local volume = wibox.widget({
|
||||
volume_bar,
|
||||
direction = "east",
|
||||
widget = wibox.container.rotate,
|
||||
})
|
||||
|
||||
volume:buttons(gears.table.join(
|
||||
-- Scroll - Increase or decrease volume
|
||||
awful.button({}, 4, function()
|
||||
awful.spawn.with_shell("playerctl volume 0.05+")
|
||||
end),
|
||||
|
||||
awful.button({}, 5, function()
|
||||
awful.spawn.with_shell("playerctl volume 0.05-")
|
||||
end)
|
||||
))
|
||||
|
||||
return volume
|
||||
end
|
||||
|
||||
-- Player's Button
|
||||
local toggle = wibox.widget.textbox()
|
||||
toggle.font = helpers.ui.set_font("26")
|
||||
|
||||
toggle:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
playerctl_daemon:play_pause()
|
||||
end)))
|
||||
|
||||
local next = wibox.widget.textbox()
|
||||
next.font = helpers.ui.set_font("26")
|
||||
next.markup = config.icons.music.next
|
||||
|
||||
next:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
playerctl_daemon:next()
|
||||
end)))
|
||||
|
||||
local back = wibox.widget.textbox()
|
||||
back.font = helpers.ui.set_font("26")
|
||||
back.markup = config.icons.music.prev
|
||||
|
||||
back:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
playerctl_daemon:previous()
|
||||
end)))
|
||||
|
||||
local function music()
|
||||
return wibox.widget({
|
||||
{
|
||||
{
|
||||
music_art_container,
|
||||
music_art_filter,
|
||||
layout = wibox.layout.stack,
|
||||
},
|
||||
{
|
||||
{
|
||||
{
|
||||
music_text,
|
||||
helpers.ui.vertical_pad(dpi(15)),
|
||||
{
|
||||
|
||||
{
|
||||
widget = wibox.container.scroll.horizontal,
|
||||
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
||||
fps = 60,
|
||||
speed = 75,
|
||||
music_artist,
|
||||
},
|
||||
{
|
||||
widget = wibox.container.scroll.horizontal,
|
||||
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
||||
fps = 60,
|
||||
speed = 75,
|
||||
music_title,
|
||||
},
|
||||
forced_width = dpi(170),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
nil,
|
||||
{
|
||||
{
|
||||
back,
|
||||
toggle,
|
||||
next,
|
||||
spacing = dpi(25),
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
},
|
||||
forced_height = dpi(70),
|
||||
top = dpi(10),
|
||||
bottom = dpi(10),
|
||||
right = dpi(10),
|
||||
left = dpi(115),
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.vertical,
|
||||
},
|
||||
top = dpi(9),
|
||||
bottom = dpi(9),
|
||||
left = dpi(10),
|
||||
right = dpi(10),
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
layout = wibox.layout.stack,
|
||||
},
|
||||
forced_width = dpi(350),
|
||||
shape = helpers.ui.prrect(8, false, true, true, false),
|
||||
bg = theme.color.surface0,
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
end
|
||||
|
||||
local music_widget = wibox.widget({
|
||||
{
|
||||
{
|
||||
music(),
|
||||
{
|
||||
volume_control(),
|
||||
margins = { top = dpi(0), bottom = dpi(0), left = dpi(10), right = dpi(10) },
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
layout = wibox.layout.align.horizontal,
|
||||
},
|
||||
forced_height = dpi(150),
|
||||
bg = theme.color.base,
|
||||
shape = helpers.ui.rrect(8),
|
||||
widget = wibox.container.background,
|
||||
},
|
||||
left = dpi(20),
|
||||
right = dpi(10),
|
||||
color = "#FF000000",
|
||||
widget = wibox.container.margin,
|
||||
})
|
||||
|
||||
--- playerctl
|
||||
--- -------------
|
||||
playerctl_daemon:connect_signal("metadata", function(_, title, artist, album_path, _, _, _)
|
||||
if title == "" then
|
||||
title = "Nothing Playing"
|
||||
end
|
||||
if artist == "" then
|
||||
artist = "Nothing Playing"
|
||||
end
|
||||
if album_path == "" then
|
||||
album_path = theme.music
|
||||
end
|
||||
|
||||
music_art:set_image(gears.surface.load_uncached(album_path))
|
||||
music_title:set_markup_silently(helpers.ui.colorize_text(title, theme.color.subtext1))
|
||||
music_artist:set_markup_silently(helpers.ui.colorize_text(artist, theme.color.blue))
|
||||
end)
|
||||
|
||||
playerctl_daemon:connect_signal("playback_status", function(_, playing, _)
|
||||
if playing then
|
||||
music_text:set_markup_silently(helpers.ui.colorize_text("Now Playing", theme.color.overlay0))
|
||||
toggle.markup = helpers.ui.colorize_text(config.icons.music.pause, theme.color.blue)
|
||||
else
|
||||
music_text:set_markup_silently(helpers.ui.colorize_text("Music", theme.color.overlay0))
|
||||
toggle.markup = helpers.ui.colorize_text(config.icons.music.play, theme.color.blue)
|
||||
end
|
||||
end)
|
||||
|
||||
return music_widget
|
116
dot_config/awesome/ui/info-panel/player.lua
Normal file
|
@ -0,0 +1,116 @@
|
|||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
local wibox = require("wibox")
|
||||
local beautiful = require("beautiful")
|
||||
local helpers = require("helpers")
|
||||
local config = require("config")
|
||||
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
|
||||
-- Make Widgets
|
||||
-----------------
|
||||
|
||||
-- Song's Title
|
||||
local title = wibox.widget.textbox()
|
||||
title.font = helpers.ui.set_font("Medium 16")
|
||||
title.halign = "left"
|
||||
title.valign = "bottom"
|
||||
|
||||
-- Song's Artist
|
||||
local artist = wibox.widget.textbox()
|
||||
artist.font = helpers.ui.set_font("Regular 16")
|
||||
artist.halign = "left"
|
||||
artist.valign = "bottom"
|
||||
|
||||
-- Song's Length
|
||||
local length = wibox.widget.textbox()
|
||||
length.font = helpers.ui.set_font("Regular 14")
|
||||
length.halign = "center"
|
||||
length.valign = "center"
|
||||
|
||||
-- Player's Button
|
||||
local toggle = wibox.widget.textbox()
|
||||
toggle.font = helpers.ui.set_font("26")
|
||||
|
||||
toggle:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
awful.spawn("mpc toggle", false)
|
||||
|
||||
if toggle.markup:match("") then
|
||||
toggle.markup = config.icons.music.play
|
||||
else
|
||||
toggle.markup = config.icons.music.pause
|
||||
end
|
||||
end)))
|
||||
|
||||
local next = wibox.widget.textbox()
|
||||
next.font = helpers.ui.set_font("26")
|
||||
next.markup = config.icons.music.next
|
||||
|
||||
next:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
awful.spawn("mpc next", false)
|
||||
end)))
|
||||
|
||||
local back = wibox.widget.textbox()
|
||||
back.font = helpers.ui.set_font("26")
|
||||
back.markup = config.icons.music.prev
|
||||
|
||||
back:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
awful.spawn("mpc prev", false)
|
||||
end)))
|
||||
|
||||
-- Get data
|
||||
awesome.connect_signal("signal::player", function(t, a, l, s)
|
||||
if not s:match("playing") then
|
||||
toggle.markup = config.icons.music.play
|
||||
else
|
||||
toggle.markup = config.icons.music.pause
|
||||
end
|
||||
|
||||
title.markup = t
|
||||
artist.markup = a
|
||||
length.markup = l
|
||||
end)
|
||||
|
||||
-- Grouping Widgets
|
||||
---------------------
|
||||
|
||||
local buttons = wibox.widget({
|
||||
back,
|
||||
toggle,
|
||||
next,
|
||||
spacing = dpi(11),
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
})
|
||||
|
||||
return wibox.widget({
|
||||
{
|
||||
nil,
|
||||
{
|
||||
title,
|
||||
artist,
|
||||
spacing = dpi(12),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.vertical,
|
||||
},
|
||||
{
|
||||
nil,
|
||||
nil,
|
||||
{
|
||||
length,
|
||||
{
|
||||
nil,
|
||||
buttons,
|
||||
expand = "none",
|
||||
layout = wibox.layout.align.horizontal,
|
||||
},
|
||||
spacing = dpi(6),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
top = dpi(30),
|
||||
bottom = 0,
|
||||
layout = wibox.container.margin,
|
||||
},
|
||||
layout = wibox.layout.flex.horizontal,
|
||||
})
|
179
dot_config/awesome/ui/info-panel/profile.lua
Normal file
|
@ -0,0 +1,179 @@
|
|||
local awful = require("awful")
|
||||
local wibox = require("wibox")
|
||||
local gears = require("gears")
|
||||
local beautiful = require("beautiful")
|
||||
local helpers = require("helpers")
|
||||
local config = require("config")
|
||||
|
||||
local theme = beautiful.get()
|
||||
local dpi = beautiful.xresources.apply_dpi
|
||||
|
||||
local os_user = os.getenv("USER")
|
||||
|
||||
if not os_user then
|
||||
os_user = "user"
|
||||
end
|
||||
|
||||
-- Create Widgets
|
||||
-------------------
|
||||
|
||||
-- Pfp
|
||||
local pfp = wibox.widget.imagebox()
|
||||
pfp.image = require("config").theme.pfp
|
||||
pfp.clip_shape = gears.shape.circle
|
||||
pfp.forced_width = dpi(130)
|
||||
pfp.forced_height = dpi(130)
|
||||
|
||||
-- User
|
||||
local user = wibox.widget.textbox()
|
||||
user.font = helpers.ui.set_font("SemiBold 18")
|
||||
user.halign = "left"
|
||||
user.markup = helpers.ui.colorize_text(os_user, theme.fg_normal)
|
||||
|
||||
-- Hostname
|
||||
local hostname = wibox.widget.textbox()
|
||||
hostname.font = helpers.ui.set_font("Regular 14")
|
||||
hostname.halign = "left"
|
||||
|
||||
awful.spawn.easy_async_with_shell("hostnamectl --static", function(stdout)
|
||||
hostname.markup = helpers.ui.colorize_text("@" .. tostring(stdout), theme.color.lavender)
|
||||
end)
|
||||
|
||||
-- Battery
|
||||
local uptimeosd = wibox.widget.textbox()
|
||||
uptimeosd.font = helpers.ui.set_font("12")
|
||||
uptimeosd.halign = "center"
|
||||
|
||||
-- Get data 4 widgets!
|
||||
awesome.connect_signal("signal::uptime", function(uptime)
|
||||
uptimeosd.markup = helpers.ui.colorize_text("up " .. uptime, theme.fg_normal)
|
||||
end)
|
||||
|
||||
-- Spacing horizontally
|
||||
local shutdown = wibox.widget({
|
||||
{
|
||||
{
|
||||
font = helpers.ui.set_font("30"),
|
||||
markup = helpers.ui.colorize_text(config.icons.power, theme.color.red),
|
||||
halign = "center",
|
||||
valign = "center",
|
||||
widget = wibox.widget.textbox,
|
||||
},
|
||||
top = dpi(9),
|
||||
bottom = dpi(9),
|
||||
left = dpi(11),
|
||||
right = dpi(11),
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
bg = theme.color.surface1,
|
||||
shape = helpers.ui.rrect(8),
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
|
||||
local reboot = wibox.widget({
|
||||
{
|
||||
{
|
||||
font = helpers.ui.set_font("30"),
|
||||
markup = helpers.ui.colorize_text(config.icons.restart, theme.color.blue),
|
||||
halign = "center",
|
||||
valign = "center",
|
||||
widget = wibox.widget.textbox,
|
||||
},
|
||||
top = dpi(9),
|
||||
bottom = dpi(9),
|
||||
left = dpi(11),
|
||||
right = dpi(11),
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
bg = theme.color.surface1,
|
||||
shape = helpers.ui.rrect(8),
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
shutdown:connect_signal("mouse::enter", function()
|
||||
shutdown.bg = theme.color.surface2
|
||||
end)
|
||||
|
||||
shutdown:connect_signal("mouse::leave", function()
|
||||
shutdown.bg = theme.color.surface1
|
||||
end)
|
||||
|
||||
reboot:connect_signal("mouse::enter", function()
|
||||
reboot.bg = theme.color.surface2
|
||||
end)
|
||||
|
||||
reboot:connect_signal("mouse::leave", function()
|
||||
reboot.bg = theme.color.surface1
|
||||
end)
|
||||
|
||||
shutdown:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
awesome.emit_signal("module::exit_screen:show")
|
||||
end)))
|
||||
|
||||
reboot:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
awful.spawn.with_shell("loginctl reboot")
|
||||
end)))
|
||||
|
||||
-- Grouping widgets
|
||||
---------------------
|
||||
local buttons = wibox.widget({
|
||||
{
|
||||
reboot,
|
||||
shutdown,
|
||||
spacing = dpi(8),
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
},
|
||||
top = dpi(10),
|
||||
left = dpi(57),
|
||||
widget = wibox.container.margin,
|
||||
})
|
||||
|
||||
local name = wibox.widget({
|
||||
{
|
||||
user,
|
||||
hostname,
|
||||
spacing = dpi(4),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
left = 0,
|
||||
widget = wibox.container.margin,
|
||||
})
|
||||
|
||||
local uptimebox = wibox.widget({
|
||||
{
|
||||
{
|
||||
uptimeosd,
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
top = dpi(3),
|
||||
bottom = dpi(3),
|
||||
widget = wibox.container.margin,
|
||||
},
|
||||
bg = theme.color.surface0,
|
||||
shape = helpers.ui.rrect(7),
|
||||
widget = wibox.container.background,
|
||||
})
|
||||
|
||||
-- The Profile Widget
|
||||
return wibox.widget({
|
||||
{
|
||||
{
|
||||
pfp,
|
||||
uptimebox,
|
||||
spacing = dpi(20),
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
{
|
||||
{
|
||||
name,
|
||||
buttons,
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
},
|
||||
top = dpi(30),
|
||||
layout = wibox.container.margin,
|
||||
},
|
||||
spacing = dpi(30),
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
})
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#dfdfdf" d="M 1,8 C 1,11.866 4.134,15 8,15 9.9252,15 11.68,14.117 13,12.715 12.482,12.847 12.034,13 11.5,13 7.9101,13 5,10.09 5,6.5 5,4.267 6.1294,2.19 8,1 4.1145,1 1,4.134 1,8 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 286 B |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#dfdfdf" d="M 6.9999991,-6.4999999e-8 V 2.085937 a 6,6 0 0 1 1,-0.085937 6,6 0 0 1 1,0.08984 V -6.4999999e-8 Z M 3.0507801,1.6367189 1.6367181,3.050781 3.1132801,4.527344 a 6,6 0 0 1 1.416016,-1.41211 z m 9.8984379,0 -1.476563,1.4765621 a 6,6 0 0 1 1.41211,1.416016 L 14.36328,3.050781 Z M 7.9999991,3 a 5,5 0 0 0 -5,5 5,5 0 0 0 5,5 A 5,5 0 0 0 12.999999,8 5,5 0 0 0 7.9999991,3 Z m -8,4 v 2 h 2.085937 a 6,6 0 0 1 -0.08594,-1 6,6 0 0 1 0.08984,-1 z M 13.914061,7 a 6,6 0 0 1 0.08594,1 6,6 0 0 1 -0.08984,1 h 2.08984 V 7 Z m -10.7988279,4.470703 -1.478515,1.478516 1.414062,1.414062 1.476563,-1.476562 a 6,6 0 0 1 -1.41211,-1.416016 z m 9.7714849,0.002 a 6,6 0 0 1 -1.416016,1.41211 l 1.478516,1.478515 1.414062,-1.414062 z M 6.9999991,13.910156 V 16 h 2 v -2.085938 a 6,6 0 0 1 -1,0.08594 6,6 0 0 1 -1,-0.08984 z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 921 B |
|
@ -0,0 +1,8 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<defs>
|
||||
<style id="current-color-scheme" type="text/css">
|
||||
.ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor" class="ColorScheme-Text" d="M 7.736,0.9962 C 4.9732,1.0977 2.4273,2.8008 1.4235,5.5587 0.89934,6.999 0.87974,8.501 1.2653,9.875 1.669,8.557 2.7497,7.542 4.1032,7.192 4.2732,6.9013 4.4747,6.6319 4.693,6.3791 4.7035,5.6688 4.8234,4.9505 5.0797,4.2462 5.5939,2.8336 6.5542,1.7379 7.736,0.9962 Z M 8.086,5.7502 C 6.5323,5.7502 5.2096,6.7011 4.6403,8.047 3.1944,8.262 2.0856,9.494 2.0856,11 2.0856,12.657 3.4287,14 5.0856,14 H 11.461 C 12.91,14 14.086,12.825 14.086,11.375 14.086,10.028 13.073,8.924 11.765,8.774 11.424,7.054 9.906,5.7502 8.086,5.7502 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 966 B |
|
@ -0,0 +1,8 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<defs>
|
||||
<style id="current-color-scheme" type="text/css">
|
||||
.ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor" class="ColorScheme-Text" d="M 7,0 V 2.0859375 A 6,6 0 0 1 8,2 6,6 0 0 1 9,2.089844 V 0 Z M 3.0507812,1.6367188 1.6367188,3.0507812 3.1132812,4.5273438 A 6,6 0 0 1 4.5292969,3.1152344 Z m 9.8984378,0 -1.476563,1.4765624 a 6,6 0 0 1 1.41211,1.4160157 L 14.363281,3.0507812 Z M 8,3 A 5,5 0 0 0 3,8 5,5 0 0 0 3.1464844,9.175781 c 0.0073,-0.0017 0.014172,-0.0042 0.021484,-0.0059 C 3.5797152,6.827355 5.5442774,5 8,5 c 2.072335,0.0018 3.855484,1.320297 4.595703,3.212891 0.134007,0.03469 0.263609,0.07922 0.392578,0.125 A 5,5 0 0 0 13,8 5,5 0 0 0 8,3 Z m 0,3 a 4,4 0 0 0 -4,4 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 H 11.5 12 V 15.96094 A 3.5,3.5 0 0 0 15,12.5 3.5,3.5 0 0 0 11.875,9.021484 4,4 0 0 0 8,6 Z M 0,7 V 9 H 2.0859375 A 6,6 0 0 1 2,8 6,6 0 0 1 2.0898438,7 Z M 13.914062,7 A 6,6 0 0 1 14,8 6,6 0 0 1 13.910156,9 H 16 V 7 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#dfdfdf" d="M 13.5,16 C 14.88,16 16,14.88 16,13.5 16,12.23 15.04,11.19 13.81,11.03 13.41,9.86 12.31,9 11,9 9.69,9 8.6,9.86 8.19,11.03 6.96,11.19 6,12.23 6,13.5 6,14.88 7.12,16 8.5,16"/>
|
||||
<path style="fill:#dfdfdf" d="M 8,1 C 4.1145,0.999 1,4.134 1,8 1,10.841 2.6956,13.28 5.127,14.377 5.0526,14.095 5,13.804 5,13.5 5,12.309 5.6566,11.348 6.5957,10.758 5.6043,9.6168 5,8.1303 5,6.5 5.0014,4.267 6.1294,2.19 8,1 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 519 B |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#dfdfdf" d="M 7 0 L 7 2.0859375 A 6 6 0 0 1 8 2 A 6 6 0 0 1 9 2.0898438 L 9 0 L 7 0 z M 3.0507812 1.6367188 L 1.6367188 3.0507812 L 3.1132812 4.5273438 A 6 6 0 0 1 4.5292969 3.1152344 L 3.0507812 1.6367188 z M 12.949219 1.6367188 L 11.472656 3.1132812 A 6 6 0 0 1 12.884766 4.5292969 L 14.363281 3.0507812 L 12.949219 1.6367188 z M 8 3 A 5 5 0 0 0 3 8 A 5 5 0 0 0 5.2949219 12.205078 C 5.713317 11.305716 6.5416242 10.637052 7.5234375 10.322266 C 8.1696152 9.0017204 9.4227843 8 11 8 C 11.732994 8 12.393594 8.2229024 12.958984 8.5878906 A 5 5 0 0 0 13 8 A 5 5 0 0 0 8 3 z M 0 7 L 0 9 L 2.0859375 9 A 6 6 0 0 1 2 8 A 6 6 0 0 1 2.0898438 7 L 0 7 z M 13.914062 7 A 6 6 0 0 1 14 8 A 6 6 0 0 1 13.910156 9 L 16 9 L 16 7 L 13.914062 7 z M 11 9 C 9.69 9 8.5994531 9.8592969 8.1894531 11.029297 C 6.9594531 11.189297 6 12.23 6 13.5 C 6 14.88 7.12 16 8.5 16 L 13.5 16 C 14.88 16 16 14.88 16 13.5 C 16 12.23 15.040547 11.189297 13.810547 11.029297 C 13.410547 9.8592969 12.31 9 11 9 z M 3.1152344 11.470703 L 1.6367188 12.949219 L 3.0507812 14.363281 L 4.5273438 12.886719 A 6 6 0 0 1 3.1152344 11.470703 z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="opacity:0.3;fill:#dfdfdf" d="M 2 1 C 1.446 1 1 1.446 1 2 C 1 2.554 1.446 3 2 3 L 8 3 C 8.554 3 9 2.554 9 2 C 9 1.446 8.554 1 8 1 L 2 1 z M 5 5 C 4.446 5 4 5.446 4 6 C 4 6.554 4.446 7 5 7 L 15 7 C 15.554 7 16 6.554 16 6 C 16 5.446 15.554 5 15 5 L 5 5 z M 1 9 C 0.446 9 0 9.446 0 10 C 0 10.554 0.446 11 1 11 L 12 11 C 12.554 11 13 10.554 13 10 C 13 9.446 12.554 9 12 9 L 1 9 z M 3 13 C 2.446 13 2 13.446 2 14 C 2 14.554 2.446 15 3 15 L 15 15 C 15.554 15 16 14.554 16 14 C 16 13.446 15.554 13 15 13 L 3 13 z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 607 B |
|
@ -0,0 +1,9 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<defs>
|
||||
<style id="current-color-scheme" type="text/css">
|
||||
.ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor" class="ColorScheme-Text" d="M 8,0 C 5.929,0 4.165,1.27 3.406,3.07 1.478,3.35 0,5 0,7 0,8.94 1.365,10.54 3.187,10.91 3.951,10.13 4.709,9.35 5.5,8.6 6.073,9.14 6.633,9.7 7.187,10.25 7.43,10.18 7.57,9.41 7.906,9.16 8.76,8.29 9.615,7.43 10.5,6.6 11.166,7.22 11.791,7.86 12.437,8.5 13.035,9.07 13.665,9.71 13.875,10.53 13.891,10.59 13.893,10.64 13.906,10.69 15.141,10.15 16,8.94 16,7.5 16,5.71 14.649,4.23 12.906,4.03 12.451,1.74 10.427,0 8,0 Z M 10.5,9.44 C 10.415,9.52 10.335,9.61 10.25,9.69 9.853,10.11 9.351,10.47 9.125,11 H 11.906 C 11.88,10.94 11.85,10.87 11.812,10.82 11.439,10.3 10.933,9.9 10.5,9.44 Z"/>
|
||||
<path style="fill:currentColor" class="ColorScheme-Highlight" d="M 10.5,8 10.156,8.34 8.75,9.75 C 8.297,10.2 8,10.81 8,11.5 8,12.87 9.125,14 10.5,14 11.875,14 13,12.87 13,11.5 13,10.81 12.703,10.2 12.25,9.75 L 10.844,8.34 Z M 5.5,10 5.156,10.34 3.75,11.75 C 3.297,12.2 3,12.81 3,13.5 3,14.87 4.125,16 5.5,16 6.875,16 8,14.87 8,13.5 8,12.81 7.703,12.2 7.25,11.75 L 5.844,10.34 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#dfdfdf" d="M 10,8 C 8.69,8 7.6,8.86 7.19,10.03 5.96,10.19 5,11.23 5,12.5 5,13.88 6.12,15 7.5,15 H 12.5 C 13.88,15 15,13.88 15,12.5 15,11.23 14.04,10.19 12.81,10.03 12.41,8.86 11.31,8 10,8 Z"/>
|
||||
<path style="fill:#dfdfdf" d="M 8,0 C 5.93,0 4.1702,1.2705 3.4102,3.0605 1.4802,3.3505 0,4.99 0,7 0,9.21 1.79,11 4,11 H 4.3945 C 4.8388,10.204 5.6169,9.6129 6.5234,9.3223 7.1696,8.0017 8.4228,7 10,7 11.573,7 12.83,7.9972 13.473,9.3203 13.983,9.4834 14.453,9.7437 14.848,10.08 15.551,9.4395 16,8.5242 16,7.5 16,5.7 14.65,4.2293 12.91,4.0293 12.45,1.7393 10.43,0 8,0 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 669 B |
|
@ -0,0 +1,8 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<defs>
|
||||
<style id="current-color-scheme" type="text/css">
|
||||
.ColorScheme-Text { color:#dfdfdf; } .ColorScheme-Highlight { color:#4285f4; } .ColorScheme-NeutralText { color:#ff9800; } .ColorScheme-PositiveText { color:#4caf50; } .ColorScheme-NegativeText { color:#f44336; }
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor" class="ColorScheme-Text" d="M 8,1 C 5.9289,1 4.1653,2.2679 3.4062,4.0625 1.4784,4.3491 0,5.9924 0,8 0,10.209 1.7909,12 4,12 H 4.4062 C 4.8601,11.199 5.6472,10.573 6.5312,10.313 7.151,8.99 8.506,7.974 10,8 11.908,7.969 13.582,9.485 13.875,11.344 14.018,11.389 14.144,11.435 14.281,11.5 15.312,10.891 16,9.784 16,8.5 16,6.7035 14.649,5.2313 12.906,5.0312 12.452,2.7379 10.427,1 8,1 Z M 10,9 C 8.688,9 7.595,9.858 7.188,11.031 5.9567,11.187 5,12.227 5,13.5 5,14.881 6.1193,16 7.5,16 H 13 C 14.105,16 15,15.105 15,14 15,12.895 14.105,12 13,12 13,10.343 11.657,9 10,9 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 982 B |
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
|
||||
<path style="fill:#ff9800" class="warning" d="M 7,6 V 10 L 7.25,12 H 8.75 L 9,10 V 6 Z M 7,13 V 15 H 9 V 13 Z"/>
|
||||
<path style="fill:#dfdfdf" d="M 8,0 C 5.93,0 4.17,1.27 3.41,3.06 1.48,3.35 0,5 0,7 0,9.21 1.79,11 4,11 H 6 V 5 H 10 V 11 H 12.5 C 14.43,11 16,9.43 16,7.5 16,5.7 14.65,4.23 12.91,4.03 12.45,1.74 10.43,0 8,0 Z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 411 B |