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/options.nix
|
||||||
./system/state.nix
|
./system/state.nix
|
||||||
./system/systemd.nix
|
./system/systemd.nix
|
||||||
|
./system/virtualization.nix
|
||||||
|
./system/fonts.nix
|
||||||
../themes/engine/plymouth.nix
|
../themes/engine/plymouth.nix
|
||||||
../themes/engine/sddm.nix
|
../themes/engine/sddm.nix
|
||||||
./system/hardware.nix
|
./system/hardware.nix
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
# - Environment variables
|
# - Environment variables
|
||||||
|
|
||||||
let
|
let
|
||||||
configDir = ../../config;
|
configDir = ./config;
|
||||||
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";
|
||||||
|
|
||||||
# Check if user has an override for a specific config
|
# 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 -- fcitx5 --disable notificationitem
|
||||||
exec-once = uwsm-app -- swaybg -i ~/.config/nomarchy/current/background -m fill
|
exec-once = uwsm-app -- swaybg -i ~/.config/nomarchy/current/background -m fill
|
||||||
exec-once = uwsm-app -- swayosd-server
|
exec-once = uwsm-app -- swayosd-server
|
||||||
exec-once = nomarchy-cmd-first-run
|
exec-once = nomarchy-on-boot
|
||||||
|
|
||||||
# Slow app launch fix -- set systemd vars
|
# Slow app launch fix -- set systemd vars
|
||||||
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
|
exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Menus
|
# Menus
|
||||||
bindd = SUPER, SPACE, Launch apps, exec, nomarchy-launch-walker
|
bindd = SUPER, SPACE, Launch apps, exec, nomarchy-menu
|
||||||
bindd = SUPER CTRL, E, Emoji picker, exec, nomarchy-launch-walker -m symbols
|
bindd = SUPER CTRL, E, Emoji picker, exec, nomarchy-menu symbols
|
||||||
bindd = SUPER CTRL, C, Capture menu, exec, nomarchy-menu capture
|
bindd = SUPER CTRL, C, Capture menu, exec, nomarchy-menu capture
|
||||||
bindd = SUPER CTRL, O, Toggle menu, exec, nomarchy-menu toggle
|
bindd = SUPER CTRL, O, Toggle menu, exec, nomarchy-menu toggle
|
||||||
bindd = SUPER ALT, SPACE, Nomarchy menu, exec, nomarchy-menu
|
bindd = SUPER ALT, SPACE, Nomarchy menu, exec, nomarchy-menu
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ group {
|
|||||||
|
|
||||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
animations {
|
animations {
|
||||||
enabled = yes, please :)
|
enabled = yes
|
||||||
|
|
||||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,21 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
configDir = ../../config;
|
configDir = ./config;
|
||||||
|
|
||||||
# Explicit list of config items to manage
|
# Explicit list of config items to manage
|
||||||
# This replaces dynamic builtins.readDir for clarity and faster evaluation
|
# This replaces dynamic builtins.readDir for clarity and faster evaluation
|
||||||
configItems = {
|
configItems = {
|
||||||
# Directories
|
# Directories
|
||||||
btop = "directory";
|
|
||||||
chromium = "directory";
|
|
||||||
elephant = "directory";
|
|
||||||
"environment.d" = "directory";
|
"environment.d" = "directory";
|
||||||
fastfetch = "directory";
|
fastfetch = "directory";
|
||||||
fcitx5 = "directory";
|
fcitx5 = "directory";
|
||||||
fontconfig = "directory";
|
fontconfig = "directory";
|
||||||
ghostty = "directory";
|
|
||||||
git = "directory";
|
git = "directory";
|
||||||
hypr = "directory";
|
|
||||||
"hyprland-preview-share-picker" = "directory";
|
|
||||||
imv = "directory";
|
imv = "directory";
|
||||||
kitty = "directory";
|
"nautilus-python" = "directory";
|
||||||
lazygit = "directory";
|
|
||||||
nomarchy = "directory";
|
nomarchy = "directory";
|
||||||
opencode = "directory";
|
"nomarchy-skill" = "directory";
|
||||||
systemd = "directory";
|
|
||||||
tmux = "directory";
|
|
||||||
Typora = "directory";
|
Typora = "directory";
|
||||||
uwsm = "directory";
|
uwsm = "directory";
|
||||||
wiremix = "directory";
|
wiremix = "directory";
|
||||||
|
|||||||
@@ -3,6 +3,5 @@
|
|||||||
{
|
{
|
||||||
config = {
|
config = {
|
||||||
fonts.fontconfig.enable = lib.mkDefault true;
|
fonts.fontconfig.enable = lib.mkDefault true;
|
||||||
xdg.dataFile."fonts/nomarchy.ttf".source = lib.mkDefault ../../config/nomarchy.ttf;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
};
|
};
|
||||||
theme = lib.mkOption {
|
theme = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "nord";
|
default = "summer-night";
|
||||||
description = "System theme name.";
|
description = "System theme name.";
|
||||||
};
|
};
|
||||||
wallpaper = lib.mkOption {
|
wallpaper = lib.mkOption {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
assetsPath = ../../assets/themes;
|
assetsPath = ../../themes/palettes;
|
||||||
|
|
||||||
# Read unified state from ~/.config/nomarchy/state.json
|
# Read unified state from ~/.config/nomarchy/state.json
|
||||||
togglesState = nomarchyLib.readHomeState config.home.homeDirectory;
|
togglesState = nomarchyLib.readHomeState config.home.homeDirectory;
|
||||||
@@ -19,7 +19,7 @@ in
|
|||||||
skipVsCodeTheme = togglesState.skipVsCodeTheme or false;
|
skipVsCodeTheme = togglesState.skipVsCodeTheme or false;
|
||||||
};
|
};
|
||||||
nightlightTemperature = togglesState.nightlightTemperature or 4000;
|
nightlightTemperature = togglesState.nightlightTemperature or 4000;
|
||||||
theme = togglesState.theme or "nord";
|
theme = togglesState.theme or "summer-night";
|
||||||
wallpaper = togglesState.wallpaper or "";
|
wallpaper = togglesState.wallpaper or "";
|
||||||
hyprland = {
|
hyprland = {
|
||||||
gaps_in = togglesState.hyprland.gaps_in or 5;
|
gaps_in = togglesState.hyprland.gaps_in or 5;
|
||||||
@@ -30,11 +30,11 @@ in
|
|||||||
|
|
||||||
# Derived properties from the theme directory
|
# Derived properties from the theme directory
|
||||||
isLightMode = nomarchyLib.isThemeLightMode {
|
isLightMode = nomarchyLib.isThemeLightMode {
|
||||||
themeName = togglesState.theme or "nord";
|
themeName = togglesState.theme or "summer-night";
|
||||||
inherit assetsPath;
|
inherit assetsPath;
|
||||||
};
|
};
|
||||||
iconsTheme = nomarchyLib.getIconsTheme {
|
iconsTheme = nomarchyLib.getIconsTheme {
|
||||||
themeName = togglesState.theme or "nord";
|
themeName = togglesState.theme or "summer-night";
|
||||||
inherit assetsPath;
|
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 {
|
theme = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "nord";
|
default = "summer-night";
|
||||||
description = "Selected system theme.";
|
description = "Selected system theme.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
systemState = nomarchyLib.readSystemState;
|
systemState = nomarchyLib.readSystemState;
|
||||||
in
|
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
|
# Shared VM configuration
|
||||||
virtualisation.vmVariant = {
|
virtualisation.vmVariant = {
|
||||||
virtualisation.graphics = true;
|
virtualisation.graphics = true;
|
||||||
virtualisation.qemu.options = [ "-device virtio-vga" ];
|
virtualisation.qemu.options = [ "-device" "virtio-vga" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Dummy hardware config for VM
|
# Dummy hardware config for VM
|
||||||
fileSystems."/" = { device = "/dev/disk/by-label/nixos"; };
|
fileSystems."/" = lib.mkDefault { device = "/dev/disk/by-label/nixos"; };
|
||||||
boot.loader.grub.device = "/dev/vda";
|
boot.loader.grub.device = lib.mkDefault "/dev/vda";
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_blk" "virtio_gpu" "virtio_net" "virtio_mmio" ];
|
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_blk" "virtio_gpu" "virtio_net" "virtio_mmio" ];
|
||||||
|
|
||||||
# Force early KMS for Plymouth
|
# Force early KMS for Plymouth
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
activeThemeName = config.nomarchy.system.theme;
|
activeThemeName = config.nomarchy.system.theme;
|
||||||
currentPalette = nomarchyLib.getPalette activeThemeName;
|
currentPalette = nomarchyLib.getPalette activeThemeName;
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ let
|
|||||||
# Detect light mode from theme name or palette
|
# Detect light mode from theme name or palette
|
||||||
isLightTheme = nomarchyLib.isThemeLightMode {
|
isLightTheme = nomarchyLib.isThemeLightMode {
|
||||||
themeName = activeThemeName;
|
themeName = activeThemeName;
|
||||||
assetsPath = ../../assets/themes;
|
assetsPath = ../../themes/palettes;
|
||||||
};
|
};
|
||||||
|
|
||||||
browserPolicy = {
|
browserPolicy = {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
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
|
# Development extensions that match the system theme
|
||||||
devExtensions = with pkgs.vscode-extensions; [
|
devExtensions = with pkgs.vscode-extensions; [
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ in
|
|||||||
../core/home/bash.nix
|
../core/home/bash.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
colorScheme = lib.mkDefault (nomarchyLib.getColorScheme config.nomarchy.theme);
|
colorScheme = lib.mkDefault (nomarchyLib.getColorScheme config.nomarchy.theme);
|
||||||
|
|
||||||
# Enable neovim program module (required for stylix integration)
|
# Enable neovim program module (required for stylix integration)
|
||||||
@@ -73,15 +74,13 @@ in
|
|||||||
xmlstarlet
|
xmlstarlet
|
||||||
mise
|
mise
|
||||||
gum # TUI components for scripts
|
gum # TUI components for scripts
|
||||||
|
xdg-terminal-exec
|
||||||
|
swaybg
|
||||||
|
rofi-wayland
|
||||||
|
|
||||||
# Theming
|
# Theming
|
||||||
yaru-theme
|
yaru-theme
|
||||||
|
everforest-gtk-variant
|
||||||
bibata-cursors
|
bibata-cursors
|
||||||
|
|
||||||
# Fonts
|
|
||||||
nerd-fonts.jetbrains-mono
|
|
||||||
nerd-fonts.roboto-mono
|
|
||||||
nerd-fonts.fira-code
|
|
||||||
nerd-fonts.ubuntu-mono
|
|
||||||
] ++ userPackages);
|
] ++ userPackages);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Application bindings
|
# Application bindings
|
||||||
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(nomarchy-cmd-terminal-cwd)"
|
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec || uwsm-app -- alacritty
|
||||||
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 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, RETURN, Browser, exec, nomarchy-launch-browser
|
||||||
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
|
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)"
|
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
|
source = ~/.config/nomarchy/default/hypr/envs.conf
|
||||||
|
|
||||||
# Keybindings
|
# Keybindings
|
||||||
|
source = ~/.config/hypr/bindings.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/bindings/media.conf
|
source = ~/.config/nomarchy/default/hypr/bindings/media.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/bindings/clipboard.conf
|
source = ~/.config/nomarchy/default/hypr/bindings/clipboard.conf
|
||||||
source = ~/.config/nomarchy/default/hypr/bindings/tiling-v2.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
|
# Theme colors - loaded from the currently active theme
|
||||||
source = ~/.config/nomarchy/current/theme/hyprland.conf
|
source = ~/.config/nomarchy/current/theme/hyprland.conf
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# USER OVERRIDES
|
# USER OVERRIDES
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -39,9 +39,7 @@ source = ~/.config/nomarchy/current/theme/hyprland.conf
|
|||||||
|
|
||||||
source = ~/.config/hypr/monitors.conf
|
source = ~/.config/hypr/monitors.conf
|
||||||
source = ~/.config/hypr/input.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
|
# Add any other personal Hyprland configuration below
|
||||||
|
|
||||||
# windowrule = workspace 5, match:class qemu
|
# windowrule = workspace 5, match:class qemu
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../../lib { inherit lib; };
|
||||||
assetsPath = ../../assets/themes;
|
assetsPath = ../../../themes/palettes;
|
||||||
|
|
||||||
# Use shared wallpaper resolver
|
# Use shared wallpaper resolver
|
||||||
activeWallpaper = nomarchyLib.resolveWallpaper {
|
activeWallpaper = nomarchyLib.resolveWallpaper {
|
||||||
@@ -21,6 +21,7 @@ in
|
|||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
|
systemd.enable = lib.mkDefault false;
|
||||||
settings = lib.mkDefault {
|
settings = lib.mkDefault {
|
||||||
"debug" = {
|
"debug" = {
|
||||||
"disable_logs" = false;
|
"disable_logs" = false;
|
||||||
@@ -41,4 +42,12 @@ in
|
|||||||
source = ~/.config/hypr/nomarchy.conf
|
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": {
|
"custom/screenrecording-indicator": {
|
||||||
"on-click": "nomarchy-cmd-screenrecord",
|
"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,
|
"signal": 8,
|
||||||
"return-type": "json"
|
"return-type": "json"
|
||||||
},
|
},
|
||||||
"custom/idle-indicator": {
|
"custom/idle-indicator": {
|
||||||
"on-click": "nomarchy-toggle-idle",
|
"on-click": "nomarchy-toggle-idle",
|
||||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
|
"exec": "~/.config/nomarchy/default/waybar/indicators/idle.sh",
|
||||||
"signal": 9,
|
"signal": 9,
|
||||||
"return-type": "json"
|
"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",
|
"layer": "top",
|
||||||
"position": "top",
|
"position": "top",
|
||||||
"spacing": 15,
|
"spacing": 15,
|
||||||
"modules-left": ["custom/launcher", "clock", "clock#date"],
|
"modules-left": ["custom/nomarchy", "clock", "clock#date"],
|
||||||
"modules-center": ["hyprland/workspaces"],
|
"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": {
|
"hyprland/workspaces": {
|
||||||
"disable-scroll": true,
|
"disable-scroll": true,
|
||||||
@@ -36,13 +36,57 @@
|
|||||||
"spacing": 5
|
"spacing": 5
|
||||||
},
|
},
|
||||||
|
|
||||||
"custom/launcher": {
|
"custom/nomarchy": {
|
||||||
"interval": "once",
|
"interval": "once",
|
||||||
"format": "",
|
"format": "<span font='nomarchy'>a</span>",
|
||||||
"on-click": "pkill rofi || rofi -show drun",
|
"on-click": "nomarchy-menu",
|
||||||
"tooltip-format": "Application Launcher"
|
"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": {
|
"backlight": {
|
||||||
"max-length": "4",
|
"max-length": "4",
|
||||||
"format": "{icon} {percent}%",
|
"format": "{icon} {percent}%",
|
||||||
@@ -83,8 +127,8 @@
|
|||||||
"car": "",
|
"car": "",
|
||||||
"default": ["", "", ""]
|
"default": ["", "", ""]
|
||||||
},
|
},
|
||||||
"on-click": "mute-vol",
|
"on-click": "pamixer -t",
|
||||||
"on-click-middle": "audio-menu",
|
"on-click-middle": "nomarchy-launch-audio",
|
||||||
"on-click-right": "pavucontrol",
|
"on-click-right": "pavucontrol",
|
||||||
"tooltip-format": "{icon} {desc} | {volume}%"
|
"tooltip-format": "{icon} {desc} | {volume}%"
|
||||||
},
|
},
|
||||||
@@ -93,14 +137,14 @@
|
|||||||
"format-wifi": " {signalStrength}%",
|
"format-wifi": " {signalStrength}%",
|
||||||
"format-ethernet": " {signalStrength}%",
|
"format-ethernet": " {signalStrength}%",
|
||||||
"format-disconnected": "",
|
"format-disconnected": "",
|
||||||
"on-click": ""
|
"on-click": "nomarchy-launch-wifi"
|
||||||
},
|
},
|
||||||
|
|
||||||
"custom/battery": {
|
"custom/battery": {
|
||||||
"interval": 30,
|
"interval": 30,
|
||||||
"format": "{}",
|
"format": "{}",
|
||||||
"exec": "waybar-battery-status",
|
"exec": "nomarchy-battery-status",
|
||||||
"on-click": "power-menu"
|
"on-click": "nomarchy-menu power"
|
||||||
},
|
},
|
||||||
|
|
||||||
"clock": {
|
"clock": {
|
||||||
|
|||||||
@@ -80,69 +80,23 @@ let
|
|||||||
nomarchy-scripts = pkgs.stdenv.mkDerivation {
|
nomarchy-scripts = pkgs.stdenv.mkDerivation {
|
||||||
pname = "nomarchy-scripts";
|
pname = "nomarchy-scripts";
|
||||||
version = "1.0.0";
|
version = "1.0.0";
|
||||||
src = ../../bin;
|
src = ./utils;
|
||||||
|
|
||||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
|
cp * $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
|
|
||||||
|
|
||||||
chmod +x $out/bin/*
|
chmod +x $out/bin/*
|
||||||
patchShebangs $out/bin
|
patchShebangs $out/bin
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postFixup = ''
|
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
|
for file in $out/bin/*; do
|
||||||
if [ -f "$file" ]; then
|
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" \
|
wrapProgram "$file" \
|
||||||
--prefix PATH : "$deps" \
|
--prefix PATH : "$deps" \
|
||||||
${envWrapperArgs}
|
${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
|
let
|
||||||
# Import theme palettes once - used by multiple modules
|
# Import theme palettes once - used by multiple modules
|
||||||
palettes = import ../themes/palettes;
|
palettes = import ./../themes/palettes;
|
||||||
|
|
||||||
# Unified state reading function
|
# Unified state reading function
|
||||||
# Handles both JSON and plain text files with graceful fallbacks
|
# Handles both JSON and plain text files with graceful fallbacks
|
||||||
readState = { file, default }:
|
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
|
let
|
||||||
content = builtins.readFile file;
|
content = builtins.readFile file;
|
||||||
cleanContent = lib.removeSuffix "\n" content;
|
cleanContent = lib.removeSuffix "\n" content;
|
||||||
@@ -31,7 +36,7 @@ let
|
|||||||
# Read system state
|
# Read system state
|
||||||
readSystemState =
|
readSystemState =
|
||||||
readState {
|
readState {
|
||||||
file = /etc/nixos/state.json;
|
file = "/etc/nixos/state.json";
|
||||||
default = {};
|
default = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
themePath = ../palettes + "/${config.nomarchy.theme}";
|
themePath = ../palettes + "/${config.nomarchy.theme}";
|
||||||
themeAppsPath = themePath + "/apps";
|
themeAppsPath = themePath + "/apps";
|
||||||
nordAppsPath = ../palettes/nord/apps;
|
nordAppsPath = ../../features/desktop/hyprland/themes/nord;
|
||||||
|
|
||||||
# Check if theme has apps/hyprland.conf
|
# Check if theme has apps/hyprland.conf
|
||||||
hasHyprlandConf = builtins.pathExists (themeAppsPath + "/hyprland.conf");
|
hasHyprlandConf = builtins.pathExists (themeAppsPath + "/hyprland.conf");
|
||||||
|
|
||||||
|
# Get palette for dynamic CSS generation
|
||||||
|
palette = nomarchyLib.getPalette config.nomarchy.theme;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
xdg.configFile."nomarchy/current/theme" = {
|
xdg.configFile."nomarchy/current/theme" = {
|
||||||
@@ -14,6 +18,14 @@ in
|
|||||||
recursive = true;
|
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
|
# Ensure theme-specific hyprland config exists, fallback to nord if not
|
||||||
# Now checking in apps/ subdirectory
|
# Now checking in apps/ subdirectory
|
||||||
xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) {
|
xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
# └── preview.png
|
# └── preview.png
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
assetsPath = ../palettes;
|
assetsPath = ../palettes;
|
||||||
activeTheme = config.nomarchy.theme;
|
activeTheme = config.nomarchy.theme;
|
||||||
themePath = assetsPath + "/${activeTheme}";
|
themePath = assetsPath + "/${activeTheme}";
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
# - waybar: Custom CSS with theme colors
|
# - waybar: Custom CSS with theme colors
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
assetsPath = ../palettes;
|
assetsPath = ../palettes;
|
||||||
|
|
||||||
activeThemeName = config.nomarchy.theme;
|
activeThemeName = config.nomarchy.theme;
|
||||||
@@ -36,6 +36,8 @@ in
|
|||||||
{
|
{
|
||||||
imports = [ inputs.stylix.homeModules.stylix ];
|
imports = [ inputs.stylix.homeModules.stylix ];
|
||||||
|
|
||||||
|
xdg.configFile."nomarchy/current/background".source = activeWallpaper;
|
||||||
|
|
||||||
stylix = {
|
stylix = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
enableReleaseChecks = lib.mkDefault false;
|
enableReleaseChecks = lib.mkDefault false;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
nomarchyLib = import ../lib { inherit lib; };
|
nomarchyLib = import ../../lib { inherit lib; };
|
||||||
themeList = builtins.concatStringsSep "\\n" nomarchyLib.themeNames;
|
themeList = builtins.concatStringsSep "\\n" nomarchyLib.themeNames;
|
||||||
|
|
||||||
nomarchy-theme-selector = pkgs.writeShellScriptBin "nomarchy-theme-selector" ''
|
nomarchy-theme-selector = pkgs.writeShellScriptBin "nomarchy-theme-selector" ''
|
||||||
|
|||||||
Reference in New Issue
Block a user