diff --git a/README.md b/README.md
index b2044bf..3556338 100644
--- a/README.md
+++ b/README.md
@@ -27,25 +27,30 @@ Pick a window manager section below, then add the shared configs.
### Hyprland
```bash
-ln -sf ~/scripts/hyprland/hyprland.conf ~/.config/hypr/hyprland.conf
-ln -sf ~/scripts/waybar/waybar_hyprland_config.json ~/.config/waybar/config
-ln -sf ~/scripts/waybar/waybar_style.css ~/.config/waybar/style.css
-ln -sf ~/scripts/wofi/wofi_style.css ~/.config/wofi/style.css
+ln -sf ~/scripts/hypr ~/.config/hypr
+ln -sf ~/scripts/waybar ~/.config/waybar
+ln -sf ~/scripts/wofi ~/.config/wofi
```
### Sway
```bash
-ln -sf ~/scripts/sway/swayconfig ~/.config/sway/config
-ln -sf ~/scripts/waybar/waybar_sway_config.json ~/.config/waybar/config
-ln -sf ~/scripts/waybar/waybar_style.css ~/.config/waybar/style.css
-ln -sf ~/scripts/wofi/wofi_style.css ~/.config/wofi/style.css
+ln -sf ~/scripts/sway ~/.config/sway
+ln -sf ~/scripts/waybar ~/.config/waybar
+ln -sf ~/scripts/wofi ~/.config/wofi
+```
+
+The default waybar config (`waybar/config`) is set up for Hyprland. For Sway, rename the sway config as the active one:
+
+```bash
+mv ~/scripts/waybar/config ~/scripts/waybar/config.hypr.json
+mv ~/scripts/waybar/waybar_sway_config.json ~/scripts/waybar/config
```
### i3
```bash
-ln -sf ~/scripts/i3/i3config ~/.config/i3/config
+ln -sf ~/scripts/i3 ~/.config/i3
ln -sf ~/scripts/i3/i3blocks.conf ~/.config/i3blocks/config
ln -sf ~/scripts/i3/i3status.conf ~/.config/i3status/config
```
@@ -163,6 +168,35 @@ Prefix is Ctrl + f.
| `Prefix + Ctrl + s` | Save session (resurrect) |
| `Prefix + Ctrl + r` | Restore session (resurrect) |
+## Colorscheme
+
+All colors are defined in a single file: `colors.conf`. A generator script produces format-specific fragments that each config sources or imports.
+
+To change the theme:
+
+```bash
+# 1. Edit the palette
+vim ~/scripts/colors.conf
+
+# 2. Regenerate fragments
+~/scripts/sh/gen-colors
+
+# 3. Reload your WM / bar
+hyprctl reload # Hyprland
+swaymsg reload # Sway
+killall waybar && waybar & # Waybar
+```
+
+Generated files (committed so configs work after a fresh clone):
+
+| File | Format | Used by |
+| --- | --- | --- |
+| `hypr/colors.conf` | `$color_name = rgb(HEXVAL)` | `hyprland.conf` (source) |
+| `sway/colors.conf` | `set $color_name #HEXVAL` | `swayconfig` (include) |
+| `i3/colors.conf` | `set $color_name #HEXVAL` | `i3config` (include) |
+| `waybar/colors.css` | CSS custom properties | `waybar/style.css` (@import) |
+| `wofi/colors.css` | CSS custom properties | `wofi/style.css` (@import) |
+
## Scripts
All in `sh/`, added to `$PATH` via the shell config above.
@@ -172,3 +206,4 @@ All in `sh/`, added to `$PATH` via the shell config above.
| `sharefile ` | Upload a file to 0x0.st |
| `getfile ` | Download a file from 0x0.st |
| `waybar-history` | Stream the last zsh history entry to waybar |
+| `gen-colors` | Regenerate color fragments from `colors.conf` |
diff --git a/colors.conf b/colors.conf
new file mode 100644
index 0000000..96fe75e
--- /dev/null
+++ b/colors.conf
@@ -0,0 +1,10 @@
+primary=#55ffbb
+secondary=#62ff57
+tertiary=#ff579a
+bg=#1b110e
+bg_secondary=#000000
+alt_bg=#024942
+gray=#222222
+text_light=#F0F0F0
+text_dark=#1b110e
+white=#FFFFFF
diff --git a/hyprland/hyprland.conf b/hypr/hyprland.conf
similarity index 96%
rename from hyprland/hyprland.conf
rename to hypr/hyprland.conf
index d1ee808..5550563 100644
--- a/hyprland/hyprland.conf
+++ b/hypr/hyprland.conf
@@ -1,6 +1,8 @@
# Hyprland config - converted from i3 config by Adam French
# https://wiki.hyprland.org/Configuring/
+source = ~/scripts/hypr/colors.conf
+
################
### MONITORS ###
################
@@ -58,8 +60,8 @@ general {
gaps_out = 0 # outer gaps (i3: gaps outer 0)
border_size = 1
- col.active_border = rgb(C792EA)
- col.inactive_border = rgb(6272A4)
+ col.active_border = $color_primary
+ col.inactive_border = $color_gray
resize_on_border = true
allow_tearing = false
@@ -342,12 +344,13 @@ windowrule {
##############################
# Your theme palette for use in waybar / wofi CSS:
-# Background: #1A1B2F
-# Accent 1: #C792EA (purple)
-# Accent 2: #FF79C6 (pink)
-# Accent 3: #82AAFF (blue)
-# Inactive: #6272A4
-# Surface: #2A2B3D
+# Background: #1b110e
+# BG Secondary: #000000
+# Primary: #55ffbb (green)
+# Secondary: #62ff57 (lime)
+# Tertiary: #ff579a (pink)
+# Quaternary: #024942 (dark teal)
+# Link: #222222
#####################################
diff --git a/i3/i3config b/i3/config
similarity index 91%
rename from i3/i3config
rename to i3/config
index 391e62a..968eb8a 100644
--- a/i3/i3config
+++ b/i3/config
@@ -1,5 +1,7 @@
# This is my personal personal i3 config file! - Adam French
+include ~/scripts/i3/colors.conf
+
# WORKSPACE NAMES -----------------------------------
set $ws1 1:ツ
set $ws2 2:ಠ‿ಠ
@@ -72,7 +74,7 @@ bindsym $mod+Return exec kitty
# kill focused window
bindsym $mod+Shift+q kill
# start program launcher
-bindsym $mod+d exec --no-startup-id dmenu_run -nb '#1A1B2F' -sf '#FF79C6' -sb '#1A1B2F' -nf '#c792EA'
+bindsym $mod+d exec --no-startup-id dmenu_run -nb '$color_bg' -sf '$color_tertiary' -sb '$color_bg' -nf '$color_primary'
bindsym $mod+Ctrl+m exec pavucontrol
@@ -339,14 +341,14 @@ bar {
strip_workspace_numbers yes
colors {
- background #1A1B2F
- statusline #C792EA
- separator #FF79C6
- focused_workspace #C792EA #1A1B2F #FFFFFF
- active_workspace #C792EA #2A2B3D #FFFFFF
- inactive_workspace #6272A4 #2A2B3D #FFFFFF
- binding_mode #FF79C6 #1A1B2F #FFFFFF
- urgent_workspace #FF5370 #2A2B3D #FFFFFF
+ background $color_bg
+ statusline $color_primary
+ separator $color_tertiary
+ focused_workspace $color_primary $color_bg $color_white
+ active_workspace $color_primary $color_alt_bg $color_white
+ inactive_workspace $color_gray $color_alt_bg $color_white
+ binding_mode $color_tertiary $color_bg $color_white
+ urgent_workspace $color_tertiary $color_alt_bg $color_white
}
}
@@ -354,14 +356,14 @@ bar {
bindsym $mod+m bar mode toggle
# Theme colors
-# class border backgr. text indic. child_border
-client.focused #82AAFF #C792EA #FFFFFF #C792EA
-client.focused_inactive #C792EA #2A2B3D #F0F0F0 #FF79C6
-client.unfocused #6272A4 #2A2B3D #F0F0F0 #C792EA
-client.urgent #FF5370 #2A2B3D #FFFFFF #FF79C6
-client.placeholder #1A1B2F #1A1B2F #FFFFFF #1A1B2F
+# class border backgr. text indic.
+client.focused $color_secondary $color_primary $color_text_dark $color_primary
+client.focused_inactive $color_primary $color_alt_bg $color_text_light $color_tertiary
+client.unfocused $color_gray $color_alt_bg $color_text_light $color_primary
+client.urgent $color_tertiary $color_alt_bg $color_white $color_tertiary
+client.placeholder $color_bg $color_bg $color_white $color_bg
-client.background #1A1B2F
+client.background $color_bg
# Set inner/outer gaps
gaps inner 10
diff --git a/sway/swayconfig b/sway/config
similarity index 94%
rename from sway/swayconfig
rename to sway/config
index 1dd82fc..5db85f9 100644
--- a/sway/swayconfig
+++ b/sway/config
@@ -1,3 +1,5 @@
+include ~/scripts/sway/colors.conf
+
output * scale 1.2
@@ -313,14 +315,14 @@ for_window [urgent=latest] focus
exec_always waybar -c ~/scripts/waybar/waybar_sway_config.json -s ~/scripts/waybar/waybar_style.css
# Theme colors
-# class border backgr. text indic. child_border
-client.focused #82AAFF #C792EA #FFFFFF #C792EA
-client.focused_inactive #C792EA #2A2B3D #F0F0F0 #FF79C6
-client.unfocused #6272A4 #2A2B3D #F0F0F0 #C792EA
-client.urgent #FF5370 #2A2B3D #FFFFFF #FF79C6
-client.placeholder #1A1B2F #1A1B2F #FFFFFF #1A1B2F
+# class border backgr. text indic.
+client.focused $color_secondary $color_primary $color_text_dark $color_primary
+client.focused_inactive $color_primary $color_alt_bg $color_text_light $color_tertiary
+client.unfocused $color_gray $color_alt_bg $color_text_light $color_primary
+client.urgent $color_tertiary $color_alt_bg $color_white $color_tertiary
+client.placeholder $color_bg $color_bg $color_white $color_bg
-client.background #1A1B2F
+client.background $color_bg
# Set inner/outer gaps
gaps inner 10
diff --git a/waybar/waybar_hyprland_config.json b/waybar/config
similarity index 100%
rename from waybar/waybar_hyprland_config.json
rename to waybar/config
diff --git a/waybar/waybar_style.css b/waybar/style.css
similarity index 52%
rename from waybar/waybar_style.css
rename to waybar/style.css
index 8ae9ca2..5bbc5e8 100644
--- a/waybar/waybar_style.css
+++ b/waybar/style.css
@@ -1,3 +1,5 @@
+@import "colors.css";
+
* {
font-family: "URWGothic-Book", monospace;
font-size: 16px;
@@ -9,39 +11,39 @@
}
window#waybar {
- background-color: #1A1B2F;
- color: #C792EA;
+ background-color: var(--color-bg);
+ color: var(--color-primary);
}
/* Workspaces */
#workspaces button {
padding: 0 8px;
- background-color: #2A2B3D;
- color: #FFFFFF;
+ background-color: var(--color-alt_bg);
+ color: var(--color-white);
border-bottom: 2px solid transparent;
}
#workspaces button:hover {
- background-color: #2A2B3D;
- border-bottom: 2px solid #C792EA;
+ background-color: var(--color-alt_bg);
+ border-bottom: 2px solid var(--color-primary);
box-shadow: none;
}
#workspaces button.focused,
#workspaces button.active {
- background-color: #1A1B2F;
- color: #FFFFFF;
- border-bottom: 2px solid #C792EA;
+ background-color: var(--color-bg);
+ color: var(--color-white);
+ border-bottom: 2px solid var(--color-primary);
}
#workspaces button.urgent {
- background-color: #FF5370;
- color: #FFFFFF;
+ background-color: var(--color-tertiary);
+ color: var(--color-white);
}
#mode {
- background-color: #FF79C6;
- color: #1A1B2F;
+ background-color: var(--color-tertiary);
+ color: var(--color-text_dark);
padding: 0 8px;
font-style: italic;
}
@@ -58,7 +60,7 @@ window#waybar {
#battery,
#clock {
padding: 0 10px;
- color: #C792EA;
+ color: var(--color-primary);
}
/* Pink separators between modules (matching i3bar separator color) */
@@ -71,52 +73,52 @@ window#waybar {
#network,
#battery,
#clock {
- border-left: 1px solid #FF79C6;
+ border-left: 1px solid var(--color-tertiary);
}
#battery.warning {
- color: #FFB86C;
+ color: var(--color-secondary);
}
#battery.critical {
- color: #FF5370;
+ color: var(--color-tertiary);
}
#custom-greetings {
- color: #f5af19;
+ color: var(--color-secondary);
}
#clock {
- color: #FF79C6;
+ color: var(--color-tertiary);
}
/* claudebar severity classes */
#custom-claudebar.low {
- color: #50FA7B;
+ color: var(--color-primary);
}
#custom-claudebar.mid {
- color: #F1FA8C;
+ color: var(--color-secondary);
}
#custom-claudebar.high {
- color: #FFB86C;
+ color: var(--color-tertiary);
}
#custom-claudebar.critical {
- color: #FF5370;
+ color: var(--color-tertiary);
}
#tray {
padding: 0 8px;
- border-left: 1px solid #FF79C6;
+ border-left: 1px solid var(--color-tertiary);
}
-#tray>.passive {
+#tray > .passive {
-gtk-icon-effect: dim;
}
-#tray>.needs-attention {
+#tray > .needs-attention {
-gtk-icon-effect: highlight;
- background-color: #FF5370;
+ background-color: var(--color-tertiary);
}
diff --git a/wofi/style.css b/wofi/style.css
new file mode 100644
index 0000000..4417903
--- /dev/null
+++ b/wofi/style.css
@@ -0,0 +1,50 @@
+@import url("colors.css");
+
+window {
+ margin: 0px;
+ border: 1px solid var(--color-primary);
+ background-color: var(--color-bg);
+ border-radius: 8px;
+}
+
+#input {
+ padding: 4px 8px;
+ margin: 6px;
+ color: var(--color-text_light);
+ background-color: var(--color-alt_bg);
+ border: 1px solid var(--color-primary);
+ border-radius: 4px;
+}
+
+#inner-box {
+ background-color: var(--color-bg);
+}
+
+#outer-box {
+ margin: 4px;
+ padding: 4px;
+ background-color: var(--color-bg);
+}
+
+#scroll {
+ margin: 0px;
+ padding: 4px;
+}
+
+#text {
+ margin: 2px 8px;
+ color: var(--color-primary);
+}
+
+#entry {
+ border-radius: 4px;
+}
+
+#entry:selected {
+ background-color: var(--color-alt_bg);
+ border: 1px solid var(--color-primary);
+}
+
+#text:selected {
+ color: var(--color-tertiary);
+}
diff --git a/wofi/wofi_style.css b/wofi/wofi_style.css
deleted file mode 100644
index bd85610..0000000
--- a/wofi/wofi_style.css
+++ /dev/null
@@ -1,48 +0,0 @@
-window {
- margin: 0px;
- border: 1px solid #82AAFF;
- background-color: #1A1B2F;
- border-radius: 8px;
-}
-
-#input {
- padding: 4px 8px;
- margin: 6px;
- color: #F0F0F0;
- background-color: #2A2B3D;
- border: 1px solid #C792EA;
- border-radius: 4px;
-}
-
-#inner-box {
- background-color: #1A1B2F;
-}
-
-#outer-box {
- margin: 4px;
- padding: 4px;
- background-color: #1A1B2F;
-}
-
-#scroll {
- margin: 0px;
- padding: 4px;
-}
-
-#text {
- margin: 2px 8px;
- color: #C792EA;
-}
-
-#entry {
- border-radius: 4px;
-}
-
-#entry:selected {
- background-color: #2A2B3D;
- border: 1px solid #C792EA;
-}
-
-#text:selected {
- color: #FF79C6;
-}