diff --git a/flake.lock b/flake.lock index 3ce7fa9..952b2b1 100644 --- a/flake.lock +++ b/flake.lock @@ -215,11 +215,11 @@ "nomarchy-wallpapers": { "flake": false, "locked": { - "lastModified": 1784302860, - "narHash": "sha256-nQ+eLEggLxDcbKks3Ui6rbJ4P24H2JXenLLg9si007M=", + "lastModified": 1784374559, + "narHash": "sha256-c05z+PUFbX3gZ7CQfFHtVCWI5WlNCAcFQBC/bBv7G+Y=", "ref": "main", - "rev": "803b48ddf35aeff08999c8c7f563457181105cf5", - "revCount": 2, + "rev": "a716cf60a05f187ad1d8baa043dda4e6085c2463", + "revCount": 3, "type": "git", "url": "https://git.bemagri.xyz/bernardo/Nomarchy-Wallpapers.git" }, diff --git a/themes/boreal-dawn.json b/themes/boreal-dawn.json new file mode 100644 index 0000000..af1d56b --- /dev/null +++ b/themes/boreal-dawn.json @@ -0,0 +1,60 @@ +{ + "version": 1, + "name": "Boreal Dawn", + "slug": "boreal-dawn", + "mode": "light", + "wallpaper": "", + "colors": { + "base": "#EDF2F6", + "mantle": "#CBD6DF", + "surface": "#DFE7EE", + "overlay": "#A9B8C6", + "text": "#333E4E", + "subtext": "#51617A", + "muted": "#7C8B9D", + "accent": "#7458C8", + "accentAlt": "#22766E", + "good": "#48752C", + "warn": "#8F5E0A", + "bad": "#B03A47" + }, + "border": { + "active": "accent", + "inactive": "overlay" + }, + "fonts": { + "mono": "GeistMono Nerd Font", + "ui": "Inter", + "size": 11 + }, + "ui": { + "gapsIn": 6, + "gapsOut": 14, + "borderSize": 3, + "rounding": 12, + "iconSize": 44, + "activeOpacity": 1.0, + "inactiveOpacity": 0.95, + "terminalOpacity": 0.94, + "blur": true, + "shadow": true + }, + "ansi": [ + "#333E4E", + "#B03A47", + "#48752C", + "#8F5E0A", + "#3565BE", + "#7458C8", + "#22766E", + "#EDF2F6", + "#7C8B9D", + "#C94E5C", + "#5A8A3C", + "#A9731A", + "#4678D0", + "#8568D8", + "#2E8A80", + "#F8FAFC" + ] +} diff --git a/themes/boreal-dawn/btop.theme b/themes/boreal-dawn/btop.theme new file mode 100644 index 0000000..dda09d0 --- /dev/null +++ b/themes/boreal-dawn/btop.theme @@ -0,0 +1,25 @@ +theme[main_bg]="#EDF2F6" +theme[main_fg]="#333E4E" +theme[title]="#333E4E" +theme[hi_fg]="#7458C8" +theme[selected_bg]="#A9B8C6" +theme[selected_fg]="#333E4E" +theme[inactive_fg]="#7C8B9D" +theme[graph_text]="#51617A" +theme[meter_bg]="#DFE7EE" +theme[proc_misc]="#22766E" +theme[cpu_box]="#7458C8" +theme[mem_box]="#48752C" +theme[net_box]="#22766E" +theme[proc_box]="#DFE7EE" +theme[div_line]="#A9B8C6" +theme[temp_start]="#48752C" +theme[temp_mid]="#8F5E0A" +theme[temp_end]="#B03A47" +theme[cpu_start]="#48752C" +theme[cpu_mid]="#8F5E0A" +theme[cpu_end]="#B03A47" +theme[free_start]="#48752C" +theme[used_start]="#8F5E0A" +theme[download_start]="#7458C8" +theme[upload_start]="#22766E" diff --git a/themes/boreal-dawn/launcher.rasi b/themes/boreal-dawn/launcher.rasi new file mode 100644 index 0000000..80e484b --- /dev/null +++ b/themes/boreal-dawn/launcher.rasi @@ -0,0 +1,42 @@ +/** + * Boreal Dawn — app-launcher override (themes//launcher.rasi). + * Installed to ~/.local/share/rofi/themes/launcher.rasi and used only by + * `rofi -show drun` (the SUPER+Space / SUPER+D launcher). It inherits the + * frosted dawn panel from the sibling rofi.rasi (this whole-swap theme, + * which HM deploys under its source basename — rofi.rasi — not custom.rasi), + * then reshapes the list into a 4×3 grid of large application icons. + * Text menus keep the list — they don't use this theme. + */ + +@import "rofi.rasi" + +window { width: 780px; } + +listview { + columns: 4; + lines: 3; + fixed-columns: true; + spacing: 10px; + padding: 6px 0px 0px 0px; + /* Fill row-by-row so Down at a column's foot pages to the next screen + instead of jumping to the top of the next column (rofi's default + Vertical flow). Mirrors the theme-picker grid in rofi.nix. */ + flow: horizontal; +} + +element { + orientation: vertical; + padding: 16px 8px; + spacing: 10px; + border-radius: 12px; +} + +element-icon { + size: 56px; + horizontal-align: 0.5; +} + +element-text { + horizontal-align: 0.5; + vertical-align: 0.5; +} diff --git a/themes/boreal-dawn/preview.png b/themes/boreal-dawn/preview.png new file mode 100644 index 0000000..7efe1ec Binary files /dev/null and b/themes/boreal-dawn/preview.png differ diff --git a/themes/boreal-dawn/rofi.rasi b/themes/boreal-dawn/rofi.rasi new file mode 100644 index 0000000..2ee71ac --- /dev/null +++ b/themes/boreal-dawn/rofi.rasi @@ -0,0 +1,122 @@ +/** + * Boreal Dawn — rofi whole-swap (themes//rofi.rasi). + * The base theme: a frosted dawn panel used by every menu (and, as a + * list, the fallback launcher). The app launcher reshapes this into a + * grid via themes/boreal-dawn/launcher.rasi, which @imports this file. The + * `configuration {}` block is omitted on purpose — it comes from + * modules/home/rofi.nix. Element structure mirrors the generated theme + * so the theme-grid picker's per-invocation -theme-str still lays out. + */ + +* { + base: #EDF2F6; + glassBg: #EDF2F6E6; + surface: #DFE7EE; + overlay: #A9B8C6; + text: #333E4E; + subtext: #51617A; + muted: #7C8B9D; + accent: #7458C8; + accentAlt: #22766E; + accentSoft: #7458C83B; + frostEdge: #22766E5C; + + font: "GeistMono Nerd Font 11"; + background-color: transparent; + text-color: @text; +} + +window { + background-color: @glassBg; + border: 1px; + border-color: @frostEdge; + border-radius: 14px; + width: calc( 84ch min 65% ); + location: center; + anchor: center; + padding: 16px; +} + +mainbox { + background-color: transparent; + children: [ inputbar, message, listview ]; + spacing: 12px; +} + +inputbar { + children: [ prompt, entry ]; + background-color: @surface; + text-color: @text; + border-radius: 10px; + padding: 12px 16px; + spacing: 10px; +} + +prompt { text-color: @accent; } + +entry { + text-color: @text; + cursor: text; + placeholder: "Search…"; + placeholder-color: @muted; +} + +listview { + background-color: transparent; + columns: 1; + lines: 8; + dynamic: true; + scrollbar: true; + spacing: 6px; + padding: 4px 0px 0px 0px; +} + +element { + background-color: transparent; + text-color: @text; + orientation: horizontal; + border-radius: 10px; + padding: 10px 14px; + spacing: 12px; +} + +element normal.normal, +element alternate.normal { + background-color: transparent; +} + +/* Selected row lifts on a soft aurora-violet wash. */ +element selected.normal { + background-color: @accentSoft; + text-color: @text; +} + +element-icon { + background-color: transparent; + size: 30px; + cursor: inherit; +} + +element-text { + background-color: transparent; + text-color: inherit; + highlight: bold; + vertical-align: 0.5; +} + +message { padding: 0px; } + +textbox { + background-color: @surface; + text-color: @text; + border-radius: 10px; + padding: 10px 14px; +} + +scrollbar { + width: 4px; + handle-width: 4px; + handle-color: @accent; + background-color: @surface; + border: 0px; +} diff --git a/themes/boreal-dawn/waybar.css b/themes/boreal-dawn/waybar.css new file mode 100644 index 0000000..651d7dc --- /dev/null +++ b/themes/boreal-dawn/waybar.css @@ -0,0 +1,193 @@ +/* + * Boreal Dawn — Waybar whole-swap (themes//waybar.css). + * + * A theme waybar.css replaces the ENTIRE generated stylesheet and is read + * raw (no palette is prepended), so this file MUST define its own colors. + * Identity: a floating "frost dawn" bar — three frosted-glass pills + * (launcher+clock · workspaces · status) over the wallpaper's blur. The + * whole right side is ONE continuous pill: the system tray shares its + * glass with the status modules, no separators, no boxes. Companion: + * waybar.jsonc. + */ + +@define-color base #EDF2F6; +@define-color mantle #CBD6DF; +@define-color surface #DFE7EE; +@define-color overlay #A9B8C6; +@define-color text #333E4E; +@define-color subtext #51617A; +@define-color muted #7C8B9D; +@define-color accent #7458C8; +@define-color accentAlt #22766E; +@define-color good #48752C; +@define-color warn #8F5E0A; +@define-color bad #B03A47; + +/* NB: this `*` reset reaches the SNI tray menus Waybar hosts too (its + stylesheet applies process-wide, at a priority user gtk.css cannot + out-rank). The menu block right below undoes the damage — keep the two + in sync. Do NOT scope `*` to window#waybar instead: the id's + specificity would beat the class rules below (pills) and wreck the + bar. */ +* { + /* Mono Nerd face for status glyphs (tight right bearings on the + proportional Symbols face make icon+percentage collide). */ + font-family: "GeistMono Nerd Font", "Symbols Nerd Font Mono"; + font-size: 13px; + font-weight: 500; + border: none; + border-radius: 0; + min-height: 0; +} + +/* ── Tray menus (nm-applet & co live in Waybar's process) ───────────── + Undo the `*` reset for them: same stylesheet, higher specificity. + Arrows/checks are CSS-sized nodes — min-height 0 makes them invisible; + separators die the same way; the bar's mono face reads wrong in text + menus. */ +menu, menu * { font-family: "Inter", sans-serif; } +menu menuitem arrow { min-width: 16px; min-height: 16px; } +menu check, menu radio { min-width: 14px; min-height: 14px; } +menu separator { + min-height: 1px; + margin: 5px 0; + background: alpha(@text, 0.2); +} + +/* The bar itself is invisible — the pills float over the wallpaper. */ +window#waybar { + background: transparent; + color: @text; +} + +/* ── The three frosted-glass pills ──────────────────────────────────── + Global blur turns the translucent @base into frosted glass; a faint + frost edge lifts each pill off the wallpaper. Light frost needs more + alpha than the dark theme's to stay visible on pale wallpapers. */ +.modules-left, +.modules-center, +.modules-right { + background: alpha(@base, 0.78); + border: 1px solid alpha(@accentAlt, 0.35); + border-radius: 14px; + padding: 0 6px; + margin: 0; +} + +/* Every module sits ON its pill: transparent, so nothing boxes the tray + off from the status icons — the seamless-cluster requirement. */ +#custom-nomarchy, +#clock, +#custom-recording, +#custom-updates, +#custom-doctor, +#idle_inhibitor, +#custom-nightlight, +#custom-airplane, +#language, +#custom-vpn, +#pulseaudio, +#battery, +#custom-powerprofile, +#tray, +#custom-notification, +#custom-powermenu { + background: transparent; + color: alpha(@text, 0.95); + padding: 0 8px; + margin: 0; +} + +/* ── Launcher — the aurora-violet Nomarchy mark opens the pill ──────── + The mark lives at U+F000 in the dedicated "Nomarchy" font; pin the + family or the Nerd Font's glass glyph at the same codepoint wins. */ +#custom-nomarchy { + color: @accent; + font-family: Nomarchy; + font-size: 18px; + padding: 0 12px 0 14px; +} +#custom-nomarchy:hover { color: @accentAlt; } + +/* ── Clock — unified time · date ─────────────────────────────────────*/ +#clock { + color: @text; + font-weight: 600; + padding-left: 4px; +} + +/* ── Workspaces — dots that bloom to an aurora pill when active ───────*/ +#workspaces { padding: 0 2px; } + +#workspaces button { + color: @muted; + padding: 0 9px; + margin: 3px 1px; + border-radius: 9px; + transition: color 0.2s ease, background 0.2s ease; +} +#workspaces button:hover { + color: @text; + background: alpha(@overlay, 0.5); +} +#workspaces button.active { + color: @base; + background: @accent; +} +#workspaces button.urgent { + color: @base; + background: @bad; +} + +/* ── Status semantics (neutral until a state fires) ──────────────────*/ +#custom-recording.recording { color: @bad; } +#custom-updates.available { color: @accent; } +#custom-doctor { color: @bad; } +#idle_inhibitor.activated { color: @warn; } +#custom-nightlight.on { color: @warn; } +#custom-airplane.on { color: @warn; } +#custom-vpn.on { color: @good; } +#pulseaudio.muted { color: @muted; } + +#battery.charging { color: @good; } +#battery.warning:not(.charging) { color: @warn; } +#battery.critical:not(.charging) { color: @bad; } + +/* Icon-only status modules carry no text, so they don't get the 13pt + Pango icon span the icon+text modules (volume/battery/language) use — + bump their font-size to match, or these glyphs read noticeably smaller + than their neighbours. */ +#custom-recording, +#custom-updates, +#custom-doctor, +#custom-nightlight, +#custom-airplane, +#custom-vpn, +#custom-notification { font-size: 17px; } +/* Speedometer + caffeine cup render small in their em box — a touch more. */ +#custom-powerprofile, +#idle_inhibitor { font-size: 18px; } + +#custom-notification.notification { color: @accent; } +#custom-notification.dnd-none, +#custom-notification.dnd-notification, +#custom-notification.inhibited-none, +#custom-notification.inhibited-notification { color: @muted; } + +/* Tray shares the pill's glass — same transparent background, its own + modest padding so nm-applet & friends breathe with the status icons. */ +#tray { padding: 0 6px; } +#tray > .passive { -gtk-icon-effect: dim; } +#tray > .needs-attention { -gtk-icon-effect: highlight; } + +/* Power button closes the pill on the right; warms to alert on hover. */ +#custom-powermenu { color: @subtext; padding: 0 12px 0 8px; } +#custom-powermenu:hover { color: @bad; } + +/* ── Tooltips — frosted, frost edge ───────────────────────────────────*/ +tooltip { + background: alpha(@base, 0.97); + border: 1px solid alpha(@accentAlt, 0.45); + border-radius: 10px; +} +tooltip label { color: @text; } diff --git a/themes/boreal-dawn/waybar.jsonc b/themes/boreal-dawn/waybar.jsonc new file mode 100644 index 0000000..91ce891 --- /dev/null +++ b/themes/boreal-dawn/waybar.jsonc @@ -0,0 +1,183 @@ +{ + "margin-top": 8, + "margin-left": 14, + "margin-right": 14, + "margin-bottom": 0, + "height": 38, + "layer": "bottom", + "position": "top", + "spacing": 4, + "reload_style_on_change": true, + "modules-left": [ + "custom/nomarchy", + "clock" + ], + "modules-center": [ + "hyprland/workspaces" + ], + "modules-right": [ + "custom/recording", + "custom/updates", + "custom/doctor", + "idle_inhibitor", + "custom/nightlight", + "hyprland/language", + "custom/vpn", + "custom/airplane", + "pulseaudio", + "battery", + "custom/powerprofile", + "tray", + "custom/notification", + "custom/powermenu" + ], + "custom/nomarchy": { + "interval": "once", + "format": "\uf000", + "on-click": "nomarchy-menu", + "tooltip-format": "Nomarchy menu" + }, + "clock": { + "format": "{:%H:%M \u00b7 %a %d %b}", + "on-click": "nomarchy-calendar", + "tooltip": true, + "tooltip-format": "{:%A, %d %B %Y\n%Z (UTC%z)}" + }, + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "on-click": "activate", + "on-scroll-up": "hyprctl dispatch workspace r+1", + "on-scroll-down": "hyprctl dispatch workspace r-1" + }, + "custom/recording": { + "return-type": "json", + "interval": 10, + "signal": 8, + "exec": "nomarchy-record status", + "on-click": "nomarchy-record stop" + }, + "custom/updates": { + "return-type": "json", + "interval": 1800, + "signal": 9, + "exec": "nomarchy-updates status", + "on-click": "nomarchy-updates upgrade-window" + }, + "custom/doctor": { + "return-type": "json", + "format": "{}", + "interval": 300, + "signal": 10, + "exec": "nomarchy-doctor-status", + "on-click": "nomarchy-menu doctor" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": " \udb80\udd76 ", + "deactivated": " \udb83\udfaa " + } + }, + "custom/nightlight": { + "return-type": "json", + "interval": 3, + "exec": "nomarchy-nightlight status", + "on-click": "nomarchy-nightlight toggle" + }, + "hyprland/language": { + "format": "\udb80\udf0c {short}", + "tooltip": false + }, + "custom/vpn": { + "return-type": "json", + "interval": 5, + "exec": "nomarchy-vpn-status", + "on-click": "nomarchy-vpn" + }, + "pulseaudio": { + "scroll-step": 5, + "format": "{icon}{volume}%", + "format-bluetooth": "{icon}\uf294 {volume}%", + "format-bluetooth-muted": "\uf6a9 {icon}\uf294", + "format-muted": "\uf6a9 muted", + "format-icons": { + "headphone": "\uf025 ", + "hands-free": "\uf025 ", + "headset": "\uf025 ", + "phone": "\uf095 ", + "portable": "\uf095 ", + "car": "\uf1b9 ", + "default": [ + "\uf026 ", + "\uf027 ", + "\uf028 " + ] + }, + "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", + "on-click-right": "pwvucontrol", + "tooltip-format": "{desc} | {volume}%" + }, + "battery": { + "interval": 30, + "states": { + "warning": 25, + "critical": 10 + }, + "format": "{icon}{capacity}%", + "format-charging": "\uf0e7 {capacity}%", + "format-plugged": "\uf1e6 {capacity}%", + "tooltip-format-plugged": "Plugged in, not charging \u2014 held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap \u00b7 click to adjust", + "format-icons": [ + "\uf244 ", + "\uf243 ", + "\uf242 ", + "\uf241 ", + "\uf240 " + ], + "on-click": "nomarchy-menu powermgmt", + "tooltip-format": "Battery status" + }, + "custom/powerprofile": { + "return-type": "json", + "interval": 5, + "exec": "nomarchy-powerprofile-status", + "on-click": "nomarchy-menu powermgmt" + }, + "tray": { + "icon-size": 15, + "spacing": 10 + }, + "custom/notification": { + "format": "{icon}", + "return-type": "json", + "exec": "swaync-client -swb", + "exec-if": "which swaync-client", + "escape": true, + "tooltip": true, + "on-click": "swaync-client -t -sw", + "on-click-right": "swaync-client -d -sw", + "format-icons": { + "none": "\udb80\udc9c", + "notification": "\udb80\udc9a", + "dnd-none": "\udb80\udc9b", + "dnd-notification": "\udb80\udc9b", + "inhibited-none": "\udb80\udc9b", + "inhibited-notification": "\udb80\udc9b", + "dnd-inhibited-none": "\udb80\udc9b", + "dnd-inhibited-notification": "\udb80\udc9b" + } + }, + "custom/powermenu": { + "format": "\uf011", + "on-click": "nomarchy-menu power", + "tooltip": false + }, + "custom/airplane": { + "return-type": "json", + "interval": 5, + "signal": 11, + "exec": "nomarchy-airplane status", + "on-click": "nomarchy-airplane toggle" + } +}