aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2019-10-07 09:59:13 -0400
committerLoic Guegan <manzerbredes@mailbox.org>2019-10-07 09:59:13 -0400
commit0648bd0071b7f69543bd73e9bd1fa7af527c69f8 (patch)
tree0ff28cb27121c5088954c2dd6233c105f9941ccf
parent8159cebf203d48e9cf2f3ca27e8d76ce6127d7ef (diff)
Various chaanges
-rw-r--r--README.md8
-rwxr-xr-xsrc/i3-colors.py30
-rw-r--r--[-rwxr-xr-x]src/i3-theme.py2
-rw-r--r--src/parser.py105
4 files changed, 141 insertions, 4 deletions
diff --git a/README.md b/README.md
index 8b0f422..b29a4af 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,9 @@
# i3-colors
Simple Python i3 colors manager.
+**Install/Usage:**
-
-## Doc
-Execute: ./src/i3-theme and enjoy \ No newline at end of file
+ git clone https://gitlab.com/manzerbredes/i3-colors
+ ./i3-colors/src/i3-colors.py -h
+
+**Notes:** Some of the themes come [i3-style project](https://github.com/altdesktop/i3-style) \ No newline at end of file
diff --git a/src/i3-colors.py b/src/i3-colors.py
new file mode 100755
index 0000000..1e367b5
--- /dev/null
+++ b/src/i3-colors.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+import config, theme, os, argparse, subprocess
+
+
+##### Utils Functions #####
+def log(msg,title=""):
+ if len(title)>0:
+ print("\033[92m{}\033[00m: {}" .format(title,msg))
+ else:
+ print(msg)
+###########################
+
+
+##### Parse Arguments #####
+args_parser = argparse.ArgumentParser(description='I3 Window Manager Colors Themer.')
+args_parser.add_argument('theme_path', type=str, nargs='?',
+ help='I3 YAML theme path.')
+args_parser.add_argument('-r', '--restart' ,action='store_true', help='Restart i3 after applying theme.')
+args = args_parser.parse_args()
+###########################
+
+##### Apply Theme #####
+loaded_theme=theme.load(args.theme_path)
+for meta_key,meta_value in loaded_theme["meta"].items():
+ log(meta_value,title=meta_key.title())
+config.apply_theme(os.environ["HOME"]+"/.config/i3/config",loaded_theme)
+if args.restart:
+ subprocess.Popen("i3-msg restart".split())
+#######################
+
diff --git a/src/i3-theme.py b/src/i3-theme.py
index 1e367b5..915838f 100755..100644
--- a/src/i3-theme.py
+++ b/src/i3-theme.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
import config, theme, os, argparse, subprocess
diff --git a/src/parser.py b/src/parser.py
new file mode 100644
index 0000000..47ee12a
--- /dev/null
+++ b/src/parser.py
@@ -0,0 +1,105 @@
+import re,tempfile,shutil
+
+theme_keys=["client.focused",
+ "client.focused_inactive",
+ "client.unfocused",
+ "client.urgent",
+ "separator",
+ "background",
+ "statusline",
+ "focused_workspace",
+ "active_workspace",
+ "inactive_workspace",
+ "urgent_workspace"]
+
+def contains(r,line):
+ return(re.match(r,line)!=None)
+
+def extract_config(config_file):
+ f=open(config_file,"r")
+ tmp=tempfile.NamedTemporaryFile(mode="w",delete=False)
+ for line in f:
+ is_theme_line=False
+ for key in theme_keys:
+ if contains(".*"+key+"\s",line):
+ is_theme_line=True
+ if not(is_theme_line):
+ tmp.write(line)
+
+ f.close()
+ tmp.close()
+ return(tmp.name)
+
+def safe_get(theme,key):
+ if key in theme:
+ return(theme[key])
+ return("")
+
+def apply_to_config(tmp_config,theme):
+ f=open(tmp_config,mode="r")
+ tmp=tempfile.NamedTemporaryFile(mode="w",delete=False)
+
+ ##### Apply bar theme #####
+ bar_theme=theme["bar_colors"]
+ for line in f:
+ if contains(".*colors\s{",line):
+ tmp.write(line)
+ for key,value in bar_theme.items():
+ if not(isinstance(value,dict)):
+ tmp.write("\t"+key+" "+value+"\n")
+ else:
+ tmp.write("\t"+key+" "+value["border"]+" "+value["background"]+" "+value["text"]+"\n")
+ else:
+ tmp.write(line)
+ tmp.close()
+ f.close()
+ shutil.move(tmp.name,tmp_config)
+
+ ##### Apply client theme #####
+ client_theme=theme["window_colors"]
+ f=open(tmp_config,mode="a")
+ for key,value in client_theme.items():
+ f.write("client."+key+" "+value["border"]+" "+value["background"]+" "+value["text"]+" "+value["indicator"]+" "+safe_get(value,"child_border")+"\n")
+ f.close()
+
+def apply_theme(config_file,theme):
+ tmp=extract_config(config_file)
+ apply_to_config(tmp,theme)
+ shutil.move(tmp,config_file)
+
+theme={
+ "bar":{
+ "separator": "#666666",
+ "background": "#333333",
+ "statusline": "#bbbbbb",
+ "focused_workspace": { "border":"#888888",
+ "background": "#dddddd",
+ "text": "#222222"},
+ "active_workspace": { "border": "#333333",
+ "background": "#555555",
+ "text": "#bbbbbb"},
+ "inactive_workspace": { "border": "#333333",
+ "background": "#555555",
+ "text": "#bbbbbb"},
+ "urgent_workspace": { "border": "#2f343a",
+ "background": "#900000",
+ "text": "#ffffff"}},
+ "client": {
+ "client.focused": { "background": "#888888",
+ "text": "#dddddd",
+ "indicator": "#222222",
+ "child_border": "#2e9ef4"},
+ "client.focused_inactive": { "background": "#333333",
+ "text": "#555555",
+ "indicator": "#bbbbbb",
+ "child_border": "#484e50"},
+ "client.unfocused": { "background": "#333333",
+ "text": "#333333",
+ "indicator": "#888888",
+ "child_border": "#292d2e"},
+ "client.urgent": { "background": "#2f343a",
+ "text": "#900000",
+ "indicator": "#ffffff",
+ "child_border": "#900000"}}
+}
+