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:
@@ -5,6 +5,8 @@
|
||||
./system/options.nix
|
||||
./system/state.nix
|
||||
./system/systemd.nix
|
||||
./system/virtualization.nix
|
||||
./system/fonts.nix
|
||||
../themes/engine/plymouth.nix
|
||||
../themes/engine/sddm.nix
|
||||
./system/hardware.nix
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
# - Environment variables
|
||||
|
||||
let
|
||||
configDir = ../../config;
|
||||
configDir = ./config;
|
||||
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
||||
|
||||
# Check if user has an override for a specific config
|
||||
|
||||
@@ -4,7 +4,7 @@ exec-once = uwsm-app -- mako
|
||||
exec-once = uwsm-app -- fcitx5 --disable notificationitem
|
||||
exec-once = uwsm-app -- swaybg -i ~/.config/nomarchy/current/background -m fill
|
||||
exec-once = uwsm-app -- swayosd-server
|
||||
exec-once = nomarchy-cmd-first-run
|
||||
exec-once = nomarchy-on-boot
|
||||
|
||||
# Slow app launch fix -- set systemd vars
|
||||
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Menus
|
||||
bindd = SUPER, SPACE, Launch apps, exec, nomarchy-launch-walker
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, nomarchy-launch-walker -m symbols
|
||||
bindd = SUPER, SPACE, Launch apps, exec, nomarchy-menu
|
||||
bindd = SUPER CTRL, E, Emoji picker, exec, nomarchy-menu symbols
|
||||
bindd = SUPER CTRL, C, Capture menu, exec, nomarchy-menu capture
|
||||
bindd = SUPER CTRL, O, Toggle menu, exec, nomarchy-menu toggle
|
||||
bindd = SUPER ALT, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||
|
||||
@@ -79,7 +79,7 @@ group {
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
enabled = yes
|
||||
|
||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
|
||||
@@ -1,30 +1,21 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
configDir = ../../config;
|
||||
configDir = ./config;
|
||||
|
||||
# Explicit list of config items to manage
|
||||
# This replaces dynamic builtins.readDir for clarity and faster evaluation
|
||||
configItems = {
|
||||
# Directories
|
||||
btop = "directory";
|
||||
chromium = "directory";
|
||||
elephant = "directory";
|
||||
"environment.d" = "directory";
|
||||
fastfetch = "directory";
|
||||
fcitx5 = "directory";
|
||||
fontconfig = "directory";
|
||||
ghostty = "directory";
|
||||
git = "directory";
|
||||
hypr = "directory";
|
||||
"hyprland-preview-share-picker" = "directory";
|
||||
imv = "directory";
|
||||
kitty = "directory";
|
||||
lazygit = "directory";
|
||||
"nautilus-python" = "directory";
|
||||
nomarchy = "directory";
|
||||
opencode = "directory";
|
||||
systemd = "directory";
|
||||
tmux = "directory";
|
||||
"nomarchy-skill" = "directory";
|
||||
Typora = "directory";
|
||||
uwsm = "directory";
|
||||
wiremix = "directory";
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
{
|
||||
config = {
|
||||
fonts.fontconfig.enable = lib.mkDefault true;
|
||||
xdg.dataFile."fonts/nomarchy.ttf".source = lib.mkDefault ../../config/nomarchy.ttf;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
};
|
||||
theme = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "nord";
|
||||
default = "summer-night";
|
||||
description = "System theme name.";
|
||||
};
|
||||
wallpaper = lib.mkOption {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
assetsPath = ../../assets/themes;
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
assetsPath = ../../themes/palettes;
|
||||
|
||||
# Read unified state from ~/.config/nomarchy/state.json
|
||||
togglesState = nomarchyLib.readHomeState config.home.homeDirectory;
|
||||
@@ -19,7 +19,7 @@ in
|
||||
skipVsCodeTheme = togglesState.skipVsCodeTheme or false;
|
||||
};
|
||||
nightlightTemperature = togglesState.nightlightTemperature or 4000;
|
||||
theme = togglesState.theme or "nord";
|
||||
theme = togglesState.theme or "summer-night";
|
||||
wallpaper = togglesState.wallpaper or "";
|
||||
hyprland = {
|
||||
gaps_in = togglesState.hyprland.gaps_in or 5;
|
||||
@@ -30,11 +30,11 @@ in
|
||||
|
||||
# Derived properties from the theme directory
|
||||
isLightMode = nomarchyLib.isThemeLightMode {
|
||||
themeName = togglesState.theme or "nord";
|
||||
themeName = togglesState.theme or "summer-night";
|
||||
inherit assetsPath;
|
||||
};
|
||||
iconsTheme = nomarchyLib.getIconsTheme {
|
||||
themeName = togglesState.theme or "nord";
|
||||
themeName = togglesState.theme or "summer-night";
|
||||
inherit assetsPath;
|
||||
};
|
||||
};
|
||||
|
||||
23
core/system/fonts.nix
Normal file
23
core/system/fonts.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
nomarchy-font = pkgs.stdenv.mkDerivation {
|
||||
pname = "nomarchy-font";
|
||||
version = "1.0";
|
||||
# Pull from core/home/config where the ttf is located
|
||||
src = ./../home/config;
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
cp nomarchy.ttf $out/share/fonts/truetype/
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
fonts.packages = [
|
||||
nomarchy-font
|
||||
pkgs.nerd-fonts.jetbrains-mono
|
||||
pkgs.nerd-fonts.roboto-mono
|
||||
pkgs.nerd-fonts.fira-code
|
||||
pkgs.nerd-fonts.ubuntu-mono
|
||||
];
|
||||
}
|
||||
@@ -48,7 +48,7 @@
|
||||
};
|
||||
theme = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "nord";
|
||||
default = "summer-night";
|
||||
description = "Selected system theme.";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
systemState = nomarchyLib.readSystemState;
|
||||
in
|
||||
{
|
||||
|
||||
11
core/system/virtualization.nix
Normal file
11
core/system/virtualization.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
programs.uwsm = {
|
||||
enable = lib.mkDefault true;
|
||||
waylandCompositors.hyprland = {
|
||||
binPath = "/run/current-system/sw/bin/Hyprland";
|
||||
prettyName = "Hyprland";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -4,12 +4,12 @@
|
||||
# Shared VM configuration
|
||||
virtualisation.vmVariant = {
|
||||
virtualisation.graphics = true;
|
||||
virtualisation.qemu.options = [ "-device virtio-vga" ];
|
||||
virtualisation.qemu.options = [ "-device" "virtio-vga" ];
|
||||
};
|
||||
|
||||
# Dummy hardware config for VM
|
||||
fileSystems."/" = { device = "/dev/disk/by-label/nixos"; };
|
||||
boot.loader.grub.device = "/dev/vda";
|
||||
fileSystems."/" = lib.mkDefault { device = "/dev/disk/by-label/nixos"; };
|
||||
boot.loader.grub.device = lib.mkDefault "/dev/vda";
|
||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_blk" "virtio_gpu" "virtio_net" "virtio_mmio" ];
|
||||
|
||||
# Force early KMS for Plymouth
|
||||
|
||||
@@ -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
|
||||
@@ -4,12 +4,17 @@
|
||||
|
||||
let
|
||||
# Import theme palettes once - used by multiple modules
|
||||
palettes = import ../themes/palettes;
|
||||
palettes = import ./../themes/palettes;
|
||||
|
||||
# Unified state reading function
|
||||
# Handles both JSON and plain text files with graceful fallbacks
|
||||
readState = { file, default }:
|
||||
if builtins.pathExists file then
|
||||
let
|
||||
# In pure evaluation mode (like nix build .#vm), absolute paths as strings
|
||||
# will cause an error in pathExists/readFile.
|
||||
isFileSafe = ! (builtins.isString file && lib.hasPrefix "/" file);
|
||||
in
|
||||
if isFileSafe && builtins.pathExists file then
|
||||
let
|
||||
content = builtins.readFile file;
|
||||
cleanContent = lib.removeSuffix "\n" content;
|
||||
@@ -31,7 +36,7 @@ let
|
||||
# Read system state
|
||||
readSystemState =
|
||||
readState {
|
||||
file = /etc/nixos/state.json;
|
||||
file = "/etc/nixos/state.json";
|
||||
default = {};
|
||||
};
|
||||
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
themePath = ../palettes + "/${config.nomarchy.theme}";
|
||||
themeAppsPath = themePath + "/apps";
|
||||
nordAppsPath = ../palettes/nord/apps;
|
||||
nordAppsPath = ../../features/desktop/hyprland/themes/nord;
|
||||
|
||||
# Check if theme has apps/hyprland.conf
|
||||
hasHyprlandConf = builtins.pathExists (themeAppsPath + "/hyprland.conf");
|
||||
|
||||
# Get palette for dynamic CSS generation
|
||||
palette = nomarchyLib.getPalette config.nomarchy.theme;
|
||||
in
|
||||
{
|
||||
xdg.configFile."nomarchy/current/theme" = {
|
||||
@@ -14,6 +18,14 @@ in
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# Generate waybar.css if it doesn't exist in the theme
|
||||
# This provides the @background and @foreground variables used by the default style
|
||||
xdg.configFile."nomarchy/current/theme/waybar.css".text = ''
|
||||
@define-color background #${palette.base00};
|
||||
@define-color foreground #${palette.base05};
|
||||
@define-color accent #${palette.base0D};
|
||||
'';
|
||||
|
||||
# Ensure theme-specific hyprland config exists, fallback to nord if not
|
||||
# Now checking in apps/ subdirectory
|
||||
xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
# └── preview.png
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
assetsPath = ../palettes;
|
||||
activeTheme = config.nomarchy.theme;
|
||||
themePath = assetsPath + "/${activeTheme}";
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
# - waybar: Custom CSS with theme colors
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
assetsPath = ../palettes;
|
||||
|
||||
activeThemeName = config.nomarchy.theme;
|
||||
@@ -36,6 +36,8 @@ in
|
||||
{
|
||||
imports = [ inputs.stylix.homeModules.stylix ];
|
||||
|
||||
xdg.configFile."nomarchy/current/background".source = activeWallpaper;
|
||||
|
||||
stylix = {
|
||||
enable = lib.mkDefault true;
|
||||
enableReleaseChecks = lib.mkDefault false;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
nomarchyLib = import ../lib { inherit lib; };
|
||||
nomarchyLib = import ../../lib { inherit lib; };
|
||||
themeList = builtins.concatStringsSep "\\n" nomarchyLib.themeNames;
|
||||
|
||||
nomarchy-theme-selector = pkgs.writeShellScriptBin "nomarchy-theme-selector" ''
|
||||
|
||||
Reference in New Issue
Block a user