big updates

This commit is contained in:
sankalp committed 2024-07-30 10:19:03 +05:45
1 parent 0c82692536
commit c7c8ea67c7
42 files changed
+1083 -665

No files matched your search

File renamed without changes.
+8
View File
@@ -0,0 +1,8 @@
{
"custom-color": "none",
"swww-anim": "wipe",
"color-scheme": "dark",
"generation-scheme": "tonalSpot",
"wallpaper-engine": "swww",
"hyprpaper-tpl": "preload = WALLPAPER\n wallpaper = ,WALLPAPER\n splash = false"
}
+45 -42
View File
@@ -36,7 +36,6 @@ export const updateGenerationScheme = async (scheme: string) => {
} }
}; };
let theme_reload_lock = false; let theme_reload_lock = false;
const color_generator = `${GLib.get_home_dir()}/dotfiles/material-colors/generate.py`; const color_generator = `${GLib.get_home_dir()}/dotfiles/material-colors/generate.py`;
@@ -83,55 +82,59 @@ function toHex(value: number) {
return hex.length == 1 ? "0" + hex : hex; return hex.length == 1 ? "0" + hex : hex;
} }
const ReloadTheme = () => { const ReloadTheme = async () => {
let { color, scheme } = theme_settings; let { color, scheme } = theme_settings;
let _color = color.value; let _color = color.value;
let color_to_write = _color; let color_to_write = _color;
if (_color.length > 0 && isNumeric(_color) && Number(_color) >= 0 && Number(_color) <= 360) { if (_color.length > 0 && isNumeric(_color) && Number(_color) >= 0 && Number(_color) <= 360) {
_color = hueToHex(Number(_color)); _color = hueToHex(Number(_color));
color_to_write = `-${color.value}`; color_to_write = `${color.value}`;
} }
if (theme_reload_lock) return; if (theme_reload_lock) return;
function Default() {
Utils.execAsync(`python -O ${color_generator} -w --color-scheme "${theme.value}" --scheme "${scheme.value}"`)
.finally(() => {
theme_reload_lock = false;
})
.then(() => {
// Update custom-color in settings.json
Utils.readFileAsync(settings_file)
.then((out) => {
const settings = JSON.parse(out);
settings["custom-color"] = "none";
Utils.writeFile(JSON.stringify(settings, null, 2), settings_file).catch(print);
})
.catch(print);
})
.catch(print);
}
theme_reload_lock = true; theme_reload_lock = true;
if (_color != "none" && _color.length > 6)
Utils.execAsync( const updateSettingsFile = async (customColor: string) => {
`python -O ${color_generator} --color "${_color}" --color-scheme "${theme.value}" --scheme "${scheme.value}"` try {
) const settingsContent = await Utils.readFile(settings_file);
.finally(() => { const settings = JSON.parse(settingsContent);
theme_reload_lock = false; settings["custom-color"] = customColor;
}) await Utils.writeFile(JSON.stringify(settings, null, 2), settings_file);
.then(() => { } catch (error) {
// Update custom-color in settings.json print(`Failed to update custom-color in settings.json: ${error}`);
Utils.readFileAsync(settings_file) }
.then((out) => { };
const settings = JSON.parse(out);
settings["custom-color"] = color_to_write; const Default = async () => {
Utils.writeFile(JSON.stringify(settings, null, 2), settings_file).catch(print); try {
}) await Utils.execAsync(
.catch(print); `python -O ${color_generator} -w --color-scheme "${theme.value}" --scheme "${scheme.value}"`
}) );
.catch((err) => { await updateSettingsFile("none");
print(err); } catch (error) {
Default(); print(error);
}); } finally {
else Default(); theme_reload_lock = false;
}
};
if (_color !== "none" && _color.length > 6) {
try {
await Utils.execAsync(
`python -O ${color_generator} --color "${_color}" --color-scheme "${theme.value}" --scheme "${scheme.value}"`
);
await updateSettingsFile(color_to_write);
} catch (error) {
print(error);
await Default();
} finally {
theme_reload_lock = false;
}
} else {
await Default();
}
}; };
const DarkTheme = () => const DarkTheme = () =>
-6
View File
@@ -1,6 +0,0 @@
{
"custom-color": "none",
"swww-anim": "wipe",
"color-scheme": "dark",
"generation-scheme": "tonalSpot"
}
+1
View File
@@ -30,6 +30,7 @@ const Windows = () => [
forMonitors(BarCornerTopRight), forMonitors(BarCornerTopRight),
sideright, sideright,
sideleft, sideleft,
cheatsheet,
forMonitors(popups) forMonitors(popups)
]; ];
+72 -38
View File
@@ -1,6 +1,6 @@
import argparse import argparse
import re
import os import os
import re
import json import json
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
@@ -9,28 +9,29 @@ group.add_argument('--browser', type=str, help="Change default browser")
group.add_argument('--filemanager', type=str, help="Change file manager") group.add_argument('--filemanager', type=str, help="Change file manager")
group.add_argument('--editor', type=str, help="Change default editor") group.add_argument('--editor', type=str, help="Change default editor")
group.add_argument('--terminal', type=str, help="Change default terminal") group.add_argument('--terminal', type=str, help="Change default terminal")
group.add_argument('--get', type=str, help="Get default app", choices=["browser", "editor", "terminal", "filemanager"]) group.add_argument('--get', type=str, help="Get default app",
choices=["browser", "editor", "terminal", "filemanager"])
args = parser.parse_args() args = parser.parse_args()
config_file = os.path.expanduser("~/dotfiles/hypr/UserConfigs/Apps.conf") browser = args.browser
json_config_file = os.path.expanduser("~/dotfiles/ags/assets/apps.json") filemanager = args.filemanager
editor = args.editor
terminal = args.terminal
get = args.get
def read_apps_conf(): value = (args.browser or args.filemanager or
with open(config_file) as f: args.editor or args.terminal or args.get)
return f.read().strip()
def write_apps_conf(content): u = os.path.expanduser
with open(config_file, 'w') as f:
f.write(content + '\n')
def read_json_config(): CONFIG_FILE = u("~/dotfiles/hypr/conf/apps.conf")
with open(json_config_file) as json_file: JSON_CONFIG_FILE = u("~/dotfiles/.settings/apps.json")
return json.load(json_file)
with open(CONFIG_FILE) as f:
original_env_str = f.read().strip()
env_str = original_env_str
def write_json_config(config):
with open(json_config_file, 'w') as json_file:
json.dump(config, json_file, indent=4)
def which(program: str): def which(program: str):
def is_executable(fpath): def is_executable(fpath):
@@ -48,8 +49,12 @@ def which(program: str):
return exe_file return exe_file
raise ProgramNotFound(value) raise ProgramNotFound(value)
def extract_associations(env_str): def extract_associations(env_str):
pattern = re.compile(r'^\s*env\s*=\s*(\w+)\s*,\s*(.*?)\s*#\s*!\s*-\s*@(\w+)\s*$', re.MULTILINE) # noqa pattern = re.compile(
r'^\s*env\s*=\s*(\w+)\s*,\s*(.*?)\s*#\s*!\s*-\s*@(\w+)\s*$',
re.MULTILINE
)
associations = {} associations = {}
matches = pattern.findall(env_str) matches = pattern.findall(env_str)
for key, _, association in matches: for key, _, association in matches:
@@ -59,53 +64,82 @@ def extract_associations(env_str):
associations[association].append(key) associations[association].append(key)
return associations return associations
associations = extract_associations(env_str)
def replace_value(env_str, key, new_value): def replace_value(env_str, key, new_value):
pattern = re.compile( pattern = re.compile(
r'^(\s*env\s*=\s*' + r'^(\s*env\s*=\s*' +
re.escape(key) + re.escape(key) +
r'\s*,\s*)(.*?)\s*(#.*)?$', re.MULTILINE r'\s*,\s*)(.*?)\s*(#.*)?$',
re.MULTILINE
) )
return re.sub(pattern, r'\1' + new_value + r' \3', env_str) return re.sub(pattern, r'\1' + new_value + r' \3', env_str)
class AssociationNotFound(Exception): class AssociationNotFound(Exception):
def __init__(self, name: str, *args: object) -> None: def __init__(self, name: str, *args: object) -> None:
error = f"{name} association not found" error = f"{name} association not found, \n{associations}"
super().__init__(error, *args) super().__init__(error, *args)
class ProgramNotFound(Exception): class ProgramNotFound(Exception):
def __init__(self, name: str, *args: object) -> None: def __init__(self, name: str, *args: object) -> None:
error = f"{name} not found" error = f"{name} not found"
super().__init__(error, *args) super().__init__(error, *args)
def change_association(key: str, value: str): def change_association(key: str, value: str):
env_str = read_apps_conf() global env_str
which(value) which(value)
associations = extract_associations(env_str)
if key not in associations: if key not in associations:
raise AssociationNotFound(key) raise AssociationNotFound(key)
for key in associations[key]: for assoc_key in associations[key]:
env_str = replace_value(env_str, key, value) env_str = replace_value(env_str, assoc_key, value)
def read_json_config():
try:
with open(JSON_CONFIG_FILE) as json_file:
return json.load(json_file)
except IOError as e:
print(f"Error reading {JSON_CONFIG_FILE}: {e}")
raise
def write_json_config(config):
try:
with open(JSON_CONFIG_FILE, 'w') as json_file:
json.dump(config, json_file, indent=4)
except IOError as e:
print(f"Error writing to {JSON_CONFIG_FILE}: {e}")
raise
write_apps_conf(env_str)
def update_json_config(key: str, value: str): def update_json_config(key: str, value: str):
config = read_json_config() config = read_json_config()
config[key] = value config[key] = value
write_json_config(config) write_json_config(config)
if args.get:
if get:
json_config = read_json_config() json_config = read_json_config()
print(json_config[args.get]) print(json_config[get])
elif args.browser: elif browser:
change_association("browser", args.browser) change_association("browser", value)
update_json_config("browser", args.browser) update_json_config("browser", value)
elif args.filemanager: elif filemanager:
change_association("filemanager", args.filemanager) change_association("filemanager", value)
update_json_config("filemanager", args.filemanager) update_json_config("filemanager", value)
elif args.editor: elif editor:
change_association("editor", args.editor) change_association("editor", value)
update_json_config("editor", args.editor) update_json_config("editor", value)
elif args.terminal: elif terminal:
change_association("terminal", args.terminal) change_association("terminal", value)
update_json_config("terminal", args.terminal) update_json_config("terminal", value)
if env_str != original_env_str:
with open(CONFIG_FILE, 'w') as f:
f.write(env_str + '\n')
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
GENERATOR="$HOME/dotfiles/material-colors/generate.py" GENERATOR="$HOME/dotfiles/material-colors/generate.py"
SETTINGS_FILE="$HOME/dotfiles/ags/assets/settings.json" SETTINGS_FILE="$HOME/dotfiles/.settings/settings.json"
# Function to read a value from the JSON file # Function to read a value from the JSON file
get_json_value() { get_json_value() {
+3 -4
View File
@@ -72,9 +72,9 @@ const reload = () => {
weather.setValue(JSON.parse(out)); weather.setValue(JSON.parse(out));
}) })
.catch(print); .catch(print);
} };
Utils.interval(150, reload); Utils.interval(150, reload);
configuration.connect("changed", reload) configuration.connect("changed", reload);
export const idle_inhibitor = Variable(false); export const idle_inhibitor = Variable(false);
export const cur_uptime = Variable("error"); export const cur_uptime = Variable("error");
@@ -100,7 +100,7 @@ export const kernel_name = await Utils.execAsync(`${App.configDir}/scripts/syste
export const hostname = await Utils.execAsync(`${App.configDir}/scripts/system.sh --hostname`); export const hostname = await Utils.execAsync(`${App.configDir}/scripts/system.sh --hostname`);
export const current_os = await Utils.execAsync(`${App.configDir}/scripts/system.sh --os`); export const current_os = await Utils.execAsync(`${App.configDir}/scripts/system.sh --os`);
export const settings_file = `${GLib.get_home_dir()}/dotfiles/ags/assets/settings.json`; export const settings_file = `${GLib.get_home_dir()}/dotfiles/.settings/settings.json`;
export const wallpaper_cache_file = `${GLib.get_home_dir()}/.cache/current_wallpaper`; export const wallpaper_cache_file = `${GLib.get_home_dir()}/.cache/current_wallpaper`;
function checkBrightness() { function checkBrightness() {
@@ -114,7 +114,6 @@ export const current_brightness = Variable(100, {
poll: [500, checkBrightness] poll: [500, checkBrightness]
}); });
function readSettingsFile() { function readSettingsFile() {
Utils.readFileAsync(settings_file) Utils.readFileAsync(settings_file)
.then((out) => { .then((out) => {
+1
View File
@@ -0,0 +1 @@
--enable-features=UseOzonePlatform --ozone-platform=wayland
+1 -1
View File
@@ -3,7 +3,7 @@
$scriptsDir = $HOME/.config/hypr/scripts $scriptsDir = $HOME/.config/hypr/scripts
# Startup # Startup
exec-once = swww-daemon --format xrgb exec-once = $scriptsDir/init-wallpaper-engine.sh
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = dbus-update-activation-environment --systemd --all exec-once = dbus-update-activation-environment --systemd --all
+27 -43
View File
@@ -15,59 +15,43 @@ $RunCMD = $scriptsDir/RunCMD.sh
#! @windows: Windows #! @windows: Windows
#! @workspaces: Workspaces #! @workspaces: Workspaces
#! @misc: Misc #! @misc: Misc
#! @plugins: Plugins
# Applications
# Power off, Reboot, Log out, Lockscreen,
bind = $mainMod CTRL, L, exec, pidof hyprlock || hyprlock -q #! @description: "Lock screen"; @actions;
bind = $mainMod CTRL, P, exec, systemctl poweroff #! @description: "ShutDown"; @actions;
bind = $mainMod CTRL, R, exec, systemctl reboot #! @description: "Restart"; @actions;
bind = $mainMod CTRL, Q, exec, loginctl kill-session $XDG_SESSION_ID #! @description: "LogOut"; @actions;
bind = CTRL SHIFT, R, exec, pkill ags ; ags
# Terminals
bind = ALT SHIFT,Return, exec, kitty --title Kitty --single-instance #! @description: "Terminal Float"; @apps; bind = ALT SHIFT,Return, exec, kitty --title Kitty --single-instance #! @description: "Terminal Float"; @apps;
bind = $mainMod, Return, exec, kitty #! @description: "Terminal"; @apps; bind = $mainMod, Return, exec, $scriptsDir/apps.sh terminal #! @description: "Terminal"; @apps;
bind = $mainMod, E, exec, $scriptsDir/apps.sh filemanager #! @description: "File Manager"; @apps;
# Apps bind = ALT, F, exec, $scriptsDir/apps.sh browser #! @description: "Browser"; @apps;
bind = $mainMod, E, exec, thunar #! @description: "File Manager"; @apps;
bind = ALT, F, exec, firefox #! @description: "Browser"; @apps;
bind = ALT, Y, exec, pypr toggle yazi && hyprctl dispatch bringactivetotop #! @description: "File Manager"; @apps;
bind = $mainMod, Slash, exec, pypr toggle nvim && hyprctl dispatch bringactivetotop #! @description: "Neovim"; @apps;
# FEATURES / EXTRAS # Actions
bind = $mainMod SHIFT, G, exec, $RunCMD gamemode #! @description: "Toggle animations"; @actions; bind = $mainMod SHIFT, G, exec, $RunCMD gamemode #! @description: "Toggle animations"; @actions;
bind = ALT, F3, exec, $RunCMD kb_changer #! @description: "Change Keyboard Layout"; @actions; bind = ALT, F3, exec, $RunCMD kb_changer #! @description: "Change Keyboard Layout"; @actions;
bind = $mainMod SHIFT, B, exec, $RunCMD toggle_blur #! @description: "Toggle blur"; @actions;
bind = $mainMod, space, exec, $RunCMD change_layout #! @description: "Change Layout(master/dwindle)"; @actions; bind = $mainMod, space, exec, $RunCMD change_layout #! @description: "Change Layout(master/dwindle)"; @actions;
bind = SHIFT ALT,W, exec, python -O $scriptsDir/wallpaper.py -R #! @description: "Random wallpaper"; @actions; bind = SHIFT ALT,W, exec, python -O $scriptsDir/wallpaper.py -R #! @description: "Random wallpaper"; @actions;
bind = $mainMod, COMMA, exec, pypr zoom #! @description: "Zoom the screen"; @plugins;
bind = ALT, COMMA, exec, pypr zoom +1 #! @description: "Increase Zoom"; @plugins;
# AGS
bind = $mainMod, D, exec, ags -r "toggleAppsWindow()" #! @description: "App Launcher"; @apps;
bind = $mainMod SHIFT, Z, exec, ags -r "toggleMediaWindow()" #! @description: "Players"; @actions;
bind = ALT, R, exec, ags -t sidebar #! @description: "rightbar"; @actions;
bind = ALT, L, exec, ags -t sideleft #! @description: "leftbar"; @actions;
bind = $mainMod, PERIOD, exec, ags -r "OpenEmojiPicker()" #! @description: "Emoji Picker"; @actions;
bind = SHIFT ALT, C, exec, ags -r "toggleClipsWindow()" #! @description: "Clipboard history"; @actions;
bind = $mainMod, W, exec, ags -r "OpenSettings('wallpaper')" #! @description: "Change wallpaper"; @actions;
bind = $mainMod SHIFT, S, exec, ags -r 'OpenSettings()' #! @description: "Setting"; @actions;
bind = ALT, F1, exec, ags -t cheatsheet #! @description: "List of keybindings"; @misc;
# Online Music related keybinds
bind = ALT, M, exec, $RunCMD music -m # open rofi music
bind = ALT, S, exec, $RunCMD music -s # Stop
bind = ALT, N, exec, $RunCMD music -n # Next
bind = ALT, P, exec, $RunCMD music -p # Previous
bind = ALT, R, exec, $RunCMD music -k # Resume
# ScreenShot
bind = $mainMod, Z, exec, $scriptsDir/ScreenShot.sh --area #! @description: "Window screenshot"; @actions; bind = $mainMod, Z, exec, $scriptsDir/ScreenShot.sh --area #! @description: "Window screenshot"; @actions;
bind = ,Print, exec, $scriptsDir/ScreenShot.sh --now #! @description: "Screenshot"; @actions; bind = ,Print, exec, $scriptsDir/ScreenShot.sh --now #! @description: "Screenshot"; @actions;
bind = $mainMod CTRL, L, exec, pidof hyprlock || hyprlock -q #! @description: "Lock screen"; @actions;
bind = $mainMod CTRL, P, exec, systemctl poweroff #! @description: "ShutDown"; @actions;
bind = $mainMod CTRL, R, exec, systemctl reboot #! @description: "Restart"; @actions;
bind = $mainMod CTRL, Q, exec, loginctl kill-session $XDG_SESSION_ID #! @description: "LogOut"; @actions;
bind = CTRL SHIFT, R, exec, pkill ags ; ags #! @description: "Reload AGS" @actions;
# Tools
bind = $mainMod, D, exec, ags -r "toggleAppsWindow()" #! @description: "App Launcher"; @tools;
bind = $mainMod SHIFT, Z, exec, ags -r "toggleMediaWindow()" #! @description: "Players"; @tools;
bind = ALT, R, exec, ags -t sidebar #! @description: "rightbar"; @tools;
bind = ALT, L, exec, ags -t sideleft #! @description: "leftbar"; @tools;
bind = $mainMod, PERIOD, exec, ags -r "OpenEmojiPicker()" #! @description: "Emoji Picker"; @tools;
bind = SHIFT ALT, C, exec, ags -r "toggleClipsWindow()" #! @description: "Clipboard history"; @tools;
bind = $mainMod, W, exec, ags -r "OpenSettings('wallpaper')" #! @description: "Change wallpaper"; @tools;
bind = $mainMod SHIFT, S, exec, ags -r 'OpenSettings()' #! @description: "Setting"; @tools;
bind = ALT, F1, exec, ags -t cheatsheet #! @description: "List of keybindings"; @tools;
# Misc
# misc
bind = $mainMod ALT, P, submap, passthru #! @description: "Passthrough $mainMod key to Virtual Machine"; @misc;
submap = passthru
bind = $mainMod ALT, P, submap, reset #! @description: "Cancel passthrough"; @misc;
submap = reset
-3
View File
@@ -1,3 +0,0 @@
general {
resize_on_border = true
}
-211
View File
@@ -1,211 +0,0 @@
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# Opacity Rules
windowrulev2 = opacity 0.9 0.6, class:^([Rr]ofi)$
windowrulev2 = opacity 0.9 0.6, class:^(yad)$
windowrulev2 = opacity 0.9 0.6, class:^(mousepad)$
windowrulev2 = opacity 0.9 0.9, class:^(geany)$
windowrulev2 = opacity 0.80 0.70,class:^(nm-applet)$
windowrulev2 = opacity 0.80 0.70,class:^(nm-connection-editor)$
# Xwaylandvideobridge (if installed)
windowrulev2 = opacity 0.0 override,class:^(xwaylandvideobridge)$
windowrulev2 = noanim,class:^(xwaylandvideobridge)$
windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$
windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$
windowrulev2 = noblur,class:^(xwaylandvideobridge)$
# Workspace Rules
windowrule = workspace 5, ^(.*vlc*)$
#windowrule = stayfocused, ^(com.github.Aylur.ags)$
windowrule = float, ^(com.github.Aylur.ags)$
# MPV
windowrule = workspace 5, ^(.*mpv*)$
windowrulev2 = float, class:^(.*mpv.*)
windowrulev2 = size 70% 70%, class:^(.*mpv.*)
# Do not lose focus when rofi or gnome polkit is opened
windowrulev2 = stayfocused, class:(rofi)
windowrulev2 = stayfocused, class:(polkit-gnome-authentication-agent-1)
# Pavucontrol
windowrulev2 = float, class:(pavucontrol)
windowrulev2 = size 533 533, class:(pavucontrol)
windowrulev2 = center, class:(pavucontrol)
# Zathura
$zathura = class:^(.*zathura.*)$
windowrulev2 = float, $zathura
windowrulev2 = size 35% 90%, $zathura
windowrulev2 = center 1, $zathura
# OBS
# Main window / Profile screen
windowrulev2 = size 75% 70%, class:(com.obsproject.Studio), title:(.*Profile:.*)
# Class settings
windowrulev2 = workspace 9, class:(com.obsproject.Studio)
windowrulev2 = float, class:(com.obsproject.Studio)
windowrulev2 = center, class:(com.obsproject.Studio)
# Folder picker
windowrulev2 = size 50% 45%, class:(com.obsproject.Studio), title:(Select Recording Directory)
windowrulev2 = center, class:(com.obsproject.Studio), title:(Select Recording Directory)
# Fireox class settings
windowrulev2 = workspace 3, class:^(firefox)$
windowrulev2 = workspace 3, class:^(qutebrowser)$
windowrulev2 = workspace 3, class:^(Firefox-esr)$
windowrulev2 = opacity 0.9 0.9, class:^(firefox)$
windowrulev2 = opacity 0.95 0.95,title:^(Picture-in-Picture)$
windowrulev2 = pin,title:^(Picture-in-Picture)$
windowrulev2 = float, title:^(Picture-in-Picture)$
windowrulev2 = size 25% 25%,title:^(Picture-in-Picture)$
windowrulev2 = move 72% 7%,title:^(Picture-in-Picture)$
windowrulev2 = idleinhibit fullscreen, class:^(.*firefox.*)$
# Thunar
windowrulev2 = size 456 884, title:(.*Compress.*), class:(thunar)
windowrulev2 = center, title:(.*Compress.*), class:(thunar)
windowrulev2 = float, title:(.*Compress.*), class:(thunar)
windowrulev2 = size 516 158, title:(.*Rename.*), class:(thunar)
windowrulev2 = center, title:(.*Rename.*), class:(thunar)
windowrulev2 = size 950 270, title:(Confirm to replace files), class:(thunar)
windowrulev2 = center, title:(Confirm to replace files), class:(thunar)
windowrulev2 = float,title:^(Confirm to replace files)
windowrulev2 = size 444 103, title:(File Operation Progress), class:(thunar)
windowrulev2 = center, title:(File Operation Progress), class:(thunar)
windowrulev2 = size 565 591, class:(thunar), title:(Properties)
windowrulev2 = center, class:(thunar), title:(Properties)
windowrulev2 = size 477 149, class:(thunar), title:(Create New Folder)
windowrulev2 = center, class:(thunar), title:(Create New Folder)
windowrulev2 = workspace 4, class:(thunar)
windowrulev2 = opacity 0.9 0.9, class:^([Tt]hunar)$
#windowrulev2 = float, class:(thunar)
#windowrulev2 = size 1161 619, class:(thunar)
#windowrulev2 = center, class:(thunar)
# File / Folder pickers
$center-float = class:^(center-float)$|^(.*file-roller.*)$|^(.*FileRoller.*)$
$center-float-title = title:^(.*Open Folder.*)$|^(.*Open File.*)$|^(.*Save File.*)$|^(.*Save Folder.*)$|^(.*Save Image.*)$|^(.*Save As.*)$|^(.*Open As.*)$
windowrulev2 = float, $center-float
windowrulev2 = float, $center-float-title
windowrulev2 = size 50% 50%, $center-float
windowrulev2 = size 50% 50%, $center-float-title
windowrulev2 = center 1, $center-float
windowrulev2 = center 1, $center-float-title
# VS Code
windowrulev2 = workspace 2, class:^(.*Code.*)$|(.*codium.*)$|(.*VSCodium.*)
windowrulev2 = opacity 0.9 0.9, class:^(.*Code.*)$|(.*codium.*)$|(.*codium-url-handler.*)$|(.*VSCodium.*)
# Telegram
# windowrulev2 = fullscreen, class:(org.telegram.desktop), title:(Media viewer)
windowrulev2 = opacity 0.90, class:^(org.telegram.desktop)$
windowrulev2 = workspace 6, class:(org.telegram.desktop)
windowrulev2 = size 833 455, class:(org.telegram.desktop), title:(Choose Files)
windowrulev2 = center, class:(org.telegram.desktop), title:(Choose Files)
#windowrulev2 = float, class:^(org.telegram.desktop)$
#windowrulev2 = center, class:^(org.telegram.desktop)$
#windowrulev2 = size 800 800, class:^(org.telegram.desktop)$
# discord
windowrulev2 = workspace 7, class:^(.*discord.*)$|(.*vesktop.*)$|(.*WebCord.*)$
# File Roller
windowrulev2 = workspace 4, class:(file-roller), title:(Archive Manager)
windowrulev2 = float, class:(file-roller), title:(Archive Manager)
windowrulev2 = size 45% 50%, class:(file-roller), title:(Archive Manager)
windowrulev2 = center, class:(file-roller), title:(Archive Manager)
windowrulev2 = float, class:(file-roller), title:(Extract archive)
windowrulev2 = size 30% 15%, class:(file-roller), title:(Extract archive)
windowrulev2 = center, class:(file-roller), title:(Extract archive)
# qBittorrent
windowrulev2 = workspace 9, class:(org.qbittorrent.qBittorrent)
windowrulev2 = float, class:(org.qbittorrent.qBittorrent)
windowrulev2 = size 1137 547, class:(org.qbittorrent.qBittorrent), title:(.*qbittorrent.*)
windowrulev2 = center, class:(org.qbittorrent.qBittorrent), title:(.*qbittorrent.*)
# Kitty
windowrule = opacity 0.9 0.9,kitty
windowrule = float, title:^(Kitty)$
windowrule = size 800 500, title:^(Kitty)$
windowrule = move center, title:^(Kitty)$
windowrule = animation slide, title:^(Kitty)$
windowrule = float, title:^(Kitty)$
windowrule = float, kitty_float
# Bluetooth applet
windowrulev2 = float, class:(blueman)
windowrulev2 = size 680 665, class:(blueman)
windowrulev2 = center, class:(blueman)
# IMV image viewer
$center-float-large = class:^(center-float-large)$|^(.*imv.*)$|^(.*imv-dir.*)$
windowrulev2 = float, $center-float-large
windowrulev2 = size 70% 70%, $center-float-large
windowrulev2 = center 1, $center-float-large
# qt5ct / qt6ct
windowrulev2 = float, class:(qt5ct)
windowrulev2 = float, class:(qt6ct)
windowrulev2 = size 1256 689, class:(qt5ct)
windowrulev2 = size 1256 689, class:(qt6ct)
windowrulev2 = center, class:(qt5ct)
windowrulev2 = center, class:(qt6ct)
windowrulev2 = size 257 116, class:(qt5ct), title:(Enter Color Scheme Name)
windowrulev2 = size 257 116, class:(qt6ct), title:(Enter Color Scheme Name)
windowrulev2 = size 548 476, class:(qt5ct), title:(Select Color)
windowrulev2 = size 548 476, class:(qt6ct), title:(Select Color)
# Other
windowrule = float, nm-connection-editor|vlc|yad|rofi|Lxappearance
windowrule = float, org.kde.polkit-kde-authentication-agent-1
windowrulev2 = size 543 239, class:^(polkit-gnome-authentication-agent-1)$
windowrulev2 = float, class:^(polkit-gnome-authentication-agent-1)$
windowrulev2 = center, class:(polkit-gnome-authentication-agent-1)
windowrulev2 = float, title:(File Operation Progress)
windowrulev2 = center, title:(File Operation Progress)
# Layer Rules
layerrule = noanim, hyprpicker
layerrule = noanim, noanim
layerrule = blur, gtk-layer-shell
layerrule = ignorezero, gtk-layer-shell
layerrule = blur, launcher
layerrule = ignorealpha 0.5, launcher
layerrule = blur, notifications
layerrule = ignorealpha 0.69, notifications
layerrule = noanim, notifications
+4 -12
View File
@@ -11,14 +11,13 @@ $mainMod = SUPER
#! @windows: Windows #! @windows: Windows
#! @workspaces: Workspaces #! @workspaces: Workspaces
#! @misc: Misc #! @misc: Misc
#! @plugins: Plugins
# Master Layout # Master Layout
bind = ALT, Space, layoutmsg, removemaster #! @description: "Remove Master"; @windows; bind = ALT, Space, layoutmsg, removemaster
bind = $mainMod, I, layoutmsg, addmaster #! @description: "Add Master"; @windows; bind = $mainMod, I, layoutmsg, addmaster
bind = $mainMod, L, layoutmsg, cyclenext #! @description: "cycle next in Master"; @windows; bind = $mainMod, L, layoutmsg, cyclenext
bind = $mainMod, H, layoutmsg, cycleprev #! @description: "cycle prev in Master"; @windows; bind = $mainMod, H, layoutmsg, cycleprev
bind = $mainMod, P, pseudo, # dwindle #! @description: "Toggle dwindle"; @windows; bind = $mainMod, P, pseudo, # dwindle #! @description: "Toggle dwindle"; @windows;
bind = $mainMod, S, layoutmsg, swapwithmaster #! @description: "Swap with master"; @windows; bind = $mainMod, S, layoutmsg, swapwithmaster #! @description: "Swap with master"; @windows;
@@ -29,9 +28,7 @@ bind = $mainMod SHIFT, C, closewindow, #! @description: "Close window"
bind = $mainMod, F, exec, hyprctl dispatch togglefloating && hyprctl dispatch centerwindow 1 #! @description: "Toggle to center"; @windows; bind = $mainMod, F, exec, hyprctl dispatch togglefloating && hyprctl dispatch centerwindow 1 #! @description: "Toggle to center"; @windows;
bind = $mainMod ALT, F, exec, hyprctl dispatch workspaceopt allfloat #! @description: "Toggle all float windows"; @windows; bind = $mainMod ALT, F, exec, hyprctl dispatch workspaceopt allfloat #! @description: "Toggle all float windows"; @windows;
bind = $mainMod SHIFT, F, togglefloating, #! @description: "Toggle floating"; @windows; bind = $mainMod SHIFT, F, togglefloating, #! @description: "Toggle floating"; @windows;
bind = CTRL ALT, Delete, exit, #exit hyprland #! @description: "Exit hyprland"; @actions;
bind = $mainMod SHIFT, Space, fullscreen, 0 #! @description: "Open window in full screen mode"; @windows; bind = $mainMod SHIFT, Space, fullscreen, 0 #! @description: "Open window in full screen mode"; @windows;
bind = $mainMod SHIFT, O, toggleopaque #! @description: "Toggle opaque"; @actions;
# Change Workspace Mode # Change Workspace Mode
bind = $mainMod SHIFT, F, exec, hyprctl dispatch workspaceopt allfloat bind = $mainMod SHIFT, F, exec, hyprctl dispatch workspaceopt allfloat
@@ -49,11 +46,6 @@ bind = $mainMod SHIFT, Tab, focusmonitor, -1 #! @description: "Toggle Fo
#bind = $mainMod, Tab, workspace, m+1 #bind = $mainMod, Tab, workspace, m+1
#bind = $mainMod SHIFT, Tab, workspace, m-1 #bind = $mainMod SHIFT, Tab, workspace, m-1
# Special Workspace
bind = $mainMod, U, togglespecialworkspace, #! @description: "Toggle Special Workspace"; @workspaces;
bind = $mainMod SHIFT, U, movetoworkspace, special #! @description: "Move to Special Workspace"; @windows;
# Resize Active (Using arrow) # Resize Active (Using arrow)
binde = $mainMod ALT, left, resizeactive, -20 0 binde = $mainMod ALT, left, resizeactive, -20 0
binde = $mainMod ALT, right, resizeactive, 20 0 binde = $mainMod ALT, right, resizeactive, 20 0
-4
View File
@@ -1,4 +0,0 @@
# refer to Hyprland wiki for more info https://wiki.hyprland.org/Configuring/Variables
# Initial boot script enable to apply initial wallpapers, theming, new settings etc.
exec-once = $HOME/.config/hypr/initial-boot.sh
-2
View File
@@ -3,7 +3,6 @@
# Default Configs # Default Configs
$configs = $HOME/.config/hypr/configs $configs = $HOME/.config/hypr/configs
source=$configs/Settings.conf
source=$configs/Keybinds.conf source=$configs/Keybinds.conf
# User Configs # User Configs
@@ -16,7 +15,6 @@ source= $UserConfigs/Monitors.conf
source= $UserConfigs/Laptops.conf source= $UserConfigs/Laptops.conf
source= $UserConfigs/LaptopDisplay.conf source= $UserConfigs/LaptopDisplay.conf
source= $UserConfigs/WindowRules.conf source= $UserConfigs/WindowRules.conf
source= $UserConfigs/custom.conf
source= $UserConfigs/UserKeybinds.conf source= $UserConfigs/UserKeybinds.conf
source= $UserConfigs/UserSettings.conf source= $UserConfigs/UserSettings.conf
+82 -73
View File
@@ -1,15 +1,8 @@
general { # BACKGROUND
grace = 5
hide_cursor = true
ignore_empty_input = true
text_trim = true
}
background { background {
monitor = monitor =
path = ~/.cache/current_wallpaper.png # only png supported for now path = ~/.cache/current_wallpaper.png
color = rgba(<background.rgb>, 1.0) blur_passes = 3 3 0 disable blurring
blur_passes = 3 # 0 disables blurring
blur_size = 1 blur_size = 1
noise = 0.01 noise = 0.01
contrast = 0.8916 contrast = 0.8916
@@ -18,86 +11,102 @@ background {
vibrancy_darkness = 0.0 vibrancy_darkness = 0.0
} }
input-field { # GENERAL
monitor = general {
size = 200, 50 no_fade_in = false
outline_thickness = 3 grace = 5
dots_size = 0.33 disable_loading_bar = false
dots_spacing = 0.15
dots_center = true
dots_rounding = -1
outer_color = rgb(<surfaceContainerHigh.rgb>)
inner_color = rgb(<surfaceContainerHigh.rgb>)
font_color = rgb(<onSurface.rgb>)
fade_on_empty = false
fade_timeout = 1000
font_family = Product Sans
placeholder_text = <span foreground="#<onSurfaceVariant>">$USER</span>
hide_input = false
rounding = 4
check_color = rgb(<surfaceContainerHigh.rgb>)
fail_color = rgb(<onErrorContainer.rgb>)
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
fail_transition = 200
capslock_color = -1
numlock_color = -1
bothlock_color = -1
invert_numlock = false
swap_font_color = false
position = 0, 70
halign = center
valign = bottom
} }
# DATE
# Day-Month-Date
label { label {
monitor = monitor =
text = cmd[update:1000] echo -e "$(date +"%d %b %A")" text = cmd[update:1000] echo -e "$(date +"%A, %B %d")"
color = rgba(<primaryFixed.rgb>, 1.0) color = rgba(<primaryFixed.rgb>, 1.0)
font_size = 14 font_size = 25
font_family = JetBrains Mono Nerd Font Mono ExtraBold font_family = JetBrains Mono Nerd Font Mono ExtraBold
position = 0, 350
halign = center
valign = center
}
# Time
label {
monitor =
text = cmd[update:1000] echo "<span>$(date +"%I:%M %P")</span>"
color = rgba(<primaryFixed.rgb>, 1.0)
font_size = 120
font_family = Product Sans Semibold
position = 0, 250
halign = center
valign = center
}
# Profie-Photo
image {
monitor =
path = ~/.face.icon
border_size = 2
border_color = rgb(<surfaceContainerHigh.rgb>)
size = 130
rounding = -1
rotate = 0
reload_time = -1
reload_cmd =
position = 0, 40
halign = center
valign = center
}
# USER-BOX
shape {
monitor =
size = 300, 60
color = rgba(<primaryFixed.rgb>, 1.0)
rounding = -1
border_size = 0
border_color = rgb(<surfaceContainerHigh.rgb>)
rotate = 0
xray = false # if true, make a "hole" in the background (rectangle of specified size, no rotation)
position = 0, -130 position = 0, -130
halign = center halign = center
valign = center valign = center
} }
# TIME HR # USER
label { label {
monitor = monitor =
text = cmd[update:1000] echo -e "$(date +"%H")" text =  $USER
color = rgba(<primaryFixed.rgb>, 1.0) color = rgba(<primaryFixed.rgb>, 1.0)
shadow_pass = 2 outline_thickness = 2
shadow_size = 3 dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
shadow_color = rgb(0,0,0) dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
shadow_boost = 1.2 dots_center = true
font_size = 150 font_size = 18
font_family = Product Sans Semibold font_family = Product Sans Semibold
position = 0, -250 position = 0, -130
halign = center halign = center
valign = top valign = center
} }
# TIME # INPUT FIELD
label { input-field {
monitor = monitor =
text = cmd[update:1000] echo -e "$(date +"%M")" size = 300, 60
color = rgba(<primaryFixed.rgb>, 1.0) outline_thickness = 2
font_size = 150 dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
font_family = Product Sans Semibold dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
position = 0, -420 dots_center = true
outer_color = rgb(<surfaceContainerHigh.rgb>)
inner_color = rgb(<surfaceContainerHigh.rgb>)
font_color = rgba(<primaryFixed.rgb>, 1.0)
fade_on_empty = false
font_family = Product Sans
placeholder_text = <i><span>🔒 Enter Pass</span></i>
hide_input = false
position = 0, -210
halign = center halign = center
valign = top valign = center
}
label {
monitor =
text = $LAYOUT
color = rgba(<primaryFixed.rgb>, 1.0)
font_size = 10
font_family = Product Sans Semibold
position = 0, 130
halign = center
valign = bottom
shadow_passes = 5
shadow_size = 10
} }
-34
View File
@@ -1,34 +0,0 @@
#!/bin/bash
# A bash script designed to run only once to install dotfiles
# THIS SCRIPT CAN BE DELETED ONCE SUCCESSFULLY BOOTED!!
# Variables
color_scheme="prefer-dark"
gtk_theme="adw-gtk3-dark"
icon_theme="Tela-nord-dark"
cursor_theme="Bibata-Original-Classic"
font_name="JetBrainsMono Nerd Font 12"
# Check if a marker file exists.
if [ ! -f "$HOME/.cache/.initial_startup_done" ]; then
# Initiate GTK dark mode and apply icon and cursor theme
gsettings set org.gnome.desktop.interface color-scheme "$color_scheme" > /dev/null 2>&1 &
gsettings set org.gnome.desktop.interface gtk-theme "$gtk_theme" > /dev/null 2>&1 &
gsettings set org.gnome.desktop.wm.preferences theme "$gtk_theme" > /dev/null 2>&1 &
gsettings set org.gnome.desktop.interface icon-theme "$icon_theme" > /dev/null 2>&1 &
gsettings set org.gnome.desktop.interface cursor-theme "$cursor_theme" > /dev/null 2>&1 &
gsettings set org.gnome.desktop.interface cursor-size 6 > /dev/null 2>&1 &
gsettings set org.gnome.desktop.interface font-name "$font_name" > /dev/null 2>&1 &
# Initiate the keyboard layout
kb_layout=$(grep 'kb_layout=' "$HOME/dotfiles/hypr/UserConfigs/UserSettings.conf" | cut -d '=' -f 2 | cut -d ',' -f 1)
echo "$kb_layout" > "$HOME/.cache/kb_layout"
# Create a marker file to indicate that the script has been executed.
touch "$HOME/.cache/.initial_startup_done"
exit
fi
-23
View File
@@ -1,23 +0,0 @@
[pyprland]
plugins = ["scratchpads", "expose", "magnify"]
[scratchpads.terminal]
command = "kitty --class scratchpad-large"
excludes = ["yazi", "btop"]
lazy = true
[scratchpads.yazi]
command = "kitty --class scratchpad-large yazi"
lazy = true
[scratchpads.nvim]
command = "kitty --class scratchpad-large nvim"
lazy = true
[scratchpads.btop]
command = "kitty --class scratchpad-large btop"
lazy = true
[scratchpads.cava]
command = "kitty --class scratchpad-mini cava"
lazy = true
+221
View File
@@ -0,0 +1,221 @@
import os
import sys
import importlib.util
import argparse
import fcntl
import subprocess
import asyncio
import random as _random
import colorsys
import json
lock_file_path = '/tmp/wallpaper.lock'
def acquire_lock():
global lock_file
lock_file = open(lock_file_path, 'w')
try:
fcntl.flock(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
lock_file.write(str(os.getpid()))
lock_file.flush()
except IOError:
print("Another instance of the script is already running.")
sys.exit(1)
def release_lock():
fcntl.flock(lock_file, fcntl.LOCK_UN)
lock_file.close()
os.remove(lock_file_path)
def hue_to_numeric_hex(hue):
hue = hue / 360.0
rgb = colorsys.hls_to_rgb(hue, 0.5, 1.0)
hex_color_str = '#{:02x}{:02x}{:02x}'.format(int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255))
numeric_hex_color = int(hex_color_str.lstrip('#'), 16)
return numeric_hex_color
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-I', '--image', type=str, help="Image")
group.add_argument('-P', '--prev', help="Use last used wallpaper for color generation", action='store_true')
group.add_argument('-R', '--random', help="Random image from folder", action='store_true')
parser.add_argument('-n', '--notify', help="Send notifications", action='store_true')
parser.add_argument('--status', type=str, help="Status file", default="/tmp/wallpaper.status")
args = parser.parse_args()
random = args.random
prev = args.prev
image = args.image
notify = args.notify
status = args.status
HOME = os.path.expanduser("~")
# Load configuration from JSON file
config_file = f"{HOME}/dotfiles/ags/assets/settings.json" # Path to your JSON configuration file
with open(config_file, 'r') as f:
config = json.load(f)
color_scheme = config.get("color-scheme", "dark")
custom_color = config.get("custom-color", "none")
generation_scheme = config.get("generation-scheme", "tonalSpot")
transition_type = config.get("swww-anim", "wipe")
module_path = f'{HOME}/dotfiles/material-colors'
sys.path.append(module_path)
module_name = 'generate'
file_path = f'{module_path}/{module_name}.py'
spec = importlib.util.spec_from_file_location(module_name, file_path)
GENERATOR = importlib.util.module_from_spec(spec) # type: ignore
spec.loader.exec_module(GENERATOR) # type: ignore
cache_file = f"{HOME}/.cache/current_wallpaper"
square = f"{HOME}/.cache/square_wallpaper.png"
png = f"{HOME}/.cache/current_wallpaper.png"
def current_state(str: str):
with open(status, 'w') as f:
f.write(str)
def send_notify(label: str, desc: str):
if not notify:
return
subprocess.run(["notify-send", label, desc])
def state(name: str | None, label: str | None, desc: str | None):
if name is not None:
current_state(name)
if label is not None:
send_notify(label, desc or "")
def join(*args):
return os.path.join(*args)
async def main():
state("init", None, None)
new_wallpaper = f"{HOME}/Pictures/wallpapers/1.jpg"
if random:
files = [f for f in os.listdir(f"{HOME}/Pictures/wallpapers") if f.endswith(('.png', '.jpg', '.jpeg'))]
if files:
new_wallpaper = join(f"{HOME}/Pictures/wallpapers", _random.choice(files))
elif prev:
try:
with open(cache_file) as f:
new_wallpaper = f.read().strip()
except FileNotFoundError:
...
elif image is not None:
new_wallpaper = os.path.abspath(image)
print(f":: Wallpaper {new_wallpaper}")
with open(cache_file, 'w') as f:
f.write(new_wallpaper)
with_image = f"with image {new_wallpaper}"
# -----------------------------------------------------
# Set the new wallpaper
# -----------------------------------------------------
wallpaper_engine = "swww" # Default wallpaper engine
state("changing", "Changing wallpaper...", with_image)
print(":: Changing wallpaper...")
if wallpaper_engine == "swww":
print(":: Using swww")
cursor_pos = subprocess.getoutput('hyprctl cursorpos')
subprocess.run([
'swww', 'img', new_wallpaper,
'--transition-bezier', '.43,1.19,1,.4',
'--transition-fps', '60',
'--transition-type', transition_type,
'--transition-duration', '0.7',
'--transition-pos', cursor_pos.replace(",",",")
])
else:
print(":: Wallpaper Engine disabled")
# -----------------------------------------------------
# Generate colors
# -----------------------------------------------------
state("colors", "Generating colors...", with_image)
print(":: Generate colors")
_starts_with = (lambda x: str(x).startswith("-"))
GENERATOR.main(
color_scheme, new_wallpaper,
(hue_to_numeric_hex(int(custom_color.lstrip("-")))
if _starts_with(custom_color) else (
int(custom_color.lstrip('#'), 16)
if custom_color != "none"
else None
)),
scheme=GENERATOR.schemes[generation_scheme]
)
# -----------------------------------------------------
# Square image
# -----------------------------------------------------
square_task = asyncio.create_task(square_image(new_wallpaper))
# -----------------------------------------------------
# Png image
# -----------------------------------------------------
png_task = asyncio.create_task(png_image(new_wallpaper))
state("tasks", None, None)
await asyncio.gather(square_task, png_task)
state("finish", "Wallpaper procedure complete!", with_image)
async def png_image(wallpaper: str):
_from = (".jpg", "jpeg")
if not wallpaper.endswith(_from):
cmd = f"cp -f {wallpaper} {png}"
else:
with_image = f"with image {wallpaper}"
state(None, "Converting jpg to png...", with_image)
print(":: Converting jpg to png...")
cmd = f"magick {wallpaper} {png}"
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
if process.returncode != 0:
print(f":: Error while processing image: {stderr.decode()}")
else:
print(":: JPG successfully converted to PNG!")
async def square_image(wallpaper):
with_image = f"with image {wallpaper}"
state(None, "Creating square version...", with_image)
print(":: Creating square version")
cmd = f"magick {wallpaper} -gravity Center -extent 1:1 {square}"
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
if process.returncode != 0:
print(f":: Error while processing image: {stderr.decode()}")
else:
print(":: Square image created!")
if __name__ == "__main__":
acquire_lock()
try:
asyncio.run(main())
finally:
release_lock()
+262
View File
@@ -0,0 +1,262 @@
import os
import sys
import importlib.util
import argparse
import fcntl
import subprocess
import asyncio
import random as _random
import colorsys
import json
lock_file_path = '/tmp/wallpaper.lock'
def acquire_lock():
global lock_file
lock_file = open(lock_file_path, 'w')
try:
fcntl.flock(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
lock_file.write(str(os.getpid()))
lock_file.flush()
except IOError:
print("Another instance of the script is already running.")
sys.exit(1)
def release_lock():
fcntl.flock(lock_file, fcntl.LOCK_UN)
lock_file.close()
os.remove(lock_file_path)
def hue_to_numeric_hex(hue):
hue = hue / 360.0
rgb = colorsys.hls_to_rgb(hue, 0.5, 1.0)
hex_color_str = '#{:02x}{:02x}{:02x}'.format(int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255))
numeric_hex_color = int(hex_color_str.lstrip('#'), 16)
return numeric_hex_color
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-I', '--image', type=str, help="Image")
group.add_argument('-P', '--prev', help="Use last used wallpaper for color generation", action='store_true')
group.add_argument('-R', '--random', help="Random image from folder", action='store_true')
parser.add_argument('-n', '--notify', help="Send notifications", action='store_true')
parser.add_argument('--status', type=str, help="Status file", default="/tmp/wallpaper.status")
args = parser.parse_args()
random = args.random
prev = args.prev
image = args.image
notify = args.notify
status = args.status
HOME = os.path.expanduser("~")
module_path = f'{HOME}/dotfiles/material-colors'
sys.path.append(module_path)
module_name = 'generate'
file_path = f'{module_path}/{module_name}.py'
spec = importlib.util.spec_from_file_location(module_name, file_path)
GENERATOR = importlib.util.module_from_spec(spec) # type: ignore
spec.loader.exec_module(GENERATOR) # type: ignore
cache_file = f"{HOME}/.cache/current_wallpaper"
square = f"{HOME}/.cache/square_wallpaper.png"
png = f"{HOME}/.cache/current_wallpaper.png"
settings_file = f"{HOME}/dotfiles/ags/assets/settings.json"
# Read settings from the JSON file
with open(settings_file) as f:
settings = json.load(f)
color_scheme = settings.get("color-scheme")
custom_color = settings.get("custom-color")
generation_scheme = settings.get("generation-scheme")
swww_animation = settings.get("swww-anim")
wallpaper_engine = settings.get("wallpaper-engine")
def current_state(str: str):
with open(status, 'w') as f:
f.write(str)
def send_notify(label: str, desc: str):
if not notify:
return
subprocess.run(["notify-send", label, desc])
def state(name: str | None, label: str | None, desc: str | None):
if name is not None:
current_state(name)
if label is not None:
send_notify(label, desc or "")
def join(*args):
return os.path.join(*args)
async def main():
global color_scheme, custom_color
state("init", None, None)
new_wallpaper = f"{HOME}/Pictures/wallpapers/default.jpg"
if random:
files = [f for f in os.listdir(f"{HOME}/Pictures/wallpapers") if f.endswith(('.png', '.jpg', '.jpeg'))]
if files:
new_wallpaper = join(f"{HOME}/Pictures/wallpapers", _random.choice(files))
elif prev:
try:
with open(cache_file) as f:
new_wallpaper = f.read().strip()
except FileNotFoundError:
...
elif image is not None:
new_wallpaper = os.path.abspath(image)
print(f":: Wallpaper {new_wallpaper}")
with open(cache_file, 'w') as f:
f.write(new_wallpaper)
with_image = f"with image {new_wallpaper}"
# -----------------------------------------------------
# Set the new wallpaper
# -----------------------------------------------------
transition_type = swww_animation
# transition_type = "outer"
# transition_type = "random"
state("changing", "Changing wallpaper...", with_image)
print(":: Changing wallpaper...")
if wallpaper_engine == "swww":
print(":: Using swww")
cursor_pos = subprocess.getoutput('hyprctl cursorpos').replace(", ", ",")
subprocess.run([
'swww', 'img', new_wallpaper,
'--transition-bezier', '.43,1.19,1,.4',
'--transition-fps', '60',
'--transition-type', transition_type,
'--transition-duration', '0.7',
'--transition-pos', cursor_pos
])
elif wallpaper_engine == "hyprpaper":
print(":: Using hyprpaper")
subprocess.run(['killall', 'hyprpaper'])
hyprpaper_tpl_file = os.path.expanduser('~/dotfiles/.settings/hyprpaper.tpl')
with open(hyprpaper_tpl_file, 'r') as file:
wal_tpl = file.read()
output = wal_tpl.replace('WALLPAPER', new_wallpaper)
hyprpaper_conf_file = os.path.expanduser('~/dotfiles/hypr/hyprpaper.conf')
with open(hyprpaper_conf_file, 'w') as file:
file.write(output)
subprocess.run([
"hyprctl", "dispatch", "exec", "hyprpaper"
])
else:
print(":: Wallpaper Engine disabled")
# -----------------------------------------------------
# Generate colors
# -----------------------------------------------------
state("colors", "Generating colors...", with_image)
print(":: Generate colors")
_starts_with = (lambda x: str(x).startswith("-"))
GENERATOR.main(
color_scheme, new_wallpaper,
(hue_to_numeric_hex(int(custom_color.lstrip("-")))
if _starts_with(custom_color) else (
int(custom_color.lstrip('#'), 16)
if custom_color != "none"
else None
)),
scheme=GENERATOR.schemes[generation_scheme]
)
# -----------------------------------------------------
# Square image
# -----------------------------------------------------
square_task = asyncio.create_task(square_image(new_wallpaper))
# -----------------------------------------------------
# Png image
# -----------------------------------------------------
png_task = asyncio.create_task(png_image(new_wallpaper))
state("tasks", None, None)
await asyncio.gather(square_task, png_task)
state("finish", "Wallpaper procedure complete!", with_image)
async def png_image(wallpaper: str):
_from = (".jpg", "jpeg")
if not wallpaper.endswith(_from):
cmd = f"cp -f {wallpaper} {png}"
else:
with_image = f"with image {wallpaper}"
state(None, "Converting jpg to png...", with_image)
print(":: Converting jpg to png...")
cmd = f"magick {wallpaper} {png}"
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
if process.returncode != 0:
print(f":: Error while processing image: {stderr.decode()}")
else:
print(":: JPG successfully converted to PNG!")
async def square_image(wallpaper):
with_image = f"with image {wallpaper}"
state(None, "Creating square version...", with_image)
print(":: Creating square version")
cmd = f"magick {wallpaper} -gravity Center -extent 1:1 {square}"
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
if process.returncode != 0:
print(f":: Error while processing image: {stderr.decode()}")
else:
print(":: Square image created!")
if __name__ == "__main__":
acquire_lock()
try:
asyncio.run(main())
finally:
release_lock()
-2
View File
@@ -1,8 +1,6 @@
#!/bin/bash #!/bin/bash
source ~/dotfiles/hypr/scripts/Ui_cmd.sh source ~/dotfiles/hypr/scripts/Ui_cmd.sh
source ~/dotfiles/hypr/scripts/Music_cmd.sh
help() { help() {
declare -F declare -F
+1 -1
View File
@@ -43,7 +43,7 @@ shotarea() {
local tmpfile=$(mktemp) local tmpfile=$(mktemp)
local area=$(slurp) local area=$(slurp)
if [[ -z "$area" ]]; then if [[ -z "$area" ]]; then
notify-send -u low -i "$iDIR/picture.png" 'No area selected' notify-send -u low -i "$iDIR/cancel.svg" 'No area selected'
rm "$tmpfile" rm "$tmpfile"
return return
fi fi
+3 -67
View File
@@ -3,30 +3,6 @@
notif="$HOME/dotfiles/hypr/assets/bell.png" notif="$HOME/dotfiles/hypr/assets/bell.png"
# For Keyboard Layout Switcher
######################################
# #
# Toggle Blur #
# #
######################################
toggle_blur (){
STATE=$(hyprctl -j getoption decoration:blur:passes | jq ".int")
if [ "${STATE}" == "2" ]; then
hyprctl keyword decoration:blur:size 2
hyprctl keyword decoration:blur:passes 1
notify-send -e -u low -i "$notif" "Less blur"
else
hyprctl keyword decoration:blur:size 5
hyprctl keyword decoration:blur:passes 2
notify-send -e -u low -i "$notif" "Normal blur"
fi
}
###################################### ######################################
# # # #
# Toggle Animation # # Toggle Animation #
@@ -77,32 +53,6 @@ change_layout() {
} }
######################################
# #
# Auto Wallpaper Changer #
# #
######################################
auto_wall() {
wallDIR="$HOME/Pictures/wallpapers"
FPS=60
TYPE="random"
DURATION=1
BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps ${FPS} --transition-type ${TYPE} --transition-duration ${DURATION} --transition-bezier ${BEZIER}"
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
INTERVAL=1800 # This controls (in seconds) when to switch to the next image
while true; do
find "$wallDIR" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" \) -print0 \
| shuf -z -n 1 \
| xargs -0 -I {} swww img -o $focused_monitor "{}" ${SWWW_PARAMS} &&
$RunCMD symlink
sleep $INTERVAL
done
}
###################################### ######################################
# # # #
# GameMode # # GameMode #
@@ -122,23 +72,9 @@ gamemode() {
} }
###################################### ######################################
# # # #
# Toggle Opaque # # Keyboard Layout Switcher #
# # # #
######################################
enable_opaque() {
sleep 0.2
hyprctl setprop address:$(hyprctl -j activewindow | jq -r -c ".address") forceopaque 0 lock
}
disable_opaque() {
sleep 0.2
hyprctl setprop address:$(hyprctl -j activewindow | jq -r -c ".address") forceopaque 1 lock
}
######################################
# Keyboard Layout Switcher #
# #
###################################### ######################################
kb_changer() { kb_changer() {
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash
# Path to your JSON file
JSON_FILE="$HOME/dotfiles/.settings/apps.json"
# Read the application type from the argument
APP_TYPE=$1
# Extract the corresponding application value from the JSON file using jq
APP=$(jq -r ".$APP_TYPE" "$JSON_FILE")
# Check if the application is defined in the JSON file
if [ "$APP" != "null" ]; then
# Open the specified application
$APP
else
echo "No application defined for $APP_TYPE in $JSON_FILE"
fi
+24
View File
@@ -0,0 +1,24 @@
#!/bin/bash
# Path to your settings JSON file
settings_file="$HOME/dotfiles/.settings/settings.json"
# Read wallpaper engine from the JSON file
wallpaper_engine=$(jq -r '.["wallpaper-engine"]' "$settings_file")
if [ "$wallpaper_engine" == "swww" ]; then
# swww
echo ":: Using swww"
swww-daemon
swww-daemon --format xrgb
sleep 0.5
python -O ~/dotfiles/hypr/scripts/wallpaper.py -P
elif [ "$wallpaper_engine" == "hyprpaper" ]; then
# hyprpaper
echo ":: Using hyprpaper"
sleep 0.5
python -O ~/dotfiles/hypr/scripts/wallpaper.py -P
else
echo ":: Wallpaper Engine disabled"
python -O ~/dotfiles/hypr/scripts/wallpaper.py -P
fi
+55 -18
View File
@@ -10,6 +10,8 @@ import colorsys
import json import json
lock_file_path = '/tmp/wallpaper.lock' lock_file_path = '/tmp/wallpaper.lock'
settings_file_path = os.path.expanduser('~/dotfiles/.settings/settings.json')
def acquire_lock(): def acquire_lock():
global lock_file global lock_file
@@ -22,18 +24,28 @@ def acquire_lock():
print("Another instance of the script is already running.") print("Another instance of the script is already running.")
sys.exit(1) sys.exit(1)
def release_lock(): def release_lock():
fcntl.flock(lock_file, fcntl.LOCK_UN) fcntl.flock(lock_file, fcntl.LOCK_UN)
lock_file.close() lock_file.close()
os.remove(lock_file_path) os.remove(lock_file_path)
def hue_to_numeric_hex(hue): def hue_to_numeric_hex(hue):
hue = hue / 360.0 hue = hue / 360.0
rgb = colorsys.hls_to_rgb(hue, 0.5, 1.0) rgb = colorsys.hls_to_rgb(hue, 0.5, 1.0)
hex_color_str = '#{:02x}{:02x}{:02x}'.format(int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255)) hex_color_str = '#{:02x}{:02x}{:02x}'.format(
int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255)
)
numeric_hex_color = int(hex_color_str.lstrip('#'), 16) numeric_hex_color = int(hex_color_str.lstrip('#'), 16)
return numeric_hex_color return numeric_hex_color
def load_settings():
with open(settings_file_path, 'r') as file:
return json.load(file)
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True) group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-I', '--image', type=str, help="Image") group.add_argument('-I', '--image', type=str, help="Image")
@@ -52,17 +64,6 @@ status = args.status
HOME = os.path.expanduser("~") HOME = os.path.expanduser("~")
# Load configuration from JSON file
config_file = f"{HOME}/dotfiles/ags/assets/settings.json" # Path to your JSON configuration file
with open(config_file, 'r') as f:
config = json.load(f)
color_scheme = config.get("color-scheme", "dark")
custom_color = config.get("custom-color", "none")
generation_scheme = config.get("generation-scheme", "tonalSpot")
transition_type = config.get("swww-anim", "wipe")
module_path = f'{HOME}/dotfiles/material-colors' module_path = f'{HOME}/dotfiles/material-colors'
sys.path.append(module_path) sys.path.append(module_path)
@@ -77,28 +78,43 @@ cache_file = f"{HOME}/.cache/current_wallpaper"
square = f"{HOME}/.cache/square_wallpaper.png" square = f"{HOME}/.cache/square_wallpaper.png"
png = f"{HOME}/.cache/current_wallpaper.png" png = f"{HOME}/.cache/current_wallpaper.png"
def current_state(str: str):
def current_state(state_str: str):
with open(status, 'w') as f: with open(status, 'w') as f:
f.write(str) f.write(state_str)
def send_notify(label: str, desc: str): def send_notify(label: str, desc: str):
if not notify: if not notify:
return return
subprocess.run(["notify-send", label, desc]) subprocess.run(["notify-send", label, desc])
def state(name: str | None, label: str | None, desc: str | None): def state(name: str | None, label: str | None, desc: str | None):
if name is not None: if name is not None:
current_state(name) current_state(name)
if label is not None: if label is not None:
send_notify(label, desc or "") send_notify(label, desc or "")
def join(*args): def join(*args):
return os.path.join(*args) return os.path.join(*args)
async def main(): async def main():
global color_scheme, custom_color, generation_scheme, swww_animation, wallpaper_engine, hyprpaper_tpl
state("init", None, None) state("init", None, None)
new_wallpaper = f"{HOME}/Pictures/wallpapers/1.jpg" settings = load_settings()
color_scheme = settings['color-scheme']
custom_color = settings['custom-color']
generation_scheme = settings['generation-scheme']
swww_animation = settings['swww-anim']
wallpaper_engine = settings['wallpaper-engine']
hyprpaper_tpl = settings['hyprpaper-tpl']
new_wallpaper = f"{HOME}/Picutres/wallpapers/default.jpg"
if random: if random:
files = [f for f in os.listdir(f"{HOME}/Pictures/wallpapers") if f.endswith(('.png', '.jpg', '.jpeg'))] files = [f for f in os.listdir(f"{HOME}/Pictures/wallpapers") if f.endswith(('.png', '.jpg', '.jpeg'))]
@@ -123,14 +139,16 @@ async def main():
# ----------------------------------------------------- # -----------------------------------------------------
# Set the new wallpaper # Set the new wallpaper
# ----------------------------------------------------- # -----------------------------------------------------
wallpaper_engine = "swww" # Default wallpaper engine
transition_type = swww_animation
state("changing", "Changing wallpaper...", with_image) state("changing", "Changing wallpaper...", with_image)
print(":: Changing wallpaper...") print(":: Changing wallpaper...")
if wallpaper_engine == "swww": if wallpaper_engine == "swww":
print(":: Using swww") print(":: Using swww")
cursor_pos = subprocess.getoutput('hyprctl cursorpos') cursor_pos = subprocess.getoutput('hyprctl cursorpos').replace(", ", ",")
subprocess.run([ subprocess.run([
'swww', 'img', new_wallpaper, 'swww', 'img', new_wallpaper,
@@ -138,8 +156,24 @@ async def main():
'--transition-fps', '60', '--transition-fps', '60',
'--transition-type', transition_type, '--transition-type', transition_type,
'--transition-duration', '0.7', '--transition-duration', '0.7',
'--transition-pos', cursor_pos.replace(",",",") '--transition-pos', cursor_pos
]) ])
elif wallpaper_engine == "hyprpaper":
print(":: Using hyprpaper")
subprocess.run(['killall', 'hyprpaper'])
output = hyprpaper_tpl.replace('WALLPAPER', new_wallpaper)
hyprpaper_conf_file = os.path.expanduser('~/dotfiles/hypr/hyprpaper.conf')
with open(hyprpaper_conf_file, 'w') as file:
file.write(output)
subprocess.run([
"hyprctl", "dispatch", "exec", "hyprpaper"
])
else: else:
print(":: Wallpaper Engine disabled") print(":: Wallpaper Engine disabled")
@@ -175,6 +209,7 @@ async def main():
await asyncio.gather(square_task, png_task) await asyncio.gather(square_task, png_task)
state("finish", "Wallpaper procedure complete!", with_image) state("finish", "Wallpaper procedure complete!", with_image)
async def png_image(wallpaper: str): async def png_image(wallpaper: str):
_from = (".jpg", "jpeg") _from = (".jpg", "jpeg")
if not wallpaper.endswith(_from): if not wallpaper.endswith(_from):
@@ -196,6 +231,7 @@ async def png_image(wallpaper: str):
else: else:
print(":: JPG successfully converted to PNG!") print(":: JPG successfully converted to PNG!")
async def square_image(wallpaper): async def square_image(wallpaper):
with_image = f"with image {wallpaper}" with_image = f"with image {wallpaper}"
state(None, "Creating square version...", with_image) state(None, "Creating square version...", with_image)
@@ -213,6 +249,7 @@ async def square_image(wallpaper):
else: else:
print(":: Square image created!") print(":: Square image created!")
if __name__ == "__main__": if __name__ == "__main__":
acquire_lock() acquire_lock()
try: try:
@@ -0,0 +1,247 @@
import os
import sys
import importlib.util
import argparse
import fcntl
import subprocess
import asyncio
import random as _random
import colorsys
lock_file_path = '/tmp/wallpaper.lock'
def acquire_lock():
global lock_file
lock_file = open(lock_file_path, 'w')
try:
fcntl.flock(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
lock_file.write(str(os.getpid()))
lock_file.flush()
except IOError:
print("Another instance of the script is already running.")
sys.exit(1)
def release_lock():
fcntl.flock(lock_file, fcntl.LOCK_UN)
lock_file.close()
os.remove(lock_file_path)
def hue_to_numeric_hex(hue):
hue = hue / 360.0
rgb = colorsys.hls_to_rgb(hue, 0.5, 1.0)
hex_color_str = '#{:02x}{:02x}{:02x}'.format(int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255))
numeric_hex_color = int(hex_color_str.lstrip('#'), 16)
return numeric_hex_color
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-I', '--image', type=str, help="Image")
group.add_argument('-P', '--prev', help="Use last used wallpaper for color generation", action='store_true')
group.add_argument('-R', '--random', help="Random image from folder", action='store_true')
parser.add_argument('-n', '--notify', help="Send notifications", action='store_true')
parser.add_argument('--status', type=str, help="Status file", default="/tmp/wallpaper.status")
args = parser.parse_args()
random = args.random
prev = args.prev
image = args.image
notify = args.notify
status = args.status
HOME = os.path.expanduser("~")
module_path = f'{HOME}/dotfiles/material-colors'
sys.path.append(module_path)
module_name = 'generate'
file_path = f'{module_path}/{module_name}.py'
spec = importlib.util.spec_from_file_location(module_name, file_path)
GENERATOR = importlib.util.module_from_spec(spec) # type: ignore
spec.loader.exec_module(GENERATOR) # type: ignore
cache_file = f"{HOME}/.cache/current_wallpaper"
square = f"{HOME}/.cache/square_wallpaper.png"
png = f"{HOME}/.cache/current_wallpaper.png"
color_scheme_file = f"{HOME}/dotfiles/.settings/color-scheme"
custom_color_file = f"{HOME}/dotfiles/.settings/custom-color"
generation_scheme_file = f"{HOME}/dotfiles/.settings/generation-scheme"
swww_animation_file = f"{HOME}/dotfiles/.settings/swww-anim"
def current_state(str: str):
with open(status, 'w') as f:
f.write(str)
def send_notify(label: str, desc: str):
if not notify:
return
subprocess.run(["notify-send", label, desc])
def state(name: str | None, label: str | None, desc: str | None):
if name is not None:
current_state(name)
if label is not None:
send_notify(label, desc or "")
def join(*args):
return os.path.join(*args)
async def main():
global color_scheme, custom_color
state("init", None, None)
with open(color_scheme_file) as f:
color_scheme = f.read().strip()
with open(custom_color_file) as f:
custom_color = f.read().strip()
with open(generation_scheme_file) as f:
generation_scheme = f.read().strip()
with open(swww_animation_file) as f:
swww_animation = f.read().strip()
new_wallpaper = f"{HOME}/Pictures/wallpapers/1.jpg"
if random:
files = [f for f in os.listdir(f"{HOME}/Pictures/wallpapers") if f.endswith(('.png', '.jpg', '.jpeg'))]
if files:
new_wallpaper = join(f"{HOME}/Pictures/wallpapers", _random.choice(files))
elif prev:
try:
with open(cache_file) as f:
new_wallpaper = f.read().strip()
except FileNotFoundError:
...
elif image is not None:
new_wallpaper = os.path.abspath(image)
print(f":: Wallpaper {new_wallpaper}")
with open(cache_file, 'w') as f:
f.write(new_wallpaper)
with_image = f"with image {new_wallpaper}"
# -----------------------------------------------------
# Set the new wallpaper
# -----------------------------------------------------
transition_type = swww_animation
# transition_type = "outer"
# transition_type = "random"
wallpaper_engine = "swww" # Default wallpaper engine
state("changing", "Changing wallpaper...", with_image)
print(":: Changing wallpaper...")
if wallpaper_engine == "swww":
print(":: Using swww")
cursor_pos = subprocess.getoutput('hyprctl cursorpos')
subprocess.run([
'swww', 'img', new_wallpaper,
'--transition-bezier', '.43,1.19,1,.4',
'--transition-fps', '60',
'--transition-type', transition_type,
'--transition-duration', '0.7',
'--transition-pos', cursor_pos.replace(",",",")
])
else:
print(":: Wallpaper Engine disabled")
# -----------------------------------------------------
# Generate colors
# -----------------------------------------------------
state("colors", "Generating colors...", with_image)
print(":: Generate colors")
_starts_with = (lambda x: str(x).startswith("-"))
GENERATOR.main(
color_scheme, new_wallpaper,
(hue_to_numeric_hex(int(custom_color.lstrip("-")))
if _starts_with(custom_color) else (
int(custom_color.lstrip('#'), 16)
if custom_color != "none"
else None
)),
scheme=GENERATOR.schemes[generation_scheme]
)
# -----------------------------------------------------
# Square image
# -----------------------------------------------------
square_task = asyncio.create_task(square_image(new_wallpaper))
# -----------------------------------------------------
# Png image
# -----------------------------------------------------
png_task = asyncio.create_task(png_image(new_wallpaper))
state("tasks", None, None)
await asyncio.gather(square_task, png_task)
state("finish", "Wallpaper procedure complete!", with_image)
async def png_image(wallpaper: str):
_from = (".jpg", "jpeg")
if not wallpaper.endswith(_from):
cmd = f"cp -f {wallpaper} {png}"
else:
with_image = f"with image {wallpaper}"
state(None, "Converting jpg to png...", with_image)
print(":: Converting jpg to png...")
cmd = f"magick {wallpaper} {png}"
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
if process.returncode != 0:
print(f":: Error while processing image: {stderr.decode()}")
else:
print(":: JPG successfully converted to PNG!")
async def square_image(wallpaper):
with_image = f"with image {wallpaper}"
state(None, "Creating square version...", with_image)
print(":: Creating square version")
cmd = f"magick {wallpaper} -gravity Center -extent 1:1 {square}"
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
if process.returncode != 0:
print(f":: Error while processing image: {stderr.decode()}")
else:
print(":: Square image created!")
if __name__ == "__main__":
acquire_lock()
try:
asyncio.run(main())
finally:
release_lock()
-78
View File
@@ -1,78 +0,0 @@
# Fonts
font_family Iosevka Nerd Font
bold_font auto
italic_font auto
bold_italic_font auto
font_size 11
# Cursor
cursor #928374
cursor_text_color background
scrollback_lines 99999
enable_audio_bell no
remember_window_size no
initial_window_width 840
initial_window_height 320
confirm_os_window_close 0
active_tab_background #47423E
active_tab_foreground #E0CDA5
active_tab_font_style bold
inactive_tab_background #E0CDA5
inactive_tab_foreground #928374
inactive_tab_font_style normal
background_opacity 0.9
dim_opacity 0.60
selection_background #E0CDA5
selection_foreground #47423E
background #000000
foreground #E0CDA5
# Black
color0 #47423E
color8 #928374
# Red
color1 #DB4740
color9 #F3594B
# Green
color2 #A1A740
color10 #B1B946
# Yellow
color3 #DF9238
color11 #E9B243
# Blue
color4 #619A96
color12 #80AA9E
# Magenta
color5 #C27491
color13 #D3869B
# Cyan
color6 #79A976
color14 #8CBA7F
# White
color7 #BEAC8E
color15 #E0CDA5
#: Keyboard shortcuts {{{
map ctrl+v paste_from_clipboard
map ctrl+c copy_and_clear_or_interrupt
map ctrl+shift+e open_url_with_hints
map ctrl+shift+o pass_selection_to_program qutebrowser
+5 -2
View File
@@ -1,11 +1,14 @@
#!/bin/bash #!/bin/bash
dark_icon="Tela-nord-dark"
light_icon="Tela-nord-light"
if [ "$1" == "--light" ]; then if [ "$1" == "--light" ]; then
gsettings set org.gnome.desktop.interface gtk-theme adw-gtk3 gsettings set org.gnome.desktop.interface gtk-theme adw-gtk3
gsettings set org.gnome.desktop.interface icon-theme "Tela-nord-light" gsettings set org.gnome.desktop.interface icon-theme "$light_icon"
gsettings set org.gnome.desktop.interface color-scheme 'prefer-light' gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'
else else
gsettings set org.gnome.desktop.interface gtk-theme adw-gtk3-dark gsettings set org.gnome.desktop.interface gtk-theme adw-gtk3-dark
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
gsettings set org.gnome.desktop.interface icon-theme "Tela-nord-dark" gsettings set org.gnome.desktop.interface icon-theme "$dark_icon"
fi fi
+2
View File
@@ -130,6 +130,7 @@ pkg=(
adw-gtk-theme adw-gtk-theme
bibata-cursor-theme-bin bibata-cursor-theme-bin
hyprpicker hyprpicker
hyprpaper
power-profile-daemon power-profile-daemon
hyprlock hyprlock
pyprland pyprland
@@ -441,6 +442,7 @@ CONFIG_DIRS=(
"yazi" "yazi"
"zathura" "zathura"
"zsh" "zsh"
"electron-flags.conf"
) )
# Install .config directories # Install .config directories
for dir in "${CONFIG_DIRS[@]}"; do for dir in "${CONFIG_DIRS[@]}"; do
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 844 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 869 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 KiB