mirror of
https://github.com/danbulant/dotfiles
synced 2026-05-19 04:18:55 +00:00
various updates
This commit is contained in:
parent
e983daa187
commit
920bb47bd7
30 changed files with 1163 additions and 59 deletions
11
.config/hypr/hyprland.colors.conf
Normal file
11
.config/hypr/hyprland.colors.conf
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
general {
|
||||
col.active_border = rgba(F7DCDE39)
|
||||
col.inactive_border = rgba(A58A8D30)
|
||||
}
|
||||
|
||||
misc {
|
||||
background_color = rgba(1D1011FF)
|
||||
}
|
||||
|
||||
windowrulev2 = bordercolor rgba(FFB2BCAA) rgba(FFB2BC77),pinned:1
|
||||
|
|
@ -24,6 +24,7 @@ cursor {
|
|||
|
||||
source = ~/.config/hypr/monitors.conf
|
||||
source = ~/.config/hypr/workspaces.conf
|
||||
source = ~/.config/hypr/hyprland.colors.conf
|
||||
|
||||
debug:disable_logs = false
|
||||
|
||||
|
|
@ -67,7 +68,10 @@ exec-once=otd-daemon
|
|||
exec-once=lorri daemon
|
||||
|
||||
#exec-once=wlsunset -S 6:00 -s 21:30
|
||||
exec-once=swaybg -m fill -i ~/.config/hypr/wallpapers/sunflowers.jpg
|
||||
# exec-once=swaybg -m fill -i ~/.config/hypr/wallpapers/sunflowers.jpg
|
||||
exec-once = swww-daemon --format xrgb --no-cache
|
||||
# "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)"
|
||||
exec-once = sleep 0.5; swww img ~/.config/hypr/wallpapers/sunflowers.jpg --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1
|
||||
# exec-once=waybar
|
||||
exec-once=quickshell
|
||||
exec-once=blueman-applet
|
||||
|
|
@ -80,6 +84,10 @@ exec-once=sleep 10;aw-qt& sleep 2; awatcher
|
|||
exec-once = nm-applet --indicator # systray app for Network/Wifi
|
||||
exec-once=kdeconnect-indicator
|
||||
exec-once = hyprpm reload -n
|
||||
exec-once = wl-paste --type text --watch cliphist store
|
||||
exec-once = wl-paste --type image --watch cliphist store
|
||||
exec-once = fcitx5
|
||||
exec-once = easyeffects --gapplication-service
|
||||
|
||||
#$swaylock = swaylock --screenshots --clock --indicator --effect-blur 6x6 --fade-in 0.2 --ring-color 4e9dc2 --key-hl-color 71b0ce
|
||||
$swaylock = hyprlock
|
||||
|
|
@ -156,8 +164,8 @@ general {
|
|||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
border_size = 1
|
||||
col.active_border = rgba(75DDDD50) rgba(09BC8A50) 45deg
|
||||
col.inactive_border = rgba(172A3AFF)
|
||||
# col.active_border = rgba(75DDDD50) rgba(09BC8A50) 45deg
|
||||
# col.inactive_border = rgba(172A3AFF)
|
||||
|
||||
layout = master
|
||||
resize_on_border = true
|
||||
|
|
@ -251,6 +259,9 @@ windowrule=float,title:Open File
|
|||
windowrule=float,title:branchdialog
|
||||
windowrule=tile,title:*vivaldi*
|
||||
|
||||
# can be more specific (:bar, :mediaControls, etc)
|
||||
layerrule = blur, quickshell
|
||||
|
||||
blurls=gtk-layer-shell
|
||||
blurls=lockscreen
|
||||
blurls = rofi
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
general {
|
||||
|
||||
}
|
||||
$text_color = rgba(FFDAD6FF)
|
||||
$entry_background_color = rgba(41000311)
|
||||
$entry_border_color = rgba(896E6C55)
|
||||
$entry_color = rgba(FFDAD6FF)
|
||||
$font_family = Rubik Light
|
||||
$font_family_clock = Rubik Light
|
||||
$font_material_symbols = Material Symbols Rounded
|
||||
|
||||
background {
|
||||
monitor =
|
||||
|
|
@ -16,35 +20,80 @@ background {
|
|||
vibrancy = 0.1696
|
||||
vibrancy_darkness = 0.0
|
||||
}
|
||||
|
||||
input-field {
|
||||
monitor =
|
||||
size = 200, 50
|
||||
outline_thickness = 3
|
||||
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = false
|
||||
dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
|
||||
outer_color = rgb(151515)
|
||||
inner_color = rgb(200, 200, 200)
|
||||
font_color = rgb(10, 10, 10)
|
||||
size = 250, 50
|
||||
outline_thickness = 2
|
||||
dots_size = 0.1
|
||||
dots_spacing = 0.3
|
||||
outer_color = $entry_border_color
|
||||
inner_color = $entry_background_color
|
||||
font_color = $entry_color
|
||||
fade_on_empty = true
|
||||
fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
|
||||
placeholder_text = <i>Password</i> # Text rendered in the input box when it's empty.
|
||||
hide_input = false
|
||||
rounding = -1 # -1 means complete rounding (circle/oval)
|
||||
check_color = rgb(204, 136, 34)
|
||||
fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color
|
||||
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
|
||||
fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears
|
||||
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
|
||||
capslock_color = -1
|
||||
numlock_color = -1
|
||||
bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
|
||||
invert_numlock = false # change color if numlock is off
|
||||
swap_font_color = false # see below
|
||||
|
||||
position = 0, -20
|
||||
position = 0, 20
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
label { # Caps Lock Warning
|
||||
monitor =
|
||||
text = cmd[update:250] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/check-capslock.sh
|
||||
color = $text_color
|
||||
font_size = 13
|
||||
font_family = $font_family
|
||||
position = 0, -25
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
|
||||
label { # Clock
|
||||
monitor =
|
||||
text = $TIME
|
||||
color = $text_color
|
||||
font_size = 65
|
||||
font_family = $font_family_clock
|
||||
|
||||
position = 0, 300
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
label { # Date
|
||||
monitor =
|
||||
text = cmd[update:5000] date +"%A, %B %d"
|
||||
color = $text_color
|
||||
font_size = 17
|
||||
font_family = $font_family
|
||||
|
||||
position = 0, 240
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
label { # User
|
||||
monitor =
|
||||
text = $USER
|
||||
color = $text_color
|
||||
outline_thickness = 2
|
||||
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = true
|
||||
font_size = 20
|
||||
font_family = $font_family
|
||||
position = 0, 50
|
||||
halign = center
|
||||
valign = bottom
|
||||
}
|
||||
|
||||
label { # Status
|
||||
monitor =
|
||||
text = cmd[update:5000] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/status.sh
|
||||
color = $text_color
|
||||
font_size = 14
|
||||
font_family = $font_family
|
||||
|
||||
position = 30, -30
|
||||
halign = left
|
||||
valign = top
|
||||
}
|
||||
9
.config/hypr/hyprlock/check-capslock.sh
Normal file
9
.config/hypr/hyprlock/check-capslock.sh
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/env bash
|
||||
|
||||
MAIN_KB_CAPS=$(hyprctl devices | grep -B 6 "main: yes" | grep "capsLock" | head -1 | awk '{print $2}')
|
||||
|
||||
if [ "$MAIN_KB_CAPS" = "yes" ]; then
|
||||
echo "Caps Lock active"
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
29
.config/hypr/hyprlock/status.sh
Normal file
29
.config/hypr/hyprlock/status.sh
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
############ Variables ############
|
||||
enable_battery=false
|
||||
battery_charging=false
|
||||
|
||||
####### Check availability ########
|
||||
for battery in /sys/class/power_supply/*BAT*; do
|
||||
if [[ -f "$battery/uevent" ]]; then
|
||||
enable_battery=true
|
||||
if [[ $(cat /sys/class/power_supply/*/status | head -1) == "Charging" ]]; then
|
||||
battery_charging=true
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
############# Output #############
|
||||
if [[ $enable_battery == true ]]; then
|
||||
if [[ $battery_charging == true ]]; then
|
||||
echo -n "(+) "
|
||||
fi
|
||||
echo -n "$(cat /sys/class/power_supply/*/capacity | head -1)"%
|
||||
if [[ $battery_charging == false ]]; then
|
||||
echo -n " remaining"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ''
|
||||
34
.config/matugen/config.toml
Normal file
34
.config/matugen/config.toml
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[config]
|
||||
version_check = false
|
||||
|
||||
[templates.m3colors]
|
||||
input_path = '~/.config/matugen/templates/colors.json'
|
||||
output_path = '~/.local/state/quickshell/user/generated/colors.json'
|
||||
|
||||
[templates.hyprland]
|
||||
input_path = '~/.config/matugen/templates/hyprland/hyprland.colors.conf'
|
||||
output_path = '~/.config/hypr/hyprland.colors.conf'
|
||||
|
||||
[templates.hyprlock]
|
||||
input_path = '~/.config/matugen/templates/hyprland/hyprlock.conf'
|
||||
output_path = '~/.config/hypr/hyprlock.conf'
|
||||
|
||||
[templates.fuzzel]
|
||||
input_path = '~/.config/matugen/templates/fuzzel/fuzzel_theme.ini'
|
||||
output_path = '~/.config/fuzzel/fuzzel_theme.ini'
|
||||
|
||||
[templates.gtk3]
|
||||
input_path = '~/.config/matugen/templates/gtk/gtk-colors.css'
|
||||
output_path = '~/.config/gtk-3.0/gtk.css'
|
||||
|
||||
[templates.gtk4]
|
||||
input_path = '~/.config/matugen/templates/gtk/gtk-colors.css'
|
||||
output_path = '~/.config/gtk-4.0/gtk.css'
|
||||
|
||||
[templates.kde_colors]
|
||||
input_path = '~/.config/matugen/templates/kde/color.txt'
|
||||
output_path = '~/.local/state/quickshell/user/generated/color.txt'
|
||||
|
||||
[templates.wallpaper]
|
||||
input_path = '~/.config/matugen/templates/wallpaper.txt'
|
||||
output_path = '~/.local/state/quickshell/user/generated/wallpaper/path.txt'
|
||||
338
.config/matugen/scripts/least_busy_region.py
Executable file
338
.config/matugen/scripts/least_busy_region.py
Executable file
|
|
@ -0,0 +1,338 @@
|
|||
#!/usr/bin/env python3
|
||||
# Disclaimer: This script was ai-generated and went through minimal revision.
|
||||
|
||||
import os
|
||||
os.environ["OPENCV_LOG_LEVEL"] = "SILENT"
|
||||
import cv2
|
||||
import numpy as np
|
||||
import argparse
|
||||
import json
|
||||
|
||||
def center_crop(img, target_w, target_h):
|
||||
h, w = img.shape[:2]
|
||||
if w == target_w and h == target_h:
|
||||
return img
|
||||
x1 = max(0, (w - target_w) // 2)
|
||||
y1 = max(0, (h - target_h) // 2)
|
||||
x2 = x1 + target_w
|
||||
y2 = y1 + target_h
|
||||
return img[y1:y2, x1:x2]
|
||||
|
||||
def find_least_busy_region(image_path, region_width=300, region_height=200, screen_width=None, screen_height=None, verbose=False, stride=2, screen_mode="fill", padding=50):
|
||||
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
|
||||
if img is None:
|
||||
raise FileNotFoundError(f"Image not found: {image_path}")
|
||||
orig_h, orig_w = img.shape
|
||||
scale = 1.0
|
||||
if screen_width is not None and screen_height is not None:
|
||||
scale_w = screen_width / orig_w
|
||||
scale_h = screen_height / orig_h
|
||||
if screen_mode == "fill":
|
||||
scale = max(scale_w, scale_h)
|
||||
else:
|
||||
scale = min(scale_w, scale_h)
|
||||
new_w = int(orig_w * scale)
|
||||
new_h = int(orig_h * scale)
|
||||
if verbose:
|
||||
print(f"Scaling image from {orig_w}x{orig_h} to {new_w}x{new_h} (scale: {scale:.3f}, mode: {screen_mode})")
|
||||
img = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LANCZOS4)
|
||||
img = center_crop(img, screen_width, screen_height)
|
||||
if verbose:
|
||||
print(f"Cropped image to {screen_width}x{screen_height}")
|
||||
else:
|
||||
if verbose:
|
||||
print(f"Using original image size: {orig_w}x{orig_h}")
|
||||
arr = img.astype(np.float64)
|
||||
h, w = arr.shape
|
||||
# Use OpenCV's integral for fast computation
|
||||
integral = cv2.integral(arr, sdepth=cv2.CV_64F)[1:,1:]
|
||||
integral_sq = cv2.integral(arr**2, sdepth=cv2.CV_64F)[1:,1:]
|
||||
def region_sum(ii, x1, y1, x2, y2):
|
||||
total = ii[y2, x2]
|
||||
if x1 > 0:
|
||||
total -= ii[y2, x1-1]
|
||||
if y1 > 0:
|
||||
total -= ii[y1-1, x2]
|
||||
if x1 > 0 and y1 > 0:
|
||||
total += ii[y1-1, x1-1]
|
||||
return total
|
||||
min_var = None
|
||||
min_coords = (0, 0)
|
||||
area = region_width * region_height
|
||||
x_start = padding
|
||||
y_start = padding
|
||||
x_end = w - region_width - padding + 1
|
||||
y_end = h - region_height - padding + 1
|
||||
for y in range(y_start, max(y_end, y_start+1), stride):
|
||||
for x in range(x_start, max(x_end, x_start+1), stride):
|
||||
x1, y1 = x, y
|
||||
x2, y2 = x + region_width - 1, y + region_height - 1
|
||||
s = region_sum(integral, x1, y1, x2, y2)
|
||||
s2 = region_sum(integral_sq, x1, y1, x2, y2)
|
||||
mean = s / area
|
||||
var = (s2 / area) - (mean ** 2)
|
||||
if (min_var is None) or (var < min_var):
|
||||
min_var = var
|
||||
min_coords = (x, y)
|
||||
return min_coords, min_var
|
||||
|
||||
def find_largest_region(image_path, screen_width=None, screen_height=None, verbose=False, stride=2, screen_mode="fill", threshold=100.0, aspect_ratio=1.0, padding=50):
|
||||
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
|
||||
if img is None:
|
||||
raise FileNotFoundError(f"Image not found: {image_path}")
|
||||
orig_h, orig_w = img.shape
|
||||
scale = 1.0
|
||||
if screen_width is not None and screen_height is not None:
|
||||
scale_w = screen_width / orig_w
|
||||
scale_h = screen_height / orig_h
|
||||
if screen_mode == "fill":
|
||||
scale = max(scale_w, scale_h)
|
||||
else:
|
||||
scale = min(scale_w, scale_h)
|
||||
new_w = int(orig_w * scale)
|
||||
new_h = int(orig_h * scale)
|
||||
if verbose:
|
||||
print(f"Scaling image from {orig_w}x{orig_h} to {new_w}x{new_h} (scale: {scale:.3f}, mode: {screen_mode})")
|
||||
img = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LANCZOS4)
|
||||
img = center_crop(img, screen_width, screen_height)
|
||||
if verbose:
|
||||
print(f"Cropped image to {screen_width}x{screen_height}")
|
||||
else:
|
||||
if verbose:
|
||||
print(f"Using original image size: {orig_w}x{orig_h}")
|
||||
arr = img.astype(np.float64)
|
||||
h, w = arr.shape
|
||||
# Use OpenCV's integral for fast computation
|
||||
integral = cv2.integral(arr, sdepth=cv2.CV_64F)[1:,1:]
|
||||
integral_sq = cv2.integral(arr**2, sdepth=cv2.CV_64F)[1:,1:]
|
||||
def region_sum(ii, x1, y1, x2, y2):
|
||||
total = ii[y2, x2]
|
||||
if x1 > 0:
|
||||
total -= ii[y2, x1-1]
|
||||
if y1 > 0:
|
||||
total -= ii[y1-1, x2]
|
||||
if x1 > 0 and y1 > 0:
|
||||
total += ii[y1-1, x1-1]
|
||||
return total
|
||||
min_size = 10
|
||||
max_size = min(h, int(w / aspect_ratio)) if aspect_ratio >= 1.0 else min(int(h * aspect_ratio), w)
|
||||
best = None
|
||||
best_size = min_size
|
||||
while min_size <= max_size:
|
||||
mid = (min_size + max_size) // 2
|
||||
if aspect_ratio >= 1.0:
|
||||
region_h = mid
|
||||
region_w = int(mid * aspect_ratio)
|
||||
else:
|
||||
region_w = mid
|
||||
region_h = int(mid / aspect_ratio)
|
||||
if region_w > w or region_h > h:
|
||||
max_size = mid - 1
|
||||
continue
|
||||
found = False
|
||||
x_start = padding
|
||||
y_start = padding
|
||||
x_end = w - region_w - padding + 1
|
||||
y_end = h - region_h - padding + 1
|
||||
for y in range(y_start, max(y_end, y_start+1), stride):
|
||||
for x in range(x_start, max(x_end, x_start+1), stride):
|
||||
x1, y1 = x, y
|
||||
x2, y2 = x + region_w - 1, y + region_h - 1
|
||||
s = region_sum(integral, x1, y1, x2, y2)
|
||||
s2 = region_sum(integral_sq, x1, y1, x2, y2)
|
||||
area = region_w * region_h
|
||||
mean = s / area
|
||||
var = (s2 / area) - (mean ** 2)
|
||||
if var <= threshold:
|
||||
found = True
|
||||
best = (x, y, region_w, region_h, var)
|
||||
break
|
||||
if found:
|
||||
break
|
||||
if found:
|
||||
best_size = mid
|
||||
min_size = mid + 1
|
||||
else:
|
||||
max_size = mid - 1
|
||||
if best:
|
||||
x, y, region_w, region_h, var = best
|
||||
center_x = x + region_w // 2
|
||||
center_y = y + region_h // 2
|
||||
return (center_x, center_y), (region_w, region_h), var
|
||||
else:
|
||||
return None, (0, 0), None
|
||||
|
||||
def draw_region(image_path, coords, region_width=300, region_height=200, output_path='output.png', screen_width=None, screen_height=None, screen_mode="fill"):
|
||||
img = cv2.imread(image_path)
|
||||
if img is None:
|
||||
raise FileNotFoundError(f"Image not found: {image_path}")
|
||||
orig_h, orig_w = img.shape[:2]
|
||||
if screen_width is not None and screen_height is not None:
|
||||
scale_w = screen_width / orig_w
|
||||
scale_h = screen_height / orig_h
|
||||
if screen_mode == "fill":
|
||||
scale = max(scale_w, scale_h)
|
||||
else:
|
||||
scale = min(scale_w, scale_h)
|
||||
new_w = int(orig_w * scale)
|
||||
new_h = int(orig_h * scale)
|
||||
img = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LANCZOS4)
|
||||
img = center_crop(img, screen_width, screen_height)
|
||||
x, y = coords
|
||||
cv2.rectangle(img, (x, y), (x+region_width-1, y+region_height-1), (0,0,255), 3)
|
||||
cv2.imwrite(output_path, img)
|
||||
print(f"Saved output image with rectangle at {output_path}")
|
||||
|
||||
def draw_largest_region(image_path, center, size, output_path='output.png', screen_width=None, screen_height=None, screen_mode="fill"):
|
||||
img = cv2.imread(image_path)
|
||||
if img is None:
|
||||
raise FileNotFoundError(f"Image not found: {image_path}")
|
||||
orig_h, orig_w = img.shape[:2]
|
||||
if screen_width is not None and screen_height is not None:
|
||||
scale_w = screen_width / orig_w
|
||||
scale_h = screen_height / orig_h
|
||||
if screen_mode == "fill":
|
||||
scale = max(scale_w, scale_h)
|
||||
else:
|
||||
scale = min(scale_w, scale_h)
|
||||
new_w = int(orig_w * scale)
|
||||
new_h = int(orig_h * scale)
|
||||
img = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LANCZOS4)
|
||||
img = center_crop(img, screen_width, screen_height)
|
||||
cx, cy = center
|
||||
region_w, region_h = size
|
||||
x1 = cx - region_w // 2
|
||||
y1 = cy - region_h // 2
|
||||
x2 = cx + region_w // 2 - 1
|
||||
y2 = cy + region_h // 2 - 1
|
||||
cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 3)
|
||||
cv2.imwrite(output_path, img)
|
||||
print(f"Saved output image with largest region at {output_path}")
|
||||
|
||||
def get_dominant_color(image_path, x, y, w, h, screen_width=None, screen_height=None, screen_mode="fill"):
|
||||
img = cv2.imread(image_path)
|
||||
if img is None:
|
||||
raise FileNotFoundError(f"Image not found: {image_path}")
|
||||
orig_h, orig_w = img.shape[:2]
|
||||
if screen_width is not None and screen_height is not None:
|
||||
scale_w = screen_width / orig_w
|
||||
scale_h = screen_height / orig_h
|
||||
if screen_mode == "fill":
|
||||
scale = max(scale_w, scale_h)
|
||||
else:
|
||||
scale = min(scale_w, scale_h)
|
||||
new_w = int(orig_w * scale)
|
||||
new_h = int(orig_h * scale)
|
||||
img = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LANCZOS4)
|
||||
img = center_crop(img, screen_width, screen_height)
|
||||
# Ensure region is within bounds
|
||||
x = max(0, x)
|
||||
y = max(0, y)
|
||||
w = max(1, min(w, img.shape[1] - x))
|
||||
h = max(1, min(h, img.shape[0] - y))
|
||||
region = img[y:y+h, x:x+w]
|
||||
if region.size == 0 or region.shape[0] == 0 or region.shape[1] == 0:
|
||||
return [0, 0, 0]
|
||||
region = region.reshape((-1, 3))
|
||||
# Filter out black pixels (optional, improves accuracy for some images)
|
||||
non_black = region[np.any(region > 10, axis=1)]
|
||||
if non_black.shape[0] == 0:
|
||||
non_black = region
|
||||
region = np.float32(non_black)
|
||||
if region.shape[0] < 3:
|
||||
return [int(x) for x in np.mean(region, axis=0)]
|
||||
# K-means to find dominant color
|
||||
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
|
||||
K = min(3, region.shape[0])
|
||||
_, labels, centers = cv2.kmeans(region, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
|
||||
counts = np.bincount(labels.flatten())
|
||||
dominant = centers[np.argmax(counts)]
|
||||
return [int(x) for x in dominant]
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Find least busy region in an image and output a JSON. Made for determining a suitable position for a wallpaper widget.")
|
||||
parser.add_argument("image_path", help="Path to the input image")
|
||||
parser.add_argument("--width", type=int, default=300, help="Region width")
|
||||
parser.add_argument("--height", type=int, default=200, help="Region height")
|
||||
parser.add_argument("-v", "--visual-output", action="store_true", help="Output image with rectangle")
|
||||
parser.add_argument("--screen-width", type=int, default=1920, help="Screen width for wallpaper scaling")
|
||||
parser.add_argument("--screen-height", type=int, default=1080, help="Screen height for wallpaper scaling")
|
||||
parser.add_argument("--stride", type=int, default=4, help="Step size for sliding window (higher is faster, less precise)")
|
||||
parser.add_argument("--screen-mode", choices=["fill", "fit"], default="fill", help="Wallpaper scaling mode: 'fill' (default) or 'fit'")
|
||||
parser.add_argument("--verbose", action="store_true", help="Print verbose output")
|
||||
parser.add_argument("-l", "--largest-region", action="store_true", help="Find the largest region under the variance threshold and output its center")
|
||||
parser.add_argument("-t", "--variance-threshold", type=float, default=1000.0, help="Variance threshold for largest region mode")
|
||||
parser.add_argument("--aspect-ratio", type=float, default=1.78, help="Aspect ratio (width/height) for largest region mode")
|
||||
parser.add_argument("--padding", type=int, default=50, help="Minimum distance from region to image edge (default: 50)")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.largest_region:
|
||||
center, size, var = find_largest_region(
|
||||
args.image_path,
|
||||
screen_width=args.screen_width,
|
||||
screen_height=args.screen_height,
|
||||
verbose=args.verbose,
|
||||
stride=args.stride,
|
||||
screen_mode=args.screen_mode,
|
||||
threshold=args.variance_threshold,
|
||||
aspect_ratio=args.aspect_ratio,
|
||||
padding=args.padding
|
||||
)
|
||||
if center:
|
||||
if args.visual_output:
|
||||
draw_largest_region(args.image_path, center, size, screen_width=args.screen_width, screen_height=args.screen_height, screen_mode=args.screen_mode)
|
||||
# Extract dominant color
|
||||
cx, cy = center
|
||||
region_w, region_h = size
|
||||
x1 = cx - region_w // 2
|
||||
y1 = cy - region_h // 2
|
||||
dominant_color = get_dominant_color(
|
||||
args.image_path, x1, y1, region_w, region_h,
|
||||
screen_width=args.screen_width, screen_height=args.screen_height, screen_mode=args.screen_mode
|
||||
)
|
||||
dominant_color_hex = '#{:02x}{:02x}{:02x}'.format(*dominant_color)
|
||||
print(json.dumps({
|
||||
"center_x": center[0],
|
||||
"center_y": center[1],
|
||||
"width": size[0],
|
||||
"height": size[1],
|
||||
"variance": var,
|
||||
"dominant_color": dominant_color_hex
|
||||
}))
|
||||
else:
|
||||
print(json.dumps({"error": "No region found under the threshold."}))
|
||||
return
|
||||
|
||||
coords, variance = find_least_busy_region(
|
||||
args.image_path,
|
||||
region_width=args.width,
|
||||
region_height=args.height,
|
||||
screen_width=args.screen_width,
|
||||
screen_height=args.screen_height,
|
||||
verbose=args.verbose,
|
||||
stride=args.stride,
|
||||
screen_mode=args.screen_mode,
|
||||
padding=args.padding
|
||||
)
|
||||
if args.visual_output:
|
||||
draw_region(args.image_path, coords, region_width=args.width, region_height=args.height, screen_width=args.screen_width, screen_height=args.screen_height, screen_mode=args.screen_mode)
|
||||
# Output JSON with center point
|
||||
center_x = coords[0] + args.width // 2
|
||||
center_y = coords[1] + args.height // 2
|
||||
dominant_color = get_dominant_color(
|
||||
args.image_path, coords[0], coords[1], args.width, args.height,
|
||||
screen_width=args.screen_width, screen_height=args.screen_height, screen_mode=args.screen_mode
|
||||
)
|
||||
dominant_color_hex = '#{:02x}{:02x}{:02x}'.format(*dominant_color)
|
||||
print(json.dumps({
|
||||
"center_x": center_x,
|
||||
"center_y": center_y,
|
||||
"width": args.width,
|
||||
"height": args.height,
|
||||
"variance": variance,
|
||||
"dominant_color": dominant_color_hex
|
||||
}))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
70
.config/matugen/templates/ags/_material.scss
Normal file
70
.config/matugen/templates/ags/_material.scss
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
$darkmode: False;
|
||||
$transparent: False;
|
||||
$background: {{colors.background.default.hex}};
|
||||
$onBackground: {{colors.on_background.default.hex}};
|
||||
$surface: {{colors.surface.default.hex}};
|
||||
$surfaceDim: {{colors.surface_dim.default.hex}};
|
||||
$surfaceBright: {{colors.surface_bright.default.hex}};
|
||||
$surfaceContainerLowest: {{colors.surface_container_lowest.default.hex}};
|
||||
$surfaceContainerLow: {{colors.surface_container_low.default.hex}};
|
||||
$surfaceContainer: {{colors.surface_container.default.hex}};
|
||||
$surfaceContainerHigh: {{colors.surface_container_high.default.hex}};
|
||||
$surfaceContainerHighest: {{colors.surface_container_highest.default.hex}};
|
||||
$onSurface: {{colors.on_surface.default.hex}};
|
||||
$surfaceVariant: {{colors.surface_variant.default.hex}};
|
||||
$onSurfaceVariant: {{colors.on_surface_variant.default.hex}};
|
||||
$inverseSurface: {{colors.inverse_surface.default.hex}};
|
||||
$inverseOnSurface: {{colors.inverse_on_surface.default.hex}};
|
||||
$outline: {{colors.outline.default.hex}};
|
||||
$outlineVariant: {{colors.outline_variant.default.hex}};
|
||||
$shadow: {{colors.shadow.default.hex}};
|
||||
$scrim: {{colors.scrim.default.hex}};
|
||||
$primary: {{colors.primary.default.hex}};
|
||||
$onPrimary: {{colors.on_primary.default.hex}};
|
||||
$primaryContainer: {{colors.primary_container.default.hex}};
|
||||
$onPrimaryContainer: {{colors.on_primary_container.default.hex}};
|
||||
$inversePrimary: {{colors.inverse_primary.default.hex}};
|
||||
$secondary: {{colors.secondary.default.hex}};
|
||||
$onSecondary: {{colors.on_secondary.default.hex}};
|
||||
$secondaryContainer: {{colors.secondary_container.default.hex}};
|
||||
$onSecondaryContainer: {{colors.on_secondary_container.default.hex}};
|
||||
$tertiary: {{colors.tertiary.default.hex}};
|
||||
$onTertiary: {{colors.on_tertiary.default.hex}};
|
||||
$tertiaryContainer: {{colors.tertiary_container.default.hex}};
|
||||
$onTertiaryContainer: {{colors.on_tertiary_container.default.hex}};
|
||||
$error: {{colors.error.default.hex}};
|
||||
$onError: {{colors.on_error.default.hex}};
|
||||
$errorContainer: {{colors.error_container.default.hex}};
|
||||
$onErrorContainer: {{colors.on_error_container.default.hex}};
|
||||
$primaryFixed: {{colors.primary_fixed.default.hex}};
|
||||
$primaryFixedDim: {{colors.primary_fixed_dim.default.hex}};
|
||||
$onPrimaryFixed: {{colors.on_primary_fixed.default.hex}};
|
||||
$onPrimaryFixedVariant: {{colors.on_primary_fixed_variant.default.hex}};
|
||||
$secondaryFixed: {{colors.secondary_fixed.default.hex}};
|
||||
$secondaryFixedDim: {{colors.secondary_fixed_dim.default.hex}};
|
||||
$onSecondaryFixed: {{colors.on_secondary_fixed.default.hex}};
|
||||
$onSecondaryFixedVariant: {{colors.on_secondary_fixed_variant.default.hex}};
|
||||
$tertiaryFixed: {{colors.tertiary_fixed.default.hex}};
|
||||
$tertiaryFixedDim: {{colors.tertiary_fixed_dim.default.hex}};
|
||||
$onTertiaryFixed: {{colors.on_tertiary_fixed.default.hex}};
|
||||
$onTertiaryFixedVariant: {{colors.on_tertiary_fixed_variant.default.hex}};
|
||||
$success: #B5CCBA;
|
||||
$onSuccess: #213528;
|
||||
$successContainer: #374B3E;
|
||||
$onSuccessContainer: #D1E9D6;
|
||||
$term0: #0D1C20;
|
||||
$term1: #8383FF;
|
||||
$term2: #63DFD4;
|
||||
$term3: #75FCDD;
|
||||
$term4: #76B4BD;
|
||||
$term5: #7AAEEA;
|
||||
$term6: #81D8D7;
|
||||
$term7: #CCDBD5;
|
||||
$term8: #B1BCB5;
|
||||
$term9: #BCB9FF;
|
||||
$term10: #F6FFFD;
|
||||
$term11: #FFFFFF;
|
||||
$term12: #BEE3E5;
|
||||
$term13: #C8DAFF;
|
||||
$term14: #E5FFFE;
|
||||
$term15: #ADEDF6;
|
||||
95
.config/matugen/templates/ags/sourceviewtheme-light.xml
Normal file
95
.config/matugen/templates/ags/sourceviewtheme-light.xml
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<style-scheme id="custom-light" _name="Custom" version="1.0">
|
||||
<author>end_4</author>
|
||||
<_description>Catppuccin port but very random</_description>
|
||||
|
||||
<style name="bracket-match" background="{{ colors.secondary_container.default.hex }}" foreground="{{ colors.on_secondary_container.default.hex }}" bold="true"/>
|
||||
<style name="bracket-mismatch" background="#E3E6EB" underline="true"/>
|
||||
<style name="c:preprocessor" foreground="#DF8E1D"/>
|
||||
<style name="css:at-rules" foreground="#8839EF"/>
|
||||
<style name="css:color" foreground="#DF8E1D"/>
|
||||
<style name="css:keyword" foreground="#256BF5"/>
|
||||
<style name="current-line" background="{{ colors.surface_container_highest.default.hex }}"/>
|
||||
<style name="cursor" foreground="#DC8A78"/>
|
||||
<style name="def:base-n-integer" foreground="#DF8E1D"/>
|
||||
<style name="def:boolean" foreground="#DF8E1D"/>
|
||||
<style name="def:builtin" foreground="#DF8E1D"/>
|
||||
<style name="def:character" foreground="#DF8E1D"/>
|
||||
<style name="def:comment" foreground="#9DA1B1"/>
|
||||
<style name="def:complex" foreground="#DF8E1D"/>
|
||||
<style name="def:decimal" foreground="#DF8E1D"/>
|
||||
<style name="def:doc-comment" foreground="#9DA1B1"/>
|
||||
<style name="def:doc-comment-element" foreground="#9DA1B1"/>
|
||||
<style name="def:error" foreground="#D53055" background="#EAEDF2"/>
|
||||
<style name="def:floating-point" foreground="#DF8E1D"/>
|
||||
<style name="def:function" foreground="#256BF5"/>
|
||||
<style name="def:identifier" foreground="#000000"/>
|
||||
<style name="def:keyword" foreground="#8839EF"/>
|
||||
<style name="def:note" foreground="#9DA1B1"/>
|
||||
<style name="def:number" foreground="#FE640B"/>
|
||||
<style name="def:operator" foreground="#8839EF"/>
|
||||
<style name="def:preprocessor" foreground="#256BF5"/>
|
||||
<style name="def:reserved" foreground="#8839EF"/>
|
||||
<style name="def:shebang" foreground="#9DA1B1"/>
|
||||
<style name="def:special-char" foreground="#256BF5"/>
|
||||
<style name="def:special-constant" foreground="#DF8E1D"/>
|
||||
<style name="def:statement" foreground="#8839EF"/>
|
||||
<style name="def:string" foreground="#4AA537"/>
|
||||
<style name="def:type" foreground="#256BF5" italic="true"/>
|
||||
<style name="diff:added-line" foreground="#282D32" background="#ACF2BD"/>
|
||||
<style name="diff:changed-line" foreground="#282D32" background="#F1F2C3"/>
|
||||
<style name="diff:location" foreground="#9DA1B1"/>
|
||||
<style name="diff:removed-line" foreground="#282D32" background="#FFEEF0"/>
|
||||
<style name="draw-spaces" foreground="#3b3a32"/>
|
||||
<style name="html:dtd" foreground="#4AA537"/>
|
||||
<style name="html:tag" foreground="#8839EF"/>
|
||||
<style name="js:function" foreground="#256BF5"/>
|
||||
<style name="line-numbers" foreground="#9699AA" background="#EAEDF2"/>
|
||||
<style name="perl:builtin" foreground="#256BF5"/>
|
||||
<style name="perl:include-statement" foreground="#8839EF"/>
|
||||
<style name="perl:special-variable" foreground="#DF8E1D"/>
|
||||
<style name="perl:variable" foreground="#000000"/>
|
||||
<style name="php:string" foreground="#4AA537"/>
|
||||
<style name="python:builtin-constant" foreground="#8839EF"/>
|
||||
<style name="python:builtin-function" foreground="#256BF5"/>
|
||||
<style name="python:module-handler" foreground="#8839EF"/>
|
||||
<style name="python:special-variable" foreground="#8839EF"/>
|
||||
<style name="ruby:attribute-definition" foreground="#8839EF"/>
|
||||
<style name="ruby:builtin" foreground="#000000"/>
|
||||
<style name="ruby:class-variable" foreground="#000000"/>
|
||||
<style name="ruby:constant" foreground="#000000"/>
|
||||
<style name="ruby:global-variable" foreground="#256BF5"/>
|
||||
<style name="ruby:instance-variable" foreground="#000000"/>
|
||||
<style name="ruby:module-handler" foreground="#8839EF"/>
|
||||
<style name="ruby:predefined-variable" foreground="#DF8E1D"/>
|
||||
<style name="ruby:regex" foreground="#f6aa11"/>
|
||||
<style name="ruby:special-variable" foreground="#8839EF"/>
|
||||
<style name="ruby:symbol" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:attribute-definition" foreground="#8839EF"/>
|
||||
<style name="rubyonrails:block-parameter" foreground="#fd971f" italic="true"/>
|
||||
<style name="rubyonrails:builtin" foreground="#000000"/>
|
||||
<style name="rubyonrails:class-inherit" foreground="#256BF5" underline="true" italic="true"/>
|
||||
<style name="rubyonrails:class-name" foreground="#256BF5"/>
|
||||
<style name="rubyonrails:class-variable" foreground="#000000"/>
|
||||
<style name="rubyonrails:complex-interpolation" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:constant" foreground="#000000"/>
|
||||
<style name="rubyonrails:global-variable" foreground="#256BF5"/>
|
||||
<style name="rubyonrails:instance-variable" foreground="#000000"/>
|
||||
<style name="rubyonrails:module-handler" foreground="#8839EF"/>
|
||||
<style name="rubyonrails:module-name" foreground="#256BF5"/>
|
||||
<style name="rubyonrails:predefined-variable" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:rails" foreground="#000000"/>
|
||||
<style name="rubyonrails:regex" foreground="#f6aa11"/>
|
||||
<style name="rubyonrails:simple-interpolation" foreground="#DF8E1D"/>
|
||||
<style name="rubyonrails:special-variable" foreground="#8839EF"/>
|
||||
<style name="rubyonrails:symbol" foreground="#DF8E1D"/>
|
||||
<style name="search-match" background="#E3E6EB" bold="true" underline="true"/>
|
||||
<style name="selection" foreground="#f8f8f2" background="#444444"/>
|
||||
<style name="text" foreground="#f8f8f2" background="#222222"/>
|
||||
<style name="xml:attribute-name" foreground="#256BF5"/>
|
||||
<style name="xml:element-name" foreground="#8839EF"/>
|
||||
<style name="xml:entity" foreground="#c8cecc"/>
|
||||
<style name="xml:namespace" foreground="#8839EF"/>
|
||||
<style name="xml:tag" foreground="#8839EF"/>
|
||||
|
||||
</style-scheme>
|
||||
121
.config/matugen/templates/ags/sourceviewtheme.xml
Normal file
121
.config/matugen/templates/ags/sourceviewtheme.xml
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (C) 2014 Leo Iannacone <info@leoiannacone.com>
|
||||
|
||||
This file was generated from a textmate theme named Monokai Extended
|
||||
with tm2gtksw2 tool. (Alexandre da Silva)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA.
|
||||
-->
|
||||
|
||||
<!-- MODIFIED -->
|
||||
|
||||
<style-scheme id="custom" _name="Custom" version="1.0">
|
||||
<author>Leo Iannacone</author>
|
||||
<_description>Based on SublimeText Monokai Extended - Generated with tm2gtksw2</_description>
|
||||
|
||||
<style name="bracket-match" background="{{ colors.secondary_container.default.hex }}" foreground="{{ colors.on_secondary_container.default.hex }}" bold="true"/>
|
||||
<style name="bracket-mismatch" background="#333333" underline="true"/>
|
||||
<style name="c:preprocessor" foreground="#be84ff"/>
|
||||
<style name="css:at-rules" foreground="#f92672"/>
|
||||
<style name="css:color" foreground="#be84ff"/>
|
||||
<style name="css:keyword" foreground="#66d9ef"/>
|
||||
<style name="current-line" background="{{ colors.surface_container_highest.default.hex }}"/>
|
||||
<style name="cursor" foreground="#f8f8f0"/>
|
||||
<style name="def:base-n-integer" foreground="#be84ff"/>
|
||||
<style name="def:boolean" foreground="#be84ff"/>
|
||||
<style name="def:builtin" foreground="#be84ff"/>
|
||||
<style name="def:character" foreground="#be84ff"/>
|
||||
<style name="def:comment" foreground="#75715e"/>
|
||||
<style name="def:complex" foreground="#be84ff"/>
|
||||
<style name="def:decimal" foreground="#be84ff"/>
|
||||
<style name="def:doc-comment" foreground="#75715e"/>
|
||||
<style name="def:doc-comment-element" foreground="#75715e"/>
|
||||
<style name="def:error" foreground="#f8f8f0" background="#f92672"/>
|
||||
<style name="def:floating-point" foreground="#be84ff"/>
|
||||
<style name="def:function" foreground="#a6e22e"/>
|
||||
<style name="def:identifier" foreground="#ffffff"/>
|
||||
<style name="def:keyword" foreground="#f92672"/>
|
||||
<style name="def:note" foreground="#75715e"/>
|
||||
<style name="def:number" foreground="#be84ff"/>
|
||||
<style name="def:operator" foreground="#f92672"/>
|
||||
<style name="def:preprocessor" foreground="#66d9ef"/>
|
||||
<style name="def:reserved" foreground="#f92672"/>
|
||||
<style name="def:shebang" foreground="#75715e"/>
|
||||
<style name="def:special-char" foreground="#66d9ef"/>
|
||||
<style name="def:special-constant" foreground="#be84ff"/>
|
||||
<style name="def:statement" foreground="#f92672"/>
|
||||
<style name="def:string" foreground="#e6db74"/>
|
||||
<style name="def:type" foreground="#66d9ef" italic="true"/>
|
||||
<style name="diff:added-line" foreground="#a6e22e"/>
|
||||
<style name="diff:changed-line" foreground="#e6db74"/>
|
||||
<style name="diff:location" foreground="#75715e"/>
|
||||
<style name="diff:removed-line" foreground="#f92672"/>
|
||||
<style name="draw-spaces" foreground="#3b3a32"/>
|
||||
<style name="html:dtd" foreground="#e6db74"/>
|
||||
<style name="html:tag" foreground="#f92672"/>
|
||||
<style name="js:function" foreground="#66d9ef"/>
|
||||
<style name="line-numbers" foreground="#bebeba" background="#333333"/>
|
||||
<style name="perl:builtin" foreground="#a6e22e"/>
|
||||
<style name="perl:include-statement" foreground="#f92672"/>
|
||||
<style name="perl:special-variable" foreground="#be84ff"/>
|
||||
<style name="perl:variable" foreground="#ffffff"/>
|
||||
<style name="php:string" foreground="#e6db74"/>
|
||||
<style name="python:builtin-constant" foreground="#f92672"/>
|
||||
<style name="python:builtin-function" foreground="#a6e22e"/>
|
||||
<style name="python:module-handler" foreground="#f92672"/>
|
||||
<style name="python:special-variable" foreground="#f92672"/>
|
||||
<style name="ruby:attribute-definition" foreground="#f92672"/>
|
||||
<style name="ruby:builtin" foreground="#ffffff"/>
|
||||
<style name="ruby:class-variable" foreground="#ffffff"/>
|
||||
<style name="ruby:constant" foreground="#ffffff"/>
|
||||
<style name="ruby:global-variable" foreground="#a6e22e"/>
|
||||
<style name="ruby:instance-variable" foreground="#ffffff"/>
|
||||
<style name="ruby:module-handler" foreground="#f92672"/>
|
||||
<style name="ruby:predefined-variable" foreground="#be84ff"/>
|
||||
<style name="ruby:regex" foreground="#f6aa11"/>
|
||||
<style name="ruby:special-variable" foreground="#f92672"/>
|
||||
<style name="ruby:symbol" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:attribute-definition" foreground="#f92672"/>
|
||||
<style name="rubyonrails:block-parameter" foreground="#fd971f" italic="true"/>
|
||||
<style name="rubyonrails:builtin" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:class-inherit" foreground="#a6e22e" underline="true" italic="true"/>
|
||||
<style name="rubyonrails:class-name" foreground="#66d9ef"/>
|
||||
<style name="rubyonrails:class-variable" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:complex-interpolation" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:constant" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:global-variable" foreground="#a6e22e"/>
|
||||
<style name="rubyonrails:instance-variable" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:module-handler" foreground="#f92672"/>
|
||||
<style name="rubyonrails:module-name" foreground="#66d9ef"/>
|
||||
<style name="rubyonrails:predefined-variable" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:rails" foreground="#ffffff"/>
|
||||
<style name="rubyonrails:regex" foreground="#f6aa11"/>
|
||||
<style name="rubyonrails:simple-interpolation" foreground="#be84ff"/>
|
||||
<style name="rubyonrails:special-variable" foreground="#f92672"/>
|
||||
<style name="rubyonrails:symbol" foreground="#be84ff"/>
|
||||
<style name="search-match" background="#333333" bold="true" underline="true"/>
|
||||
<style name="selection" foreground="#f8f8f2" background="#444444"/>
|
||||
<style name="text" foreground="#f8f8f2" background="#222222"/>
|
||||
<style name="xml:attribute-name" foreground="#a6e22e"/>
|
||||
<style name="xml:element-name" foreground="#f92672"/>
|
||||
<style name="xml:entity" foreground="#c8cecc"/>
|
||||
<style name="xml:namespace" foreground="#f92672"/>
|
||||
<style name="xml:tag" foreground="#f92672"/>
|
||||
|
||||
|
||||
</style-scheme>
|
||||
|
||||
51
.config/matugen/templates/colors.json
Normal file
51
.config/matugen/templates/colors.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"background": "{{colors.background.default.hex}}",
|
||||
"error": "{{colors.error.default.hex}}",
|
||||
"error_container": "{{colors.error_container.default.hex}}",
|
||||
"inverse_on_surface": "{{colors.inverse_on_surface.default.hex}}",
|
||||
"inverse_primary": "{{colors.inverse_primary.default.hex}}",
|
||||
"inverse_surface": "{{colors.inverse_surface.default.hex}}",
|
||||
"on_background": "{{colors.on_background.default.hex}}",
|
||||
"on_error": "{{colors.on_error.default.hex}}",
|
||||
"on_error_container": "{{colors.on_error_container.default.hex}}",
|
||||
"on_primary": "{{colors.on_primary.default.hex}}",
|
||||
"on_primary_container": "{{colors.on_primary_container.default.hex}}",
|
||||
"on_primary_fixed": "{{colors.on_primary_fixed.default.hex}}",
|
||||
"on_primary_fixed_variant": "{{colors.on_primary_fixed_variant.default.hex}}",
|
||||
"on_secondary": "{{colors.on_secondary.default.hex}}",
|
||||
"on_secondary_container": "{{colors.on_secondary_container.default.hex}}",
|
||||
"on_secondary_fixed": "{{colors.on_secondary_fixed.default.hex}}",
|
||||
"on_secondary_fixed_variant": "{{colors.on_secondary_fixed_variant.default.hex}}",
|
||||
"on_surface": "{{colors.on_surface.default.hex}}",
|
||||
"on_surface_variant": "{{colors.on_surface_variant.default.hex}}",
|
||||
"on_tertiary": "{{colors.on_tertiary.default.hex}}",
|
||||
"on_tertiary_container": "{{colors.on_tertiary_container.default.hex}}",
|
||||
"on_tertiary_fixed": "{{colors.on_tertiary_fixed.default.hex}}",
|
||||
"on_tertiary_fixed_variant": "{{colors.on_tertiary_fixed_variant.default.hex}}",
|
||||
"outline": "{{colors.outline.default.hex}}",
|
||||
"outline_variant": "{{colors.outline_variant.default.hex}}",
|
||||
"primary": "{{colors.primary.default.hex}}",
|
||||
"primary_container": "{{colors.primary_container.default.hex}}",
|
||||
"primary_fixed": "{{colors.primary_fixed.default.hex}}",
|
||||
"primary_fixed_dim": "{{colors.primary_fixed_dim.default.hex}}",
|
||||
"scrim": "{{colors.scrim.default.hex}}",
|
||||
"secondary": "{{colors.secondary.default.hex}}",
|
||||
"secondary_container": "{{colors.secondary_container.default.hex}}",
|
||||
"secondary_fixed": "{{colors.secondary_fixed.default.hex}}",
|
||||
"secondary_fixed_dim": "{{colors.secondary_fixed_dim.default.hex}}",
|
||||
"shadow": "{{colors.shadow.default.hex}}",
|
||||
"surface": "{{colors.surface.default.hex}}",
|
||||
"surface_bright": "{{colors.surface_bright.default.hex}}",
|
||||
"surface_container": "{{colors.surface_container.default.hex}}",
|
||||
"surface_container_high": "{{colors.surface_container_high.default.hex}}",
|
||||
"surface_container_highest": "{{colors.surface_container_highest.default.hex}}",
|
||||
"surface_container_low": "{{colors.surface_container_low.default.hex}}",
|
||||
"surface_container_lowest": "{{colors.surface_container_lowest.default.hex}}",
|
||||
"surface_dim": "{{colors.surface_dim.default.hex}}",
|
||||
"surface_tint": "{{colors.surface_tint.default.hex}}",
|
||||
"surface_variant": "{{colors.surface_variant.default.hex}}",
|
||||
"tertiary": "{{colors.tertiary.default.hex}}",
|
||||
"tertiary_container": "{{colors.tertiary_container.default.hex}}",
|
||||
"tertiary_fixed": "{{colors.tertiary_fixed.default.hex}}",
|
||||
"tertiary_fixed_dim": "{{colors.tertiary_fixed_dim.default.hex}}"
|
||||
}
|
||||
8
.config/matugen/templates/fuzzel/fuzzel_theme.ini
Normal file
8
.config/matugen/templates/fuzzel/fuzzel_theme.ini
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[colors]
|
||||
background={{colors.background.default.hex_stripped}}ff
|
||||
text={{colors.on_background.default.hex_stripped}}ff
|
||||
selection={{colors.surface_variant.default.hex_stripped}}ff
|
||||
selection-text={{colors.on_surface_variant.default.hex_stripped}}ff
|
||||
border={{colors.surface_variant.default.hex_stripped}}dd
|
||||
match={{colors.primary.default.hex_stripped}}ff
|
||||
selection-match={{colors.primary.default.hex_stripped}}ff
|
||||
22
.config/matugen/templates/gtk/gtk-colors.css
Normal file
22
.config/matugen/templates/gtk/gtk-colors.css
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* GTK Colors
|
||||
* Generated with Matugen
|
||||
*/
|
||||
|
||||
@define-color accent_color {{colors.primary.default.hex}};
|
||||
@define-color accent_fg_color {{colors.on_primary.default.hex}};
|
||||
@define-color accent_bg_color {{colors.primary.default.hex}};
|
||||
@define-color window_bg_color {{colors.background.default.hex}};
|
||||
@define-color window_fg_color {{colors.on_background.default.hex}};
|
||||
@define-color headerbar_bg_color {{colors.surface_dim.default.hex}};
|
||||
@define-color headerbar_fg_color {{colors.on_surface.default.hex}};
|
||||
@define-color popover_bg_color {{colors.surface_dim.default.hex}};
|
||||
@define-color popover_fg_color {{colors.on_surface.default.hex}};
|
||||
@define-color view_bg_color {{colors.surface.default.hex}};
|
||||
@define-color view_fg_color {{colors.on_surface.default.hex}};
|
||||
@define-color card_bg_color {{colors.surface.default.hex}};
|
||||
@define-color card_fg_color {{colors.on_surface.default.hex}};
|
||||
@define-color sidebar_bg_color @window_bg_color;
|
||||
@define-color sidebar_fg_color @window_fg_color;
|
||||
@define-color sidebar_border_color @window_bg_color;
|
||||
@define-color sidebar_backdrop_color @window_bg_color;
|
||||
10
.config/matugen/templates/hyprland/hyprland.colors.conf
Normal file
10
.config/matugen/templates/hyprland/hyprland.colors.conf
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
general {
|
||||
col.active_border = rgba({{colors.on_surface.default.hex_stripped}}39)
|
||||
col.inactive_border = rgba({{colors.outline.default.hex_stripped}}30)
|
||||
}
|
||||
|
||||
misc {
|
||||
background_color = rgba({{colors.surface.dark.hex_stripped}}FF)
|
||||
}
|
||||
|
||||
windowrulev2 = bordercolor rgba({{colors.primary.default.hex_stripped}}AA) rgba({{colors.primary.default.hex_stripped}}77),pinned:1
|
||||
99
.config/matugen/templates/hyprland/hyprlock.conf
Normal file
99
.config/matugen/templates/hyprland/hyprlock.conf
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
$text_color = rgba({{colors.primary_fixed.default.hex_stripped}}FF)
|
||||
$entry_background_color = rgba({{colors.on_primary_fixed.default.hex_stripped}}11)
|
||||
$entry_border_color = rgba({{colors.outline.default.hex_stripped}}55)
|
||||
$entry_color = rgba({{colors.primary_fixed.default.hex_stripped}}FF)
|
||||
$font_family = Rubik Light
|
||||
$font_family_clock = Rubik Light
|
||||
$font_material_symbols = Material Symbols Rounded
|
||||
|
||||
background {
|
||||
monitor =
|
||||
path = screenshot
|
||||
color = rgba(25, 20, 20, .2)
|
||||
|
||||
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
||||
blur_passes = 4 # 0 disables blurring
|
||||
blur_size = 7
|
||||
noise = 0.0117
|
||||
contrast = 0.8916
|
||||
brightness = 0.8172
|
||||
vibrancy = 0.1696
|
||||
vibrancy_darkness = 0.0
|
||||
}
|
||||
input-field {
|
||||
monitor =
|
||||
size = 250, 50
|
||||
outline_thickness = 2
|
||||
dots_size = 0.1
|
||||
dots_spacing = 0.3
|
||||
outer_color = $entry_border_color
|
||||
inner_color = $entry_background_color
|
||||
font_color = $entry_color
|
||||
fade_on_empty = true
|
||||
|
||||
position = 0, 20
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
label { # Caps Lock Warning
|
||||
monitor =
|
||||
text = cmd[update:250] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/check-capslock.sh
|
||||
color = $text_color
|
||||
font_size = 13
|
||||
font_family = $font_family
|
||||
position = 0, -25
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
|
||||
label { # Clock
|
||||
monitor =
|
||||
text = $TIME
|
||||
color = $text_color
|
||||
font_size = 65
|
||||
font_family = $font_family_clock
|
||||
|
||||
position = 0, 300
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
label { # Date
|
||||
monitor =
|
||||
text = cmd[update:5000] date +"%A, %B %d"
|
||||
color = $text_color
|
||||
font_size = 17
|
||||
font_family = $font_family
|
||||
|
||||
position = 0, 240
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
label { # User
|
||||
monitor =
|
||||
text = $USER
|
||||
color = $text_color
|
||||
outline_thickness = 2
|
||||
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = true
|
||||
font_size = 20
|
||||
font_family = $font_family
|
||||
position = 0, 50
|
||||
halign = center
|
||||
valign = bottom
|
||||
}
|
||||
|
||||
label { # Status
|
||||
monitor =
|
||||
text = cmd[update:5000] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/status.sh
|
||||
color = $text_color
|
||||
font_size = 14
|
||||
font_family = $font_family
|
||||
|
||||
position = 30, -30
|
||||
halign = left
|
||||
valign = top
|
||||
}
|
||||
1
.config/matugen/templates/kde/color.txt
Normal file
1
.config/matugen/templates/kde/color.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
{{colors.source_color.default.hex}}
|
||||
46
.config/matugen/templates/kde/kde-material-you-colors-wrapper.sh
Executable file
46
.config/matugen/templates/kde/kde-material-you-colors-wrapper.sh
Executable file
|
|
@ -0,0 +1,46 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
||||
|
||||
color=$(tr -d '\n' < "$XDG_STATE_HOME/quickshell/user/generated/color.txt")
|
||||
|
||||
current_mode=$(gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null | tr -d "'")
|
||||
if [[ "$current_mode" == "prefer-dark" ]]; then
|
||||
mode_flag="-d"
|
||||
else
|
||||
mode_flag="-l"
|
||||
fi
|
||||
|
||||
# Parse --scheme-variant flag
|
||||
scheme_variant_str=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--scheme-variant)
|
||||
scheme_variant_str="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Map string variant to integer
|
||||
case "$scheme_variant_str" in
|
||||
scheme-content) sv_num=0 ;;
|
||||
scheme-expressive) sv_num=1 ;;
|
||||
scheme-fidelity) sv_num=2 ;;
|
||||
scheme-monochrome) sv_num=3 ;;
|
||||
scheme-neutral) sv_num=4 ;;
|
||||
scheme-tonal-spot) sv_num=5 ;;
|
||||
scheme-vibrant) sv_num=6 ;;
|
||||
scheme-rainbow) sv_num=7 ;;
|
||||
scheme-fruit-salad) sv_num=8 ;;
|
||||
"") sv_num=5 ;;
|
||||
*)
|
||||
echo "Unknown scheme variant: $scheme_variant_str" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
kde-material-you-colors "$mode_flag" --color "$color" -sv "$sv_num"
|
||||
1
.config/matugen/templates/wallpaper.txt
Normal file
1
.config/matugen/templates/wallpaper.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
{{image}}
|
||||
|
|
@ -10,12 +10,12 @@ Singleton {
|
|||
}
|
||||
|
||||
property QtObject ai: QtObject {
|
||||
property string systemPrompt: qsTr("Use casual tone. No user knowledge is to be assumed except basic Linux literacy. Be brief and concise: When explaining concepts, use bullet points (prefer minus sign (-) over asterisk (*)) and highlight keywords in bold to pinpoint the main concepts instead of long paragraphs. You are also encouraged to split your response with h2 headers, each header title beginning with an emoji, like `## 🐧 Linux`. When making changes to the user's config, you must get the config to know what values there are before setting.")
|
||||
property string systemPrompt: qsTr("Use casual tone. Be brief and concise: When explaining concepts, use bullet points (prefer minus sign (-) over asterisk (*)) and highlight keywords in bold to pinpoint the main concepts instead of long paragraphs. User uses NixOS and is knowledgable in rust and web development.")
|
||||
}
|
||||
|
||||
property QtObject appearance: QtObject {
|
||||
property int fakeScreenRounding: 2 // 0: None | 1: Always | 2: When not fullscreen
|
||||
property bool transparency: false
|
||||
property int fakeScreenRounding: 0 // 0: None | 1: Always | 2: When not fullscreen
|
||||
property bool transparency: true
|
||||
property QtObject palette: QtObject {
|
||||
property string type: "auto" // Allowed: auto, scheme-content, scheme-expressive, scheme-fidelity, scheme-fruit-salad, scheme-monochrome, scheme-neutral, scheme-rainbow, scheme-tonal-spot
|
||||
}
|
||||
|
|
@ -46,25 +46,25 @@ Singleton {
|
|||
property QtObject bar: QtObject {
|
||||
property bool bottom: false // Instead of top
|
||||
property bool borderless: false // true for no grouping of items
|
||||
property string topLeftIcon: "spark" // Options: distro, spark
|
||||
property bool showBackground: true
|
||||
property string topLeftIcon: "distro" // Options: distro, spark
|
||||
property bool showBackground: false
|
||||
property bool verbose: true
|
||||
property QtObject resources: QtObject {
|
||||
property bool alwaysShowSwap: true
|
||||
property bool alwaysShowCpu: false
|
||||
property bool alwaysShowCpu: true
|
||||
}
|
||||
property list<string> screenList: [] // List of names, like "eDP-1", find out with 'hyprctl monitors' command
|
||||
property QtObject utilButtons: QtObject {
|
||||
property bool showScreenSnip: true
|
||||
property bool showColorPicker: false
|
||||
property bool showMicToggle: false
|
||||
property bool showKeyboardToggle: true
|
||||
property bool showColorPicker: true
|
||||
property bool showMicToggle: true
|
||||
property bool showKeyboardToggle: false
|
||||
}
|
||||
property QtObject tray: QtObject {
|
||||
property bool monochromeIcons: true
|
||||
}
|
||||
property QtObject workspaces: QtObject {
|
||||
property int shown: 10
|
||||
property int shown: 9
|
||||
property bool showAppIcons: true
|
||||
property bool alwaysShowNumbers: false
|
||||
property int showNumberDelay: 300 // milliseconds
|
||||
|
|
@ -137,7 +137,7 @@ Singleton {
|
|||
property int delay: 300 // Delay before sending request. Reduces (potential) rate limits and lag.
|
||||
}
|
||||
property QtObject booru: QtObject {
|
||||
property bool allowNsfw: false
|
||||
property bool allowNsfw: true
|
||||
property string defaultProvider: "yandere"
|
||||
property int limit: 20
|
||||
property QtObject zerochan: QtObject {
|
||||
|
|
@ -149,7 +149,7 @@ Singleton {
|
|||
property QtObject time: QtObject {
|
||||
// https://doc.qt.io/qt-6/qtime.html#toString
|
||||
property string format: "hh:mm"
|
||||
property string dateFormat: "dddd, dd/MM"
|
||||
property string dateFormat: "ddd, dd/MM"
|
||||
}
|
||||
|
||||
property QtObject windows: QtObject {
|
||||
|
|
|
|||
|
|
@ -64,13 +64,13 @@ Item { // Player instance
|
|||
}
|
||||
|
||||
onArtUrlChanged: {
|
||||
playerController.downloaded = false
|
||||
if (playerController.artUrl.length == 0) {
|
||||
playerController.artDominantColor = Appearance.m3colors.m3secondaryContainer
|
||||
return;
|
||||
}
|
||||
// console.log("PlayerControl: Art URL changed to", playerController.artUrl)
|
||||
// console.log("Download cmd:", coverArtDownloader.command.join(" "))
|
||||
playerController.downloaded = false
|
||||
coverArtDownloader.running = true
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ Item {
|
|||
Layout.alignment: Qt.AlignHCenter
|
||||
iconSize: 60
|
||||
color: Appearance.m3colors.m3outline
|
||||
text: "bookmark_heart"
|
||||
text: "favorite"
|
||||
}
|
||||
StyledText {
|
||||
id: widgetNameText
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ Item {
|
|||
property var tabButtonList: [
|
||||
...(ConfigOptions.policies.ai !== 0 ? [{"icon": "neurology", "name": qsTr("Intelligence")}] : []),
|
||||
{"icon": "translate", "name": qsTr("Translator")},
|
||||
...(ConfigOptions.policies.weeb === 1 ? [{"icon": "bookmark_heart", "name": qsTr("Anime")}] : [])
|
||||
...(ConfigOptions.policies.weeb === 1 ? [{"icon": "favorite", "name": qsTr("Anime")}] : [])
|
||||
]
|
||||
property int selectedTab: 0
|
||||
|
||||
|
|
|
|||
16
.config/quickshell/scripts/colors/colors_from_image.sh
Executable file
16
.config/quickshell/scripts/colors/colors_from_image.sh
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
|
||||
XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
||||
CONFIG_DIR="$XDG_CONFIG_HOME/quickshell"
|
||||
CACHE_DIR="$XDG_CACHE_HOME/quickshell"
|
||||
STATE_DIR="$XDG_STATE_HOME/quickshell"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MATUGEN_DIR="$XDG_CONFIG_HOME/matugen"
|
||||
terminalscheme="$XDG_CONFIG_HOME/quickshell/scripts/terminal/scheme-base.json"
|
||||
IMAGE="$1"
|
||||
|
||||
matugen image "$IMAGE"
|
||||
python3 "$SCRIPT_DIR/generate_colors_material.py" --path "$IMAGE" \
|
||||
> "$STATE_DIR"/user/generated/material_colors.scss
|
||||
|
|
@ -45,17 +45,17 @@ post_process() {
|
|||
local screen_height="$2"
|
||||
local wallpaper_path="$3"
|
||||
|
||||
handle_kde_material_you_colors &
|
||||
# handle_kde_material_you_colors &
|
||||
|
||||
# Determine the largest region on the wallpaper that's sufficiently un-busy to put widgets in
|
||||
if [ ! -f "$MATUGEN_DIR/scripts/least_busy_region.py" ]; then
|
||||
echo "Error: least_busy_region.py script not found in $MATUGEN_DIR/scripts/"
|
||||
else
|
||||
"$MATUGEN_DIR/scripts/least_busy_region.py" \
|
||||
--screen-width "$screen_width" --screen-height "$screen_height" \
|
||||
--width 300 --height 200 \
|
||||
"$wallpaper_path" > "$STATE_DIR"/user/generated/wallpaper/least_busy_region.json
|
||||
fi
|
||||
# if [ ! -f "$MATUGEN_DIR/scripts/least_busy_region.py" ]; then
|
||||
# echo "Error: least_busy_region.py script not found in $MATUGEN_DIR/scripts/"
|
||||
# else
|
||||
# "$MATUGEN_DIR/scripts/least_busy_region.py" \
|
||||
# --screen-width "$screen_width" --screen-height "$screen_height" \
|
||||
# --width 300 --height 200 \
|
||||
# "$wallpaper_path" > "$STATE_DIR"/user/generated/wallpaper/least_busy_region.json
|
||||
# fi
|
||||
}
|
||||
|
||||
check_and_prompt_upscale() {
|
||||
|
|
@ -162,7 +162,7 @@ switch() {
|
|||
exit 0
|
||||
fi
|
||||
|
||||
check_and_prompt_upscale "$imgpath" &
|
||||
# check_and_prompt_upscale "$imgpath" &
|
||||
kill_existing_mpvpaper
|
||||
|
||||
if is_video "$imgpath"; then
|
||||
|
|
@ -242,11 +242,11 @@ switch() {
|
|||
pre_process "$mode_flag"
|
||||
|
||||
matugen "${matugen_args[@]}"
|
||||
source "$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate"
|
||||
# source "$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate"
|
||||
python3 "$SCRIPT_DIR/generate_colors_material.py" "${generate_colors_material_args[@]}" \
|
||||
> "$STATE_DIR"/user/generated/material_colors.scss
|
||||
"$SCRIPT_DIR"/applycolor.sh
|
||||
deactivate
|
||||
# deactivate
|
||||
|
||||
# Pass screen width, height, and wallpaper path to post_process
|
||||
max_width_desired="$(hyprctl monitors -j | jq '([.[].width] | min)' | xargs)"
|
||||
|
|
@ -334,6 +334,8 @@ main() {
|
|||
imgpath="$(kdialog --getopenfilename . --title 'Choose wallpaper')"
|
||||
fi
|
||||
|
||||
type_flag="scheme-tonal-spot"
|
||||
|
||||
# If type_flag is 'auto', detect scheme type from image (after imgpath is set)
|
||||
if [[ "$type_flag" == "auto" ]]; then
|
||||
if [[ -n "$imgpath" && -f "$imgpath" ]]; then
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ Singleton {
|
|||
case "arch": distroIcon = "arch-symbolic"; break;
|
||||
case "endeavouros": distroIcon = "endeavouros-symbolic"; break;
|
||||
case "cachyos": distroIcon = "cachyos-symbolic"; break;
|
||||
case "nix-snowflake":
|
||||
case "nixos": distroIcon = "nixos-symbolic"; break;
|
||||
case "fedora": distroIcon = "fedora-symbolic"; break;
|
||||
case "linuxmint":
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ My dotfiles and nix setup incl. scripts for hyprland and some other goodies.
|
|||
|
||||
Please do edit configuration of at least hyprland - default configuration is very specific to my setup (involves monitor scaling)
|
||||
|
||||
Quickshell config based on (end-4's config)[https://github.com/end-4/dots-hyprland], you'll have a better time configuring them (gui settings for non-nix users).
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ in
|
|||
LC_NUMERIC = "cs_CZ.UTF-8";
|
||||
LC_PAPER = "cs_CZ.UTF-8";
|
||||
LC_TELEPHONE = "cs_CZ.UTF-8";
|
||||
LC_TIME = "cs_CZ.UTF-8";
|
||||
LC_TIME = "en_GB.UTF-8";
|
||||
};
|
||||
services.dnsmasq.enable = true;
|
||||
services.displayManager.sddm.enable = true;
|
||||
|
|
@ -284,6 +284,26 @@ in
|
|||
libsForQt5.kcoreaddons
|
||||
libsForQt5.kirigami2
|
||||
kdePackages.syntax-highlighting
|
||||
|
||||
(python313.withPackages(ps: with ps; [
|
||||
build
|
||||
pillow
|
||||
cffi
|
||||
libsass
|
||||
material-color-utilities
|
||||
materialyoucolor
|
||||
numpy
|
||||
packaging
|
||||
pillow
|
||||
psutil
|
||||
pycparser
|
||||
pyproject-hooks
|
||||
pywayland
|
||||
setproctitle
|
||||
setuptools
|
||||
setuptools-scm
|
||||
wheel
|
||||
]))
|
||||
];
|
||||
|
||||
environment.variables = let
|
||||
|
|
|
|||
10
home.nix
10
home.nix
|
|
@ -26,6 +26,16 @@ in
|
|||
hyprwayland-scanner
|
||||
hyprcursor
|
||||
material-symbols
|
||||
cava
|
||||
cliphist
|
||||
matugen
|
||||
swww
|
||||
kdePackages.fcitx5-with-addons
|
||||
easyeffects
|
||||
mpvpaper
|
||||
uv
|
||||
hyprshot
|
||||
libsecret
|
||||
|
||||
# cloud things
|
||||
minikube
|
||||
|
|
|
|||
10
python/requirements.in
Normal file
10
python/requirements.in
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
build
|
||||
pillow
|
||||
setuptools-scm
|
||||
wheel
|
||||
pywayland
|
||||
psutil
|
||||
materialyoucolor
|
||||
libsass
|
||||
material-color-utilities
|
||||
setproctitle
|
||||
38
python/requirements.txt
Normal file
38
python/requirements.txt
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# This file was autogenerated by uv via the following command:
|
||||
# uv pip compile scriptdata/requirements.in -o scriptdata/requirements.txt
|
||||
build==1.2.2.post1
|
||||
# via -r scriptdata/requirements.in
|
||||
cffi==1.17.1
|
||||
# via pywayland
|
||||
libsass==0.23.0
|
||||
# via -r scriptdata/requirements.in
|
||||
material-color-utilities==0.2.1
|
||||
# via -r scriptdata/requirements.in
|
||||
materialyoucolor==2.0.10
|
||||
# via -r scriptdata/requirements.in
|
||||
numpy==2.2.2
|
||||
# via material-color-utilities
|
||||
packaging==24.2
|
||||
# via
|
||||
# build
|
||||
# setuptools-scm
|
||||
pillow==11.1.0
|
||||
# via
|
||||
# -r scriptdata/requirements.in
|
||||
# material-color-utilities
|
||||
psutil==6.1.1
|
||||
# via -r scriptdata/requirements.in
|
||||
pycparser==2.22
|
||||
# via cffi
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
pywayland==0.4.18
|
||||
# via -r scriptdata/requirements.in
|
||||
setproctitle==1.3.4
|
||||
# via -r scriptdata/requirements.in
|
||||
setuptools==80.9.0
|
||||
# via setuptools-scm
|
||||
setuptools-scm==8.1.0
|
||||
# via -r scriptdata/requirements.in
|
||||
wheel==0.45.1
|
||||
# via -r scriptdata/requirements.in
|
||||
Loading…
Reference in a new issue