Initial commit: SkyOS source code

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 4.6 committed 2026-07-23 12:14:34 -04:00
commit e641720a3c
30 files changed
+5836

No files matched your search

+72
View File
@@ -0,0 +1,72 @@
# SkyOS GTK2 Theme — BeOS/SkyOS tan palette
# Covers legacy GTK2 apps (GIMP, older system tools)
gtk-color-scheme = "bg_color:#D8CEAA\nfg_color:#100800\nbase_color:#F5F0E0\ntext_color:#100800\nselected_bg_color:#4A6888\nselected_fg_color:#FFFFFF\ntooltip_bg_color:#FFFCE0\ntooltip_fg_color:#100800"
style "default" {
bg[NORMAL] = @bg_color
bg[PRELIGHT] = "#E8DEC0"
bg[ACTIVE] = "#B0A888"
bg[SELECTED] = @selected_bg_color
bg[INSENSITIVE] = @bg_color
fg[NORMAL] = @fg_color
fg[PRELIGHT] = @fg_color
fg[ACTIVE] = @fg_color
fg[SELECTED] = @selected_fg_color
fg[INSENSITIVE] = "#7A7060"
base[NORMAL] = @base_color
base[PRELIGHT] = @base_color
base[ACTIVE] = "#D0C8A8"
base[SELECTED] = @selected_bg_color
base[INSENSITIVE] = @bg_color
text[NORMAL] = @text_color
text[PRELIGHT] = @text_color
text[ACTIVE] = @text_color
text[SELECTED] = @selected_fg_color
text[INSENSITIVE] = "#7A7060"
GtkWidget::focus-line-width = 1
GtkButton::default-border = { 1, 1, 1, 1 }
GtkScrollbar::min-slider-length = 20
}
class "GtkWidget" style "default"
style "menubar" {
bg[NORMAL] = "#C8BE9A"
bg[PRELIGHT] = "#4A6888"
fg[PRELIGHT] = "#FFFFFF"
}
class "GtkMenuBar" style "menubar"
style "menu" {
bg[NORMAL] = "#D8CEAA"
bg[PRELIGHT] = "#4A6888"
fg[NORMAL] = "#100800"
fg[PRELIGHT] = "#FFFFFF"
}
class "GtkMenu" style "menu"
class "GtkMenuItem" style "menu"
style "tooltip" {
bg[NORMAL] = @tooltip_bg_color
fg[NORMAL] = @tooltip_fg_color
}
class "GtkTooltip" style "tooltip"
style "entry" {
bg[NORMAL] = @base_color
bg[SELECTED] = @selected_bg_color
fg[NORMAL] = @text_color
}
class "GtkEntry" style "entry"
gtk-theme-name = "SkyOS"
gtk-icon-theme-name = "Adwaita"
gtk-font-name = "Sans 10"
gtk-cursor-theme-name = "DMZ-White"
gtk-button-images = 0
gtk-menu-images = 0
gtk-toolbar-style = GTK_TOOLBAR_ICONS
+229
View File
@@ -0,0 +1,229 @@
/* SkyOS GTK3 Theme — BeOS/SkyOS tan palette */
/* ── variables ───────────────────────────────────────────────────────── */
@define-color bg_color #D8CEAA;
@define-color bg_dark #C8BE9A;
@define-color bg_darker #B0A888;
@define-color bg_light #E8DEC0;
@define-color border_light #F0E8D0;
@define-color border_dark #6B5F50;
@define-color text_color #100800;
@define-color text_disabled #7A7060;
@define-color selected_bg #4A6888;
@define-color selected_fg #FFFFFF;
@define-color accent #4A6888;
@define-color button_bg #C8BE9A;
@define-color button_hover #D8D0B8;
@define-color button_active #A89E88;
@define-color entry_bg #F5F0E0;
@define-color tooltip_bg #FFFCE0;
@define-color link_color #2244AA;
/* ── window / base ───────────────────────────────────────────────────── */
* {
font-family: "Sans";
font-size: 10pt;
color: @text_color;
outline: none;
-gtk-icon-style: regular;
}
window, .background {
background-color: @bg_color;
color: @text_color;
}
/* ── header bars ─────────────────────────────────────────────────────── */
headerbar, .titlebar {
background: linear-gradient(to bottom, @bg_light, @bg_dark);
border-bottom: 1px solid @border_dark;
color: @text_color;
padding: 4px 8px;
min-height: 28px;
}
headerbar .title { font-weight: bold; }
/* ── buttons ─────────────────────────────────────────────────────────── */
button {
background: linear-gradient(to bottom, @border_light, @button_bg);
border: 1px solid @border_dark;
border-radius: 2px;
padding: 3px 10px;
color: @text_color;
box-shadow: inset 1px 1px 0 @border_light, inset -1px -1px 0 @border_dark;
}
button:hover {
background: linear-gradient(to bottom, #F8F0D8, @button_hover);
}
button:active, button:checked {
background: linear-gradient(to bottom, @button_active, @bg_darker);
box-shadow: inset 1px 1px 0 @border_dark, inset -1px -1px 0 @border_light;
}
button:disabled {
color: @text_disabled;
background: @bg_color;
}
button.suggested-action {
background: linear-gradient(to bottom, #5A7898, @accent);
color: white;
border-color: #3A5878;
}
button.destructive-action {
background: linear-gradient(to bottom, #DD5555, #BB3333);
color: white;
border-color: #993333;
}
/* ── menus ───────────────────────────────────────────────────────────── */
menu, .menu, .context-menu {
background-color: @bg_color;
border: 1px solid @border_dark;
padding: 2px 0;
}
menuitem {
padding: 4px 12px;
color: @text_color;
}
menuitem:hover, menuitem:selected {
background-color: @selected_bg;
color: @selected_fg;
}
menuitem:disabled { color: @text_disabled; }
separator, menuitem > separator {
background-color: @border_dark;
min-height: 1px;
margin: 3px 6px;
}
/* ── entries (text input) ────────────────────────────────────────────── */
entry {
background-color: @entry_bg;
border: 1px solid @border_dark;
border-radius: 1px;
padding: 3px 6px;
color: @text_color;
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.12);
}
entry:focus {
border-color: @accent;
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.12), 0 0 0 2px rgba(74,104,136,0.25);
}
entry:disabled { background-color: @bg_color; color: @text_disabled; }
/* ── lists & trees ───────────────────────────────────────────────────── */
treeview, listview, .view {
background-color: @entry_bg;
color: @text_color;
}
treeview:selected, listview row:selected, .view:selected {
background-color: @selected_bg;
color: @selected_fg;
}
treeview header button {
background: linear-gradient(to bottom, @bg_light, @bg_dark);
border-right: 1px solid @border_dark;
border-bottom: 1px solid @border_dark;
border-radius: 0;
box-shadow: none;
}
/* ── notebooks (tabs) ────────────────────────────────────────────────── */
notebook > header {
background-color: @bg_darker;
border-bottom: 1px solid @border_dark;
}
notebook > header tab {
background-color: @bg_dark;
border: 1px solid @border_dark;
border-bottom: none;
padding: 4px 12px;
margin-right: 2px;
border-radius: 2px 2px 0 0;
}
notebook > header tab:checked {
background-color: @bg_color;
border-bottom: 1px solid @bg_color;
margin-bottom: -1px;
}
notebook > stack { background-color: @bg_color; }
/* ── scrollbars ──────────────────────────────────────────────────────── */
scrollbar {
background-color: @bg_darker;
border: 1px solid @border_dark;
}
scrollbar slider {
background-color: @button_bg;
border: 1px solid @border_dark;
border-radius: 2px;
min-width: 12px;
min-height: 12px;
}
scrollbar slider:hover { background-color: @button_hover; }
scrollbar button { background-color: @bg_dark; }
/* ── toolbars ────────────────────────────────────────────────────────── */
toolbar, .toolbar {
background: linear-gradient(to bottom, @bg_light, @bg_dark);
border-bottom: 1px solid @border_dark;
padding: 2px;
}
/* ── statusbar ───────────────────────────────────────────────────────── */
statusbar {
background-color: @bg_darker;
border-top: 1px solid @border_dark;
padding: 2px 6px;
font-size: 9pt;
}
/* ── tooltips ────────────────────────────────────────────────────────── */
tooltip {
background-color: @tooltip_bg;
border: 1px solid @border_dark;
color: @text_color;
padding: 4px 8px;
border-radius: 0;
}
/* ── progress bars ───────────────────────────────────────────────────── */
progressbar trough {
background-color: @bg_darker;
border: 1px solid @border_dark;
border-radius: 1px;
}
progressbar progress {
background-color: @accent;
border-radius: 1px;
}
/* ── checkboxes & radio buttons ──────────────────────────────────────── */
checkbutton check, radiobutton radio {
background-color: @entry_bg;
border: 1px solid @border_dark;
min-width: 14px;
min-height: 14px;
}
checkbutton check:checked {
background-color: @accent;
color: white;
}
radiobutton radio:checked { background-color: @accent; }
/* ── spin buttons ────────────────────────────────────────────────────── */
spinbutton { background-color: @entry_bg; border: 1px solid @border_dark; }
spinbutton button { border-radius: 0; padding: 0 4px; }
/* ── combo boxes ─────────────────────────────────────────────────────── */
combobox button {
background: linear-gradient(to bottom, @border_light, @button_bg);
}
/* ── file chooser ────────────────────────────────────────────────────── */
.sidebar { background-color: @bg_darker; }
.sidebar row:selected { background-color: @selected_bg; color: @selected_fg; }
/* ── links ───────────────────────────────────────────────────────────── */
*:link { color: @link_color; }
*:visited { color: #6644AA; }
+12
View File
@@ -0,0 +1,12 @@
[Desktop Entry]
Type=X-GNOME-Metatheme
Name=SkyOS
Comment=BeOS/SkyOS-inspired warm tan desktop theme
Encoding=UTF-8
[X-GNOME-Metatheme]
GtkTheme=SkyOS
MetacityTheme=SkyOS
IconTheme=Adwaita
CursorTheme=DMZ-White
ButtonLayout=close:minimize,maximize
+63
View File
@@ -0,0 +1,63 @@
# SkyOS picom compositor config
# Goal: subtle window shadows, no transparency, fast rendering.
# BeOS/SkyOS didn't have transparency — we keep it clean.
backend = "xrender"; # xrender works on all hardware; switch to glx for performance
vsync = false;
# ── shadows ───────────────────────────────────────────────────────────────
shadow = true;
shadow-radius = 8;
shadow-offset-x = 4;
shadow-offset-y = 4;
shadow-opacity = 0.30;
shadow-color = "#000000";
# Don't shadow the deskbar, menus, or tooltips
shadow-exclude = [
"class_g = 'skydeskbar'",
"class_g = 'skylauncher'",
"_NET_WM_WINDOW_TYPE@:a *= 'DOCK'",
"_NET_WM_WINDOW_TYPE@:a *= 'TOOLTIP'",
"_NET_WM_WINDOW_TYPE@:a *= 'NOTIFICATION'",
"_NET_WM_WINDOW_TYPE@:a *= 'POPUP_MENU'",
"_NET_WM_WINDOW_TYPE@:a *= 'DROPDOWN_MENU'",
"override_redirect = 1 && !WM_CLASS@:s"
];
# ── fading ────────────────────────────────────────────────────────────────
fading = true;
fade-in-step = 0.06;
fade-out-step = 0.06;
fade-delta = 8; # ms between steps — snappy, not sluggish
no-fading-openclose = false;
# ── opacity ───────────────────────────────────────────────────────────────
# No transparency — BeOS aesthetic is solid, crisp windows.
inactive-opacity = 1.0;
active-opacity = 1.0;
frame-opacity = 1.0;
inactive-opacity-override = false;
# ── blur ─────────────────────────────────────────────────────────────────
# Disabled — keep it clean.
blur-method = "none";
# ── focus & refresh ───────────────────────────────────────────────────────
detect-client-opacity = true;
detect-transient = true;
detect-client-leader = true;
use-ewmh-active-win = true;
mark-wmwin-focused = true;
mark-ovredir-focused = false;
# ── window type rules ─────────────────────────────────────────────────────
wintypes:
{
tooltip = { fade = true; shadow = false; opacity = 1.0; focus = true; };
dock = { shadow = false; clip-shadow-above = true; };
dnd = { shadow = false; };
popup_menu = { opacity = 1.0; shadow = false; };
dropdown_menu = { opacity = 1.0; shadow = false; };
notification = { shadow = false; };
};
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# skywallpaper — set or restore the SkyOS desktop wallpaper
#
# Usage:
# skywallpaper # restore saved wallpaper (called from xinitrc)
# skywallpaper /path/to/image.jpg # set new wallpaper and save it
# skywallpaper --color "#6B8FB5" # set solid color
# skywallpaper --reset # reset to default blue-gray solid color
#
# Wallpaper preference is stored in ~/.config/skyos/wallpaper
CONF_DIR="$HOME/.config/skyos"
CONF_FILE="$CONF_DIR/wallpaper"
DEFAULT_COLOR="#1A2840"
WALLPAPER_DIR="/usr/share/skyos/wallpapers"
mkdir -p "$CONF_DIR"
case "${1:-}" in
--reset)
echo "color:$DEFAULT_COLOR" > "$CONF_FILE"
xsetroot -solid "$DEFAULT_COLOR"
echo "Wallpaper reset to default color."
;;
--color)
COLOR="${2:-$DEFAULT_COLOR}"
echo "color:$COLOR" > "$CONF_FILE"
xsetroot -solid "$COLOR"
echo "Wallpaper set to solid $COLOR."
;;
"")
# Restore from saved config
if [[ -f "$CONF_FILE" ]]; then
SAVED="$(cat "$CONF_FILE")"
if [[ "$SAVED" == color:* ]]; then
xsetroot -solid "${SAVED#color:}"
elif [[ -f "$SAVED" ]]; then
feh --no-fehbg --bg-fill "$SAVED"
else
xsetroot -solid "$DEFAULT_COLOR"
fi
else
# First run: use default wallpaper if it exists, else solid color
if [[ -f "$WALLPAPER_DIR/skyos-default.png" ]]; then
feh --no-fehbg --bg-fill "$WALLPAPER_DIR/skyos-default.png"
echo "$WALLPAPER_DIR/skyos-default.png" > "$CONF_FILE"
else
xsetroot -solid "$DEFAULT_COLOR"
echo "color:$DEFAULT_COLOR" > "$CONF_FILE"
fi
fi
;;
*)
# Set specific image file
IMG="$1"
if [[ ! -f "$IMG" ]]; then
echo "Error: file not found: $IMG" >&2
exit 1
fi
echo "$IMG" > "$CONF_FILE"
feh --no-fehbg --bg-fill "$IMG"
echo "Wallpaper set to: $IMG"
;;
esac
+27
View File
@@ -0,0 +1,27 @@
#!/usr/bin/env bash
# Generates the default SkyOS wallpaper as a PNG using ImageMagick.
# On the live system: sudo pacman -S imagemagick
# Output: skyos-default.png (1920x1080 — scales to any resolution via feh)
OUT="$(dirname "$0")/skyos-default.png"
if ! command -v convert &>/dev/null; then
echo "ImageMagick not found. Install it, or place any PNG at:"
echo " $OUT"
exit 0
fi
convert -size 1920x1080 \
gradient:"#4A6888-#2A3848" \
\( -size 1920x1080 xc:none \
-fill 'rgba(255,255,255,0.04)' \
-draw "roundrectangle 200,180 760,540 8,8" \
-draw "roundrectangle 840,220 1400,520 8,8" \
-draw "roundrectangle 1480,160 1860,580 8,8" \
\) \
-composite \
\( -size 1920x2 xc:"#6B8FB5" -resize 1920x1080\! \) \
-compose Overlay -composite \
"$OUT"
echo "Written: $OUT"