Two passes, both aimed at a consistent experience rather than a faithful
snapshot of each machine's accidents.
Standardisation. Audited every host-layer config present on more than one
machine and asked whether the difference was intent or drift:
- mpv was byte-identical; swayimg differed only because system76 still
had the shipped default and the work laptop had the real config; bob
differed by one setting the work laptop was simply missing.
- user-dirs.dirs disagreed with BOTH machines and with zshenv, which has
said $HOME/downloads all along. Standardised on that.
- mimeapps.list is now the union of both machines' associations.
- swaync's config and style are shared; only wallust's generated
colors.css stays per host, alongside hypr's and waybar's.
All of the above moved to common/.
Dropped as pure state rather than config: gtk-2.0 (file-chooser geometry),
pavucontrol.ini (window size), zoom.conf (a per-install random_key) and
zoomus.conf (panel widths). gtk-3.0 stays per host — its bookmarks encode
the two different home directories.
App config. GIMP, inkscape, FreeCAD, cura, OrcaSlicer, LightBurn and OBS
all hold real settings, so a curated subset of each is now tracked:
settings, keybindings and user content, but not session state, tool
options, device lists or window geometry. kicad is skipped — both library
tables hold a single entry, i.e. untouched defaults.
Content lives once in common/ even when only one machine has the app; the
host configs decide who gets the link. That is the distinction that lets
53% of link sources be shared while the NAS still does not get GIMP.
Two exclusions on credential grounds: obs-studio/plugin_config holds a
websocket server_password, and gh is dropped entirely because `gh auth
login` writes a token into hosts.yml — now also blocked by name.
202 lines
3.6 KiB
CSS
202 lines
3.6 KiB
CSS
@import "colors.css";
|
|
|
|
* {
|
|
all: unset;
|
|
font-family: Roboto, sans-serif;
|
|
font-size: 13px;
|
|
}
|
|
|
|
/* Notification popup */
|
|
.notification-row {
|
|
outline: none;
|
|
margin: 10px 30px;
|
|
}
|
|
|
|
.notification-row:focus,
|
|
.notification-row:hover {
|
|
background: transparent;
|
|
}
|
|
|
|
.notification {
|
|
background: @background;
|
|
border: 1px solid @color4;
|
|
border-radius: 12px;
|
|
padding: 0;
|
|
margin: 5px;
|
|
min-width: 500px;
|
|
opacity: 0.85;
|
|
}
|
|
|
|
/* Urgency variants */
|
|
.notification.critical {
|
|
border-color: @color1;
|
|
}
|
|
|
|
.notification.low {
|
|
border-color: @color3;
|
|
}
|
|
|
|
/* Header bar (app name + timestamp + close button) */
|
|
.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary {
|
|
color: @color7;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
padding: 10px 20px;
|
|
}
|
|
|
|
.notification-default-action {
|
|
padding: 0;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
.notification-default-action:hover {
|
|
background: rgba(255, 255, 255, 0.05);
|
|
border-radius: 12px;
|
|
}
|
|
|
|
/* Content area */
|
|
.notification-content {
|
|
padding: 10px 40px;
|
|
}
|
|
|
|
.notification-icon {
|
|
min-width: 0;
|
|
min-height: 0;
|
|
opacity: 0;
|
|
margin: 20px;
|
|
}
|
|
|
|
.notification-summary {
|
|
font-weight: 500;
|
|
color: @foreground;
|
|
}
|
|
|
|
.notification-body {
|
|
color: @foreground;
|
|
}
|
|
|
|
.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body {
|
|
/* Notification body */
|
|
font-weight: normal;
|
|
background: transparent;
|
|
text-shadow: none;
|
|
padding: 5px 20px;
|
|
}
|
|
|
|
/* Action buttons (e.g. "Reply", "Mark as read") */
|
|
.notification-action {
|
|
background: rgba(26, 110, 207, 0.2);
|
|
border: 1px solid rgba(26, 110, 207, 0.4);
|
|
border-radius: 6px;
|
|
color: rgba(255, 255, 255, 0.8);
|
|
padding: 5px;
|
|
margin: 10px;
|
|
}
|
|
|
|
.notification-action:hover {
|
|
background: rgba(26, 110, 207, 0.4);
|
|
}
|
|
|
|
/* ── Control center panel ── */
|
|
|
|
.control-center {
|
|
background: rgba(10, 14, 22, 0.95);
|
|
border-left: 1px solid rgba(26, 110, 207, 0.3);
|
|
border-radius: 0 0 0 12px;
|
|
min-width: 500px;
|
|
}
|
|
|
|
/* Title widget */
|
|
.widget-title {
|
|
color: rgba(255, 255, 255, 0.9);
|
|
font-size: 15px;
|
|
font-weight: 500;
|
|
padding: 16px 16px 8px;
|
|
}
|
|
|
|
.widget-title > button {
|
|
background: rgba(26, 110, 207, 0.2);
|
|
border: 1px solid rgba(26, 110, 207, 0.4);
|
|
border-radius: 6px;
|
|
color: rgba(255, 255, 255, 0.7);
|
|
font-size: 11px;
|
|
padding: 3px 10px;
|
|
}
|
|
|
|
.widget-title > button:hover {
|
|
background: rgba(26, 110, 207, 0.4);
|
|
}
|
|
|
|
/* DND toggle */
|
|
.widget-dnd {
|
|
padding: 8px 16px;
|
|
color: rgba(255, 255, 255, 0.8);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.widget-dnd > switch {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-radius: 12px;
|
|
border: none;
|
|
}
|
|
|
|
.widget-dnd > switch:checked {
|
|
background: rgba(26, 110, 207, 0.7);
|
|
}
|
|
|
|
.widget-dnd > switch slider {
|
|
background: white;
|
|
border-radius: 50%;
|
|
min-width: 18px;
|
|
min-height: 18px;
|
|
margin: 2px;
|
|
}
|
|
|
|
/* MPRIS widget */
|
|
.widget-mpris {
|
|
padding: 12px 16px;
|
|
background: rgba(26, 110, 207, 0.08);
|
|
border-radius: 10px;
|
|
margin: 0 8px 8px;
|
|
}
|
|
|
|
.widget-mpris-player {
|
|
padding: 4px 0;
|
|
}
|
|
|
|
.widget-mpris-title {
|
|
font-weight: 500;
|
|
font-size: 13px;
|
|
color: rgba(255, 255, 255, 0.9);
|
|
}
|
|
|
|
.widget-mpris-subtitle {
|
|
font-size: 11px;
|
|
color: rgba(255, 255, 255, 0.5);
|
|
}
|
|
|
|
/* Notification list inside control center */
|
|
.control-center-list {
|
|
padding: 4px 8px;
|
|
}
|
|
|
|
.control-center-list-placeholder {
|
|
color: rgba(255, 255, 255, 0.25);
|
|
font-size: 13px;
|
|
}
|
|
|
|
/* Close buttons */
|
|
.close-button {
|
|
background: transparent;
|
|
color: rgba(255, 255, 255, 0.4);
|
|
border-radius: 50%;
|
|
padding: 2px;
|
|
min-width: 18px;
|
|
min-height: 18px;
|
|
}
|
|
|
|
.close-button:hover {
|
|
background: rgba(255, 74, 110, 0.3);
|
|
color: rgba(255, 255, 255, 0.9);
|
|
}
|