fix: resolve VM startup failures, broken Hyprland functionality, and theme integration
- Fix QEMU syntax and root filesystem conflicts in vm-guest.nix. - Repair numerous broken relative paths and imports across the codebase. - Set 'summer-night' as the default distro theme with full branding integration. - Implement declarative system-wide font installation including the 'nomarchy' font. - Fix Waybar startup by dynamically generating theme-aware CSS. - Restore Hyprland keybindings (Super+Return, Super+Space) and wallpaper loading. - Add missing scripts: nomarchy-launch-walker, nomarchy-toggle-waybar, nomarchy-refresh-config. - Enable UWSM and correctly disable conflicting Hyprland systemd services.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
activeThemeName = config.nomarchy.system.theme;
|
||||
currentPalette = nomarchyLib.getPalette activeThemeName;
|
||||
|
||||
@@ -11,7 +11,7 @@ let
|
||||
# Detect light mode from theme name or palette
|
||||
isLightTheme = nomarchyLib.isThemeLightMode {
|
||||
themeName = activeThemeName;
|
||||
assetsPath = ../../assets/themes;
|
||||
assetsPath = ../../themes/palettes;
|
||||
};
|
||||
|
||||
browserPolicy = {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
themeConfig = builtins.fromJSON (builtins.readFile (../../assets/themes + "/${config.nomarchy.theme}/vscode.json"));
|
||||
themeConfig = builtins.fromJSON (builtins.readFile (../../themes/palettes + "/${config.nomarchy.theme}/vscode.json"));
|
||||
|
||||
# Development extensions that match the system theme
|
||||
devExtensions = with pkgs.vscode-extensions; [
|
||||
|
||||
@@ -39,6 +39,7 @@ in
|
||||
../core/home/bash.nix
|
||||
];
|
||||
|
||||
|
||||
colorScheme = lib.mkDefault (nomarchyLib.getColorScheme config.nomarchy.theme);
|
||||
|
||||
# Enable neovim program module (required for stylix integration)
|
||||
@@ -73,15 +74,13 @@ in
|
||||
xmlstarlet
|
||||
mise
|
||||
gum # TUI components for scripts
|
||||
xdg-terminal-exec
|
||||
swaybg
|
||||
rofi-wayland
|
||||
|
||||
# Theming
|
||||
yaru-theme
|
||||
everforest-gtk-variant
|
||||
bibata-cursors
|
||||
|
||||
# Fonts
|
||||
nerd-fonts.jetbrains-mono
|
||||
nerd-fonts.roboto-mono
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.ubuntu-mono
|
||||
] ++ userPackages);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Application bindings
|
||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(nomarchy-cmd-terminal-cwd)"
|
||||
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(nomarchy-cmd-terminal-cwd)" bash -c "tmux attach || tmux new -s Work"
|
||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec || uwsm-app -- alacritty
|
||||
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec bash -c "tmux attach || tmux new -s Work"
|
||||
bindd = SUPER SHIFT, RETURN, Browser, exec, nomarchy-launch-browser
|
||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
||||
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(nomarchy-cmd-terminal-cwd)"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
source = ~/.config/nomarchy/default/hypr/envs.conf
|
||||
|
||||
# Keybindings
|
||||
source = ~/.config/hypr/bindings.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/media.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/clipboard.conf
|
||||
source = ~/.config/nomarchy/default/hypr/bindings/tiling-v2.conf
|
||||
@@ -31,7 +32,6 @@ source = ~/.config/nomarchy/default/hypr/looknfeel.conf
|
||||
# ============================================================================
|
||||
# Theme colors - loaded from the currently active theme
|
||||
source = ~/.config/nomarchy/current/theme/hyprland.conf
|
||||
|
||||
# ============================================================================
|
||||
# USER OVERRIDES
|
||||
# ============================================================================
|
||||
@@ -39,9 +39,7 @@ source = ~/.config/nomarchy/current/theme/hyprland.conf
|
||||
|
||||
source = ~/.config/hypr/monitors.conf
|
||||
source = ~/.config/hypr/input.conf
|
||||
source = ~/.config/hypr/bindings.conf
|
||||
source = ~/.config/hypr/looknfeel.conf
|
||||
source = ~/.config/hypr/autostart.conf
|
||||
|
||||
# Add any other personal Hyprland configuration below
|
||||
|
||||
# windowrule = workspace 5, match:class qemu
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
assetsPath = ../../assets/themes;
|
||||
nomarchyLib = import ../../../lib { inherit lib; };
|
||||
assetsPath = ../../../themes/palettes;
|
||||
|
||||
# Use shared wallpaper resolver
|
||||
activeWallpaper = nomarchyLib.resolveWallpaper {
|
||||
@@ -21,6 +21,7 @@ in
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = lib.mkDefault true;
|
||||
systemd.enable = lib.mkDefault false;
|
||||
settings = lib.mkDefault {
|
||||
"debug" = {
|
||||
"disable_logs" = false;
|
||||
@@ -41,4 +42,12 @@ in
|
||||
source = ~/.config/hypr/nomarchy.conf
|
||||
'';
|
||||
};
|
||||
|
||||
# Deploy Hyprland configuration files
|
||||
xdg.configFile."hypr/nomarchy.conf".source = ./config/nomarchy.conf;
|
||||
xdg.configFile."hypr/monitors.conf".source = lib.mkDefault ./config/monitors.conf;
|
||||
xdg.configFile."hypr/input.conf".source = lib.mkDefault ./config/input.conf;
|
||||
xdg.configFile."hypr/bindings.conf".source = lib.mkDefault ./config/bindings.conf;
|
||||
xdg.configFile."hypr/looknfeel.conf".source = lib.mkDefault ./config/looknfeel.conf;
|
||||
xdg.configFile."hypr/autostart.conf".source = lib.mkDefault ./config/autostart.conf;
|
||||
}
|
||||
|
||||
@@ -138,13 +138,13 @@
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "nomarchy-cmd-screenrecord",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||
"exec": "~/.config/nomarchy/default/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "nomarchy-toggle-idle",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
|
||||
"exec": "~/.config/nomarchy/default/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
|
||||
14
features/desktop/waybar/themes/nord/style.css
Normal file
14
features/desktop/waybar/themes/nord/style.css
Normal file
@@ -0,0 +1,14 @@
|
||||
@define-color background #2e3440;
|
||||
@define-color foreground #d8dee9;
|
||||
@define-color accent #88c0d0;
|
||||
|
||||
/* Base style for Nord */
|
||||
* {
|
||||
font-family: JetBrainsMono Nerd Font, FontAwesome;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: @background;
|
||||
color: @foreground;
|
||||
}
|
||||
@@ -7,9 +7,9 @@
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"spacing": 15,
|
||||
"modules-left": ["custom/launcher", "clock", "clock#date"],
|
||||
"modules-left": ["custom/nomarchy", "clock", "clock#date"],
|
||||
"modules-center": ["hyprland/workspaces"],
|
||||
"modules-right": ["idle_inhibitor", "pulseaudio", "custom/battery", "backlight", "tray", "custom/powermenu"],
|
||||
"modules-right": ["custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator", "idle_inhibitor", "pulseaudio", "custom/battery", "backlight", "tray", "custom/powermenu"],
|
||||
|
||||
"hyprland/workspaces": {
|
||||
"disable-scroll": true,
|
||||
@@ -36,13 +36,57 @@
|
||||
"spacing": 5
|
||||
},
|
||||
|
||||
"custom/launcher": {
|
||||
"custom/nomarchy": {
|
||||
"interval": "once",
|
||||
"format": "",
|
||||
"on-click": "pkill rofi || rofi -show drun",
|
||||
"format": "<span font='nomarchy'>a</span>",
|
||||
"on-click": "nomarchy-menu",
|
||||
"tooltip-format": "Application Launcher"
|
||||
},
|
||||
|
||||
"custom/update": {
|
||||
"format": "",
|
||||
"exec": "nomarchy-update-available",
|
||||
"on-click": "nomarchy-launch-floating-terminal-with-presentation nomarchy-update",
|
||||
"tooltip-format": "Nomarchy update available",
|
||||
"signal": 7,
|
||||
"interval": 21600
|
||||
},
|
||||
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "nomarchy-cmd-screenrecord",
|
||||
"exec": "~/.config/nomarchy/default/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "nomarchy-toggle-idle",
|
||||
"exec": "~/.config/nomarchy/default/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
|
||||
"custom/notification-silencing-indicator": {
|
||||
"on-click": "nomarchy-toggle-notification-silencing",
|
||||
"exec": "~/.config/nomarchy/default/waybar/indicators/notification-silencing.sh",
|
||||
"signal": 10,
|
||||
"return-type": "json"
|
||||
},
|
||||
|
||||
"custom/voxtype": {
|
||||
"exec": "nomarchy-voxtype-status",
|
||||
"return-type": "json",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"idle": "",
|
||||
"recording": "",
|
||||
"transcribing": ""
|
||||
},
|
||||
"tooltip": true,
|
||||
"on-click-right": "nomarchy-voxtype-config",
|
||||
"on-click": "nomarchy-voxtype-model"
|
||||
},
|
||||
|
||||
"backlight": {
|
||||
"max-length": "4",
|
||||
"format": "{icon} {percent}%",
|
||||
@@ -83,8 +127,8 @@
|
||||
"car": "",
|
||||
"default": ["", "", ""]
|
||||
},
|
||||
"on-click": "mute-vol",
|
||||
"on-click-middle": "audio-menu",
|
||||
"on-click": "pamixer -t",
|
||||
"on-click-middle": "nomarchy-launch-audio",
|
||||
"on-click-right": "pavucontrol",
|
||||
"tooltip-format": "{icon} {desc} | {volume}%"
|
||||
},
|
||||
@@ -93,14 +137,14 @@
|
||||
"format-wifi": " {signalStrength}%",
|
||||
"format-ethernet": " {signalStrength}%",
|
||||
"format-disconnected": "",
|
||||
"on-click": ""
|
||||
"on-click": "nomarchy-launch-wifi"
|
||||
},
|
||||
|
||||
"custom/battery": {
|
||||
"interval": 30,
|
||||
"format": "{}",
|
||||
"exec": "waybar-battery-status",
|
||||
"on-click": "power-menu"
|
||||
"exec": "nomarchy-battery-status",
|
||||
"on-click": "nomarchy-menu power"
|
||||
},
|
||||
|
||||
"clock": {
|
||||
|
||||
@@ -80,69 +80,23 @@ let
|
||||
nomarchy-scripts = pkgs.stdenv.mkDerivation {
|
||||
pname = "nomarchy-scripts";
|
||||
version = "1.0.0";
|
||||
src = ../../bin;
|
||||
src = ./utils;
|
||||
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
# Copy scripts preserving directory structure for category detection
|
||||
for category in appearance apps hardware system utils wm; do
|
||||
if [ -d "$category" ]; then
|
||||
for script in "$category"/*; do
|
||||
if [ -f "$script" ]; then
|
||||
cp "$script" "$out/bin/"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
cp * $out/bin/
|
||||
|
||||
chmod +x $out/bin/*
|
||||
patchShebangs $out/bin
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
# Wrap scripts with category-specific dependencies
|
||||
# Wrap all scripts with all dependencies for robustness
|
||||
deps="${lib.makeBinPath allDeps}"
|
||||
for file in $out/bin/*; do
|
||||
if [ -f "$file" ]; then
|
||||
scriptName=$(basename "$file")
|
||||
|
||||
# Determine category from original source location
|
||||
category=""
|
||||
for cat in appearance apps hardware system utils wm; do
|
||||
if [ -f "$src/$cat/$scriptName" ]; then
|
||||
category="$cat"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Select dependencies based on category
|
||||
case "$category" in
|
||||
appearance)
|
||||
deps="${lib.makeBinPath (coreDeps ++ categoryDeps.appearance)}"
|
||||
;;
|
||||
apps)
|
||||
deps="${lib.makeBinPath (coreDeps ++ categoryDeps.apps)}"
|
||||
;;
|
||||
hardware)
|
||||
deps="${lib.makeBinPath (coreDeps ++ categoryDeps.hardware)}"
|
||||
;;
|
||||
system)
|
||||
deps="${lib.makeBinPath (coreDeps ++ categoryDeps.system)}"
|
||||
;;
|
||||
utils)
|
||||
deps="${lib.makeBinPath (coreDeps ++ categoryDeps.utils)}"
|
||||
;;
|
||||
wm)
|
||||
deps="${lib.makeBinPath (coreDeps ++ categoryDeps.wm)}"
|
||||
;;
|
||||
*)
|
||||
# Fallback to all deps for unknown categories
|
||||
deps="${lib.makeBinPath allDeps}"
|
||||
;;
|
||||
esac
|
||||
|
||||
wrapProgram "$file" \
|
||||
--prefix PATH : "$deps" \
|
||||
${envWrapperArgs}
|
||||
|
||||
21
features/scripts/utils/nomarchy-launch-walker
Normal file
21
features/scripts/utils/nomarchy-launch-walker
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Wrapper to launch walker with elephant provider, or fallback to rofi if walker is missing.
|
||||
|
||||
if command -v walker >/dev/null 2>&1; then
|
||||
if ! pgrep -x elephant > /dev/null; then
|
||||
setsid uwsm-app -- elephant &
|
||||
fi
|
||||
exec uwsm-app -- walker "$@"
|
||||
elif command -v rofi >/dev/null 2>&1; then
|
||||
# Convert walker arguments to rofi arguments if possible
|
||||
# This is a very basic mapping for --dmenu
|
||||
if [[ "$*" == *"--dmenu"* ]]; then
|
||||
exec rofi -dmenu "$@"
|
||||
else
|
||||
exec rofi -show drun
|
||||
fi
|
||||
else
|
||||
notify-send "Error" "Neither walker nor rofi found." -u critical
|
||||
exit 1
|
||||
fi
|
||||
44
features/scripts/utils/nomarchy-refresh-config
Normal file
44
features/scripts/utils/nomarchy-refresh-config
Normal file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# nomarchy-refresh-config: Restore a specific configuration file to its stock version.
|
||||
# Usage: nomarchy-refresh-config <relative-path-to-config>
|
||||
# Example: nomarchy-refresh-config hypr/hyprland.conf
|
||||
|
||||
CONFIG_FILE=$1
|
||||
|
||||
if [[ -z $CONFIG_FILE ]]; then
|
||||
echo "Usage: nomarchy-refresh-config <config-path>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Determine source directory (where stock configs are stored)
|
||||
# In Nomarchy, we deploy them via Nix, but we also keep a copy in local share for easy access
|
||||
STOCK_DIR="$HOME/.local/share/nomarchy/themes" # Fallback if specific config isn't themed
|
||||
# Wait, actually we should use the one from /etc/nixos if available
|
||||
STOCK_BASE="/etc/nixos/nomarchy/core/home/config"
|
||||
|
||||
if [ ! -d "$STOCK_BASE" ]; then
|
||||
# Fallback to local share if /etc/nixos is not available
|
||||
STOCK_BASE="$HOME/.local/share/nomarchy/config"
|
||||
fi
|
||||
|
||||
SOURCE_FILE="$STOCK_BASE/$CONFIG_FILE"
|
||||
DEST_FILE="$HOME/.config/$CONFIG_FILE"
|
||||
|
||||
if [ ! -f "$SOURCE_FILE" ]; then
|
||||
# Try searching in features/ as well
|
||||
STOCK_BASE="/etc/nixos/nomarchy/features"
|
||||
# Find the file in features
|
||||
SOURCE_FILE=$(find "$STOCK_BASE" -name "$(basename "$CONFIG_FILE")" | head -n 1)
|
||||
fi
|
||||
|
||||
if [[ -n $SOURCE_FILE ]] && [[ -f "$SOURCE_FILE" ]]; then
|
||||
echo "Refreshing $DEST_FILE from stock $SOURCE_FILE..."
|
||||
mkdir -p "$(dirname "$DEST_FILE")"
|
||||
cp "$SOURCE_FILE" "$DEST_FILE"
|
||||
notify-send "Config Refreshed" "$CONFIG_FILE has been restored to defaults."
|
||||
else
|
||||
echo "Error: Stock configuration for $CONFIG_FILE not found."
|
||||
notify-send -u critical "Error" "Stock configuration for $CONFIG_FILE not found."
|
||||
exit 1
|
||||
fi
|
||||
10
features/scripts/utils/nomarchy-toggle-waybar
Normal file
10
features/scripts/utils/nomarchy-toggle-waybar
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# nomarchy-toggle-waybar: Toggle the Waybar status bar on and off.
|
||||
|
||||
if pgrep -x waybar > /dev/null; then
|
||||
pkill waybar
|
||||
else
|
||||
# Start waybar in the background using uwsm
|
||||
uwsm-app -- waybar &
|
||||
fi
|
||||
Reference in New Issue
Block a user