feat(system): comprehensive branding, styling, and system feature update
- Relocate themes to assets/themes/ and update all references. - Implement custom SDDM theme and Plymouth theme enhancements. - Add themed templates for Alacritty, Hyprland, Waybar, and other apps. - Introduce Makima key remapper module and configuration. - Add Voxtype and Walker configurations. - Implement systemd power management and timeout optimizations. - Add Nautilus-python extensions for LocalSend. - Update branding assets and ASCII art integration.
BIN
assets/branding/icon.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
34
assets/branding/icon.txt
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
,,,
|
||||||
|
,, ,,,,,,
|
||||||
|
,,,,,,,, ,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,, .,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,,,,,. ,,,,,,,,,,,,,,,,,,,
|
||||||
|
.,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,, ,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,, .,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,. ,,,,,,,,,,,,,,,,,,,,,,,,, ,,, .,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,, .,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,. ,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,, ,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,, ,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,, ,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, ,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,, ,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,, ,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,, .,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,, ,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,, .,,,,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,, ,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,, ,,,,,,,,,.
|
||||||
|
,,,,,, ,,
|
||||||
|
,,,,
|
||||||
@@ -2,14 +2,14 @@
|
|||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="210mm"
|
width="157.40488mm"
|
||||||
height="297mm"
|
height="162.48518mm"
|
||||||
viewBox="0 0 210 297"
|
viewBox="0 0 157.40488 162.48518"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg1"
|
id="svg1"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||||
sodipodi:docname="logo.svg"
|
sodipodi:docname="icon.svg"
|
||||||
inkscape:export-filename="logo.png"
|
inkscape:export-filename="logo.png"
|
||||||
inkscape:export-xdpi="96"
|
inkscape:export-xdpi="96"
|
||||||
inkscape:export-ydpi="96"
|
inkscape:export-ydpi="96"
|
||||||
@@ -34,23 +34,31 @@
|
|||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="0"
|
inkscape:window-y="0"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
inkscape:current-layer="layer1" /><defs
|
inkscape:current-layer="layer1"><inkscape:page
|
||||||
|
x="0"
|
||||||
|
y="-1.1741086e-21"
|
||||||
|
width="157.40488"
|
||||||
|
height="162.48518"
|
||||||
|
id="page2"
|
||||||
|
margin="0"
|
||||||
|
bleed="0" /></sodipodi:namedview><defs
|
||||||
id="defs1" /><g
|
id="defs1" /><g
|
||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"><g
|
id="layer1"
|
||||||
|
transform="translate(-28.332214,-25.599269)"><g
|
||||||
id="g4"
|
id="g4"
|
||||||
transform="translate(3.1953242,-22.686801)"
|
transform="translate(3.1953242,-22.686801)"
|
||||||
style="fill:#000088;fill-opacity:1"><path
|
style="fill:#000088;fill-opacity:1"><path
|
||||||
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
d="M 25.136891,85.823024 25.557592,210.77125 88.452409,174.38061 67.417351,160.49747 57.110174,166.38729 V 105.80633 Z"
|
d="M 25.136891,85.823024 25.557592,210.77125 88.452409,174.38061 67.417351,160.49747 57.110174,166.38729 V 105.80633 Z"
|
||||||
id="path1" /><path
|
id="path1" /><path
|
||||||
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
d="M 67.728991,112.41131 182.54178,185.60757 153.16137,202.85259 67.830432,148.17947 Z"
|
d="M 67.728991,112.41131 182.54178,185.60757 153.16137,202.85259 67.830432,148.17947 Z"
|
||||||
id="path2" /><path
|
id="path2" /><path
|
||||||
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
d="M 139.74857,145.88014 140.00405,110.4959 54.800856,56.333749 25.675926,73.32329 Z"
|
d="M 139.74857,145.88014 140.00405,110.4959 54.800856,56.333749 25.675926,73.32329 Z"
|
||||||
id="path3" /><path
|
id="path3" /><path
|
||||||
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
d="M 182.2863,172.70573 V 48.286069 l -62.59305,36.406166 20.82177,13.668277 10.21927,-5.74834 0.12774,60.165978 z"
|
d="M 182.2863,172.70573 V 48.286069 l -62.59305,36.406166 20.82177,13.668277 10.21927,-5.74834 0.12774,60.165978 z"
|
||||||
id="path4" /></g></g></svg>
|
id="path4" /></g></g></svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.5 KiB |
7
assets/makima/AT Translated Set 2 keyboard.toml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Run nomarchy-restart-makima after any changes
|
||||||
|
|
||||||
|
[remap]
|
||||||
|
KEY_LEFTMETA-KEY_LEFTSHIFT-KEY_F23 = ["KEY_LEFTMETA", "KEY_LEFTALT", "KEY_SPACE"]
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
GRAB_DEVICE = "true"
|
||||||
84
assets/nautilus-python/extensions/localsend.py
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from gi import require_version
|
||||||
|
|
||||||
|
require_version("Nautilus", "4.1")
|
||||||
|
|
||||||
|
from gi.repository import GObject, Gio, Nautilus
|
||||||
|
|
||||||
|
|
||||||
|
class SendViaLocalSendAction(GObject.GObject, Nautilus.MenuProvider):
|
||||||
|
def _launch_localsend(self, paths):
|
||||||
|
command = self._resolve_command()
|
||||||
|
if not command:
|
||||||
|
return
|
||||||
|
|
||||||
|
if command[-1] == "@@":
|
||||||
|
command = command + paths + ["@@"]
|
||||||
|
else:
|
||||||
|
command = command + paths
|
||||||
|
|
||||||
|
Gio.Subprocess.new(command, Gio.SubprocessFlags.NONE)
|
||||||
|
|
||||||
|
def _resolve_command(self):
|
||||||
|
localsend = shutil.which("localsend")
|
||||||
|
if localsend:
|
||||||
|
return [localsend, "--headless", "send"]
|
||||||
|
|
||||||
|
flatpak = shutil.which("flatpak")
|
||||||
|
if flatpak and self._has_flatpak_app(flatpak, "org.localsend.localsend_app"):
|
||||||
|
return [
|
||||||
|
flatpak,
|
||||||
|
"run",
|
||||||
|
"--file-forwarding",
|
||||||
|
"org.localsend.localsend_app",
|
||||||
|
"@@",
|
||||||
|
]
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _has_flatpak_app(self, flatpak, app_id):
|
||||||
|
process = Gio.Subprocess.new(
|
||||||
|
[flatpak, "info", app_id],
|
||||||
|
Gio.SubprocessFlags.STDOUT_SILENCE | Gio.SubprocessFlags.STDERR_SILENCE,
|
||||||
|
)
|
||||||
|
return process.wait_check()
|
||||||
|
|
||||||
|
def _selected_paths(self, files):
|
||||||
|
paths = []
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
location = file.get_location()
|
||||||
|
if not location:
|
||||||
|
continue
|
||||||
|
|
||||||
|
path = location.get_path()
|
||||||
|
if path and path not in paths:
|
||||||
|
paths.append(path)
|
||||||
|
|
||||||
|
return paths
|
||||||
|
|
||||||
|
def _make_item(self, paths):
|
||||||
|
label = (
|
||||||
|
"Send via LocalSend" if len(paths) == 1 else "Send selected via LocalSend"
|
||||||
|
)
|
||||||
|
item = Nautilus.MenuItem(
|
||||||
|
name="LocalSendNautilus::send_via_localsend",
|
||||||
|
label=label,
|
||||||
|
icon="localsend",
|
||||||
|
)
|
||||||
|
item.connect("activate", self._on_activate, paths)
|
||||||
|
return item
|
||||||
|
|
||||||
|
def _on_activate(self, _menu, paths):
|
||||||
|
self._launch_localsend(paths)
|
||||||
|
|
||||||
|
def get_file_items(self, *args):
|
||||||
|
files = args[0] if len(args) == 1 else args[1]
|
||||||
|
paths = self._selected_paths(files)
|
||||||
|
|
||||||
|
if not paths or not self._resolve_command():
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [self._make_item(paths)]
|
||||||
366
assets/nomarchy-skill/SKILL.md
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
---
|
||||||
|
name: nomarchy
|
||||||
|
description: >
|
||||||
|
REQUIRED for end-user customization of Linux desktop, window manager, or system config.
|
||||||
|
Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/,
|
||||||
|
~/.config/alacritty/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/,
|
||||||
|
or ~/.config/nomarchy/. Triggers: Hyprland, window rules, animations, keybindings,
|
||||||
|
monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes,
|
||||||
|
wallpaper, night light, idle, lock screen, screenshots, layer rules, workspace
|
||||||
|
settings, display config, and user-facing nomarchy commands. Excludes Nomarchy
|
||||||
|
source development in ~/.local/share/nomarchy/ and nomarchy-dev-* workflows.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Nomarchy Skill
|
||||||
|
|
||||||
|
Manage [Nomarchy](https://nomarchy.org/) Linux systems - a beautiful, modern, opinionated Arch Linux distribution with Hyprland.
|
||||||
|
|
||||||
|
This skill is for end-user customization on installed systems.
|
||||||
|
It is not for contributing to Nomarchy source code.
|
||||||
|
|
||||||
|
## When This Skill MUST Be Used
|
||||||
|
|
||||||
|
**ALWAYS invoke this skill for end-user requests involving ANY of these:**
|
||||||
|
|
||||||
|
- Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.)
|
||||||
|
- Editing ANY file in `~/.config/waybar/`, `~/.config/walker/`, `~/.config/mako/`
|
||||||
|
- Editing terminal configs (alacritty, kitty, ghostty)
|
||||||
|
- Editing ANY file in `~/.config/nomarchy/`
|
||||||
|
- Window behavior, animations, opacity, blur, gaps, borders
|
||||||
|
- Layer rules, workspace settings, display/monitor configuration
|
||||||
|
- Themes, wallpapers, fonts, appearance changes
|
||||||
|
- User-facing `nomarchy-*` commands (`nomarchy-theme-*`, `nomarchy-refresh-*`, `nomarchy-restart-*`, etc.)
|
||||||
|
- Screenshots, screen recording, night light, idle behavior, lock screen
|
||||||
|
|
||||||
|
**If you're about to edit a config file in ~/.config/ on this system, STOP and use this skill first.**
|
||||||
|
|
||||||
|
**Do NOT use this skill for Nomarchy development tasks** (editing files in `~/.local/share/nomarchy/`, creating migrations, or running `nomarchy-dev-*` workflows).
|
||||||
|
|
||||||
|
## Critical Safety Rules
|
||||||
|
|
||||||
|
**For end-user customization tasks, NEVER modify anything in `~/.local/share/nomarchy/`** - but READING is safe and encouraged.
|
||||||
|
|
||||||
|
This directory contains Nomarchy's source files managed by git. Any changes will be:
|
||||||
|
- Lost on next `nomarchy-update`
|
||||||
|
- Cause conflicts with upstream
|
||||||
|
- Break the system's update mechanism
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.local/share/nomarchy/ # READ-ONLY - NEVER EDIT (reading is OK)
|
||||||
|
├── bin/ # Source scripts (symlinked to PATH)
|
||||||
|
├── config/ # Default config templates
|
||||||
|
├── themes/ # Stock themes
|
||||||
|
├── default/ # System defaults
|
||||||
|
├── migrations/ # Update migrations
|
||||||
|
└── install/ # Installation scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
**Reading `~/.local/share/nomarchy/` is SAFE and useful** - do it freely to:
|
||||||
|
- Understand how nomarchy commands work: `cat $(which nomarchy-theme-set)`
|
||||||
|
- See default configs before customizing: `cat ~/.local/share/nomarchy/config/waybar/config.jsonc`
|
||||||
|
- Check stock theme files to copy for customization
|
||||||
|
- Reference default hyprland settings: `cat ~/.config/nomarchy/default/hypr/*`
|
||||||
|
|
||||||
|
**Always use these safe locations instead:**
|
||||||
|
- `~/.config/` - User configuration (safe to edit)
|
||||||
|
- `~/.config/nomarchy/themes/<custom-name>/` - Custom themes (must be real directories)
|
||||||
|
- `~/.config/nomarchy/hooks/` - Custom automation hooks
|
||||||
|
|
||||||
|
If the request is to develop Nomarchy itself, this skill is out of scope. Follow repository development instructions instead of this skill.
|
||||||
|
|
||||||
|
## System Architecture
|
||||||
|
|
||||||
|
Nomarchy is built on:
|
||||||
|
|
||||||
|
| Component | Purpose | Config Location |
|
||||||
|
|-----------|---------|-----------------|
|
||||||
|
| **Arch Linux** | Base OS | `/etc/`, `~/.config/` |
|
||||||
|
| **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` |
|
||||||
|
| **Waybar** | Status bar | `~/.config/waybar/` |
|
||||||
|
| **Walker** | App launcher | `~/.config/walker/` |
|
||||||
|
| **Alacritty/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` |
|
||||||
|
| **Mako** | Notifications | `~/.config/mako/` |
|
||||||
|
| **SwayOSD** | On-screen display | `~/.config/swayosd/` |
|
||||||
|
|
||||||
|
## Command Discovery
|
||||||
|
|
||||||
|
Nomarchy provides ~145 commands following `nomarchy-<category>-<action>` pattern.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# List all nomarchy commands
|
||||||
|
compgen -c | grep -E '^nomarchy-' | sort -u
|
||||||
|
|
||||||
|
# Find commands by category
|
||||||
|
compgen -c | grep -E '^nomarchy-theme'
|
||||||
|
compgen -c | grep -E '^nomarchy-restart'
|
||||||
|
|
||||||
|
# Read a command's source to understand it
|
||||||
|
cat $(which nomarchy-theme-set)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Command Categories
|
||||||
|
|
||||||
|
| Prefix | Purpose | Example |
|
||||||
|
|--------|---------|---------|
|
||||||
|
| `nomarchy-refresh-*` | Reset config to defaults (backs up first) | `nomarchy-refresh-waybar` |
|
||||||
|
| `nomarchy-restart-*` | Restart a service/app | `nomarchy-restart-waybar` |
|
||||||
|
| `nomarchy-toggle-*` | Toggle feature on/off | `nomarchy-toggle-nightlight` |
|
||||||
|
| `nomarchy-theme-*` | Theme management | `nomarchy-theme-set <name>` |
|
||||||
|
| `nomarchy-install-*` | Install optional software | `nomarchy-install-docker-dbs` |
|
||||||
|
| `nomarchy-launch-*` | Launch apps | `nomarchy-launch-browser` |
|
||||||
|
| `nomarchy-cmd-*` | System commands | `nomarchy-cmd-screenshot` |
|
||||||
|
| `nomarchy-pkg-*` | Package management | `nomarchy-pkg-install <pkg>` |
|
||||||
|
| `nomarchy-setup-*` | Initial setup tasks | `nomarchy-setup-fingerprint` |
|
||||||
|
| `nomarchy-update-*` | System updates | `nomarchy-update` |
|
||||||
|
|
||||||
|
## Configuration Locations
|
||||||
|
|
||||||
|
### Hyprland (Window Manager)
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.config/hypr/
|
||||||
|
├── hyprland.conf # Main config (sources others)
|
||||||
|
├── bindings.conf # Keybindings
|
||||||
|
├── monitors.conf # Display configuration
|
||||||
|
├── input.conf # Keyboard/mouse settings
|
||||||
|
├── looknfeel.conf # Appearance (gaps, borders, animations)
|
||||||
|
├── envs.conf # Environment variables
|
||||||
|
├── autostart.conf # Startup applications
|
||||||
|
├── hypridle.conf # Idle behavior (screen off, lock, suspend)
|
||||||
|
├── hyprlock.conf # Lock screen appearance
|
||||||
|
└── hyprsunset.conf # Night light / blue light filter
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key behaviors:**
|
||||||
|
- Hyprland auto-reloads on config save (no restart needed for most changes)
|
||||||
|
- Use `hyprctl reload` to force reload
|
||||||
|
- Use `nomarchy-refresh-hyprland` to reset to defaults
|
||||||
|
|
||||||
|
### Waybar (Status Bar)
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.config/waybar/
|
||||||
|
├── config.jsonc # Bar layout and modules (JSONC format)
|
||||||
|
└── style.css # Styling
|
||||||
|
```
|
||||||
|
|
||||||
|
**Waybar does NOT auto-reload.** You MUST run `nomarchy-restart-waybar` after any config changes.
|
||||||
|
|
||||||
|
**Commands:** `nomarchy-restart-waybar`, `nomarchy-refresh-waybar`, `nomarchy-toggle-waybar`
|
||||||
|
|
||||||
|
### Terminals
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.config/alacritty/alacritty.toml
|
||||||
|
~/.config/kitty/kitty.conf
|
||||||
|
~/.config/ghostty/config
|
||||||
|
```
|
||||||
|
|
||||||
|
**Command:** `nomarchy-restart-terminal`
|
||||||
|
|
||||||
|
### Other Configs
|
||||||
|
|
||||||
|
| App | Location |
|
||||||
|
|-----|----------|
|
||||||
|
| btop | `~/.config/btop/btop.conf` |
|
||||||
|
| fastfetch | `~/.config/fastfetch/config.jsonc` |
|
||||||
|
| lazygit | `~/.config/lazygit/config.yml` |
|
||||||
|
| starship | `~/.config/starship.toml` |
|
||||||
|
| git | `~/.config/git/config` |
|
||||||
|
| walker | `~/.config/walker/config.toml` |
|
||||||
|
|
||||||
|
## Safe Customization Patterns
|
||||||
|
|
||||||
|
### Pattern 1: Edit User Config Directly
|
||||||
|
|
||||||
|
For simple changes, edit files in `~/.config/`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Read current config
|
||||||
|
cat ~/.config/hypr/bindings.conf
|
||||||
|
|
||||||
|
# 2. Backup before changes
|
||||||
|
cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak.$(date +%s)
|
||||||
|
|
||||||
|
# 3. Make changes with Edit tool
|
||||||
|
|
||||||
|
# 4. Apply changes
|
||||||
|
# - Hyprland: auto-reloads on save (no restart needed)
|
||||||
|
# - Waybar: MUST restart with nomarchy-restart-waybar
|
||||||
|
# - Walker: MUST restart with nomarchy-restart-walker
|
||||||
|
# - Terminals: MUST restart with nomarchy-restart-terminal
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pattern 2: Make a new theme
|
||||||
|
|
||||||
|
1. Create a directory under ~/.config/nomarchy/themes.
|
||||||
|
2. See how an existing theme is done via ~/.local/share/nomarchy/themes/catppuccin.
|
||||||
|
3. Download a matching background (or several) from the internet and put them in ~/.config/nomarchy/themes/[name-of-new-theme]
|
||||||
|
4. When done with the theme, run nomarchy-theme-set "Name of new theme"
|
||||||
|
|
||||||
|
### Pattern 3: Use Hooks for Automation
|
||||||
|
|
||||||
|
Create scripts in `~/.config/nomarchy/hooks/` to run automatically on events:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Available hooks (see samples in ~/.config/nomarchy/hooks/):
|
||||||
|
~/.config/nomarchy/hooks/
|
||||||
|
├── theme-set # Runs after theme change (receives theme name as $1)
|
||||||
|
├── font-set # Runs after font change
|
||||||
|
└── post-update # Runs after nomarchy-update
|
||||||
|
```
|
||||||
|
|
||||||
|
Example hook (`~/.config/nomarchy/hooks/theme-set`):
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
THEME_NAME=$1
|
||||||
|
echo "Theme changed to: $THEME_NAME"
|
||||||
|
# Add custom actions here
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pattern 4: Reset to Defaults -- ALWAYS SEEK USER CONFIRMATION BEFORE RUNNING
|
||||||
|
|
||||||
|
When customizations go wrong:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Reset specific config (creates backup automatically)
|
||||||
|
nomarchy-refresh-waybar
|
||||||
|
nomarchy-refresh-hyprland
|
||||||
|
|
||||||
|
# The refresh command:
|
||||||
|
# 1. Backs up current config with timestamp
|
||||||
|
# 2. Copies default from ~/.local/share/nomarchy/config/
|
||||||
|
# 3. Restarts the component
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Tasks
|
||||||
|
|
||||||
|
### Themes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nomarchy-theme-list # Show available themes
|
||||||
|
nomarchy-theme-current # Show current theme
|
||||||
|
nomarchy-theme-set <name> # Apply theme (use "Tokyo Night" not "tokyo-night")
|
||||||
|
nomarchy-theme-next # Cycle to next theme
|
||||||
|
nomarchy-theme-bg-next # Cycle wallpaper
|
||||||
|
nomarchy-theme-install <url> # Install from git repo
|
||||||
|
```
|
||||||
|
|
||||||
|
### Keybindings
|
||||||
|
|
||||||
|
Edit `~/.config/hypr/bindings.conf`. Format:
|
||||||
|
```
|
||||||
|
bind = SUPER, Return, exec, xdg-terminal-exec
|
||||||
|
bind = SUPER, Q, killactive
|
||||||
|
bind = SUPER SHIFT, E, exit
|
||||||
|
```
|
||||||
|
|
||||||
|
View current bindings: `nomarchy-menu-keybindings --print`
|
||||||
|
|
||||||
|
**IMPORTANT: When re-binding an existing key:**
|
||||||
|
|
||||||
|
1. First check existing bindings: `nomarchy-menu-keybindings --print`
|
||||||
|
2. If the key is already bound, you MUST add an `unbind` directive BEFORE your new `bind`
|
||||||
|
3. Inform the user what the key was previously bound to
|
||||||
|
|
||||||
|
Example - rebinding SUPER+F (which is bound to fullscreen by default):
|
||||||
|
```
|
||||||
|
# Unbind existing SUPER+F (was: fullscreen)
|
||||||
|
unbind = SUPER, F
|
||||||
|
# New binding for file manager
|
||||||
|
bind = SUPER, F, exec, nautilus
|
||||||
|
```
|
||||||
|
|
||||||
|
Always tell the user: "Note: SUPER+F was previously bound to fullscreen. I've added an unbind directive to override it."
|
||||||
|
|
||||||
|
### Display/Monitors
|
||||||
|
|
||||||
|
Edit `~/.config/hypr/monitors.conf`. Format:
|
||||||
|
```
|
||||||
|
monitor = eDP-1, 1920x1080@60, 0x0, 1
|
||||||
|
monitor = HDMI-A-1, 2560x1440@144, 1920x0, 1
|
||||||
|
```
|
||||||
|
|
||||||
|
List monitors: `hyprctl monitors`
|
||||||
|
|
||||||
|
### Window Rules
|
||||||
|
|
||||||
|
**CRITICAL: Hyprland window rules syntax changes frequently between versions.**
|
||||||
|
|
||||||
|
Before writing ANY window rules, you MUST fetch the current documentation from the official Hyprland wiki:
|
||||||
|
- https://github.com/hyprwm/hyprland-wiki/blob/main/content/Configuring/Window-Rules.md
|
||||||
|
|
||||||
|
DO NOT rely on cached or memorized window rule syntax. The format has changed multiple times and using outdated syntax will cause errors or unexpected behavior.
|
||||||
|
|
||||||
|
Window rules go in `~/.config/hypr/hyprland.conf` or a sourced file. Always verify the current syntax from the wiki first.
|
||||||
|
|
||||||
|
### Fonts
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nomarchy-font-list # Available fonts
|
||||||
|
nomarchy-font-current # Current font
|
||||||
|
nomarchy-font-set <name> # Change font
|
||||||
|
```
|
||||||
|
|
||||||
|
### System
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nomarchy-update # Full system update
|
||||||
|
nomarchy-version # Show Nomarchy version
|
||||||
|
nomarchy-debug --no-sudo --print # Debug info (ALWAYS use these flags)
|
||||||
|
nomarchy-lock-screen # Lock screen
|
||||||
|
nomarchy-system-shutdown # Shutdown
|
||||||
|
nomarchy-system-reboot # Reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
**IMPORTANT:** Always run `nomarchy-debug` with `--no-sudo --print` flags to avoid interactive sudo prompts that will hang the terminal.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Get debug information (ALWAYS use these flags to avoid interactive prompts)
|
||||||
|
nomarchy-debug --no-sudo --print
|
||||||
|
|
||||||
|
# Upload logs for support
|
||||||
|
nomarchy-upload-log
|
||||||
|
|
||||||
|
# Reset specific config to defaults
|
||||||
|
nomarchy-refresh-<app>
|
||||||
|
|
||||||
|
# Refresh specific config file
|
||||||
|
# config-file path is relative to ~/.config/
|
||||||
|
# eg. nomarchy-refresh-config hypr/hyprlock.conf will refresh ~/.config/hypr/hyprlock.conf
|
||||||
|
nomarchy-refresh-config <config-file>
|
||||||
|
|
||||||
|
# Full reinstall of configs (nuclear option)
|
||||||
|
nomarchy-reinstall
|
||||||
|
```
|
||||||
|
|
||||||
|
## Decision Framework
|
||||||
|
|
||||||
|
When user requests system changes:
|
||||||
|
|
||||||
|
1. **Is it a stock nomarchy command?** Use it directly
|
||||||
|
2. **Is it a config edit?** Edit in `~/.config/`, never `~/.local/share/nomarchy/`
|
||||||
|
3. **Is it a theme customization?** Create a NEW custom theme directory
|
||||||
|
4. **Is it automation?** Use hooks in `~/.config/nomarchy/hooks/`
|
||||||
|
5. **Is it a package install?** Use `nomarchy-pkg-add` (or `nomarchy-pkg-aur-add` for AUR-only packages)
|
||||||
|
6. **Unsure if command exists?** Search with `compgen -c | grep nomarchy`
|
||||||
|
|
||||||
|
## Out of Scope
|
||||||
|
|
||||||
|
This skill intentionally does not cover Nomarchy source development. Do not use this skill for:
|
||||||
|
- Editing files in `~/.local/share/nomarchy/` (`bin/`, `config/`, `default/`, `themes/`, `migrations/`, etc.)
|
||||||
|
- Creating or editing migrations
|
||||||
|
- Running `nomarchy-dev-*` commands
|
||||||
|
|
||||||
|
## Example Requests
|
||||||
|
|
||||||
|
- "Change my theme to catppuccin" -> `nomarchy-theme-set catppuccin`
|
||||||
|
- "Add a keybinding for Super+E to open file manager" -> Check existing bindings first, add `unbind` if needed, then add `bind` in `~/.config/hypr/bindings.conf`
|
||||||
|
- "Configure my external monitor" -> Edit `~/.config/hypr/monitors.conf`
|
||||||
|
- "Make the window gaps smaller" -> Edit `~/.config/hypr/looknfeel.conf`
|
||||||
|
- "Set up night light to turn on at sunset" -> `nomarchy-toggle-nightlight` or edit `~/.config/hypr/hyprsunset.conf`
|
||||||
|
- "Customize the catppuccin theme colors" -> Create `~/.config/nomarchy/themes/catppuccin-custom/` by copying from stock, then edit
|
||||||
|
- "Run a script every time I change themes" -> Create `~/.config/nomarchy/hooks/theme-set`
|
||||||
|
- "Reset waybar to defaults" -> `nomarchy-refresh-waybar`
|
||||||
BIN
assets/plymouth/bullet.png
Normal file
|
After Width: | Height: | Size: 293 B |
BIN
assets/plymouth/entry.png
Normal file
|
After Width: | Height: | Size: 694 B |
BIN
assets/plymouth/lock.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
@@ -1,8 +1,11 @@
|
|||||||
[Plymouth Theme]
|
[Plymouth Theme]
|
||||||
Name=Nomarchy
|
Name=Nomarchy
|
||||||
Description=Nomarchy boot splash theme
|
Description=Omarchy splash screen.
|
||||||
ModuleName=script
|
ModuleName=script
|
||||||
|
|
||||||
[script]
|
[script]
|
||||||
ImageDir=/etc/plymouth/themes/nomarchy
|
ImageDir=/usr/share/plymouth/themes/nomarchy
|
||||||
ScriptFile=/etc/plymouth/themes/nomarchy/nomarchy.script
|
ScriptFile=/usr/share/plymouth/themes/nomarchy/nomarchy.script
|
||||||
|
ConsoleLogBackgroundColor=0x1a1b26
|
||||||
|
MonospaceFont=Cantarell 11
|
||||||
|
Font=Cantarell 11
|
||||||
|
|||||||
@@ -1,53 +1,257 @@
|
|||||||
# Nomarchy Plymouth Theme Script
|
# Omarchy Plymouth Theme Script
|
||||||
# Centered logo with smooth fade-in and LUKS password support
|
|
||||||
|
|
||||||
# Set background to black
|
Window.SetBackgroundTopColor(0.101, 0.105, 0.149);
|
||||||
Window.SetBackgroundTopColor(0, 0, 0);
|
Window.SetBackgroundBottomColor(0.101, 0.105, 0.149);
|
||||||
Window.SetBackgroundBottomColor(0, 0, 0);
|
|
||||||
|
|
||||||
# Logo Setup
|
logo.image = Image("logo.png");
|
||||||
logo_image = Image("logo.png");
|
logo.sprite = Sprite(logo.image);
|
||||||
logo_sprite = Sprite(logo_image);
|
logo.sprite.SetX (Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
|
||||||
logo_sprite.SetX(Window.GetWidth() / 2 - logo_image.GetWidth() / 2);
|
logo.sprite.SetY (Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
|
||||||
logo_sprite.SetY(Window.GetHeight() / 2 - logo_image.GetHeight() / 2);
|
logo.sprite.SetOpacity (1);
|
||||||
|
|
||||||
# Initial opacity at 0 for fade-in effect
|
# Use these to adjust the progress bar timing
|
||||||
logo_opacity = 0;
|
global.fake_progress_limit = 0.7; # Target percentage for fake progress (0.0 to 1.0)
|
||||||
logo_sprite.SetOpacity(logo_opacity);
|
global.fake_progress_duration = 15.0; # Duration in seconds to reach limit
|
||||||
|
|
||||||
# Message Display Setup (for LUKS password, system messages)
|
# Progress bar animation variables
|
||||||
message_sprite = Sprite();
|
global.fake_progress = 0.0;
|
||||||
message_sprite.SetY(Window.GetHeight() * 0.7); # Place below logo
|
global.real_progress = 0.0;
|
||||||
|
global.fake_progress_active = 0; # 0 / 1 boolean
|
||||||
|
global.animation_frame = 0;
|
||||||
|
global.fake_progress_start_time = 0; # Track when fake progress started
|
||||||
|
global.password_shown = 0; # Track if password dialog has been shown
|
||||||
|
global.max_progress = 0.0; # Track the maximum progress reached to prevent backwards movement
|
||||||
|
|
||||||
fun display_message_callback(text) {
|
fun refresh_callback ()
|
||||||
if (!text) return;
|
{
|
||||||
my_image = Image.Text(text, 1, 1, 1); # White text
|
global.animation_frame++;
|
||||||
message_sprite.SetImage(my_image);
|
|
||||||
message_sprite.SetX(Window.GetWidth() / 2 - my_image.GetWidth() / 2);
|
# Animate fake progress to limit over time with easing
|
||||||
message_sprite.SetOpacity(logo_opacity); # Sync message opacity with logo
|
if (global.fake_progress_active == 1)
|
||||||
}
|
{
|
||||||
|
# Calculate elapsed time since start
|
||||||
# Password Entry Handling
|
elapsed_time = global.animation_frame / 50.0; # Convert frames to seconds (50 FPS)
|
||||||
fun password_callback(text, bullet_count) {
|
|
||||||
bullets = "";
|
# Calculate linear progress ratio (0 to 1) based on time
|
||||||
for (i = 0; i < bullet_count; i++) bullets += "*";
|
time_ratio = elapsed_time / global.fake_progress_duration;
|
||||||
display_message_callback(bullets);
|
if (time_ratio > 1.0)
|
||||||
}
|
time_ratio = 1.0;
|
||||||
|
|
||||||
# Plymouth State Hooks
|
# Apply easing curve: ease-out quadratic
|
||||||
Plymouth.SetDisplayPasswordFunction(password_callback);
|
# Formula: 1 - (1 - x)^2
|
||||||
Plymouth.SetDisplayNormalFunction(fun() { message_sprite.SetImage(NULL); });
|
eased_ratio = 1 - ((1 - time_ratio) * (1 - time_ratio));
|
||||||
Plymouth.SetDisplayMessageFunction(display_message_callback);
|
|
||||||
|
# Calculate fake progress based on eased ratio
|
||||||
# Animation Logic
|
global.fake_progress = eased_ratio * global.fake_progress_limit;
|
||||||
fun refresh_callback () {
|
|
||||||
# Smooth fade-in
|
# Update progress bar with fake progress
|
||||||
if (logo_opacity < 1) {
|
update_progress_bar(global.fake_progress);
|
||||||
logo_opacity += 0.02; # Adjust speed here
|
}
|
||||||
if (logo_opacity > 1) logo_opacity = 1;
|
|
||||||
logo_sprite.SetOpacity(logo_opacity);
|
|
||||||
message_sprite.SetOpacity(logo_opacity);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Plymouth.SetRefreshFunction (refresh_callback);
|
Plymouth.SetRefreshFunction (refresh_callback);
|
||||||
|
|
||||||
|
#----------------------------------------- Helper Functions --------------------------------
|
||||||
|
|
||||||
|
fun update_progress_bar(progress)
|
||||||
|
{
|
||||||
|
# Only update if progress is moving forward
|
||||||
|
if (progress > global.max_progress)
|
||||||
|
{
|
||||||
|
global.max_progress = progress;
|
||||||
|
width = Math.Int(progress_bar.original_image.GetWidth() * progress);
|
||||||
|
if (width < 1) width = 1; # Ensure minimum width of 1 pixel
|
||||||
|
|
||||||
|
progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight());
|
||||||
|
progress_bar.sprite.SetImage(progress_bar.image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun show_progress_bar()
|
||||||
|
{
|
||||||
|
progress_box.sprite.SetOpacity(1);
|
||||||
|
progress_bar.sprite.SetOpacity(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hide_progress_bar()
|
||||||
|
{
|
||||||
|
progress_box.sprite.SetOpacity(0);
|
||||||
|
progress_bar.sprite.SetOpacity(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fun show_password_dialog()
|
||||||
|
{
|
||||||
|
lock.sprite.SetOpacity(1);
|
||||||
|
entry.sprite.SetOpacity(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hide_password_dialog()
|
||||||
|
{
|
||||||
|
lock.sprite.SetOpacity(0);
|
||||||
|
entry.sprite.SetOpacity(0);
|
||||||
|
for (index = 0; bullet.sprites[index]; index++)
|
||||||
|
bullet.sprites[index].SetOpacity(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fun start_fake_progress()
|
||||||
|
{
|
||||||
|
# Don't reset if we already have progress
|
||||||
|
if (global.max_progress == 0.0)
|
||||||
|
{
|
||||||
|
global.fake_progress = 0.0;
|
||||||
|
global.real_progress = 0.0;
|
||||||
|
update_progress_bar(0.0);
|
||||||
|
}
|
||||||
|
global.fake_progress_active = 1;
|
||||||
|
global.animation_frame = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stop_fake_progress()
|
||||||
|
{
|
||||||
|
global.fake_progress_active = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------- Dialogue --------------------------------
|
||||||
|
|
||||||
|
lock.image = Image("lock.png");
|
||||||
|
entry.image = Image("entry.png");
|
||||||
|
bullet.image = Image("bullet.png");
|
||||||
|
|
||||||
|
entry.sprite = Sprite(entry.image);
|
||||||
|
entry.x = Window.GetWidth()/2 - entry.image.GetWidth() / 2;
|
||||||
|
entry.y = logo.sprite.GetY() + logo.image.GetHeight() + 40;
|
||||||
|
entry.sprite.SetPosition(entry.x, entry.y, 10001);
|
||||||
|
entry.sprite.SetOpacity(0);
|
||||||
|
|
||||||
|
# Scale lock to be slightly shorter than entry field height
|
||||||
|
# Original lock is 84x96, entry height determines scale
|
||||||
|
lock_height = entry.image.GetHeight() * 0.8;
|
||||||
|
lock_scale = lock_height / 96;
|
||||||
|
lock_width = 84 * lock_scale;
|
||||||
|
|
||||||
|
scaled_lock = lock.image.Scale(lock_width, lock_height);
|
||||||
|
lock.sprite = Sprite(scaled_lock);
|
||||||
|
lock.x = entry.x - lock_width - 15;
|
||||||
|
lock.y = entry.y + entry.image.GetHeight()/2 - lock_height/2;
|
||||||
|
lock.sprite.SetPosition(lock.x, lock.y, 10001);
|
||||||
|
lock.sprite.SetOpacity(0);
|
||||||
|
|
||||||
|
# Bullet array
|
||||||
|
bullet.sprites = [];
|
||||||
|
|
||||||
|
fun display_normal_callback ()
|
||||||
|
{
|
||||||
|
hide_password_dialog();
|
||||||
|
|
||||||
|
# Get current mode
|
||||||
|
mode = Plymouth.GetMode();
|
||||||
|
|
||||||
|
# Only show progress bar for boot and resume modes
|
||||||
|
if ((mode == "boot" || mode == "resume") && global.password_shown == 1)
|
||||||
|
{
|
||||||
|
show_progress_bar();
|
||||||
|
start_fake_progress();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun display_password_callback (prompt, bullets)
|
||||||
|
{
|
||||||
|
global.password_shown = 1; # Mark that password dialog has been shown
|
||||||
|
|
||||||
|
# Reset progress when password dialog appears
|
||||||
|
stop_fake_progress();
|
||||||
|
hide_progress_bar();
|
||||||
|
global.max_progress = 0.0;
|
||||||
|
global.fake_progress = 0.0;
|
||||||
|
global.real_progress = 0.0;
|
||||||
|
show_password_dialog();
|
||||||
|
|
||||||
|
# Clear all bullets first
|
||||||
|
for (index = 0; bullet.sprites[index]; index++)
|
||||||
|
bullet.sprites[index].SetOpacity(0);
|
||||||
|
|
||||||
|
# Create and show bullets for current password (max 21)
|
||||||
|
max_bullets = 21;
|
||||||
|
bullets_to_show = bullets;
|
||||||
|
if (bullets_to_show > max_bullets)
|
||||||
|
bullets_to_show = max_bullets;
|
||||||
|
|
||||||
|
for (index = 0; index < bullets_to_show; index++)
|
||||||
|
{
|
||||||
|
if (!bullet.sprites[index])
|
||||||
|
{
|
||||||
|
# Scale bullet image to 7x7 pixels
|
||||||
|
scaled_bullet = bullet.image.Scale(7, 7);
|
||||||
|
bullet.sprites[index] = Sprite(scaled_bullet);
|
||||||
|
bullet.x = entry.x + 20 + index * (7 + 5);
|
||||||
|
bullet.y = entry.y + entry.image.GetHeight() / 2 - 3.5;
|
||||||
|
bullet.sprites[index].SetPosition(bullet.x, bullet.y, 10002);
|
||||||
|
}
|
||||||
|
bullet.sprites[index].SetOpacity(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Plymouth.SetDisplayNormalFunction(display_normal_callback);
|
||||||
|
Plymouth.SetDisplayPasswordFunction(display_password_callback);
|
||||||
|
|
||||||
|
#----------------------------------------- Progress Bar --------------------------------
|
||||||
|
|
||||||
|
progress_box.image = Image("progress_box.png");
|
||||||
|
progress_box.sprite = Sprite(progress_box.image);
|
||||||
|
|
||||||
|
progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2;
|
||||||
|
progress_box.y = entry.y + entry.image.GetHeight() / 2 - progress_box.image.GetHeight() / 2;
|
||||||
|
progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0);
|
||||||
|
progress_box.sprite.SetOpacity(0);
|
||||||
|
|
||||||
|
progress_bar.original_image = Image("progress_bar.png");
|
||||||
|
progress_bar.sprite = Sprite();
|
||||||
|
progress_bar.image = progress_bar.original_image.Scale(1, progress_bar.original_image.GetHeight());
|
||||||
|
|
||||||
|
progress_bar.x = Window.GetWidth() / 2 - progress_bar.original_image.GetWidth() / 2;
|
||||||
|
progress_bar.y = progress_box.y + (progress_box.image.GetHeight() - progress_bar.original_image.GetHeight()) / 2;
|
||||||
|
progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1);
|
||||||
|
progress_bar.sprite.SetOpacity(0);
|
||||||
|
|
||||||
|
fun progress_callback (duration, progress)
|
||||||
|
{
|
||||||
|
global.real_progress = progress;
|
||||||
|
|
||||||
|
# If real progress is above limit, stop fake progress and use real progress
|
||||||
|
if (progress > global.fake_progress_limit)
|
||||||
|
{
|
||||||
|
stop_fake_progress();
|
||||||
|
update_progress_bar(progress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Plymouth.SetBootProgressFunction(progress_callback);
|
||||||
|
|
||||||
|
#----------------------------------------- Quit --------------------------------
|
||||||
|
|
||||||
|
fun quit_callback ()
|
||||||
|
{
|
||||||
|
logo.sprite.SetOpacity (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Plymouth.SetQuitFunction(quit_callback);
|
||||||
|
|
||||||
|
#----------------------------------------- Message --------------------------------
|
||||||
|
|
||||||
|
message_sprite = Sprite();
|
||||||
|
message_sprite.SetPosition(10, 10, 10000);
|
||||||
|
|
||||||
|
fun display_message_callback (text)
|
||||||
|
{
|
||||||
|
my_image = Image.Text(text, 1, 1, 1);
|
||||||
|
message_sprite.SetImage(my_image);
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hide_message_callback (text)
|
||||||
|
{
|
||||||
|
message_sprite.SetOpacity(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Plymouth.SetDisplayMessageFunction (display_message_callback);
|
||||||
|
Plymouth.SetHideMessageFunction (hide_message_callback);
|
||||||
|
|||||||
BIN
assets/plymouth/progress_bar.png
Normal file
|
After Width: | Height: | Size: 314 B |
BIN
assets/plymouth/progress_box.png
Normal file
|
After Width: | Height: | Size: 314 B |
99
assets/sddm/nomarchy/Main.qml
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import SddmComponents 2.0
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: root
|
||||||
|
width: 640
|
||||||
|
height: 480
|
||||||
|
color: "#000000"
|
||||||
|
|
||||||
|
property string currentUser: userModel.lastUser
|
||||||
|
property int sessionIndex: {
|
||||||
|
for (var i = 0; i < sessionModel.rowCount(); i++) {
|
||||||
|
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
|
||||||
|
if (name.indexOf("uwsm") !== -1)
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
return sessionModel.lastIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: sddm
|
||||||
|
function onLoginFailed() {
|
||||||
|
errorMessage.text = "Login failed"
|
||||||
|
password.text = ""
|
||||||
|
password.focus = true
|
||||||
|
}
|
||||||
|
function onLoginSucceeded() {
|
||||||
|
errorMessage.text = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Column {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
spacing: root.height * 0.04
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
Image {
|
||||||
|
source: "logo.svg"
|
||||||
|
width: root.width * 0.35
|
||||||
|
height: Math.round(width * sourceSize.height / sourceSize.width)
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
spacing: root.width * 0.007
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: "\uf023"
|
||||||
|
color: "#ffffff"
|
||||||
|
font.family: "JetBrainsMono Nerd Font"
|
||||||
|
font.pixelSize: root.height * 0.025
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
width: root.width * 0.17
|
||||||
|
height: root.height * 0.04
|
||||||
|
color: "#000000"
|
||||||
|
border.color: "#ffffff"
|
||||||
|
border.width: 1
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
TextInput {
|
||||||
|
id: password
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: root.height * 0.008
|
||||||
|
verticalAlignment: TextInput.AlignVCenter
|
||||||
|
echoMode: TextInput.Password
|
||||||
|
font.family: "JetBrainsMono Nerd Font"
|
||||||
|
font.pixelSize: root.height * 0.02
|
||||||
|
font.letterSpacing: root.height * 0.004
|
||||||
|
passwordCharacter: "\u2022"
|
||||||
|
color: "#ffffff"
|
||||||
|
focus: true
|
||||||
|
|
||||||
|
Keys.onPressed: {
|
||||||
|
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||||
|
sddm.login(root.currentUser, password.text, root.sessionIndex)
|
||||||
|
event.accepted = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: errorMessage
|
||||||
|
text: ""
|
||||||
|
color: "#f7768e"
|
||||||
|
font.family: "JetBrainsMono Nerd Font"
|
||||||
|
font.pixelSize: root.height * 0.018
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: password.forceActiveFocus()
|
||||||
|
}
|
||||||
64
assets/sddm/nomarchy/logo.svg
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="157.40488mm"
|
||||||
|
height="162.48518mm"
|
||||||
|
viewBox="0 0 157.40488 162.48518"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||||
|
sodipodi:docname="icon.svg"
|
||||||
|
inkscape:export-filename="logo.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="0.82803284"
|
||||||
|
inkscape:cx="216.175"
|
||||||
|
inkscape:cy="452.27675"
|
||||||
|
inkscape:window-width="1914"
|
||||||
|
inkscape:window-height="1012"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="layer1"><inkscape:page
|
||||||
|
x="0"
|
||||||
|
y="-1.1741086e-21"
|
||||||
|
width="157.40488"
|
||||||
|
height="162.48518"
|
||||||
|
id="page2"
|
||||||
|
margin="0"
|
||||||
|
bleed="0" /></sodipodi:namedview><defs
|
||||||
|
id="defs1" /><g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-28.332214,-25.599269)"><g
|
||||||
|
id="g4"
|
||||||
|
transform="translate(3.1953242,-22.686801)"
|
||||||
|
style="fill:#000088;fill-opacity:1"><path
|
||||||
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 25.136891,85.823024 25.557592,210.77125 88.452409,174.38061 67.417351,160.49747 57.110174,166.38729 V 105.80633 Z"
|
||||||
|
id="path1" /><path
|
||||||
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 67.728991,112.41131 182.54178,185.60757 153.16137,202.85259 67.830432,148.17947 Z"
|
||||||
|
id="path2" /><path
|
||||||
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 139.74857,145.88014 140.00405,110.4959 54.800856,56.333749 25.675926,73.32329 Z"
|
||||||
|
id="path3" /><path
|
||||||
|
style="fill:#000088;fill-opacity:1;stroke-width:0.264583"
|
||||||
|
d="M 182.2863,172.70573 V 48.286069 l -62.59305,36.406166 20.82177,13.668277 10.21927,-5.74834 0.12774,60.165978 z"
|
||||||
|
id="path4" /></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
6
assets/sddm/nomarchy/metadata.desktop
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[SddmGreeterTheme]
|
||||||
|
Name=Nomarchy
|
||||||
|
Description=Minimal terminal-style login theme matching the Limine bootloader aesthetic
|
||||||
|
Author=Nomarchy
|
||||||
|
Type=sddm-theme
|
||||||
|
Version=1.0
|
||||||
1
assets/sddm/nomarchy/theme.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[General]
|
||||||
47
assets/themed/alacritty.toml.tpl
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
[colors.primary]
|
||||||
|
background = "{{ background }}"
|
||||||
|
foreground = "{{ foreground }}"
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
text = "{{ background }}"
|
||||||
|
cursor = "{{ cursor }}"
|
||||||
|
|
||||||
|
[colors.vi_mode_cursor]
|
||||||
|
text = "{{ background }}"
|
||||||
|
cursor = "{{ cursor }}"
|
||||||
|
|
||||||
|
[colors.search.matches]
|
||||||
|
foreground = "{{ background }}"
|
||||||
|
background = "{{ color3 }}"
|
||||||
|
|
||||||
|
[colors.search.focused_match]
|
||||||
|
foreground = "{{ background }}"
|
||||||
|
background = "{{ color1 }}"
|
||||||
|
|
||||||
|
[colors.footer_bar]
|
||||||
|
foreground = "{{ background }}"
|
||||||
|
background = "{{ foreground }}"
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
text = "{{ selection_foreground }}"
|
||||||
|
background = "{{ selection_background }}"
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "{{ color0 }}"
|
||||||
|
red = "{{ color1 }}"
|
||||||
|
green = "{{ color2 }}"
|
||||||
|
yellow = "{{ color3 }}"
|
||||||
|
blue = "{{ color4 }}"
|
||||||
|
magenta = "{{ color5 }}"
|
||||||
|
cyan = "{{ color6 }}"
|
||||||
|
white = "{{ color7 }}"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "{{ color8 }}"
|
||||||
|
red = "{{ color9 }}"
|
||||||
|
green = "{{ color10 }}"
|
||||||
|
yellow = "{{ color11 }}"
|
||||||
|
blue = "{{ color12 }}"
|
||||||
|
magenta = "{{ color13 }}"
|
||||||
|
cyan = "{{ color14 }}"
|
||||||
|
white = "{{ color15 }}"
|
||||||
83
assets/themed/btop.theme.tpl
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||||
|
theme[main_bg]="{{ background }}"
|
||||||
|
|
||||||
|
# Main text color
|
||||||
|
theme[main_fg]="{{ foreground }}"
|
||||||
|
|
||||||
|
# Title color for boxes
|
||||||
|
theme[title]="{{ foreground }}"
|
||||||
|
|
||||||
|
# Highlight color for keyboard shortcuts
|
||||||
|
theme[hi_fg]="{{ accent }}"
|
||||||
|
|
||||||
|
# Background color of selected item in processes box
|
||||||
|
theme[selected_bg]="{{ color8 }}"
|
||||||
|
|
||||||
|
# Foreground color of selected item in processes box
|
||||||
|
theme[selected_fg]="{{ accent }}"
|
||||||
|
|
||||||
|
# Color of inactive/disabled text
|
||||||
|
theme[inactive_fg]="{{ color8 }}"
|
||||||
|
|
||||||
|
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||||
|
theme[graph_text]="{{ foreground }}"
|
||||||
|
|
||||||
|
# Background color of the percentage meters
|
||||||
|
theme[meter_bg]="{{ color8 }}"
|
||||||
|
|
||||||
|
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||||
|
theme[proc_misc]="{{ foreground }}"
|
||||||
|
|
||||||
|
# CPU, Memory, Network, Proc box outline colors
|
||||||
|
theme[cpu_box]="{{ color5 }}"
|
||||||
|
theme[mem_box]="{{ color2 }}"
|
||||||
|
theme[net_box]="{{ color1 }}"
|
||||||
|
theme[proc_box]="{{ accent }}"
|
||||||
|
|
||||||
|
# Box divider line and small boxes line color
|
||||||
|
theme[div_line]="{{ color8 }}"
|
||||||
|
|
||||||
|
# Temperature graph color (Green -> Yellow -> Red)
|
||||||
|
theme[temp_start]="{{ color2 }}"
|
||||||
|
theme[temp_mid]="{{ color3 }}"
|
||||||
|
theme[temp_end]="{{ color1 }}"
|
||||||
|
|
||||||
|
# CPU graph colors (Teal -> Lavender)
|
||||||
|
theme[cpu_start]="{{ color6 }}"
|
||||||
|
theme[cpu_mid]="{{ color4 }}"
|
||||||
|
theme[cpu_end]="{{ color5 }}"
|
||||||
|
|
||||||
|
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||||
|
theme[free_start]="{{ color5 }}"
|
||||||
|
theme[free_mid]="{{ color4 }}"
|
||||||
|
theme[free_end]="{{ color6 }}"
|
||||||
|
|
||||||
|
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||||
|
theme[cached_start]="{{ color4 }}"
|
||||||
|
theme[cached_mid]="{{ color6 }}"
|
||||||
|
theme[cached_end]="{{ color5 }}"
|
||||||
|
|
||||||
|
# Mem/Disk available meter (Peach -> Red)
|
||||||
|
theme[available_start]="{{ color3 }}"
|
||||||
|
theme[available_mid]="{{ color1 }}"
|
||||||
|
theme[available_end]="{{ color1 }}"
|
||||||
|
|
||||||
|
# Mem/Disk used meter (Green -> Sky)
|
||||||
|
theme[used_start]="{{ color2 }}"
|
||||||
|
theme[used_mid]="{{ color6 }}"
|
||||||
|
theme[used_end]="{{ color4 }}"
|
||||||
|
|
||||||
|
# Download graph colors (Peach -> Red)
|
||||||
|
theme[download_start]="{{ color3 }}"
|
||||||
|
theme[download_mid]="{{ color1 }}"
|
||||||
|
theme[download_end]="{{ color1 }}"
|
||||||
|
|
||||||
|
# Upload graph colors (Green -> Sky)
|
||||||
|
theme[upload_start]="{{ color2 }}"
|
||||||
|
theme[upload_mid]="{{ color6 }}"
|
||||||
|
theme[upload_end]="{{ color4 }}"
|
||||||
|
|
||||||
|
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||||
|
theme[process_start]="{{ color6 }}"
|
||||||
|
theme[process_mid]="{{ color4 }}"
|
||||||
|
theme[process_end]="{{ color5 }}"
|
||||||
1
assets/themed/chromium.theme.tpl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{ background_rgb }}
|
||||||
22
assets/themed/ghostty.conf.tpl
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
background = {{ background }}
|
||||||
|
foreground = {{ foreground }}
|
||||||
|
cursor-color = {{ cursor }}
|
||||||
|
selection-background = {{ selection_background }}
|
||||||
|
selection-foreground = {{ selection_foreground }}
|
||||||
|
|
||||||
|
palette = 0={{ color0 }}
|
||||||
|
palette = 1={{ color1 }}
|
||||||
|
palette = 2={{ color2 }}
|
||||||
|
palette = 3={{ color3 }}
|
||||||
|
palette = 4={{ color4 }}
|
||||||
|
palette = 5={{ color5 }}
|
||||||
|
palette = 6={{ color6 }}
|
||||||
|
palette = 7={{ color7 }}
|
||||||
|
palette = 8={{ color8 }}
|
||||||
|
palette = 9={{ color9 }}
|
||||||
|
palette = 10={{ color10 }}
|
||||||
|
palette = 11={{ color11 }}
|
||||||
|
palette = 12={{ color12 }}
|
||||||
|
palette = 13={{ color13 }}
|
||||||
|
palette = 14={{ color14 }}
|
||||||
|
palette = 15={{ color15 }}
|
||||||
94
assets/themed/hyprland-preview-share-picker.css.tpl
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
@define-color foreground {{ foreground }};
|
||||||
|
@define-color background {{ background }};
|
||||||
|
@define-color accent {{ accent }};
|
||||||
|
@define-color muted {{ color8 }};
|
||||||
|
@define-color card_bg {{ color0 }};
|
||||||
|
@define-color text_dark {{ background }};
|
||||||
|
@define-color accent_hover {{ color12 }};
|
||||||
|
@define-color selected_tab {{ accent }};
|
||||||
|
@define-color text {{ foreground }};
|
||||||
|
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
font-family: JetBrains Mono NF;
|
||||||
|
color: @foreground;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.window {
|
||||||
|
background: alpha(@background, 0.95);
|
||||||
|
border: solid 2px @accent;
|
||||||
|
margin: 4px;
|
||||||
|
padding: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tabs {
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
tabs > tab {
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-label {
|
||||||
|
color: @text;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
tabs > tab:checked > .tab-label, tabs > tab:active > .tab-label {
|
||||||
|
text-decoration: underline currentColor;
|
||||||
|
color: @selected_tab;
|
||||||
|
}
|
||||||
|
|
||||||
|
tabs > tab:focus > .tab-label {
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-label {
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
flowboxchild > .card, button > .card {
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
border: solid 2px transparent;
|
||||||
|
border-color: @background;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: @card_bg;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
flowboxchild:hover > .card, button:hover > .card, flowboxchild:active > .card, flowboxchild:selected > .card, button:active > .card, button:selected > .card, button:focus > .card {
|
||||||
|
border: solid 2px @accent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.region-button {
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: @accent;
|
||||||
|
color: @text_dark;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.region-button > label {
|
||||||
|
color: @text_dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
.region-button:not(:disabled):hover, .region-button:not(:disabled):focus {
|
||||||
|
background-color: @accent_hover;
|
||||||
|
color: @text_dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
.region-button:disabled {
|
||||||
|
background-color: @muted;
|
||||||
|
color: @background;
|
||||||
|
}
|
||||||
9
assets/themed/hyprland.conf.tpl
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
$activeBorderColor = rgb({{ accent_strip }})
|
||||||
|
|
||||||
|
general {
|
||||||
|
col.active_border = $activeBorderColor
|
||||||
|
}
|
||||||
|
|
||||||
|
group {
|
||||||
|
col.border_active = $activeBorderColor
|
||||||
|
}
|
||||||
5
assets/themed/hyprlock.conf.tpl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
$color = rgba({{ background_rgb }}, 1.0)
|
||||||
|
$inner_color = rgba({{ background_rgb }}, 0.8)
|
||||||
|
$outer_color = rgba({{ foreground_rgb }}, 1.0)
|
||||||
|
$font_color = rgba({{ foreground_rgb }}, 1.0)
|
||||||
|
$check_color = rgba({{ accent_rgb }}, 1.0)
|
||||||
1
assets/themed/keyboard.rgb.tpl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{ accent }}
|
||||||
27
assets/themed/kitty.conf.tpl
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
foreground {{ foreground }}
|
||||||
|
background {{ background }}
|
||||||
|
selection_foreground {{ selection_foreground }}
|
||||||
|
selection_background {{ selection_background }}
|
||||||
|
|
||||||
|
cursor {{ cursor }}
|
||||||
|
cursor_text_color {{ background }}
|
||||||
|
|
||||||
|
active_border_color {{ accent }}
|
||||||
|
active_tab_background {{ accent }}
|
||||||
|
|
||||||
|
color0 {{ color0 }}
|
||||||
|
color1 {{ color1 }}
|
||||||
|
color2 {{ color2 }}
|
||||||
|
color3 {{ color3 }}
|
||||||
|
color4 {{ color4 }}
|
||||||
|
color5 {{ color5 }}
|
||||||
|
color6 {{ color6 }}
|
||||||
|
color7 {{ color7 }}
|
||||||
|
color8 {{ color8 }}
|
||||||
|
color9 {{ color9 }}
|
||||||
|
color10 {{ color10 }}
|
||||||
|
color11 {{ color11 }}
|
||||||
|
color12 {{ color12 }}
|
||||||
|
color13 {{ color13 }}
|
||||||
|
color14 {{ color14 }}
|
||||||
|
color15 {{ color15 }}
|
||||||
5
assets/themed/mako.ini.tpl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
include=~/.config/nomarchy/default/mako/core.ini
|
||||||
|
|
||||||
|
text-color={{ foreground }}
|
||||||
|
border-color={{ accent }}
|
||||||
|
background-color={{ background }}
|
||||||
99
assets/themed/obsidian.css.tpl
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/* Nomarchy Theme for Obsidian */
|
||||||
|
|
||||||
|
.theme-dark, .theme-light {
|
||||||
|
/* Core colors */
|
||||||
|
--background-primary: {{ background }};
|
||||||
|
--background-primary-alt: {{ background }};
|
||||||
|
--background-secondary: {{ background }};
|
||||||
|
--background-secondary-alt: {{ background }};
|
||||||
|
--text-normal: {{ foreground }};
|
||||||
|
|
||||||
|
/* Selection colors */
|
||||||
|
--text-selection: {{ selection_background }};
|
||||||
|
|
||||||
|
/* Border color */
|
||||||
|
--background-modifier-border: {{ color8 }};
|
||||||
|
|
||||||
|
/* Semantic heading colors */
|
||||||
|
--text-title-h1: {{ color1 }};
|
||||||
|
--text-title-h2: {{ color2 }};
|
||||||
|
--text-title-h3: {{ color3 }};
|
||||||
|
--text-title-h4: {{ color4 }};
|
||||||
|
--text-title-h5: {{ color5 }};
|
||||||
|
--text-title-h6: {{ color5 }};
|
||||||
|
|
||||||
|
/* Links and accents */
|
||||||
|
--text-link: {{ color4 }};
|
||||||
|
--text-accent: {{ accent }};
|
||||||
|
--text-accent-hover: {{ accent }};
|
||||||
|
--interactive-accent: {{ accent }};
|
||||||
|
--interactive-accent-hover: {{ accent }};
|
||||||
|
|
||||||
|
/* Muted text */
|
||||||
|
--text-muted: color-mix(in srgb, {{ foreground }} 70%, transparent);
|
||||||
|
--text-faint: color-mix(in srgb, {{ foreground }} 55%, transparent);
|
||||||
|
|
||||||
|
/* Code */
|
||||||
|
--code-normal: {{ color6 }};
|
||||||
|
|
||||||
|
/* Errors and success */
|
||||||
|
--text-error: {{ color1 }};
|
||||||
|
--text-error-hover: {{ color1 }};
|
||||||
|
--text-success: {{ color2 }};
|
||||||
|
|
||||||
|
/* Tags */
|
||||||
|
--tag-color: {{ color6 }};
|
||||||
|
--tag-background: {{ color8 }};
|
||||||
|
|
||||||
|
/* Graph */
|
||||||
|
--graph-line: {{ color8 }};
|
||||||
|
--graph-node: {{ accent }};
|
||||||
|
--graph-node-focused: {{ color4 }};
|
||||||
|
--graph-node-tag: {{ color6 }};
|
||||||
|
--graph-node-attachment: {{ color2 }};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Headers */
|
||||||
|
.cm-header-1, .markdown-rendered h1 { color: var(--text-title-h1); }
|
||||||
|
.cm-header-2, .markdown-rendered h2 { color: var(--text-title-h2); }
|
||||||
|
.cm-header-3, .markdown-rendered h3 { color: var(--text-title-h3); }
|
||||||
|
.cm-header-4, .markdown-rendered h4 { color: var(--text-title-h4); }
|
||||||
|
.cm-header-5, .markdown-rendered h5 { color: var(--text-title-h5); }
|
||||||
|
.cm-header-6, .markdown-rendered h6 { color: var(--text-title-h6); }
|
||||||
|
|
||||||
|
/* Code blocks */
|
||||||
|
.markdown-rendered code {
|
||||||
|
color: {{ color6 }};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Syntax highlighting */
|
||||||
|
.cm-s-obsidian span.cm-keyword { color: {{ color1 }}; }
|
||||||
|
.cm-s-obsidian span.cm-string { color: {{ color2 }}; }
|
||||||
|
.cm-s-obsidian span.cm-number { color: {{ color3 }}; }
|
||||||
|
.cm-s-obsidian span.cm-comment { color: {{ color8 }}; }
|
||||||
|
.cm-s-obsidian span.cm-operator { color: {{ color4 }}; }
|
||||||
|
.cm-s-obsidian span.cm-def { color: {{ color4 }}; }
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
.markdown-rendered a {
|
||||||
|
color: var(--text-link);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blockquotes */
|
||||||
|
.markdown-rendered blockquote {
|
||||||
|
border-left-color: {{ accent }};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active elements */
|
||||||
|
.workspace-leaf.mod-active .workspace-leaf-header-title {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-file-title.is-active {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search results */
|
||||||
|
.search-result-file-title {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
}
|
||||||
5
assets/themed/swayosd.css.tpl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
@define-color background-color {{ background }};
|
||||||
|
@define-color border-color {{ foreground }};
|
||||||
|
@define-color label {{ foreground }};
|
||||||
|
@define-color image {{ foreground }};
|
||||||
|
@define-color progress {{ accent }};
|
||||||
6
assets/themed/walker.css.tpl
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
@define-color selected-text {{ accent }};
|
||||||
|
@define-color text {{ foreground }};
|
||||||
|
@define-color base {{ background }};
|
||||||
|
@define-color border {{ foreground }};
|
||||||
|
@define-color foreground {{ foreground }};
|
||||||
|
@define-color background {{ background }};
|
||||||
2
assets/themed/waybar.css.tpl
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@define-color foreground {{ foreground }};
|
||||||
|
@define-color background {{ background }};
|
||||||
|
Before Width: | Height: | Size: 652 KiB After Width: | Height: | Size: 652 KiB |
|
Before Width: | Height: | Size: 308 KiB After Width: | Height: | Size: 308 KiB |
|
Before Width: | Height: | Size: 353 KiB After Width: | Height: | Size: 353 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 273 KiB After Width: | Height: | Size: 273 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 3.8 MiB |
|
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 374 KiB |
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 315 KiB |
|
Before Width: | Height: | Size: 365 KiB After Width: | Height: | Size: 365 KiB |
|
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 287 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 204 KiB |
|
Before Width: | Height: | Size: 3.9 MiB After Width: | Height: | Size: 3.9 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 434 KiB After Width: | Height: | Size: 434 KiB |
|
Before Width: | Height: | Size: 561 KiB After Width: | Height: | Size: 561 KiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 321 KiB After Width: | Height: | Size: 321 KiB |
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 435 KiB After Width: | Height: | Size: 435 KiB |