From 03407654d61d4a9429595f3432749b7cc81d8cd5 Mon Sep 17 00:00:00 2001 From: Mortdecai Date: Tue, 7 Apr 2026 13:41:51 -0400 Subject: [PATCH] init: seth-linux-theme scaffold with GTK CSS, kitty, and GNOME configs --- .gitignore | 3 + DECISIONS.md | 12 ++++ IDEA.md | 14 +++++ SESSION.md | 114 ++++++++++++++++++++++++++++++++++ gnome/apply-gnome-settings.sh | 10 +++ gtk-3.0/gtk.css | 44 +++++++++++++ install.sh | 35 +++++++++++ kitty/kitty-theme.conf | 10 +++ 8 files changed, 242 insertions(+) create mode 100644 .gitignore create mode 100644 DECISIONS.md create mode 100644 IDEA.md create mode 100644 SESSION.md create mode 100755 gnome/apply-gnome-settings.sh create mode 100644 gtk-3.0/gtk.css create mode 100755 install.sh create mode 100644 kitty/kitty-theme.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4fd5ddb --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SESSION.default.md +GITEA_API.md +.backup/ diff --git a/DECISIONS.md b/DECISIONS.md new file mode 100644 index 0000000..b86015c --- /dev/null +++ b/DECISIONS.md @@ -0,0 +1,12 @@ +# DECISIONS.md — Decision Log + +Project-specific decisions. For global/cross-cutting decisions, see `~/bin/DECISIONS.md`. + +Format: `YYYY-MM-DD: ` + +## Architecture + +## Implementation + +## Deferred / Rejected + diff --git a/IDEA.md b/IDEA.md new file mode 100644 index 0000000..8d46eeb --- /dev/null +++ b/IDEA.md @@ -0,0 +1,14 @@ +# IDEA.md — Project Idea + +## What is this? +Seth's Linux desktop theme configs — GTK CSS, kitty overrides, GNOME settings, and an install script to deploy them consistently. + +## Problem it solves +Reproducible desktop look across reinstalls. Black titlebars, square corners, ultra-thin headerbars, Sethian dark+orange brand. Currently scattered across ~/.config dirs — this centralizes and versions them. + +## Constraints / preferences +- GNOME desktop (Wayland or X11) +- Kitty terminal +- Dark theme, orange accent (#D35400) +- Minimal — override only what's needed, stock Adwaita otherwise +- Install script deploys to target user's ~/.config diff --git a/SESSION.md b/SESSION.md new file mode 100644 index 0000000..e2daf8e --- /dev/null +++ b/SESSION.md @@ -0,0 +1,114 @@ +MAIN OBJECTIVE: Create SESSION.md in your project directory according to the folliwing template. Do NOT modify this source file. +# SESSION.md — Persistent AI Session Memory + +This is the template and guide for `SESSION.md` files used across projects in this homelab. + +--- + +## What SESSION.md is for + +`SESSION.md` is a **persistent memory file** — it accumulates decisions, discoveries, and context across AI coding sessions so the assistant doesn't start cold each time. + +It is **not** a chat transcript. +It is **not** static documentation of how something works. +It is a living record of *why things are the way they are*, plus a map to the right context files. + +--- + +## Where to put it + +| Scope | Location | Purpose | +|---|---|---| +| Global homelab | `/root/bin/SESSION.md` ← this file | Cross-project memory, patterns, major decisions | +| Per-project | `/SESSION.md` | Project-specific session memory | + +Each project `SESSION.md` should link back here and to any relevant context files. + +--- + +## How to populate it + +Copy the section structure below into your project's `SESSION.md` and fill it in. + +### Mandatory sections + +**Context pointers** — every `SESSION.md` must list the files the AI should load to understand the project: + +```markdown +## Context Files + +- `/root/bin/core_homelab.md` — cluster topology, SSH aliases +- `/root/bin/services_directory.md` — active service IPs and domains +- `/root/bin/SESSION.md` — global session memory (this file's parent) +- `./CONTEXT.md` — project-specific infrastructure and config +- `./README.md` — project overview +``` + +**Project summary** — one paragraph. What is this project? What problem does it solve? + +**Gitea repo** — link to the Gitea remote (if version-controlled): + +```markdown +## Gitea + +- Repo: https://git.sethpc.xyz/Seth/ +- Remote: `https://Seth:@git.sethpc.xyz/Seth/.git` +- API key: see `/root/bin/GITEA_API.md` (same key for all repos) +``` + +**Session notes** — the meat of the file. Append here each session. + +--- + +## Session notes format + +Group entries by topic, not by date. Update the relevant section rather than appending raw timestamped blocks. Example: + +```markdown +## Session Notes + +### Infrastructure decisions +- Chose LXC over Docker-in-LXC because the service doesn't need container isolation +- Enabled nesting=1 on CT 644 to allow Docker inside + +### Bug fixes & discoveries +- Service wasn't starting: mc1 had autoStart=false in MCSManager config + (fixed: set eventTask.autoStart=true in InstanceConfig/.json) +- tail -F (capital F) is correct — waits for file to appear, handles log rotation + +### Open threads +- [ ] Add Redis backend for session persistence (currently SQLite only) +- [ ] Web dashboard for recent AI god interactions +``` + +--- + +## How to keep it current + +Run `/update-context` in OpenCode at the end of any session. The command will: +1. Scan the conversation for decisions, fixes, and discoveries not yet recorded +2. Append them to `SESSION.md` (both this file and the project-level one if applicable) +3. Commit and push to Gitea + +Command defined at: `~/.config/opencode/commands/update-context.md` + +Mandatory per-reply discipline: +- Update `SESSION.md` immediately when a durable fact, decision, or fix is discovered. +- Before every final reply, run a memory check and append any missing durable notes. +- End every reply with one line: `Session memory: updated` or `Session memory: no new durable facts.` + +--- + +## Global session notes + +### Patterns established across all projects + +- **Gitea backup convention:** commit every meaningful change immediately; push on the same command. No squashing, no batching unrelated changes. +- **Session file naming:** `SESSION.md` (not `CONVERSATION.md`, not `CONTEXT.md`). `CONTEXT.md` = static infra facts. `SESSION.md` = accumulated AI memory. +- **Context file loading:** Always include `core_homelab.md` and `services_directory.md` in project instructions. Specific project context goes in `CONTEXT.md`. +- **autoStart for MCSManager instances:** Must be set in `InstanceConfig/.json` (`eventTask.autoStart: true`), not just in the panel UI, to survive daemon restarts. + +### Infrastructure discoveries + +- `mc-godmode.service` on CT 644: already enabled and using `tail -F` correctly. The MC server itself had `autoStart: false` — that was the real issue. +- Gitea runs on port 443 via Caddy at `git.sethpc.xyz` (CT 146, node-173). Direct access to `192.168.0.125:80` does not work from CT 629 — always use the domain. diff --git a/gnome/apply-gnome-settings.sh b/gnome/apply-gnome-settings.sh new file mode 100755 index 0000000..a1ea7d3 --- /dev/null +++ b/gnome/apply-gnome-settings.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Apply GNOME desktop settings for Seth Linux Theme +set -euo pipefail + +gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' +gsettings set org.gnome.desktop.interface accent-color 'orange' +gsettings set org.gnome.desktop.wm.preferences resize-with-right-button true +gsettings set org.gnome.desktop.wm.preferences mouse-button-modifier '' + +echo "GNOME settings applied." diff --git a/gtk-3.0/gtk.css b/gtk-3.0/gtk.css new file mode 100644 index 0000000..f38907d --- /dev/null +++ b/gtk-3.0/gtk.css @@ -0,0 +1,44 @@ +/* Black titlebar, square corners, ultra-thin */ +headerbar { + background: #000; + border-radius: 0; + border-bottom: 1px solid #555; + box-shadow: none; + min-height: 10px; + padding: 0 2px; + color: #fff; + font-weight: bold; +} + +headerbar:backdrop { + background: #000; + border-bottom: 1px solid #333; + color: #999; +} + +headerbar button { + background: transparent; + color: #fff; + border: none; + min-height: 14px; + min-width: 14px; + padding: 0 2px; + margin: 0; + box-shadow: none; +} + +headerbar button:hover { + background: #222; +} + +headerbar:backdrop button { + color: #999; +} + +window, window.background { + border-radius: 0; +} + +.titlebar, decoration { + border-radius: 0; +} diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..c12fed9 --- /dev/null +++ b/install.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Install Seth Linux Theme to target user's ~/.config +set -euo pipefail + +TARGET_HOME="${1:-$HOME}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +echo "Installing seth-linux-theme to $TARGET_HOME/.config ..." + +# GTK CSS (same file for both GTK3 and GTK4) +mkdir -p "$TARGET_HOME/.config/gtk-3.0" "$TARGET_HOME/.config/gtk-4.0" +cp "$SCRIPT_DIR/gtk-3.0/gtk.css" "$TARGET_HOME/.config/gtk-3.0/gtk.css" +cp "$SCRIPT_DIR/gtk-3.0/gtk.css" "$TARGET_HOME/.config/gtk-4.0/gtk.css" +echo " GTK CSS installed." + +# Kitty theme conf +if [ -d "$TARGET_HOME/.config/kitty" ]; then + cp "$SCRIPT_DIR/kitty/kitty-theme.conf" "$TARGET_HOME/.config/kitty/kitty-theme.conf" + if ! grep -q "include kitty-theme.conf" "$TARGET_HOME/.config/kitty/kitty.conf" 2>/dev/null; then + echo "" >> "$TARGET_HOME/.config/kitty/kitty.conf" + echo "include kitty-theme.conf" >> "$TARGET_HOME/.config/kitty/kitty.conf" + fi + echo " Kitty theme installed." +else + echo " Kitty config dir not found, skipping." +fi + +# GNOME settings (only if running a GNOME session) +if command -v gsettings &>/dev/null; then + bash "$SCRIPT_DIR/gnome/apply-gnome-settings.sh" +else + echo " gsettings not found, skipping GNOME settings." +fi + +echo "Done. Open new windows to see changes. Relaunch kitty for kitty changes." diff --git a/kitty/kitty-theme.conf b/kitty/kitty-theme.conf new file mode 100644 index 0000000..13a2327 --- /dev/null +++ b/kitty/kitty-theme.conf @@ -0,0 +1,10 @@ +# Seth Linux Theme — kitty overrides +# Include from kitty.conf: include ~/path/to/kitty-theme.conf + +tab_bar_edge top +allow_remote_control yes +wayland_titlebar_color #000000 +macos_titlebar_color #000000 +hide_window_decorations yes +window_border_width 0 +draw_minimal_borders yes