Compare commits

...

No commits in common. "main" and "fish-shell" have entirely different histories.

1005 changed files with 2064 additions and 117974 deletions

View file

@ -1,6 +0,0 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIAdvrnwZA6vH/0k4BbpJaxRE/WBrPHh/+FEz76PXX3zGkiu+ETcqKY10+
RX68z4fcbzxK3nWltb8k7TPjjgLgUkoAYJD7wGVp/v7tijhWcfyH5/sS+lF80ao=
=1IPu
-----END PGP MESSAGE-----

View file

@ -1,65 +0,0 @@
{{- $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

View file

@ -1,18 +0,0 @@
[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",
]

View file

@ -1,2 +0,0 @@
[packages.gh]
install = ["dlvhdr/gh-dash"]

View file

@ -1,34 +0,0 @@
[".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"

View file

@ -1,21 +0,0 @@
{{- 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 -}}

View file

@ -1,34 +0,0 @@
[".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"

View file

@ -1,34 +0,0 @@
[".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"

View file

@ -1,19 +0,0 @@
[".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"

View file

@ -1,21 +0,0 @@
{{- 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 -}}

View file

@ -1,21 +0,0 @@
{{- 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 -}}

View file

@ -1,36 +0,0 @@
{{- 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 -}}

View file

@ -1,67 +0,0 @@
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 }}

View file

@ -1,2 +0,0 @@
.bash_logout
.bash_profile

View file

@ -1,55 +0,0 @@
#!/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()

View file

@ -1,13 +0,0 @@
#!/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

View file

@ -1,6 +0,0 @@
#!/usr/bin/env bash
if command -v pacman-key &>/dev/null; then
sudo pacman-key --init
sudo pacman-key --populate archlinux
fi

View file

@ -1,12 +0,0 @@
{{- 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 -}}

View file

@ -1,8 +0,0 @@
{{- 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 -}}

View file

@ -1,7 +0,0 @@
{{- 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 -}}

View file

@ -1,146 +0,0 @@
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 = ' '

View file

@ -1,188 +0,0 @@
"$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
View file

@ -1 +1 @@
tags.*
Brewfile

View file

@ -1,21 +0,0 @@
#!/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 Normal file
View file

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<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.

View file

@ -1,83 +1,22 @@
# mar does dotfiles
# dotfiles
Welcome to my dotfiles :)
mar does dotfiles
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.
# post install
I apologize for the disgusting Chezmoi format - I resisted it for ages and then
things got complex enough that I needed it.
Set iTerm2 to use the preferences file, if applicable.
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
## tmux
```fish
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
tmux attach || tmux new -s main
```
`<ctrl-a I>` to install plugins.
### Arch
## sources
```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
[oh-my-zsh git](https://kapeli.com/cheat_sheets/Oh-My-Zsh_Git.docset/Contents/Resources/Documents/index)
yay -Syu
yay -S --needed - < ~/.config/packages/arch
[git-prevision](https://gist.github.com/TheCodeArtist/a90978ebca0ff6743036)
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`
[iTerm2 keymaps for tmux](https://web.archive.org/web/20230921160724/https://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/)

View file

@ -1,40 +0,0 @@
*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 -}}

View file

@ -1,435 +0,0 @@
# 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

View file

@ -1,105 +0,0 @@
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

View file

@ -1,3 +0,0 @@
return {
ui = require("helpers.ui"),
}

View file

@ -1,188 +0,0 @@
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

View file

@ -1,225 +0,0 @@
-------------------------------------------
-- @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

View file

@ -1,47 +0,0 @@
-------------------------------------------
-- @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

View file

@ -1,533 +0,0 @@
-------------------------------------------
-- @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

View file

@ -1,138 +0,0 @@
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

View file

@ -1,186 +0,0 @@
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)

View file

@ -1,9 +0,0 @@
local req = {
"better-resize",
"savefloats",
"exit-screen",
}
for _, x in pairs(req) do
require(... .. "." .. x)
end

View file

@ -1,372 +0,0 @@
--
-- 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

View file

@ -1,58 +0,0 @@
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

View file

@ -1,286 +0,0 @@
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)

View file

@ -1,63 +0,0 @@
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),
})

View file

@ -1,31 +0,0 @@
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

View file

@ -1,14 +0,0 @@
local req = {
"error_handling",
"layout",
"menu",
"wallpaper",
"bindings",
"custom_bindings",
"rules",
"tags",
}
for _, x in pairs(req) do
require(... .. "." .. x)
end

View file

@ -1,36 +0,0 @@
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)

View file

@ -1,107 +0,0 @@
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

View file

@ -1,87 +0,0 @@
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)

View file

@ -1,10 +0,0 @@
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)

View file

@ -1,26 +0,0 @@
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)

View file

@ -1,26 +0,0 @@
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")

View file

@ -1,20 +0,0 @@
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,
})

View file

@ -1,23 +0,0 @@
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,
})

View file

@ -1,14 +0,0 @@
local req = {
"volume",
"mic",
"cpu",
"mem",
"player",
"disk",
"uptime",
"playerctl",
}
for _, x in pairs(req) do
require("signals." .. x)
end

View file

@ -1,22 +0,0 @@
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,
})

View file

@ -1,29 +0,0 @@
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()

View file

@ -1,31 +0,0 @@
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()

View file

@ -1,17 +0,0 @@
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

View file

@ -1,16 +0,0 @@
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()

View file

@ -1,26 +0,0 @@
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()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -1,57 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

View file

@ -1,202 +0,0 @@
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

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 656 B

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 656 B

View file

@ -1,10 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 656 B

View file

@ -1,10 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 604 B

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 604 B

View file

@ -1,85 +0,0 @@
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,
})

View file

@ -1,121 +0,0 @@
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

View file

@ -1,256 +0,0 @@
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

View file

@ -1,116 +0,0 @@
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,
})

View file

@ -1,179 +0,0 @@
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,
})

View file

@ -1,3 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 286 B

View file

@ -1,3 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 921 B

View file

@ -1,8 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 966 B

View file

@ -1,8 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,4 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 519 B

View file

@ -1,3 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,3 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 607 B

View file

@ -1,9 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,4 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 669 B

View file

@ -1,8 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 982 B

View file

@ -1,4 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 411 B

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