script: refactor change-colortheme

This commit is contained in:
2025-10-18 02:50:22 +02:00
parent f7fe2b00b5
commit 6f8b7431f9
49 changed files with 360 additions and 1668 deletions

11
.kvantum/apply-color Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
kvantummanager --set catppuccin-mocha-"$colorName" || {
log_error "Failed to set kvantum theme to catppuccin-mocha-${colorName}"
exit 1
}
log_success "kvantum"

View File

@@ -1,12 +1,14 @@
#!/usr/bin/env python3
'''
refer to `find $dotfiles_path -type f -iname "apply-color"` for implementations.
- kvantum: kvantummanager --set catppuccin-mocha-"$flavor"
(a kvantum window will pop out if such theme is not installed)
- nwg-look: edit $HOME/.local/share/nwg-look/gsettings
nwg-look -a
nwg-look & manually confirm
nwg-look -> confirm (not implemented yet)
- eww: edit $HOME/.config/eww/eww.scss
eww reload
@@ -46,8 +48,7 @@ import argparse
from typing import Callable
FLAVOR_NAME_PLACEHOLDER = "<FLAVOR_NAME>"
FLAVOR_HEX_PLACEHOLDER = "<FLAVOR_HEX>"
SCRIPT_NAME = "apply-color"
PALETTES = {
@@ -69,178 +70,23 @@ PALETTES = {
},
}
CURRENT_DIR = Path(__file__).resolve().parent.resolve()
CONFIG_DIR = Path(__file__).resolve().parent.resolve().parent.resolve()
def replace_placeholders(file_path: Path, palette: dict[str, str], flavor: str):
print(f"Applying flavor {flavor} to {file_path}")
if not file_path.exists():
print(f"File {file_path} does not exist.")
raise FileNotFoundError(f"File {file_path} does not exist.")
with file_path.open('r') as file:
content = file.read()
content = content.replace(FLAVOR_NAME_PLACEHOLDER, flavor)
content = content.replace(FLAVOR_HEX_PLACEHOLDER, palette[flavor])
with file_path.open('w') as file:
file.write(content)
def copy_template(src: Path, dist_dir: Path | None) -> Path:
if dist_dir is None:
dist_dir = src.parent
dist = dist_dir / src.name.removesuffix('.template')
print(f"Copying {src} to {dist}")
if not dist_dir.exists():
print(f"Destination directory {dist_dir} does not exist.")
raise FileNotFoundError(f"Destination directory {dist_dir} does not exist.")
if not dist_dir.is_dir():
print(f"Destination {dist_dir} is not a directory.")
raise NotADirectoryError(f"Destination {dist_dir} is not a directory.")
if not src.exists():
print(f"Source file {src} does not exist.")
raise FileNotFoundError(f"Source file {src} does not exist.")
shutil.copyfile(src, dist, follow_symlinks=True)
return dist
def get_script_list() -> list[Path]:
scripts = []
# find -type f -iname "apply-color" $configDir
for item in CONFIG_DIR.rglob(SCRIPT_NAME):
if item.is_file() and os.access(item, os.X_OK):
scripts.append(item.resolve())
print(f"Found {len(scripts)} scripts to apply themes")
return scripts
def hex2rgb(hex_color: str) -> tuple[int, int, int]:
return tuple(int(hex_color[i:i + 2], 16) for i in (0, 2, 4)) # type: ignore
def _change_kvantum(_, flavor):
os.system(f'kvantummanager --set catppuccin-mocha-{flavor}')
# execute twice to ensure the theme is installed AND applied
os.system(f'kvantummanager --set catppuccin-mocha-{flavor}')
def _change_nwglook(_, flavor):
lines: list[str] = []
with Path.home().joinpath('.local', 'share', 'nwg-look', 'gsettings').open('r') as file:
content = file.read()
lines = content.splitlines()
for i, line in enumerate(lines):
if line.startswith('gtk-theme'):
lines[i] = f'gtk-theme=catppuccin-mocha-{flavor}-standard+default'
break
else:
lines.append(f'gtk-theme=catppuccin-mocha-{flavor}-standard+default')
with Path.home().joinpath('.local', 'share', 'nwg-look', 'gsettings').open('w') as file:
file.write('\n'.join(lines))
os.system('nwg-look -a')
os.system('nwg-look')
def _change_eww(palette: dict[str, str], flavor: str):
eww_template = Path.home().joinpath('.config', 'eww', 'eww.scss.template')
eww_dist = copy_template(eww_template, Path.home().joinpath('.config', 'eww'))
replace_placeholders(eww_dist, palette, flavor)
os.system('eww reload')
def _change_hypr(palette: dict[str, str], flavor: str):
hypr_template = Path.home().joinpath('.config', 'hypr', 'hyprland', 'colors.conf.template')
hypr_dist = copy_template(hypr_template, Path.home().joinpath('.config', 'hypr', 'hyprland'))
replace_placeholders(hypr_dist, palette, flavor)
os.system('hyprctl reload')
def _change_rofi(palette: dict[str, str], flavor: str):
rofi_template = Path.home().joinpath('.config', 'rofi', 'config.rasi.template')
rofi_dist = copy_template(rofi_template, Path.home().joinpath('.config', 'rofi'))
replace_placeholders(rofi_dist, palette, flavor)
def _change_waybar(palette: dict[str, str], flavor: str):
waybar_template = Path.home().joinpath('.config', 'waybar', 'style.css.template')
waybar_dist = copy_template(waybar_template, Path.home().joinpath('.config', 'waybar'))
replace_placeholders(waybar_dist, palette, flavor)
os.system('waybar-toggle restart')
def _change_ohmyposh(palette: dict[str, str], flavor: str):
posh_template = Path.home().joinpath('.config', 'posh_theme.omp.json.template')
posh_dist = copy_template(posh_template, Path.home().joinpath('.config'))
replace_placeholders(posh_dist, palette, flavor)
def _change_fastfetch(palette: dict[str, str], flavor: str):
fetch_template = Path.home().joinpath('.config', 'fish', 'post.d', 'fetch.fish.template')
fetch_dist = copy_template(fetch_template, Path.home().joinpath('.config', 'fish', 'post.d'))
replace_placeholders(fetch_dist, palette, flavor)
def _change_mako(palette: dict[str, str], flavor: str):
mako_template = Path.home().joinpath('.config', 'mako', 'config.template')
mako_dist = copy_template(mako_template, Path.home().joinpath('.config', 'mako'))
replace_placeholders(mako_dist, palette, flavor)
os.system('makoctl reload')
def _change_yazi(_, flavor):
yazi_template = CURRENT_DIR / '..' / '.yazi-themes' / f'catppuccin-mocha-{flavor}.toml'
yazi_dist = Path.home().joinpath('.config', 'yazi', 'theme.toml')
shutil.copyfile(yazi_template, yazi_dist, follow_symlinks=True)
print(f"Copied {yazi_template} to {yazi_dist}")
def _change_wlogout(palette: dict[str, str], flavor: str):
wlogout_template = Path.home().joinpath('.config', 'wlogout', 'style.css.template')
wlogout_dist = copy_template(wlogout_template, Path.home().joinpath('.config', 'wlogout'))
replace_placeholders(wlogout_dist, palette, flavor)
for icon_template in Path.home().joinpath('.config', 'wlogout', 'icons').glob('*.svg.template'):
icon_dist = copy_template(icon_template, Path.home().joinpath('.config', 'wlogout', 'icons'))
replace_placeholders(icon_dist, palette, flavor)
def _change_fuzzel(palette: dict[str, str], flavor: str):
fuzzel_template = Path.home().joinpath('.config', 'fuzzel', 'fuzzel.ini.template')
fuzzel_dist = copy_template(fuzzel_template, Path.home().joinpath('.config', 'fuzzel'))
replace_placeholders(fuzzel_dist, palette, flavor)
def _change_niri(palette: dict[str, str], flavor: str):
niri_template = Path.home().joinpath('.config', 'niri', 'config.kdl.template')
niri_dist = copy_template(niri_template, Path.home().joinpath('.config', 'niri'))
replace_placeholders(niri_dist, palette, flavor)
def _change_quickshell(palette: dict[str, str], flavor: str):
hex_color = palette[flavor]
os.system(f'qs ipc call colors setPrimary {hex_color}')
apply_theme_funcs: dict[str, Callable[[dict[str, str], str], None]] = {
'kvantum': _change_kvantum,
'nwg-look': _change_nwglook,
'eww': _change_eww,
'hypr': _change_hypr,
'rofi': _change_rofi,
'waybar': _change_waybar,
'oh-my-posh': _change_ohmyposh,
'fastfetch': _change_fastfetch,
'mako': _change_mako,
'yazi': _change_yazi,
'wlogout': _change_wlogout,
'fuzzel': _change_fuzzel,
'niri': _change_niri,
'quickshell': _change_quickshell,
}
def extract_color(image_path: str) -> str:
from colorthief import ColorThief
return "#{:02x}{:02x}{:02x}".format(*ColorThief(image_path).get_color(quality=10))
@@ -342,7 +188,10 @@ def main():
parser.add_argument('-f', '--flavor', type=str, help="Flavor to apply")
parser.add_argument('-c', '--color', type=str, help="Color to match from the palette")
parser.add_argument('arguments', nargs='*',
help="List of applications to change the color theme of, or !app to exclude an application. Available apps: " + ', '.join(apply_theme_funcs.keys()))
help="Any number of 'pattern' and '!pattern'. "
f"Initially all scripts with name {SCRIPT_NAME} under {CONFIG_DIR} (recursively) will be considered. "
f"If at least one pattern is given, only scripts that has any of the patterns in their path will be executed. "
"If a pattern is prefixed with '!', scripts that have that pattern in their path will be excluded.")
arguments = parser.parse_args()
@@ -371,51 +220,54 @@ def main():
flavor = pick_flavor(palette)
return flavor
def parse_apps() -> list[str]:
apps = set()
if not arguments.arguments:
apps = set(apply_theme_funcs.keys())
def parse_apps() -> tuple[set[str], set[str]]:
includes = set()
excludes = set()
for arg in arguments.arguments:
if arg.startswith('!'):
excludes.add(arg[1:])
else:
allExclude = True
for arg in arguments.arguments:
if arg[0] == '!':
continue
allExclude = False
if arg not in apply_theme_funcs:
print(f"Unknown app: {arg}. Available apps: {', '.join(apply_theme_funcs.keys())}")
sys.exit(1)
apps.add(arg)
# If all arguments are exclusions, start with all apps
if allExclude:
apps = set(apply_theme_funcs.keys())
for arg in arguments.arguments:
if arg[0] == '!':
print(f"Excluding app: {arg[1:]}")
app = arg[1:]
if app not in apply_theme_funcs:
print(f"Unknown app to exclude: {app}. Available apps: {', '.join(apply_theme_funcs.keys())}")
sys.exit(1)
apps.discard(app)
return list(apps)
includes.add(arg)
return includes, excludes
palette_name = parse_palette_name()
palette = PALETTES[palette_name]
flavor = parse_flavor(palette)
apps = parse_apps()
includes, excludes = parse_apps()
scripts = get_script_list()
for app in apps:
func = apply_theme_funcs[app]
try:
print(f"Changing color theme of {app} to flavor {flavor}...")
func(palette, flavor)
print("Success!\n")
except Exception as e:
print(f"Error while tweaking {app}: {e}")
filteredScripts = []
if includes:
print(f"Including only: {', '.join(includes)}")
os.system(f'notify-send -a "change-colortheme" "Color theme changed" "Palette: {palette_name}\nFlavor: {flavor}"')
# for script in scripts:
# for include in includes:
# if include in str(script):
# filteredScripts.append(script)
# break
filteredScripts = [
script for script in scripts
if any(include in str(script) for include in includes)
]
else:
filteredScripts = scripts
if excludes:
print(f"Excluding: {', '.join(excludes)}")
filteredScripts = [
script for script in filteredScripts
if not any(exclude in str(script) for exclude in excludes)
]
print(f"Applying flavor '{flavor}' using {len(filteredScripts)} scripts")
for script in filteredScripts:
print(f"Running script: {script}")
os.system(f'"{script}" {palette_name} {flavor} {palette[flavor]}')
print("")
os.system(
f'notify-send -a "change-colortheme" "Colortheme Changed" "Palette: {palette_name};\nFlavor: {flavor};\nApplied to {len(filteredScripts)} applications."')
if __name__ == "__main__":

View File

@@ -80,13 +80,13 @@ if [ "$XDG_CURRENT_DESKTOP" = "Hyprland" ]; then
notify-send -a "change-wallpaper" "Wallpaper Changed" "$image" -i "$image_copied"
change-colortheme -i "$image_copied" !quickshell !nwg-look || exit 1
change-colortheme -i "$image_copied" || exit 1
elif [ "$XDG_CURRENT_DESKTOP" = "niri" ]; then
swww img -n background "$image_copied" --transition-type fade --transition-duration 2 > /dev/null 2> /dev/null
notify-send -a "change-wallpaper" "Wallpaper Changed" "$image" -i "$image_copied"
change-colortheme -i "$image_copied" !waybar !eww !mako !nwg-look || exit 1
change-colortheme -i "$image_copied" || exit 1
else
echo "Unsupported desktop environment: $XDG_CURRENT_DESKTOP"
exit 1

View File

@@ -11,7 +11,7 @@ if [ -z "$LYRICS" ] && [ -z "$LYRICS_SINGLE" ]; then
elif [ -n "$LYRICS" ] && [ -z "$LYRICS_SINGLE" ]; then
eww close lyrics
# if waybar is running, open lyrics-single
if pgrep -x "waybar" > /dev/null; then
if pgrep -x "waybar" -u "$USER" > /dev/null; then
sleep 0.5
eww open lyrics-single
fi

View File

@@ -41,9 +41,9 @@ done
mkdir -p "$(xdg-user-dir VIDEOS)"
cd "$(xdg-user-dir VIDEOS)" || exit
if pgrep wf-recorder > /dev/null; then
if pgrep -x wf-recorder -u "$USER" > /dev/null; then
notify-send "Recording Stopped" "Stopped" -a 'record-script' &
pkill wf-recorder &
pkill -x wf-recorder -u "$USER"
else
notify-send "Starting recording" 'recording_'"$(getdate)"'.mkv' -a 'record-script'
if [[ "$1" == "--sound" ]]; then

View File

@@ -1,4 +1,4 @@
#!/bin/sh
pgrep -f spotify-lyrics && (killall spotify-lyrics || exit 1)
pgrep -f spotify-lyrics -u "$USER" && (killall spotify-lyrics -u "$USER" || exit 1)
spotify-lyrics "$@"

View File

@@ -6,7 +6,7 @@ import subprocess
import threading
from sys import exit
from time import sleep
from os import environ
from os import environ, getuid
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
@@ -66,7 +66,7 @@ def swwwLoadImg(namespace: str, wallpaper: Path):
def swwwStartDaemon(namespace: str):
# Check if daemon is already running
cmd = ["pgrep", "-f", f"swww daemon -n {namespace}"]
cmd = ["pgrep", "-f", f"swww daemon -n {namespace}"], "-u", str(getuid())
try:
output = subprocess.check_output(cmd, text=True)
pids = output.strip().splitlines()

View File

@@ -15,7 +15,7 @@ function close() {
function open() {
# the system tray will not work with kded6 started
if killall -q -9 "kded6"; then
while pgrep -x "kded6" >/dev/null; do
while pgrep -u "$USER" -x "kded6" >/dev/null; do
sleep 0.2
done
fi
@@ -29,13 +29,13 @@ function open() {
if [ "$1" = "restart" ]; then
close
while pgrep -x "waybar" >/dev/null; do
while pgrep -u "$USER" -x "waybar" >/dev/null; do
sleep 0.2
done
open
elif pgrep -x "waybar" >/dev/null; then
elif pgrep -u "$USER" -x "waybar" >/dev/null; then
close
elif ! pgrep -x "waybar" >/dev/null; then
elif ! pgrep -u "$USER" -x "waybar" >/dev/null; then
open
else
echo "Usage: $0 [restart]"

View File

@@ -0,0 +1,32 @@
# snippet to parse args in apply-color scripts
[ -z "$1" ] && exit 1
palette="$1"
[ -z "$2" ] && exit 1
colorName="$2"
[ -z "$3" ] && exit 1
colorHex="$3"
function log_error {
printf "\033[0;31mError:\033[0m $1\n" >&2
}
function log_info {
printf "\033[0;32mInfo:\033[0m $1\n" >&2
}
# remove leading '#' if present
if [[ $colorHex == \#* ]]; then
colorHex="${colorHex#\#}"
fi
# check if hex
if ! [[ $colorHex =~ ^[0-9A-Fa-f]{6}$ ]]; then
log_error "Invalid color hex: $colorHex"
exit 1
fi
function log_success {
log_info "Applied primary color ${colorName} (${colorHex}) to \033[1;34m$1\033[0m"
}

18
eww/apply-color Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/eww.scss
sed -i "s|^\$border: #[0-9a-fA-F]\{6\};\$|\$border: #${colorHex};|" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
pgrep -x eww >/dev/null -u "$USER" && eww reload || {
log_error "Failed to reload eww, is it running?"
exit 1
}
log_success "eww"

View File

@@ -1,23 +0,0 @@
/** Colors *******************************************/
$bg: #1e1e2e;
$bg-alt: #181825;
$fg: #cdd6f4;
$fg-alt: #a6adc8;
$red: #f38ba8;
$green: #a6e3a1;
$yellow: #f9e2af;
$orange: #fab387;
$blue: #89b4fa;
$purple: #cba6f7;
$cyan: #89dceb;
$gray: #585b70;
$gray-alt: #292a3c;
$lavender: #b4befe;
$sapphire: #74c7ec;
$teal: #94e2d5;
$peach: #fab387;
$border: #<FLAVOR_HEX>;
@import './Main/eww.scss';
@import './Lyrics/eww.scss';

24
fish/apply-color Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/post.d/fetch.fish
sed -i 's/^\( set -g fetch_color "\)#\([0-9a-fA-F]\{6\}\)"/\1#'"${colorHex}"'"/' "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
log_success "fastfetch"
# Also apply to omp in here
file="$path"/../posh_theme.omp.json
sed -i 's/\("foreground":[[:space:]]*"\)#\([0-9a-fA-F]\{6\}\)"/\1#'"${colorHex}"'"/g' "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
log_success "oh-my-posh"

View File

@@ -1,38 +0,0 @@
if not set -q fetch_logo_type
set -g fetch_logo_type "auto"
end
if not set -q fetch_color
set -g fetch_color "#<FLAVOR_HEX>"
end
if test "$fetch_logo_type" = "symbols"
set -g fetch_args "--logo-type raw --logo-width 42 --logo \"$HOME/.config/fastfetch/logo_ros/42x.symbols\" --color \"$fetch_color\""
set -g fetch_args_brief "--logo-type raw --logo-width 28 --logo \"$HOME/.config/fastfetch/logo_ros/28x.symbols\" --color \"$fetch_color\""
else if test "$fetch_logo_type" = "logo"
set -g fetch_args "--logo-type builtin"
set -g fetch_args_brief "--logo-type small"
else if test "$fetch_logo_type" = "sixel"
set -g fetch_args "--logo-type raw --logo-width 42 --logo \"$HOME/.config/fastfetch/logo_ros/42x.sixel\" --color \"$fetch_color\""
set -g fetch_args_brief "--logo-type raw --logo-width 28 --logo \"$HOME/.config/fastfetch/logo_ros/28x.sixel\" --color \"$fetch_color\""
else # "kitty" or "auto" and others
set -g fetch_args "--logo-type $fetch_logo_type --logo-width 42 --logo \"$HOME/.config/fastfetch/logo_ros/ros.png\" --color \"$fetch_color\""
set -g fetch_args_brief "--logo-type $fetch_logo_type --logo-width 28 --logo \"$HOME/.config/fastfetch/logo_ros/ros.png\" --color \"$fetch_color\""
end
if type -q fastfetch
alias ff="fastfetch -c $HOME/.config/fastfetch/config.jsonc $fetch_args"
if test -f "$HOME/.config/fastfetch/brief.jsonc"
alias ff-brief="fastfetch -c $HOME/.config/fastfetch/brief.jsonc $fetch_args_brief"
else
alias ff-brief=ff
end
end
# add 'set -g no_fetch' somewhere other than post.d to disable fetching
if not set -q no_fetch
if type -q ff-brief
ff-brief
end
end

22
fuzzel/apply-color Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/fuzzel.ini
entries="match selection-match border"
if pgrep -x "fuzzel" -u "$USER" > /dev/null; then
pkill -x fuzzel || log_error "Failed to kill fuzzel process"
# and move on
fi
for entry in $entries; do
# Not very sure if alpha channels are neccessary here, but just in case
sed -i -E "s/^($entry\s*=\s*)([0-9A-Fa-f]{6})([0-9A-Fa-f]{0,2})/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file} for entry ${entry}"
exit 1
}
done
log_success "fuzzel"

View File

@@ -1,24 +0,0 @@
terminal=kitty -e
prompt=">> "
layer=overlay
[colors]
background=1e1e2edd
text=cdd6f4ff
prompt=bac2deff
placeholder=7f849cff
input=cdd6f4ff
match=<FLAVOR_HEX>ff
selection=585b70ff
selection-text=cdd6f4ff
selection-match=<FLAVOR_HEX>ff
counter=7f849cff
border=<FLAVOR_HEX>ff
[border]
radius=17
width=2
[dmenu]
exit-immediately-if-empty=yes

25
hypr/apply-color Executable file
View File

@@ -0,0 +1,25 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/hyprland/colors.conf
sed -i -E "s/^(\s*col\.active_border\s*=\s*rgba\()([0-9A-Fa-f]{6})([0-9A-Fa-f]{2}\))$/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file} for entry col.active_border"
exit 1
}
sed -i -E "s/^(\s*col\.inactive_border\s*=\s*rgba\()([0-9A-Fa-f]{6})([0-9A-Fa-f]{2}\))$/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file} for entry col.active_border"
exit 1
}
if pgrep -x "hyprland" -u "$USER" > /dev/null; then
hyprctl reload || {
log_error "Failed to reload Hyprland"
exit 1
}
fi
log_success "hyprland"

View File

@@ -1,7 +0,0 @@
#!/usr/bin/env bash
sleep 4
killall -e xdg-desktop-portal-hyprland
killall xdg-desktop-portal
/usr/lib/xdg-desktop-portal-hyprland &
sleep 4
/usr/lib/xdg-desktop-portal &

View File

@@ -1,7 +1,7 @@
# exec = export SLURP_ARGS='-d -c BFE9F8BB -b 214C5844 -s 00000000'
general {
col.active_border = rgba(89b4faFF)
col.active_border = rgba(89b4faff)
col.inactive_border = rgba(89b4fa80)
}

View File

@@ -1,12 +0,0 @@
# exec = export SLURP_ARGS='-d -c BFE9F8BB -b 214C5844 -s 00000000'
general {
col.active_border = rgba(<FLAVOR_HEX>FF)
col.inactive_border = rgba(<FLAVOR_HEX>80)
}
misc {
background_color = rgba(181825FF)
}
windowrulev2 = bordercolor rgba(00DCE3AA) rgba(00DCE377),pinned:1

21
mako/apply-color Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/config
entry="border-color"
sed -i -E "0,/^($entry\s*=\s*#)([0-9A-Fa-f]{6})/s//\1${colorHex}/" "$file" || {
log_error "Failed to edit ${file} for entry ${entry}"
exit 1
}
if pgrep -x "mako" -u "$USER" > /dev/null; then
makoctl reload || {
log_error "Failed to reload mako"
exit 1
}
fi
log_success "mako"

View File

@@ -1,37 +0,0 @@
max-visible=10
layer=top
font=Noto Sans 12
border-radius=12
max-icon-size=48
default-timeout=5000
anchor=top-right
margin=20
background-color=#1e1e2e
text-color=#cdd6f4
border-color=#<FLAVOR_HEX>
progress-color=over #313244
[urgency=high]
border-color=#fab387
[app-name=wp-vol]
layer=overlay
history=0
anchor=top-center
# Group all volume notifications together
group-by=app-name
# Hide the group-index
format=<b>%s</b>\n%b
[app-name=volume group-index=0]
# Only show last notification
invisible=0
[app-name=spotify-lyrics]
history=0
group-by=app-name
format=<b>%s</b>\n%b
[app-name=spotify-lyrics group-index=0]
invisible=0

13
niri/apply-color Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/config.kdl
sed -i -E "s/^(\s*active-color\s+\"#)([0-9A-Fa-f]{6})(\")/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
log_success "niri"

View File

@@ -1,429 +0,0 @@
/************************Input************************/
input {
keyboard {
xkb {
layout "de"
}
numlock
}
touchpad {
tap
natural-scroll
scroll-method "two-finger"
}
mouse {
accel-speed 0.25
}
trackpoint {
off
}
// Make the mouse warp to the center of newly focused windows.
warp-mouse-to-focus
// Focus windows and outputs automatically when moving the mouse into them.
focus-follows-mouse max-scroll-amount="99%"
}
/************************Output************************/
output "eDP-1" {
mode "2560x1600@240"
scale 1.25
background-color "#1e1e2e"
backdrop-color "#1e1e2e"
}
output "eDP-2" {
mode "2560x1600@240"
scale 1.25
background-color "#1e1e2e"
backdrop-color "#1e1e2e"
}
/************************Layout************************/
layout {
gaps 0
center-focused-column "never"
preset-column-widths {
proportion 0.3
proportion 0.5
proportion 0.7
}
preset-window-heights {
proportion 0.5
proportion 0.75
proportion 1.0
}
default-column-width { proportion 0.7; }
focus-ring {
width 2
active-color "#<FLAVOR_HEX>"
inactive-color "#1e1e2e"
}
border {
off
}
shadow {
on
softness 30
spread 5
offset x=0 y=5
color "#0007"
}
struts {
top 2
right 2
bottom 3
left 2
}
background-color "#1e1e2e"
}
// Disable the "Important Hotkeys" pop-up at startup.
hotkey-overlay {
skip-at-startup
}
prefer-no-csd
animations {
// off
// slowdown 3.0
}
layer-rule {
match namespace="^swww-daemonbackdrop$"
place-within-backdrop true
}
/************************Autostart************************/
// Switch configs
spawn-sh-at-startup "config-switch niri"
// Idle
spawn-sh-at-startup "hypridle"
// Wallpaper
spawn-at-startup "wallpaper-daemon"
// Not necessary maybe ...
spawn-at-startup "fcitx5"
// Core
spawn-at-startup "blueman-applet"
spawn-at-startup "nm-applet"
spawn-sh-at-startup "gnome-keyring-daemon --start --components=secrets"
spawn-at-startup "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
// Clipboard history
spawn-sh-at-startup "wl-paste --type text --watch cliphist store"
spawn-sh-at-startup "wl-paste --type image --watch cliphist store"
// Logitech
spawn-sh-at-startup "solaar -w hide"
// Application associations
spawn-at-startup "kbuildsycoca6"
// Some other heavy apps
spawn-at-startup "sunshine"
// Quickshell must start after hypridle,
// otherwise Firefox cannot block idle when playing media
spawn-at-startup "quickshell"
/************************Envs************************/
environment {
// Input Method
QT_IM_MODULE "fcitx"
XMODIFIERS "@im=fcitx"
SDL_IM_MODULE "fcitx"
GLFW_IM_MODULE "ibus"
INPUT_METHOD "fcitx"
// Themes
QT_QPA_PLATFORM "wayland"
QT_QPA_PLATFORMTHEME "kde"
QT_STYLE_OVERRIDE "Kvantum"
// Nvidia
LIBVA_DRIVER_NAME "nvidia"
__GLX_VENDOR_LIBRARY_NAME "nvidia"
NVD_BACKEND "nvidia"
// Others
XCURSOR_SIZE "24"
ELECTRON_OZONE_PLATFORM_HINT "wayland"
}
/************************Rules************************/
// Picture-in-Picture
window-rule {
match title="^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$"
open-floating true
}
// Dialog windows
window-rule {
match title="^(Open File)(.*)$"
match title="^(Select a File)(.*)$"
match title="^(Choose wallpaper)(.*)$"
match title="^(Open Folder)(.*)$"
match title="^(Save As)(.*)$"
match title="^(Library)(.*)$"
match title="^(File Upload)(.*)$"
open-floating true
}
// FLoating terminal
window-rule {
match app-id="com.mitchellh.ghostty"
open-floating true
default-column-width { proportion 0.5; }
}
// Normal terminal
window-rule {
match app-id="kitty"
default-column-width { proportion 0.5; }
}
// Scrcpy
window-rule {
match app-id="scrcpy"
default-column-width { proportion 0.3; }
}
// Editor
window-rule {
match app-id="org.gnome.TextEditor"
default-column-width { proportion 0.3; }
}
// Other floating
window-rule {
match app-id="blueberry"
match app-id="blueman-manager"
match app-id="pavucontrol"
match app-id="org.pulseaudio.pavucontrol"
match app-id="Waydroid"
match app-id="org.kde.kcalc"
match app-id="org.kde.kalk"
match app-id="org.gnome.NautilusPreviewer"
match app-id="coin"
match app-id="wallpaper-chooser"
match app-id="be.alexandervanhee.gradia"
match title="^(图片查看器)(.*)$" // QQ
open-floating true
}
// Block from recording
window-rule {
match app-id="thunderbird"
block-out-from "screen-capture"
}
// I love round corners
window-rule {
geometry-corner-radius 14
clip-to-geometry true
}
/************************Others************************/
cursor {
xcursor-theme "Bibata-Modern-Ice"
xcursor-size 24
hide-when-typing
}
debug {
render-drm-device "/dev/dri/card0"
}
screenshot-path "~/Pictures/Screenshots/.niri_screenshot.png"
// gestures {
// hot-corners {
// off
// }
// }
/************************Keybindings************************/
binds {
// Apps
Mod+C { spawn-sh "code --password-store=gnome-libsecret"; }
Mod+E { spawn "dolphin"; }
Mod+W { spawn "zen"; }
Mod+X { spawn "gnome-text-editor" "--new-window"; }
Mod+B { spawn-sh "pkill -x -n btop || ghostty -e btop"; }
Mod+T { spawn "kitty"; }
Mod+Return { spawn "kitty"; }
Mod+Shift+T { spawn "ghostty"; }
Mod+Shift+Return { spawn "ghostty"; }
Mod+Shift+W { spawn "wallpaper-chooser"; }
// Quickshell
Mod+Space { spawn-sh "qs ipc call panels toggleControlCenter"; }
Mod+Shift+D { spawn-sh "qs ipc call panels toggleCalendar"; }
Mod+Shift+L { spawn-sh "qs ipc call lyrics toggleBarLyrics"; }
Mod+Shift+K { spawn-sh "pkill -x quickshell || quickshell"; }
Mod+I { spawn-sh "qs ipc call idleInhibitor toggleInhibitor"; }
Mod+Alt+R { spawn-sh "qs ipc call recording startOrStopRecording"; }
// Rofi
Mod+D { spawn-sh "pkill -x rofi || rofi -show run"; }
Alt+Space { spawn-sh "pkill -x rofi || rofi -show drun"; }
// Actions
Mod+V { spawn-sh "pkill -x rofi || rofi-cliphist"; }
Mod+Period { spawn-sh "pkill -x rofi || rofi-emoji"; }
Ctrl+Alt+Delete { spawn-sh "pkill -x wlogout || wlogout -p layer-shell"; }
Print { spawn-sh "screenshot full"; }
Mod+Shift+S { spawn-sh "screenshot area"; }
Mod+Ctrl+Shift+S { spawn-sh "screenshot window"; }
Mod+Shift+C { spawn-sh "hyprpicker -a"; }
// Session
Mod+L { spawn-sh "loginctl lock-session"; }
// Media
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioPause allow-when-locked=true { spawn-sh "playerctl play-pause"; }
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
// Brightness
XF86MonBrightnessUp allow-when-locked=true { spawn "set-brightness" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "set-brightness" "10%-"; }
// Window management
Mod+Tab repeat=false { toggle-overview; }
Mod+Q repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-or-workspace-down; }
Mod+Up { focus-window-or-workspace-up; }
Mod+Right { focus-column-right; }
Mod+Shift+Left { move-column-left; }
Mod+Shift+Down { move-window-down-or-to-workspace-down; }
Mod+Shift+Up { move-window-up-or-to-workspace-up; }
Mod+Shift+Right { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Shift+Home { move-column-to-first; }
Mod+Shift+End { move-column-to-last; }
Mod+Ctrl+Left { focus-monitor-left; }
Mod+Ctrl+Down { focus-monitor-down; }
Mod+Ctrl+Up { focus-monitor-up; }
Mod+Ctrl+Right { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-window-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-window-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-window-to-monitor-right; }
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+Shift+Page_Down { move-window-to-workspace-down; }
Mod+Shift+Page_Up { move-window-to-workspace-up; }
Mod+Ctrl+Shift+Page_Down { move-workspace-down; }
Mod+Ctrl+Shift+Page_Up { move-workspace-up; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Shift+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Shift+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; }
Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; }
Mod+Shift+WheelScrollRight { move-column-right; }
Mod+Shift+WheelScrollLeft { move-column-left; }
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Alt+1 { move-window-to-workspace 1; }
Mod+Alt+2 { move-window-to-workspace 2; }
Mod+Alt+3 { move-window-to-workspace 3; }
Mod+Alt+4 { move-window-to-workspace 4; }
Mod+Alt+5 { move-window-to-workspace 5; }
Mod+Alt+6 { move-window-to-workspace 6; }
Mod+Alt+7 { move-window-to-workspace 7; }
Mod+Alt+8 { move-window-to-workspace 8; }
Mod+Alt+9 { move-window-to-workspace 9; }
Mod+Alt+Left { consume-or-expel-window-left; }
Mod+Alt+Right { consume-or-expel-window-right; }
Mod+Shift+Comma { consume-window-into-column; }
Mod+Shift+Period { expel-window-from-column; }
Mod+Shift+M { toggle-column-tabbed-display; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+Y { center-column; }
Mod+Minus { set-column-width "-10%"; }
Mod+Plus { set-column-width "+10%"; }
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Plus { set-window-height "+10%"; }
Mod+Alt+Space { toggle-window-floating; }
Alt+Tab { switch-focus-between-floating-and-tiling; }
Mod+Ctrl+W { toggle-column-tabbed-display; }
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+M allow-inhibiting=false { quit; }
Mod+Shift+P { power-off-monitors; }
}

View File

@@ -5,7 +5,7 @@
"alignment": "left",
"segments": [
{
"foreground": "#74c7ec",
"foreground": "#89b4fa",
"properties": {
"windows": "\ue62a"
},
@@ -14,19 +14,19 @@
"type": "os"
},
{
"foreground": "#74c7ec",
"foreground": "#89b4fa",
"style": "plain",
"template": " {{.UserName}}",
"type": "session"
},
{
"foreground": "#74c7ec",
"foreground": "#89b4fa",
"style": "plain",
"template": "@{{.HostName}}",
"type": "session"
},
{
"foreground": "#94e2d5",
"foreground": "#89b4fa",
"properties": {
"folder_separator_icon": "/",
"style": "letter"
@@ -36,7 +36,7 @@
"type": "path"
},
{
"foreground": "#a6e3a1",
"foreground": "#89b4fa",
"powerline_symbol": "\ue0b1",
"properties": {
"branch_icon": " ",
@@ -50,7 +50,7 @@
"type": "git"
},
{
"foreground": "#f9e2af",
"foreground": "#89b4fa",
"powerline_symbol": "\ue0b1",
"template": " \ue235 {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }} ",
"style": "powerline",
@@ -64,13 +64,13 @@
"newline": true,
"segments": [
{
"foreground": "#fab387",
"foreground": "#89b4fa",
"style": "plain",
"template": "\ue3bf ",
"type": "root"
},
{
"foreground": "#74c7ec",
"foreground": "#89b4fa",
"foreground_templates": [
"{{ if gt .Code 0 }}#f38ba8{{ end }}"
],
@@ -90,7 +90,7 @@
"foreground_templates": [
"{{ if gt .Code 0 }}#f38ba8{{ end }}"
],
"foreground": "#74c7ec",
"foreground": "#89b4fa",
"template": "# "
},
"version": 3

View File

@@ -1,97 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"foreground": "#<FLAVOR_HEX>",
"properties": {
"windows": "\ue62a"
},
"style": "plain",
"template": "{{.Icon}}",
"type": "os"
},
{
"foreground": "#<FLAVOR_HEX>",
"style": "plain",
"template": " {{.UserName}}",
"type": "session"
},
{
"foreground": "#<FLAVOR_HEX>",
"style": "plain",
"template": "@{{.HostName}}",
"type": "session"
},
{
"foreground": "#94e2d5",
"properties": {
"folder_separator_icon": "/",
"style": "letter"
},
"style": "powerline",
"template": " \uf07b {{ .Path }} ",
"type": "path"
},
{
"foreground": "#a6e3a1",
"powerline_symbol": "\ue0b1",
"properties": {
"branch_icon": " ",
"fetch_stash_count": true,
"fetch_status": true,
"fetch_upstream_icon": true,
"fetch_worktree_count": true
},
"style": "powerline",
"template": " {{ .UpstreamIcon }} {{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} \ueb4b {{ .StashCount }}{{ end }} ",
"type": "git"
},
{
"foreground": "#f9e2af",
"powerline_symbol": "\ue0b1",
"template": " \ue235 {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }} ",
"style": "powerline",
"type": "python"
}
],
"type": "prompt"
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "#fab387",
"style": "plain",
"template": "\ue3bf ",
"type": "root"
},
{
"foreground": "#<FLAVOR_HEX>",
"foreground_templates": [
"{{ if gt .Code 0 }}#f38ba8{{ end }}"
],
"properties": {
"always_enabled": true
},
"style": "plain",
"template": "{{ if gt .Code 0 }}{{ .Code }} {{ end }}# ",
"type": "status"
}
],
"type": "prompt"
}
],
"transient_prompt": {
"background": "transparent",
"foreground_templates": [
"{{ if gt .Code 0 }}#f38ba8{{ end }}"
],
"foreground": "#<FLAVOR_HEX>",
"template": "# "
},
"version": 3
}

View File

@@ -55,8 +55,12 @@ Item {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: (mouse) => {
if (mouse.button === Qt.LeftButton)
MusicManager.playPause();
else if (mouse.button === Qt.RightButton)
SettingsService.showLyricsBar = !SettingsService.showLyricsBar;
}
onWheel: function(wheel) {
if (wheel.angleDelta.y > 0)

16
quickshell/apply-color Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
if pgrep -x "quickshell" -u "$USER" >/dev/null; then
qs ipc call colors setPrimary ${colorHex} || {
log_error "Failed to send IPC command to quickshell"
exit 1
}
log_success "quickshell"
else
log_error "quickshell is not running. Cannot apply color."
exit 1
fi

18
rofi/apply-color Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/config.rasi
if pgrep -x "rofi" -u "$USER" > /dev/null; then
pkill -x rofi || log_error "Failed to kill rofi process"
# and move on
fi
sed -i -E "s/^(\s*primary:\s*#)([0-9A-Fa-f]{6})(;)/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
log_success "rofi"

View File

@@ -1,229 +0,0 @@
/*****----- ALL -----*****/
* {
font: "Maple Mono NF CN Semibold 10";
base: #1e1e2e;
mantle: #181825;
text: #cdd6f4;
subtext0: #a6adc8;
surface2: #585b70;
surface: #292a3c;
red: #f38ba8;
green: #a6e3a1;
yellow: #f9e2af;
orange: #fab387;
blue: #89b4fa;
purple: #cba6f7;
cyan: #89dceb;
lavender: #b4befe;
sapphire: #74c7ec;
teal: #94e2d5;
peach: #fab387;
search: rgba(49, 50, 68, 0.5); // alpha(@surface, 0.5)
primary: #<FLAVOR_HEX>;
}
/*****----- Configuration -----*****/
configuration {
terminal: "/usr/bin/kitty";
modi: "drun,run,ssh";
show-icons: true;
display-drun: "";
display-run: "";
display-ssh: "";
drun-display-format: "{name}";
}
/*****----- Main Window -----*****/
window {
/* properties for window widget */
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 600px;
x-offset: 0px;
y-offset: 0px;
/* properties for all widgets */
enabled: true;
margin: 0px;
padding: 0px;
border: 2px solid;
border-radius: 24px;
border-color: @primary;
cursor: "default";
background-color: @base;
}
/*****----- Main Box -----*****/
mainbox {
enabled: true;
spacing: 0px;
margin: 0px;
padding: 30px;
background-color: transparent;
children: [ "inputbar", "message", "listview", "mode-switcher" ];
}
/*****----- Inputbar -----*****/
inputbar {
enabled: true;
spacing: 0px;
padding: 75px 30px;
border-radius: 14px 14px 0 0;
background-color: transparent;
background-image: url("~/.config/backgrounds/nao-stars-crop-adjust-flop.jpg", width);
text-color: @text;
children: [ "textbox-prompt-colon", "entry" ];
}
prompt {
enabled: true;
background-color: inherit;
text-color: inherit;
}
textbox-prompt-colon {
enabled: true;
padding: 12px 15px;
expand: false;
str: " ";
background-color: @search;
border-radius: 14px;
text-color: inherit;
}
entry {
enabled: true;
padding: 12px 16px;
text-color: inherit;
cursor: text;
background-color: @search;
border-radius: 14px;
placeholder: "Search...";
placeholder-color: inherit;
}
/*****----- Listview -----*****/
listview {
enabled: true;
columns: 2;
lines: 6;
cycle: true;
dynamic: true;
scrollbar: true;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
padding: 14px;
spacing: 5px;
background-color: @surface;
text-color: @text;
cursor: "default";
}
scrollbar {
handle-width: 5px ;
handle-color: @primary;
border-radius: 10px;
background-color: @mantle;
}
/*****----- Elements -----*****/
element {
enabled: true;
spacing: 10px;
margin: 0px;
padding: 6px;
border-radius: 0px;
background-color: transparent;
text-color: @text;
cursor: pointer;
}
element normal.normal,
element alternate.normal {
background-color: transparent;
text-color: @text;
}
element normal.urgent,
element alternate.urgent,
element selected.active {
background-color: @primary;
text-color: @base;
border-radius: 10px;
}
element normal.active,
element alternate.active,
element selected.urgent {
background-color: @red;
text-color: @base;
}
element selected.normal {
background-color: @surface2;
text-color: @text;
border-radius: 10px;
}
element-icon {
background-color: transparent;
text-color: inherit;
size: 24px;
cursor: inherit;
}
element-text {
background-color: transparent;
text-color: inherit;
highlight: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
}
/*****----- Mode Switcher -----*****/
mode-switcher{
enabled: true;
spacing: 10px;
margin: 0px;
padding: 0px;
background-color: transparent;
text-color: @text;
}
button {
padding: 10px;
border-radius: 10px;
background-color: @base;
text-color: inherit;
cursor: pointer;
}
button selected {
background-color: @surface;
text-color: @primary;
border-radius: 0 0 14px 14px;
border-color: @primary;
}
/*****----- Message -----*****/
message {
enabled: true;
margin: 0px;
padding: 10px;
border-radius: 0px;
background-color: @mantle;
text-color: @text;
}
textbox {
background-color: transparent;
text-color: @text;
vertical-align: 0.5;
horizontal-align: 0.0;
highlight: none;
placeholder-color: @text;
blink: true;
markup: true;
}
error-message {
padding: 30px;
background-color: @base;
text-color: @text;
}

17
waybar/apply-color Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/style.css
sed -i -E "s/^(@define-color\s+flavor\s+#)([0-9A-Fa-f]{6})(;)/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
if pgrep -x "waybar" -u "$USER" > /dev/null; then
waybar-toggle restart || log_error "Failed to restart waybar"
fi
log_success "waybar"

View File

@@ -1,217 +0,0 @@
@import 'mocha.css';
@define-color flavor #<FLAVOR_HEX>;
/* @define-color archlinux #1793d1; */
@define-color archlinux @sapphire;
/* Font(s) */
* {
/* main font icons CJK fallback */
font-family: 'Sour Gummy Light', 'Meslo LGM Nerd Font Mono', 'WenQuanYi Micro Hei', 'Noto Sans', sans-serif;
font-size: 16px;
}
/* Reset all styles */
* {
border: none;
border-radius: 14px;
min-height: 0;
margin: 2px 1px 2px 1px;
padding: 0;
transition-property: background-color;
transition-duration: 0.5s;
}
/* The whole bar */
#waybar {
background: linear-gradient(to bottom, alpha(@base, 0.8), alpha(@base, 0));
/* background: transparent; */
color: @text;
border-radius: 0px;
margin: 0px;
}
tooltip {
background: @base;
border: 2px solid @overlay0;
}
#workspaceactions,
#window,
#clock,
#monitors,
#custom-mediaplayer,
#custom-power-menu,
#tray,
#custom-rofi,
#idle_inhibitor,
#custom-power {
padding: 0px 10px;
}
#custom-separator {
padding: 0px 5px;
font-size: 20px;
}
#custom-rofi,
#idle_inhibitor,
#custom-power,
#custom-expand-icon {
padding: 0px 6px;
font-size: 18px;
}
#custom-workspacenew,
#workspaces button {
padding: 0px 5px;
margin: 3px 3px;
border-radius: 8px;
color: @flavor;
background-color: transparent;
transition: all 0.3s ease-in-out;
}
#workspaces button:hover {
background-color: alpha(@flavor, 0.3);
}
#workspaces button.active {
color: @base;
background: @flavor;
}
#workspaces button.urgent {
color: @base;
background-color: @red;
}
#workspaceactions {
padding-left: 1px;
padding-right: 1px;
}
#workspaces {
padding: 0px;
margin: 0px;
}
#window {
transition: none; /* Disable background transition */
}
window#waybar.empty #window {
background-color: transparent;
padding: 0;
margin: 0;
}
#custom-mediaplayer {
color: @flavor;
}
#network.speed {
color: @flavor;
}
#custom-publicip {
color: @peach;
}
#temperature {
color: @yellow;
}
#memory {
color: @green;
}
#cpu {
color: @teal;
}
#battery {
color: @sapphire;
}
#battery.charging,
#battery.full,
#battery.plugged {
color: @green;
}
#backlight {
color: @blue;
}
#wireplumber {
color: @lavender;
}
#custom-power {
color: @maroon;
}
#custom-power:hover {
background-color: alpha(@maroon, 0.3);
}
#custom-rofi {
color: @archlinux;
}
#custom-rofi:hover {
background-color: alpha(@archlinux, 0.3);
}
#custom-expand-icon {
color: @green;
}
#idle_inhibitor {
color: @yellow;
}
#idle_inhibitor:hover {
background-color: alpha(@yellow, 0.3);
}
#idle_inhibitor.activated {
color: @peach;
}
#clock {
color: @flavor;
}
@keyframes blink {
to {
background-color: alpha(@red, 0.5);
}
}
#battery.critical:not(.charging) {
color: @red;
animation-name: blink;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#network.disconnected {
color: @red;
}
#temperature.critical {
background-color: #eb4d4b;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: #eb4d4b;
}

View File

@@ -4,7 +4,7 @@
killall -q waybar
# Wait until the processes have been shut down
while pgrep -x waybar >/dev/null; do sleep 1; done
while pgrep -x waybar -u "$USER" >/dev/null; do sleep 1; done
# Launch main
waybar &

22
wlogout-niri/apply-color Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
for file in "$path"/icons/*.svg; do
[ -f "$file" ] || continue
sed -i -E "s/(fill=\"#)([0-9A-Fa-f]{6})(\")/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
done
file="$path"/style.css
sed -i -E "s/(border-color:\s*#)([0-9A-Fa-f]{6})(;)/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
log_success "wlogout (niri version)"

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g><path d="M500,10C229.4,10,10,229.4,10,500s219.4,490,490,490s490-219.4,490-490S770.6,10,500,10z M500,885.1c-212.7,0-385.1-172.4-385.1-385.1S287.3,114.9,500,114.9S885.1,287.3,885.1,500S712.7,885.1,500,885.1z M576.5,308.7v382.4c0,42.2-34.2,76.5-76.5,76.5c-42.3,0-76.5-34.2-76.5-76.5V308.7c0-42.2,34.2-76.5,76.5-76.5C542.2,232.3,576.5,266.5,576.5,308.7z"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 975 B

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g><path d="M321.8,455.5h356.4V321.8c0-49.2-17.4-91.2-52.2-126c-34.8-34.8-76.8-52.2-126-52.2c-49.2,0-91.2,17.4-126,52.2c-34.8,34.8-52.2,76.8-52.2,126L321.8,455.5L321.8,455.5z M900.9,522.3v400.9c0,18.6-6.5,34.3-19.5,47.3c-13,13-28.8,19.5-47.3,19.5H165.9c-18.6,0-34.3-6.5-47.3-19.5s-19.5-28.8-19.5-47.3V522.3c0-18.6,6.5-34.3,19.5-47.3c13-13,28.8-19.5,47.3-19.5h22.3V321.8c0-85.4,30.6-158.7,91.9-219.9C341.3,40.6,414.6,10,500,10c85.4,0,158.7,30.6,219.9,91.9c61.3,61.3,91.9,134.6,91.9,219.9v133.6h22.3c18.6,0,34.3,6.5,47.3,19.5C894.4,487.9,900.9,503.7,900.9,522.3L900.9,522.3z"/></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M622.5,990H50.8C26.3,990,10,973.7,10,949.2V50.8C10,26.3,26.3,10,50.8,10h571.7c24.5,0,40.8,16.3,40.8,40.8v285.8c0,24.5-16.3,40.8-40.8,40.8s-40.8-16.3-40.8-40.8v-245h-490v816.7h490v-245c0-24.5,16.3-40.8,40.8-40.8s40.8,16.3,40.8,40.8v285.8C663.3,973.7,647,990,622.5,990z"/><path d="M949.2,540.8H336.7c-24.5,0-40.8-16.3-40.8-40.8c0-24.5,16.3-40.8,40.8-40.8h612.5c24.5,0,40.8,16.3,40.8,40.8C990,524.5,973.7,540.8,949.2,540.8z"/><path d="M949.2,540.8c-12.3,0-20.4-4.1-28.6-12.3L757.3,365.3c-16.3-16.3-16.3-40.8,0-57.2c16.3-16.3,40.8-16.3,57.2,0l163.3,163.3c16.3,16.3,16.3,40.8,0,57.2C969.6,536.8,961.4,540.8,949.2,540.8z"/><path d="M785.8,704.2c-12.3,0-20.4-4.1-28.6-12.3c-16.3-16.3-16.3-40.8,0-57.2l163.3-163.3c16.3-16.3,40.8-16.3,57.2,0c16.3,16.3,16.3,40.8,0,57.2L814.4,691.9C806.3,700.1,798.1,704.2,785.8,704.2z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M134.6,285.6C64.9,420.7,60.1,590,137.1,723.4L42,668.5l-32,55.4c93.1,52.1,133.6,75.9,184,106.2c28.5-51.5,52.8-94.4,107.4-186.1L246,612l-53.4,92.5C65.4,502.7,167.2,200.3,398.8,126.2C638,29.3,929,223.5,931.5,481.5c19.6,236.7-208.9,443.6-439.3,416.2l-29.5,51c277.7,54.4,556.5-201.7,524.7-483.1C976.1,170.8,637.1-41.2,367.1,77.5C262.8,114.2,183.1,191.5,134.6,285.6z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 883 B

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M764,152.1c30.9,22,58.3,46.8,82.4,74.6c24,27.8,44.6,57.8,61.8,90.1c17.2,32.3,30.2,66.4,39.1,102.4c8.9,36,13.4,72.6,13.4,109.6c0,63.8-12.2,123.7-36.5,179.6c-24.4,55.9-57.3,104.7-98.8,146.2c-41.5,41.5-90.2,74.5-146.2,98.8C623.2,977.8,563.3,990,499.5,990c-63.1,0-122.7-12.2-178.6-36.5c-55.9-24.4-104.8-57.3-146.7-98.8c-41.9-41.5-74.8-90.2-98.8-146.2c-24-55.9-36-115.8-36-179.6c0-36.4,4.3-72.1,12.9-107.1c8.6-35,20.8-68.3,36.5-99.9c15.8-31.6,35.3-61.1,58.7-88.5c23.3-27.5,49.4-52.2,78.2-74.1c15.1-11,31.4-15.1,48.9-12.4c17.5,2.7,31.7,11.3,42.7,25.7c11,14.4,15.1,30.5,12.4,48.4c-2.7,17.8-11.3,32.3-25.7,43.2c-43.2,31.6-76.4,70.3-99.3,116.3c-23,46-34.5,95.4-34.5,148.2c0,45.3,8.6,88,25.7,128.2c17.2,40.1,40.7,75.1,70.5,105c29.9,29.9,64.9,53.5,105,71c40.1,17.5,82.9,26.3,128.2,26.3c45.3,0,88-8.7,128.2-26.3c40.1-17.5,75.1-41.2,105-71s53.5-64.9,71-105c17.5-40.1,26.3-82.9,26.3-128.2c0-53.5-12.4-104.1-37.1-151.8c-24.7-47.7-59.4-87-104-117.9c-15.1-10.3-24.2-24.4-27.3-42.2c-3.1-17.8,0.5-34.3,10.8-49.4c10.3-14.4,24.4-23.2,42.2-26.2C732.5,138.2,748.9,141.8,764,152.1L764,152.1z M499.5,531.9c-17.8,0-33.1-6.3-45.8-19c-12.7-12.7-19-28-19-45.8V75.9c0-17.8,6.3-33.3,19-46.3c12.7-13,28-19.6,45.8-19.6c18.5,0,34.1,6.5,46.8,19.6c12.7,13,19,28.5,19,46.3v391.2c0,17.8-6.3,33.1-19,45.8C533.6,525.6,518,531.9,499.5,531.9L499.5,531.9z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M500,990c-66.1,0-130.3-13-190.7-38.5c-58.4-24.7-110.8-60-155.7-105s-80.3-97.4-105-155.7C23,630.3,10,566.1,10,500c0-66.1,13-130.3,38.5-190.7c24.7-58.4,60-110.8,105-155.7c45-45,97.4-80.3,155.7-105C369.7,23,433.9,10,500,10c66.1,0,130.3,13,190.7,38.5c58.4,24.7,110.8,60,155.7,105c45,45,80.3,97.4,105,155.7C977,369.7,990,433.9,990,500c0,66.1-13,130.3-38.5,190.7c-24.7,58.4-60,110.8-105,155.7s-97.4,80.3-155.7,105C630.3,977,566.1,990,500,990z M500,79.6c-112.3,0-217.9,43.7-297.3,123.1C123.3,282.1,79.6,387.7,79.6,500s43.7,217.9,123.1,297.3c79.4,79.4,185,123.1,297.3,123.1c112.3,0,217.9-43.7,297.3-123.1c79.4-79.4,123.1-185,123.1-297.3s-43.7-217.9-123.1-297.3C717.9,123.3,612.3,79.6,500,79.6z"/><path d="M322.5,290.6h108v412h-108V290.6z"/><path d="M561.6,290.6h107.9v412H561.6V290.6z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,120 +0,0 @@
* {
background-image: none;
font-size: 24px;
font-family: 'Sour Gummy Light';
}
window {
background-color: rgba(30, 30, 46, 0.5);
}
button {
color: #cdd6f4;
border-radius: 0;
outline-style: none;
background-color: alpha(#1e1e2e, 1);
border: none;
border-width: 0px;
border-radius: 0px;
border-color: #<FLAVOR_HEX>;
box-shadow: none;
text-shadow: none;
text-decoration-color: #cdd6f4;
background-repeat: no-repeat;
background-position: center;
background-size: 20%;
animation: gradient_f 20s ease-in infinite;
}
button:focus,
button:active,
button:hover {
background-size: 20%;
background-color: alpha(#1c1c2c, 1);
animation: gradient_f 20s ease-in infinite;
transition: all 0.3s cubic-bezier(0.55, 0, 0.28, 1.682);
}
#lock {
background-image: image(url('./icons/lock.svg'));
border-radius: 32px 0 0 0;
}
#logout {
background-image: image(url('./icons/logout.svg'));
}
#suspend {
background-image: image(url('./icons/suspend.svg'));
border-radius: 0 32px 0 0;
}
#hibernate {
background-image: image(url('./icons/hibernate.svg'));
border-radius: 0 0 0 32px;
}
#shutdown {
background-image: image(url('./icons/shutdown.svg'));
}
#reboot {
background-image: image(url('./icons/reboot.svg'));
border-radius: 0 0 32px 0;
}
#lock:hover {
border-radius: 30px 0 0 0;
margin: -30px 0 0 -30px;
}
#logout:hover {
margin: -30px 0 0 0;
}
#suspend:hover {
border-radius: 0 30px 0 0;
margin: -30px -30px 0 0;
}
#hibernate:hover {
border-radius: 0 0 0 30px;
margin: 0 0 -30 -30px;
}
#shutdown:hover {
margin: 0 0 -30px 0;
}
#reboot:hover {
border-radius: 0 0 30px 0;
margin: 0 -30px -30px 0;
}
#lock:focus {
border-radius: 60px 0 0 0;
margin: -60px 0 0 -60px;
}
#logout:focus {
margin: -60px 0 0 0;
}
#suspend:focus {
border-radius: 0 60px 0 0;
margin: -60px -60px 0 0;
}
#hibernate:focus {
border-radius: 0 0 0 60px;
margin: 0 0 -60 -60px;
}
#shutdown:focus {
margin: 0 0 -60px 0;
}
#reboot:focus {
border-radius: 0 0 60px 0;
margin: 0 -60px -60px 0;
}

23
wlogout/apply-color Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
file="$path"/style.css
for file in "$path"/icons/*.svg; do
[ -f "$file" ] || continue
sed -i -E "s/(fill=\"#)([0-9A-Fa-f]{6})(\")/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
done
file="$path"/style.css
sed -i -E "s/(border-color:\s*#)([0-9A-Fa-f]{6})(;)/\1${colorHex}\3/" "$file" || {
log_error "Failed to edit ${file}"
exit 1
}
log_success "wlogout"

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g><path d="M500,10C229.4,10,10,229.4,10,500s219.4,490,490,490s490-219.4,490-490S770.6,10,500,10z M500,885.1c-212.7,0-385.1-172.4-385.1-385.1S287.3,114.9,500,114.9S885.1,287.3,885.1,500S712.7,885.1,500,885.1z M576.5,308.7v382.4c0,42.2-34.2,76.5-76.5,76.5c-42.3,0-76.5-34.2-76.5-76.5V308.7c0-42.2,34.2-76.5,76.5-76.5C542.2,232.3,576.5,266.5,576.5,308.7z"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 975 B

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g><path d="M321.8,455.5h356.4V321.8c0-49.2-17.4-91.2-52.2-126c-34.8-34.8-76.8-52.2-126-52.2c-49.2,0-91.2,17.4-126,52.2c-34.8,34.8-52.2,76.8-52.2,126L321.8,455.5L321.8,455.5z M900.9,522.3v400.9c0,18.6-6.5,34.3-19.5,47.3c-13,13-28.8,19.5-47.3,19.5H165.9c-18.6,0-34.3-6.5-47.3-19.5s-19.5-28.8-19.5-47.3V522.3c0-18.6,6.5-34.3,19.5-47.3c13-13,28.8-19.5,47.3-19.5h22.3V321.8c0-85.4,30.6-158.7,91.9-219.9C341.3,40.6,414.6,10,500,10c85.4,0,158.7,30.6,219.9,91.9c61.3,61.3,91.9,134.6,91.9,219.9v133.6h22.3c18.6,0,34.3,6.5,47.3,19.5C894.4,487.9,900.9,503.7,900.9,522.3L900.9,522.3z"/></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M622.5,990H50.8C26.3,990,10,973.7,10,949.2V50.8C10,26.3,26.3,10,50.8,10h571.7c24.5,0,40.8,16.3,40.8,40.8v285.8c0,24.5-16.3,40.8-40.8,40.8s-40.8-16.3-40.8-40.8v-245h-490v816.7h490v-245c0-24.5,16.3-40.8,40.8-40.8s40.8,16.3,40.8,40.8v285.8C663.3,973.7,647,990,622.5,990z"/><path d="M949.2,540.8H336.7c-24.5,0-40.8-16.3-40.8-40.8c0-24.5,16.3-40.8,40.8-40.8h612.5c24.5,0,40.8,16.3,40.8,40.8C990,524.5,973.7,540.8,949.2,540.8z"/><path d="M949.2,540.8c-12.3,0-20.4-4.1-28.6-12.3L757.3,365.3c-16.3-16.3-16.3-40.8,0-57.2c16.3-16.3,40.8-16.3,57.2,0l163.3,163.3c16.3,16.3,16.3,40.8,0,57.2C969.6,536.8,961.4,540.8,949.2,540.8z"/><path d="M785.8,704.2c-12.3,0-20.4-4.1-28.6-12.3c-16.3-16.3-16.3-40.8,0-57.2l163.3-163.3c16.3-16.3,40.8-16.3,57.2,0c16.3,16.3,16.3,40.8,0,57.2L814.4,691.9C806.3,700.1,798.1,704.2,785.8,704.2z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M134.6,285.6C64.9,420.7,60.1,590,137.1,723.4L42,668.5l-32,55.4c93.1,52.1,133.6,75.9,184,106.2c28.5-51.5,52.8-94.4,107.4-186.1L246,612l-53.4,92.5C65.4,502.7,167.2,200.3,398.8,126.2C638,29.3,929,223.5,931.5,481.5c19.6,236.7-208.9,443.6-439.3,416.2l-29.5,51c277.7,54.4,556.5-201.7,524.7-483.1C976.1,170.8,637.1-41.2,367.1,77.5C262.8,114.2,183.1,191.5,134.6,285.6z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 883 B

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M764,152.1c30.9,22,58.3,46.8,82.4,74.6c24,27.8,44.6,57.8,61.8,90.1c17.2,32.3,30.2,66.4,39.1,102.4c8.9,36,13.4,72.6,13.4,109.6c0,63.8-12.2,123.7-36.5,179.6c-24.4,55.9-57.3,104.7-98.8,146.2c-41.5,41.5-90.2,74.5-146.2,98.8C623.2,977.8,563.3,990,499.5,990c-63.1,0-122.7-12.2-178.6-36.5c-55.9-24.4-104.8-57.3-146.7-98.8c-41.9-41.5-74.8-90.2-98.8-146.2c-24-55.9-36-115.8-36-179.6c0-36.4,4.3-72.1,12.9-107.1c8.6-35,20.8-68.3,36.5-99.9c15.8-31.6,35.3-61.1,58.7-88.5c23.3-27.5,49.4-52.2,78.2-74.1c15.1-11,31.4-15.1,48.9-12.4c17.5,2.7,31.7,11.3,42.7,25.7c11,14.4,15.1,30.5,12.4,48.4c-2.7,17.8-11.3,32.3-25.7,43.2c-43.2,31.6-76.4,70.3-99.3,116.3c-23,46-34.5,95.4-34.5,148.2c0,45.3,8.6,88,25.7,128.2c17.2,40.1,40.7,75.1,70.5,105c29.9,29.9,64.9,53.5,105,71c40.1,17.5,82.9,26.3,128.2,26.3c45.3,0,88-8.7,128.2-26.3c40.1-17.5,75.1-41.2,105-71s53.5-64.9,71-105c17.5-40.1,26.3-82.9,26.3-128.2c0-53.5-12.4-104.1-37.1-151.8c-24.7-47.7-59.4-87-104-117.9c-15.1-10.3-24.2-24.4-27.3-42.2c-3.1-17.8,0.5-34.3,10.8-49.4c10.3-14.4,24.4-23.2,42.2-26.2C732.5,138.2,748.9,141.8,764,152.1L764,152.1z M499.5,531.9c-17.8,0-33.1-6.3-45.8-19c-12.7-12.7-19-28-19-45.8V75.9c0-17.8,6.3-33.3,19-46.3c12.7-13,28-19.6,45.8-19.6c18.5,0,34.1,6.5,46.8,19.6c12.7,13,19,28.5,19,46.3v391.2c0,17.8-6.3,33.1-19,45.8C533.6,525.6,518,531.9,499.5,531.9L499.5,531.9z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#<FLAVOR_HEX>" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><path d="M500,990c-66.1,0-130.3-13-190.7-38.5c-58.4-24.7-110.8-60-155.7-105s-80.3-97.4-105-155.7C23,630.3,10,566.1,10,500c0-66.1,13-130.3,38.5-190.7c24.7-58.4,60-110.8,105-155.7c45-45,97.4-80.3,155.7-105C369.7,23,433.9,10,500,10c66.1,0,130.3,13,190.7,38.5c58.4,24.7,110.8,60,155.7,105c45,45,80.3,97.4,105,155.7C977,369.7,990,433.9,990,500c0,66.1-13,130.3-38.5,190.7c-24.7,58.4-60,110.8-105,155.7s-97.4,80.3-155.7,105C630.3,977,566.1,990,500,990z M500,79.6c-112.3,0-217.9,43.7-297.3,123.1C123.3,282.1,79.6,387.7,79.6,500s43.7,217.9,123.1,297.3c79.4,79.4,185,123.1,297.3,123.1c112.3,0,217.9-43.7,297.3-123.1c79.4-79.4,123.1-185,123.1-297.3s-43.7-217.9-123.1-297.3C717.9,123.3,612.3,79.6,500,79.6z"/><path d="M322.5,290.6h108v412h-108V290.6z"/><path d="M561.6,290.6h107.9v412H561.6V290.6z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,120 +0,0 @@
* {
background-image: none;
font-size: 24px;
font-family: 'Sour Gummy Light';
}
window {
background-color: rgba(30, 30, 46, 0.5);
}
button {
color: #cdd6f4;
border-radius: 0;
outline-style: none;
background-color: alpha(#1e1e2e, 0.8);
border: none;
border-width: 0px;
border-radius: 0px;
border-color: #<FLAVOR_HEX>;
box-shadow: none;
text-shadow: none;
text-decoration-color: #cdd6f4;
background-repeat: no-repeat;
background-position: center;
background-size: 20%;
animation: gradient_f 20s ease-in infinite;
}
button:focus,
button:active,
button:hover {
background-size: 20%;
background-color: alpha(#1e1e2e, 0.7);
animation: gradient_f 20s ease-in infinite;
transition: all 0.3s cubic-bezier(0.55, 0, 0.28, 1.682);
}
#lock {
background-image: image(url('./icons/lock.svg'));
border-radius: 32px 0 0 0;
}
#logout {
background-image: image(url('./icons/logout.svg'));
}
#suspend {
background-image: image(url('./icons/suspend.svg'));
border-radius: 0 32px 0 0;
}
#hibernate {
background-image: image(url('./icons/hibernate.svg'));
border-radius: 0 0 0 32px;
}
#shutdown {
background-image: image(url('./icons/shutdown.svg'));
}
#reboot {
background-image: image(url('./icons/reboot.svg'));
border-radius: 0 0 32px 0;
}
#lock:hover {
border-radius: 30px 0 0 0;
margin: -30px 0 0 -30px;
}
#logout:hover {
margin: -30px 0 0 0;
}
#suspend:hover {
border-radius: 0 30px 0 0;
margin: -30px -30px 0 0;
}
#hibernate:hover {
border-radius: 0 0 0 30px;
margin: 0 0 -30 -30px;
}
#shutdown:hover {
margin: 0 0 -30px 0;
}
#reboot:hover {
border-radius: 0 0 30px 0;
margin: 0 -30px -30px 0;
}
#lock:focus {
border-radius: 60px 0 0 0;
margin: -60px 0 0 -60px;
}
#logout:focus {
margin: -60px 0 0 0;
}
#suspend:focus {
border-radius: 0 60px 0 0;
margin: -60px -60px 0 0;
}
#hibernate:focus {
border-radius: 0 0 0 60px;
margin: 0 0 -60 -60px;
}
#shutdown:focus {
margin: 0 0 -60px 0;
}
#reboot:focus {
border-radius: 0 0 60px 0;
margin: 0 -60px -60px 0;
}

11
yazi/apply-color Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
path=$(dirname "$(readlink -f "$0")")
. "$path"/../.utils/apply-color-parse-arg
cp -f "$path"/../.yazi-themes/catppuccin-mocha-"$colorName".toml "$path"/../yazi/theme.toml || {
log_error "Failed to copy theme file"
exit 1
}
log_success "yazi"