Commit Graph
14 Commits
Author SHA1 Message Date
Claude a2092fd989 Add hot corners, media keys, orionshot, orionclip, notification history, autostart, GTK accent update, wallpaper slideshow, ISO build
- wm: hot corner polling via select()-based wm_run loop; TL=Exposé, TR=show desktop, BL=launcher, BR=lock
- wm: XF86 media key grabs (volume, brightness, playback) + Super+V for clipboard
- wm: autostart reads ~/.config/orionos/autostart on startup
- events: media key dispatch (amixer/brightnessctl/playerctl); Super+V → orionclip --show; Print → orionshot
- orionshot: new X11 screenshot tool, full-screen and rubber-band region modes, saves PNG to ~/Pictures/Screenshots/
- orionclip: new clipboard manager daemon; polls clipboard, stores 20 entries, popup via Super+V IPC
- orionnotify: append-only notification history log at ~/.local/share/orionos/notif-history.log
- themes: GTK accent updated from #3A6898 to #1E58A8 to match WM/deskbar
- themes: orionwallpaper gains --slideshow DIR [SECS] mode using feh + sleep loop
- iso: Docker-based archiso builder, live-session xinitrc, profiledef.sh
- Makefile: add orionshot and orionclip to all/clean/install; Docker-based iso target
2026-08-30 20:47:47 +00:00
Claude 2a42b826fb Add 6 desktop features: workspace shortcuts, Exposé, deskbar icons, notifications, screen lock, move-to-desktop
- Super+1-4: switch virtual desktop; Super+Shift+1-4: move focused window to desktop N
- Super+Space: Exposé window overview (tiled grid), click to select, Escape to cancel
- wm/src/expose.c: expose_show/expose_hide using ceil(sqrt) grid layout with saved/restored geometry
- client_move_to_desktop(): moves window between desktops, fires _NET_WM_DESKTOP update
- on_client_message: handles _NET_WM_DESKTOP to move windows from external requests
- deskbar: optional imlib2 app icon rendering (Papirus-Dark → Papirus → hicolor → pixmaps fallback)
- deskbar: XGetClassHint populates cls field for better icon lookup
- deskbar: context menu extended with separator + "→ Desktop 1-4" items via _NET_WM_DESKTOP
- orionnotify/: freedesktop.org notification daemon (libdbus-1), stacks up to 5 popups top-right
- orionlock/: PAM-authenticated fullscreen screen lock with clock, date, password dots
- Lock Screen menu item wired to orionlock
- Root Makefile includes orionnotify and orionlock targets

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GHiBQKPfUoaJgCKuA9op1H
2026-08-30 20:14:45 +00:00
Claude b0f64d9b2e Fixes #7–#11: launcher Other tab, ICCCM size hints, icon loading, multi-desktop
Fix #7: Add "Other" catch-all category to the launcher. map_category() now
returns "Other" instead of "" for unrecognized .desktop Categories, and an
"Other" tab is added to the CATS list so those apps are discoverable instead
of silently hidden.

Fix #8: Respect ICCCM WM_NORMAL_HINTS. client_add() reads PMinSize,
PResizeInc, and PBaseSize from the window's size hints. The resize drag
handler in events.c clamps to min_w/min_h and snaps to the
width_inc/height_inc grid, fixing jank in character-cell terminal emulators
(xterm, Alacritty).

Fix #10: Optional freedesktop icon loading via imlib2. The launcher now
parses the Icon= field from .desktop files and attempts to render a PNG icon
from Papirus-Dark (or hicolor fallback). When imlib2 is not present the
existing letter-square is shown unchanged. launcher/Makefile auto-detects
imlib2 via pkg-config and sets -DHAVE_IMLIB2.

Fix #11: True 4-desktop support in the WM. Each Client carries a desktop
field (assigned at map time from wm->cur_desktop). Clicking a workspace
button in the deskbar sends _NET_CURRENT_DESKTOP; the WM now handles it via
wm_switch_desktop() which unmaps frames on the leaving desktop, maps frames
on the arriving desktop, and re-focuses. _NET_WM_DESKTOP is set per window
so the deskbar can filter db_update_apps() to show only current-desktop
windows (sticky windows with desktop 0xFFFFFFFF are always shown).
2026-08-30 20:00:10 +00:00
Claude 36641e77e2 macOS-style polish: fix seam, bidirectional Alt+Tab, minimized windows in switcher, rounded corners, deskbar context menu
Fix #1: Replace hardcoded 185px deskbar-offset in client.c and events.c with
DESKBAR_W constant (200) to eliminate the 15px gap between the WM frame and
deskbar edge.

Fix #2: Add Shift+Alt+Tab reverse-direction support — grab Mod1+Shift+XK_Tab
in wm.c, detect ShiftMask in events.c, and implement switcher_prev() in
switcher.c.

Fix #3: Include minimized windows in the Alt+Tab switcher. swl_populate() no
longer skips minimized clients; swl_mini[] tracks state so switcher_draw()
can dim them with bracketed titles and darker card backgrounds.

Fix #4: Rewrite themes/picom.conf with macOS-inspired settings — 10px corner
radius on normal windows, 8px on menus, soft downward shadow (radius 18,
offset-y 8, opacity 0.35), smooth fading (step 0.08), no dock/tray rounding.

Fix #5: Add per-app right-click context menu to the deskbar. Right-clicking
an app row opens a popup with Raise / Minimize / Close actions (Close shown
in red). Actions are sent as EWMH client messages (_NET_ACTIVE_WINDOW,
WM_CHANGE_STATE+IconicState, _NET_CLOSE_WINDOW) with matching handlers added
to the WM's on_client_message. Pointer grab closes the menu on any outside
click.
2026-08-30 19:51:54 +00:00
Claude 0d874617dd Fork ElemetryOS with macOS-style window decorations
- Move traffic-light buttons to the LEFT side of titlebars (close/minimize/maximize)
  in macOS order, using fixed left-pad positions instead of right-edge offsets
- Adopt macOS dark-mode color palette: #3C3C3C active titlebar, #2C2C2C inactive,
  traffic-light colors #FF5F57/#FEBC2E/#28C840, near-black #1C1C1C desktop
- Center window title text in the titlebar (macOS style), clamped to avoid
  overlapping the left button cluster
- Thin 1px window borders replacing the original 3px beveled border
- macOS blue (#4A90D9) selection highlight in the context menu
- Neutral dark context menu (#2C2C2C) with subtle separators and text indent
- Update README to document the ElemetryOS macOS fork identity and design changes
2026-08-30 19:40:11 +00:00
nmemmertandClaude Sonnet 4.6 a9efede702 Phase 4-6: Quill editor, Lens viewer, Rigel context menu, CI, website
Phase 4 — native apps:
- quill/: text editor (monospace, double-buffered, find bar, undo, open/save)
- lens/: image viewer using imlib2 (zoom, pan, rotate, directory nav)
- wm/src/menu.c: launch quill instead of mousepad
- iso/docker/entrypoint.sh: add imlib2 package; install quill + lens binaries
- skykit/template/: developer app template demonstrating the SkyKit API

Phase 5 — file system and search:
- rigel/rigel.c: right-click context menu (open, open in quill, copy path,
  rename, trash, properties); Ctrl+F search/filter bar with name highlighting;
  F2 rename-in-place overlay; Delete key moves to trash

Phase 6 — distribution:
- .github/workflows/build-iso.yml: GitHub Actions CI that compiles all
  components and builds a bootable ISO on every tag push; creates a GitHub
  release with sha256 checksums

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-24 10:07:45 -04:00
nmemmertandClaude Sonnet 4.6 33ae437b5b Fix installer copy step; fix stale skyinstall references
Installer copy (installer/orioninstall):
- Root cause: rsync -ax / /mnt/ copies the overlayfs live root, which
  is slow, unpredictable, and hangs in VMs with overlapping filesystems
- Fix: copy from /run/archiso/airootfs instead (the squashfs is already
  mounted there on every archiso live boot). This is the clean base system,
  avoids the cow layer entirely, and is significantly faster.
- Added -H -A -X -S flags for proper hard-link, ACL, xattr, sparse-file handling
- Fallback to live-root rsync if the squashfs mount isn't present
- Also renamed EFI partition label SKYEFI → ORIONEFI

Discoverability (deskbar + wm):
- deskbar "Install OrionOS" was calling 'sudo skyinstall' (old name) — fixed
  to 'sudo orioninstall-gui || sudo orioninstall' with GUI-first fallback
- Right-click desktop menu now also has "Install OrionOS" entry
  (was only in the deskbar hamburger menu before)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 15:51:44 -04:00
nmemmertandClaude Sonnet 4.6 1340bf012c Phase 4: SkyKit library + Rigel file manager; fix text centering
SkyKit (skykit/):
- Shared palette constants, font setup, and Xlib/Xft drawing utilities
- sk_fill, sk_rect, sk_line, sk_text, sk_text_clip, sk_textw, sk_baseline
- Builds as libskykit.a, consumed by Rigel and future shell components

Rigel (rigel/):
- Native C/Xlib file manager with SkyKit
- Sidebar with 8 bookmarks (Home, Desktop, Documents, Downloads, etc.)
- Editable path bar (Ctrl+L or '/' to activate, Enter to navigate)
- Sortable columns: Name / Size / Modified (click header to sort/reverse)
- Colored type badges: DIR, IMG, SND, VID, ZIP, SRC, PDF, TXT, EXE
- Double-click to open dirs or files (xdg-open)
- Keyboard: ↑↓ select, Enter open, Backspace back, Ctrl+H toggle hidden
- Right-click menu updated: "File Manager" now launches rigel

Text centering fix (deskbar + wm):
- Root cause: draw_str added glyph-specific ext.height/ext.y offset, and
  all callers used hardcoded (H-10)/2 magic numbers instead of font metrics
- Fix: draw_str now takes y as a direct baseline; str_baseline() computes
  (strip_y + strip_h + ascent - descent) / 2 for consistent centering
- WM titlebar: same fix using font_title->ascent/descent
- Affects: "Orion ▾" button, clock, date, app list, flyout menu items,
  letter icons, and all window titlebars

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 15:40:03 -04:00
nmemmertandClaude Sonnet 4.6 0ed61cea4c Add orionpkg (package manager GUI) + installer locale step
orionpkg/orionpkg.c (~500 lines, native Xlib/Xft):
- Launches with checkupdates (pacman-contrib) to list pending upgrades
- ST_CHECKING: animated spinner while querying
- ST_UPDATES: scrollable package list with name / old ver → new ver columns
- ST_UPDATING: pkexec pacman -Syu in background, live log output,
  progress bar estimated from pacman's (N/M) counters
- ST_DONE / ST_ERROR: success or failure screen
- Refresh (r key), scroll (mouse wheel / arrow keys), Close (Esc/q)
- pacman-contrib added to ISO packages

Installer: add STEP_LOCALE (timezone + keyboard layout):
- Inserted between STEP_DISK and STEP_USER
- Timezone pane: searchable filter input + scrollable list of 37 zones
- Keyboard pane: 20 common layouts with code + description
- Timezone and keyboard passed as args 6/7 to orioninstall
- orioninstall: sets /etc/vconsole.conf and X11 xorg.conf.d keyboard
  config from args; uses selected timezone for localtime symlink

Also:
- Right-click menu: "Software Updates" → orionpkg
- Root Makefile: orionpkg target + install rule
- ISO: orionpkg binary installed, permissions map, gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 14:39:00 -04:00
nmemmertandClaude Sonnet 4.6 53c6199102 Add Nebula — native C settings panel (Display, Appearance, Input, About)
nebula/nebula.c (~600 lines, single-file, native Xlib/Xft):
- Display tab: resolution cycling via xrandr, DPI toggle (96/144),
  brightness control via brightnessctl
- Appearance tab: wallpaper reset/open, shows active GTK/icon theme
- Input tab: key repeat delay + rate steppers (reads live from XKB),
  tap-to-click and natural scrolling toggles via xinput
- About tab: version, component, platform info
- Fixed-size 700×500 window, dark-navy palette, sidebar nav with
  accent mark on selected tab, dirty-state indicator, Apply/Close
- Escape/Q/Enter shortcuts; Enter applies pending changes

Wired up:
- Root Makefile: nebula target, install -Dm755 nebula/nebula
- Right-click desktop menu: "System Settings" → nebula
- ISO: binary installed to /usr/local/bin/nebula, Super+S xbindkeys
  shortcut, file permissions map entry
- .gitignore: nebula/nebula binary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 14:21:38 -04:00
nmemmertandClaude Sonnet 4.6 98aeafc4f0 Phase 3: screenshot hotkeys, clipboard history, Papirus icon theme
Screenshots (PrintScreen / Shift+PrintScreen):
- PrintScreen → full screenshot saved to ~/Pictures via scrot
- Shift+PrintScreen → interactive region select via scrot -s
- Both send a dunst notification on save
- scrot added to packages

Clipboard manager:
- Replace janky PRIMARY/CLIPBOARD sync loop with parcellite
- parcellite provides clipboard history, survives app close,
  shows a tray icon for browsing past entries
- parcellite added to packages

Icon theme:
- Switch from Adwaita to Papirus-Dark across GTK2, GTK3 settings,
  and theme index.theme
- papirus-icon-theme added to packages

Also fix remaining stale sky* references in menu.c (skywallpaper,
pkill skywm) and events.c (skylauncher).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 14:15:27 -04:00
nmemmertandClaude Sonnet 4.6 61fa1194db Phase 7: rename SkyOS → OrionOS across entire codebase
- Rename all binaries: skywm→orionwm, skydeskbar→oriondeskbar,
  skylauncher→orionlauncher, skyinstall/skyinstall-gui→orioninstall*
- Rename theme directory: themes/SkyOS/ → themes/OrionOS/
- Update all string literals, window titles, menu labels, and comments
- Update ISO build: hostname→orionos, user→orion, all paths/labels
- Add Plymouth boot splash theme (orionos) with Navy+Blue palette
- Update GTK2/GTK3 theme names, wallpaper output name
- Update .gitignore, root Makefile, build-iso.sh for new binary names

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 13:42:18 -04:00
nmemmertandClaude Sonnet 4.6 9089c14a19 Phase 1: Alt+Tab switcher, dark GTK theme, alacritty terminal
- Alt+Tab now shows a centered visual switcher overlay with window cards;
  cycling with Tab, committing on Alt release, cancelling with Escape
- GTK3 and GTK2 themes rewritten in dark navy palette matching skywm/
  skydeskbar color constants (was an off-brand tan/BeOS palette)
- Add alacritty to ISO packages with pre-configured dark color scheme;
  update all menu Terminal entries to launch alacritty instead of xterm
- Add KeyReleaseMask to WM root event selection to detect Alt release

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 13:11:37 -04:00
nmemmertandClaude Sonnet 4.6 e641720a3c Initial commit: SkyOS source code
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 12:14:34 -04:00