: "🙏" # pray
+ : "😉" # wink
+ : "👌" # OK
+ : "👋" # greeting
+ : "💪" # arm
+ : "🤯" # blowing
+
+# Typography
+ : "—"
diff --git a/config/walker/config.toml b/config/walker/config.toml
index ebbb8e6..6c39101 100644
--- a/config/walker/config.toml
+++ b/config/walker/config.toml
@@ -1,7 +1,7 @@
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
selection_wrap = true # wrap list if at bottom or top
theme = "nomarchy-default" # theme to use
-additional_theme_location = "~/.local/share/nomarchy/default/walker/themes/"
+additional_theme_location = "~/.config/nomarchy/default/walker/themes/"
hide_action_hints = true # globally hide the action hints
[placeholders]
diff --git a/modules/home/default.nix b/modules/home/default.nix
index 7934276..aac255c 100644
--- a/modules/home/default.nix
+++ b/modules/home/default.nix
@@ -1,7 +1,7 @@
{ config, pkgs, inputs, lib, ... }:
let
- palettes = import ../../themes/nomarchy-palettes.nix;
+ palettes = import ../../assets/themes/nomarchy-palettes.nix;
userPackagesFile = "${config.home.homeDirectory}/.config/home-manager/user-packages.json";
userPackages = if builtins.pathExists userPackagesFile then
let
diff --git a/modules/home/scripts.nix b/modules/home/scripts.nix
index 8c2b2a1..d67f2e3 100644
--- a/modules/home/scripts.nix
+++ b/modules/home/scripts.nix
@@ -39,7 +39,7 @@ let
installPhase = ''
mkdir -p $out/bin
- cp -r * $out/bin/
+ find . -type f -exec cp {} $out/bin/ \;
chmod +x $out/bin/*
# Wrap every script to ensure dependencies are in PATH and inject configuration
diff --git a/modules/home/state.nix b/modules/home/state.nix
index 3c630f1..6805e65 100644
--- a/modules/home/state.nix
+++ b/modules/home/state.nix
@@ -119,9 +119,9 @@ in
fonts.monospace = togglesState.font or "JetBrainsMono Nerd Font";
# Derived properties from the theme directory
- isLightMode = builtins.pathExists (../../themes + "/${togglesState.theme or "nord"}/light.mode");
+ isLightMode = builtins.pathExists (../../assets/themes + "/${togglesState.theme or "nord"}/light.mode");
iconsTheme = let
- iconsFile = ../../themes + "/${togglesState.theme or "nord"}/icons.theme";
+ iconsFile = ../../assets/themes + "/${togglesState.theme or "nord"}/icons.theme";
in
if builtins.pathExists iconsFile
then lib.removeSuffix "\n" (builtins.readFile iconsFile)
diff --git a/modules/home/stylix.nix b/modules/home/stylix.nix
index e3c0878..7ffd492 100644
--- a/modules/home/stylix.nix
+++ b/modules/home/stylix.nix
@@ -2,12 +2,12 @@
let
# Re-use our state-based logic
- palettes = import ../../themes/nomarchy-palettes.nix;
+ palettes = import ../../assets/themes/nomarchy-palettes.nix;
activeThemeName = config.nomarchy.theme;
activeWallpaper = if config.nomarchy.wallpaper != "" then
config.nomarchy.wallpaper
- else "${../../themes/catppuccin/backgrounds/1-totoro.png}"; # Fallback
+ else "${../../assets/themes/catppuccin/backgrounds/1-totoro.png}"; # Fallback
# Map nix-colors palette to a format Stylix expects (attrset of hex strings)
currentPalette = (palettes.${activeThemeName} or palettes.nord).palette;
diff --git a/modules/home/theme-files.nix b/modules/home/theme-files.nix
index 4b81131..b872f09 100644
--- a/modules/home/theme-files.nix
+++ b/modules/home/theme-files.nix
@@ -2,7 +2,7 @@
{
xdg.configFile."nomarchy/current/theme" = {
- source = ../../themes/${config.nomarchy.theme};
+ source = ../../assets/themes/${config.nomarchy.theme};
recursive = true;
};
@@ -13,5 +13,8 @@
xdg.configFile."nomarchy/branding/logo.txt".source = ../../assets/branding/logo.txt;
# Expose all themes to the system via local share for script accessibility
- xdg.dataFile."nomarchy/themes".source = ../../themes;
+ xdg.dataFile."nomarchy/themes".source = ../../assets/themes;
+
+ # Nautilus python extensions
+ xdg.dataFile."nautilus-python/extensions/localsend.py".source = ../../assets/nautilus-python/extensions/localsend.py;
}
diff --git a/modules/home/theme-switcher.nix b/modules/home/theme-switcher.nix
index 79b762c..3fb88e7 100644
--- a/modules/home/theme-switcher.nix
+++ b/modules/home/theme-switcher.nix
@@ -1,7 +1,7 @@
{ config, pkgs, ... }:
let
- palettes = import ../../themes/nomarchy-palettes.nix;
+ palettes = import ../../assets/themes/nomarchy-palettes.nix;
themeNames = builtins.attrNames palettes;
themeList = builtins.concatStringsSep "\\n" themeNames;
diff --git a/modules/system/browser.nix b/modules/system/browser.nix
index 370d323..6aa6651 100644
--- a/modules/system/browser.nix
+++ b/modules/system/browser.nix
@@ -1,7 +1,7 @@
{ config, pkgs, lib, ... }:
let
- palettes = import ../../themes/nomarchy-palettes.nix;
+ palettes = import ../../assets/themes/nomarchy-palettes.nix;
activeThemeName = config.nomarchy.system.theme;
currentPalette = (palettes.${activeThemeName} or palettes.nord).palette;
diff --git a/modules/system/default.nix b/modules/system/default.nix
index ef745bb..7ccbc6c 100644
--- a/modules/system/default.nix
+++ b/modules/system/default.nix
@@ -4,6 +4,7 @@
imports = [
./options.nix
./state.nix
+ ./systemd.nix
./plymouth.nix
./sddm.nix
./hardware.nix
@@ -12,6 +13,7 @@
./network.nix
./browser.nix
./impermanence.nix
+ ./makima.nix
];
time.timeZone = config.nomarchy.system.timezone;
diff --git a/modules/system/hardware.nix b/modules/system/hardware.nix
index 89595ec..e0d63ee 100644
--- a/modules/system/hardware.nix
+++ b/modules/system/hardware.nix
@@ -62,6 +62,7 @@ in
(mkIf config.nomarchy.system.features.hybridGPU {
services.supergfxd.enable = true;
+ systemd.services.supergfxd.serviceConfig.ExecStartPre = "-${pkgs.coreutils}/bin/sleep 5";
})
];
}
diff --git a/modules/system/makima.nix b/modules/system/makima.nix
new file mode 100644
index 0000000..05208d2
--- /dev/null
+++ b/modules/system/makima.nix
@@ -0,0 +1,25 @@
+{ config, pkgs, lib, ... }:
+
+let
+ cfg = config.nomarchy.system.features.makima;
+in
+{
+ config = lib.mkIf cfg {
+ # If the user has makima-bin available in their overlays (as they originally used a custom package),
+ # this will install it. Otherwise, it will fail evaluation if not available in nixpkgs.
+ environment.systemPackages = [ pkgs.makima-bin ];
+
+ environment.etc."makima/AT Translated Set 2 keyboard.toml".source = ../../assets/makima + "/AT Translated Set 2 keyboard.toml";
+
+ systemd.services.makima = {
+ description = "Makima key remapping service";
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ User = config.services.displayManager.autoLogin.user;
+ Environment = "MAKIMA_CONFIG=/etc/makima";
+ ExecStart = "${pkgs.makima-bin}/bin/makima";
+ Restart = "on-failure";
+ };
+ };
+ };
+}
diff --git a/modules/system/options.nix b/modules/system/options.nix
index 25f5c8f..df31e79 100644
--- a/modules/system/options.nix
+++ b/modules/system/options.nix
@@ -40,6 +40,11 @@
default = false;
description = "Whether to enable hybrid GPU support (supergfxd).";
};
+ makima = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "Whether to enable makima key remapper.";
+ };
};
theme = lib.mkOption {
type = lib.types.str;
diff --git a/modules/system/sddm.nix b/modules/system/sddm.nix
index 9dd9c0c..ffcc261 100644
--- a/modules/system/sddm.nix
+++ b/modules/system/sddm.nix
@@ -1,11 +1,25 @@
{ config, pkgs, lib, ... }:
+let
+ nomarchy-sddm-theme = pkgs.stdenv.mkDerivation {
+ pname = "nomarchy-sddm-theme";
+ version = "1.0";
+ src = ../../assets/sddm/nomarchy;
+ installPhase = ''
+ mkdir -p $out/share/sddm/themes/nomarchy
+ cp -r * $out/share/sddm/themes/nomarchy/
+ '';
+ };
+in
{
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
+ theme = "nomarchy";
};
+ environment.systemPackages = [ nomarchy-sddm-theme ];
+
# Enable Hyprland system-level dependencies
programs.hyprland.enable = true;
}
diff --git a/modules/system/state.nix b/modules/system/state.nix
index 4091420..dafb77f 100644
--- a/modules/system/state.nix
+++ b/modules/system/state.nix
@@ -22,6 +22,7 @@ in
fingerprint = systemState.features.fingerprint or false;
fido2 = systemState.features.fido2 or false;
hybridGPU = systemState.features.hybridGPU or false;
+ makima = systemState.features.makima or false;
};
theme = systemState.theme or "nord";
};
diff --git a/modules/system/systemd.nix b/modules/system/systemd.nix
new file mode 100644
index 0000000..3596690
--- /dev/null
+++ b/modules/system/systemd.nix
@@ -0,0 +1,64 @@
+{ config, pkgs, lib, ... }:
+
+{
+ systemd.settings.Manager.DefaultTimeoutStopSec = "5s";
+
+ systemd.services."user@".serviceConfig.TimeoutStopSec = "5s";
+
+ powerManagement.powerDownCommands = ''
+ # --- force-igpu ---
+ # Use the Vfio to Integrated trick to turn off NVIDIA dgpu when in integrated mode
+ if [[ $1 == "hibernate" ]] && ${pkgs.coreutils}/bin/lsmod | grep -q supergfxd; then
+ ${pkgs.supergfxctl}/bin/supergfxctl -m Vfio || true
+ sleep 1
+ fi
+
+ # --- keyboard-backlight ---
+ # Turn off keyboard backlight before hibernate to prevent hang on power-off.
+ if [[ $1 == "hibernate" ]]; then
+ device=""
+ for candidate in /sys/class/leds/*kbd_backlight*; do
+ if [[ -e "$candidate" ]]; then
+ device="$(${pkgs.coreutils}/bin/basename "$candidate")"
+ break
+ fi
+ done
+ if [[ -n "$device" ]]; then
+ ${pkgs.brightnessctl}/bin/brightnessctl -d "$device" set 0 >/dev/null 2>&1 || true
+ fi
+ fi
+
+ # --- unmount-fuse ---
+ # Lazy-unmount gvfsd-fuse filesystems before suspend/hibernate
+ while IFS=' ' read -r _ mountpoint fstype _; do
+ if [[ $fstype == fuse.gvfsd-fuse ]]; then
+ mountpoint=$(printf '%b' "$mountpoint")
+ ${pkgs.fuse3}/bin/fusermount3 -uz "$mountpoint" 2>/dev/null || ${pkgs.fuse}/bin/fusermount -uz "$mountpoint" 2>/dev/null || true
+ fi
+ done < /proc/mounts
+ '';
+
+ powerManagement.resumeCommands = ''
+ # --- force-igpu ---
+ if ${pkgs.coreutils}/bin/lsmod | grep -q supergfxd; then
+ sleep 4
+ ${pkgs.supergfxctl}/bin/supergfxctl -m Vfio || true
+ sleep 1
+ ${pkgs.supergfxctl}/bin/supergfxctl -m Integrated || true
+ fi
+
+ # --- unmount-fuse ---
+ (
+ sleep 5
+ for uid_dir in /run/user/*; do
+ uid="$(${pkgs.coreutils}/bin/basename "$uid_dir")"
+ if [[ -S $uid_dir/bus ]]; then
+ sudo -u "#$uid" env \
+ DBUS_SESSION_BUS_ADDRESS="unix:path=$uid_dir/bus" \
+ XDG_RUNTIME_DIR="$uid_dir" \
+ systemctl --user restart gvfs-daemon.service 2>/dev/null || true
+ fi
+ done
+ ) &
+ '';
+}