Skip to content

Merge NothingLess improvements into Ambxst#196

Open
leriart wants to merge 3 commits into
Axenide:mainfrom
leriart:main
Open

Merge NothingLess improvements into Ambxst#196
leriart wants to merge 3 commits into
Axenide:mainfrom
leriart:main

Conversation

@leriart

@leriart leriart commented May 26, 2026

Copy link
Copy Markdown

Description

This PR merges performance and feature improvements originally developed in the NothingLess fork back into Ambxst. All improvements are fully rebranded, with zero references to NothingLess remaining. The changes are purely additive and compatible with upstream.


What's new

Free Layout — Windows-style floating desktop

New layout mode that floats all windows with edge snap, grid alignment, show desktop, and Smart Resize Anchors. Switchable from the dashboard alongside Dwindle, Master, and Scrolling.

  • compositor.js: 7 new properties (freeGridSize, freeSnapSensitivity, freeSnapEdges, freeSnapCenter, freeSnapGaps, freeTileByDefault, freeMaximizedByDefault)
  • CompositorConfig.qml: windowrule float on activation, floatAllProcess/tileAllProcess for existing windows
  • KeybindActions.js: 12 snap actions (left, right, top, bottom, center, maximize, restore, 4 quarters)

Dynamic Island

Compact notification and metrics display embedded in the bar, activated when barMode=dynamic and notchTheme=island.

  • IslandContent.qml — island pill containing clock, media, metrics
  • Notch.qml — scale animation (0.9→1.0), island-bar merge, compact idle height (36px)

Task tray

Full system tray with icon show/hide, context menus, and dynamic recalc.

  • TaskTray.qml, tasktray/qmldir — new module
  • bar.js: taskTrayEnabled, taskTrayShowToggle, taskTrayAlwaysVisible

M3 Animation System

Complete Material 3 animation profiles with easing curves, durations, and convenience helpers. Three profiles: M3 (default), Windows Classic, macOS.

  • Anim.qml — brand new singleton
  • 200+ files updated from Config.animDuration to Anim.standardNormal/Anim.easing()

Dynamic Color (Material You)

Wallpaper-based color quantization via GStreamer. Generates M3 color aliases (onSurface, onPrimaryContainer, etc.) and adjusts vibrancy dynamically.

  • Colors.qmlwallpaperQuantizer, _vibrancyAlpha
  • Styling.qml — M3 Typography system (m3HeadlineLarge, m3TitleMedium, etc.)

Expanded compositor configuration

From ~25 properties to 100+, covering:

  • Opacity & Dim: activeOpacity, inactiveOpacity, fullscreenOpacity, dimInactive, dimStrength, dimAround, dimSpecial
  • Resize: resizeOnBorder, extendBorderGrabArea, hoverIconOnBorder, roundedPower
  • Snap assistant: snapEnabled, snapWindowGap, snapMonitorGap, snapBorderOverlap, snapRespectGaps
  • Input: keyboard layout, repeat rate/delay, mouse sensitivity/accel, natural scroll, touchpad (8 props), cursor (8 props)
  • Gestures: 10 swipe gesture properties
  • Layout-specific: 10 dwindle, 8 master, 6 scrolling props
  • XWayland: 3 properties
  • Animations: animationsEnabled
  • Smart Resize Anchors: smartResizeAnchors toggle

Config sync with hyprland.conf/lua

sync-hyprland-conf.py reads compositor.json and binds.json, generating native hyprland.conf and hyprland.lua with proper 0.53+ windowrule syntax. Also syncs axctl.toml for daemon consistency.

Monitor configuration panel

Full GUI for monitor setup: drag-and-drop arrangement, resolution, refresh rate, scale, transform. Backed by monitors_writer.py and MonitorsWriter.qml.

Axctl daemon health system

  • 500ms reconnect (was 1000ms)
  • Daemon auto-restart after 3 subscribe failures
  • configReloaded event detection
  • Explicit -c <configPath> flag
  • monitorsUpdated(), subscribeReady(), subscribeFailed(), configReloaded() signals

CLI expansion

9 → 20+ commands: reload, quit, screen on|off, suspend, VolumeUp/Down/Mute, MicMute, Caffeine, Gamemode, Nightlight, run <module>. Install now supports --lua and --conf dual mode.

Overview improvements

  • Fill tiling layout
  • Drag-drop window reordering
  • Per-monitor window positioning
  • Unified input handling
  • Live hyprctl refresh
  • Animation fixes

New presets

Preset Files Style
Dot Matrix 8 Dot-matrix aesthetic
Nothing 10 Monochrome + red accents, Ndot font
Pure Monochrome 8 Monochrome only
Minimal 2 Minimal theme

New services

Service Purpose
IpcPool.qml IPC coalescer (50ms debounce) — prevents compositor overload
MonitorsWriter.qml QML backend for monitors_writer.py
PerMonitorConfig.qml Per-monitor bar/notch/dock positioning
WlrToplevelMapper.qml Bridge between hyprctl data and WlrToplevel for ScreencopyView
DeepSeekApiStrategy.qml DeepSeek AI provider
BatteryAlertService.qml Low battery notifications, auto power save, charge limit

New scripts

Script Purpose
sync-hyprland-conf.py Sync config to hyprland.conf/lua + axctl.toml
monitors_writer.py Monitor config backend with live reload
ambxst-fps MangoHud FPS monitoring tool
apply-config.sh Apply compositor config via hyprctl dispatch
mangohud-patch/build-mangohud.sh Build patched MangoHud from source
toggle-metrics.sh Toggle notch metrics overlay
ambxst-resize Window resize tool
bluetooth_helper.py Bluetooth pairing helper
fps_monitor.py Real-time FPS monitor
fps_preload.c C preloader for FPS hooking
gsr-fps.sh GPU Screen Recorder FPS script

Performance optimizations

  • Conditional offscreen layer: layer.enabled only when content visible (was always on)
  • IpcPool: 50ms IPC coalescing prevents compositor flooding
  • Adjacent monitor detection: bar hover region adjusts when a monitor is adjacent
  • Show/hide delays: 200ms show, 800ms hide (was 1000ms)

Housekeeping

  • Replaced boot splash with Ambxst logo SVG (fade in/out)
  • Restored original upstream README, AGENTS.md, and logos
  • Removed all NothingLess branding and personal dev paths
  • Cleaned up orphan assets

Files changed

Category Files
Services BatteryAlertService.qml, Calculator.qml, DeepSeekApiStrategy.qml, IpcPool.qml, MonitorsWriter.qml, MusicRecognizer.qml, PerMonitorConfig.qml, ScreenTranslation.qml, WlrToplevelMapper.qml
Bar IslandContent.qml, TaskTray.qml, tasktray/qmldir, clock/qmldir, systray/qmldir, workspaces/qmldir, Bar.qml
Components StateLayer.qml, Surface.qml, RegionPicker.qml
Theme Anim.qml
Dashboard MonitorArrangementView.qml, MonitorCard.qml, MonitorSettingsForm.qml, MonitorsPanel.qml, ConfigToggleRow.qml, MetricsConfigPanel.qml
Shaders interpol.frag/.vert/.qsb
Presets Dot Matrix (8), Nothing (10), Pure Monochrome (8), Minimal (2)
Colors assets/colors/Nothing/ (4 files)
Fonts MaterialSymbolsRounded-Variable.ttf, Ndot-57-Aligned.ttf
Scripts ambxst-fps, ambxst-resize, apply-config.sh, bluetooth_helper.py, fps_monitor.py, fps_preload.c, gsr-fps.sh, mangohud-patch/build-mangohud.sh, monitors_writer.py, sync-hyprland-conf.py, toggle-metrics.sh
Config hyprland.example.conf
Nix Updated flake.nix, flake.lock

Removed files:

  • mpvpaper.sh, MpvShaderGenerator.js (replaced by QtMultimedia)

Does this change any existing behavior?

Area Before After
Video wallpaper mpv-based (external process) QtMultimedia + FFmpeg (in-process, hardware-accelerated)
Rendering backend Fixed OpenGL Configurable: OpenGL (default) or Vulkan with threaded render loop
FPS monitoring Not available Built-in via ambxst-fps + notch metrics overlay
Systray Static icons Dynamic expansion with animation
Monitor config Manual editing monitors_writer.py with hyprctl live reload
Overview Basic workspace view Drag-drop, fill tiling, per-monitor, live refresh
Nix build Minimal Quickshell Quickshell with KDE Kirigami support
Animations Config.animDuration global M3 profiles with easing curves
Config sync None sync-hyprland-conf.py auto-generates hyprland.conf/lua

@leriart leriart force-pushed the main branch 4 times, most recently from 0866a21 to a29a62c Compare May 26, 2026 08:06
…g-drop, per-monitor positioning, animation fixes
leriart added 2 commits May 27, 2026 10:32
- Reemplazados assets de branding con originales de Ambxst
- Renombrado NothingLess → Ambxst en todo el codigo
- README original de Ambxst
- Conservados presets de Leriart (Dot Matrix, Nothing, Pure Monochrome, Minimal)
- Conservadas todas las features nuevas: Free Layout, Island Mode, Task Tray,
  M3 Animations, Monitor Config, Snap Assistant, etc.
- Splash con logo de Ambxst
- MonitorCard: remove monitorSyncDebounce restart from onMonitorsChanged
  to break the infinite sync -> reload -> monitorsChanged loop
- CompositorConfig: remove redundant globalStateConnections that caused
  double dispatch, double file write, and double axctl reload
- CompositorTomlWriter: remove stale [[monitors]] generation; the
  monitors_writer.py now writes correct data to axctl.toml
- CompositorTomlWriter: preserve existing [[monitors]] sections when
  writing toml to avoid nuking monitors_writer.py's changes
- MonitorsWriter: stop calling CompositorTomlWriter.writeTomlFile()
  after sync, which overwrote the entire toml file
- monitors_writer.py: add write_axctl_monitors() to write correct
  [[monitors]] to axctl.toml directly
- AxctlService: bypass axctl v0.0.19 broken 'window move-to-workspace-silent'
  subcommand; use hyprctl dispatch directly instead
- Overview + ScrollingWorkspace: replace instant Qt.callLater refresh
  after drag-drop with a 200ms delayed timer to let hyprctl process moves
- All comments in English, no emojis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant