Skip to content

Commit

Permalink
Json implimentation (#63)
Browse files Browse the repository at this point in the history
Do not use separate files in .settings, but use settings.json instead
  • Loading branch information
S4NKALP authored Jul 29, 2024
1 parent 4988934 commit a979ac2
Show file tree
Hide file tree
Showing 24 changed files with 238 additions and 209 deletions.
6 changes: 6 additions & 0 deletions .settings/apps.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"browser": "brave",
"editor": "code",
"filemanager": "thunar",
"terminal": "alacritty"
}
1 change: 0 additions & 1 deletion .settings/browser.sh

This file was deleted.

1 change: 0 additions & 1 deletion .settings/color-scheme

This file was deleted.

1 change: 0 additions & 1 deletion .settings/custom-color

This file was deleted.

1 change: 0 additions & 1 deletion .settings/editor.sh

This file was deleted.

1 change: 0 additions & 1 deletion .settings/filemanager.sh

This file was deleted.

1 change: 0 additions & 1 deletion .settings/generation-scheme

This file was deleted.

8 changes: 0 additions & 8 deletions .settings/hyprpaper.tpl

This file was deleted.

2 changes: 1 addition & 1 deletion .settings/icon-theme
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Tela-nord-dark
Tela-nord-light
Tela-nord-light
1 change: 0 additions & 1 deletion .settings/networkmanager.sh

This file was deleted.

8 changes: 8 additions & 0 deletions .settings/settings.json
Original file line number Diff line number Diff line change
@@ -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"
}
1 change: 0 additions & 1 deletion .settings/software.sh

This file was deleted.

1 change: 0 additions & 1 deletion .settings/swww-anim

This file was deleted.

1 change: 0 additions & 1 deletion .settings/terminal.sh

This file was deleted.

1 change: 0 additions & 1 deletion .settings/wallpaper-engine.sh

This file was deleted.

87 changes: 58 additions & 29 deletions ags/apps/settings/appearance.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { theme, theme_settings, generation_scheme_file } from "variables.ts";
import { theme, theme_settings, settings_file } from "variables.ts";
const GLib = imports.gi.GLib;
import Gtk from "gi://Gtk?version=3.0";
import config from "services/configuration.ts";
Expand All @@ -25,6 +25,17 @@ const color_schemes = {
}
};

export const updateGenerationScheme = async (scheme: string) => {
try {
const settingsContent = await Utils.readFile(settings_file);
const settings = JSON.parse(settingsContent);
settings["generation-scheme"] = scheme;
await Utils.writeFile(JSON.stringify(settings, null, 2), settings_file);
} catch (error) {
print(`Failed to update generation-scheme in settings.json: ${error}`);
}
};

let theme_reload_lock = false;
const color_generator = `${GLib.get_home_dir()}/dotfiles/material-colors/generate.py`;

Expand Down Expand Up @@ -71,41 +82,59 @@ function toHex(value: number) {
return hex.length == 1 ? "0" + hex : hex;
}

const ReloadTheme = () => {
const ReloadTheme = async () => {
let { color, scheme } = theme_settings;
let _color = color.value;
let color_to_write = _color;

if (_color.length > 0 && isNumeric(_color) && Number(_color) >= 0 && Number(_color) <= 360) {
_color = hueToHex(Number(_color));
color_to_write = `-${color.value}`;
color_to_write = `${color.value}`;
}

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(() => {
Utils.writeFile("none", `${GLib.get_home_dir()}/dotfiles/.settings/custom-color`).catch(print);
})
.catch(print);
}

theme_reload_lock = true;
if (_color != "none" && _color.length > 6)
Utils.execAsync(
`python -O ${color_generator} --color "${_color}" --color-scheme "${theme.value}" --scheme "${scheme.value}"`
)
.finally(() => {
theme_reload_lock = false;
})
.then(() => {
Utils.writeFile(color_to_write, `${GLib.get_home_dir()}/dotfiles/.settings/custom-color`).catch(print);
})
.catch((err) => {
print(err);
Default();
});
else Default();

const updateSettingsFile = async (customColor: string) => {
try {
const settingsContent = await Utils.readFile(settings_file);
const settings = JSON.parse(settingsContent);
settings["custom-color"] = customColor;
await Utils.writeFile(JSON.stringify(settings, null, 2), settings_file);
} catch (error) {
print(`Failed to update custom-color in settings.json: ${error}`);
}
};

const Default = async () => {
try {
await Utils.execAsync(
`python -O ${color_generator} -w --color-scheme "${theme.value}" --scheme "${scheme.value}"`
);
await updateSettingsFile("none");
} catch (error) {
print(error);
} finally {
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 = () =>
Expand Down Expand Up @@ -243,7 +272,7 @@ const ColorScheme = () =>
self.connect("changed", () => {
selected = self.get_active_text();
theme_settings.scheme.setValue(color_schemes[selected!]);
Utils.writeFile(color_schemes[selected!], generation_scheme_file).catch(print);
updateGenerationScheme(color_schemes[selected!]);
ReloadTheme();
});
}
Expand Down
103 changes: 54 additions & 49 deletions ags/scripts/apps.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,34 @@
import argparse
import re
import os
import re
import json

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument(
'--browser', type=str, help="Change default browser"
)
group.add_argument(
'--filemanager', type=str, help="Change file manager"
)
group.add_argument(
'--editor', type=str, help="Change default editor"
)
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('--browser', type=str, help="Change default browser")
group.add_argument('--filemanager', type=str, help="Change file manager")
group.add_argument('--editor', type=str, help="Change default editor")
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"])

args = parser.parse_args()

browser: str = args.browser
filemanager: str = args.filemanager
editor: str = args.editor
terminal: str = args.terminal
get: str = args.get
browser = args.browser
filemanager = args.filemanager
editor = args.editor
terminal = args.terminal
get = args.get

value: str = (
args.browser or args.filemanager or
args.editor or args.terminal or args.get
)
value = (args.browser or args.filemanager or
args.editor or args.terminal or args.get)

u = os.path.expanduser

config_file = u("~/dotfiles/hypr/conf/apps.conf")

CONFIG_FILE = u("~/dotfiles/hypr/conf/apps.conf")
JSON_CONFIG_FILE = u("~/dotfiles/.settings/apps.json")

with open(config_file) as f:
with open(CONFIG_FILE) as f:
original_env_str = f.read().strip()
env_str = original_env_str

Expand All @@ -62,7 +51,10 @@ def is_executable(fpath):


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 = {}
matches = pattern.findall(env_str)
for key, _, association in matches:
Expand All @@ -80,7 +72,8 @@ def replace_value(env_str, key, new_value):
pattern = re.compile(
r'^(\s*env\s*=\s*' +
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)

Expand All @@ -103,38 +96,50 @@ def change_association(key: str, value: str):
if key not in associations:
raise AssociationNotFound(key)

for key in associations[key]:
env_str = replace_value(env_str, key, value)
for assoc_key in associations[key]:
env_str = replace_value(env_str, assoc_key, value)


def change_file(file: str, value: str):
which(value)
with open(file, 'w') as f:
f.write(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


browser_file = u("~/dotfiles/.settings/browser.sh")
editor_file = u("~/dotfiles/.settings/editor.sh")
filemanager_file = u("~/dotfiles/.settings/filemanager.sh")
terminal_file = u("~/dotfiles/.settings/terminal.sh")
def update_json_config(key: str, value: str):
config = read_json_config()
config[key] = value
write_json_config(config)


if get:
with open(globals()[f"{value}_file"]) as f:
print(f.read().strip())
json_config = read_json_config()
print(json_config[get])
elif browser:
change_association("browser", value)
change_file(browser_file, value)
update_json_config("browser", value)
elif filemanager:
change_association("filemanager", value)
change_file(filemanager_file, value)
update_json_config("filemanager", value)
elif editor:
change_association("editor", value)
change_file(editor_file, value)
update_json_config("editor", value)
elif terminal:
change_association("terminal", value)
change_file(terminal_file, value)

update_json_config("terminal", value)

if env_str != original_env_str:
with open(config_file, 'w') as f:
with open(CONFIG_FILE, 'w') as f:
f.write(env_str + '\n')
Loading

0 comments on commit a979ac2

Please sign in to comment.