Compare commits

..

14 Commits

Author SHA1 Message Date
Bernardo Magri
bb6b46b76e fix(system): finalize VM stabilization and fix Hyprland syntax
- Restore custom SDDM theme.
- Clean up all remaining Hyprland windowrulev2 and layerrule syntax errors.
- Optimize VM configurations with 4GB RAM and virtio-vga graphics for stability.
- Remove diagnostic debug services and autologin debug settings.
- Ensure correct session autologin to hyprland-uwsm.
2026-04-05 14:58:33 +01:00
Bernardo Magri
c336f528a8 fix(hyprland): proper rule syntax for 0.52.1 and re-enable autostart
- Removed 'on/off' suffixes from window rules.
- Replaced 'match:' with proper colon syntax for selectors.
- Re-enabled swww, waybar, and boot scripts.
2026-04-05 14:30:46 +01:00
Bernardo Magri
1fa60ed64a fix(vm): increase RAM to 8GB and fix Hyprland rule syntax to prevent crashes
- Increase VM memory to 8192MB to avoid OOM kills during session startup.
- Migrate all 'windowrule' to 'windowrulev2' in core configuration.
- Fix 'no_anim' syntax in layer rules.
- Re-enable graphics while keeping serial logs for debugging.
2026-04-05 14:17:52 +01:00
Bernardo Magri
c71cb7ea71 fix(sddm): use defaultSession instead of non-existent autoLogin.session 2026-04-05 13:27:08 +01:00
Bernardo Magri
70798abcb0 fix(vm): debug hang by disabling on-boot scripts and increasing resources
- Temporarily disable 'nomarchy-on-boot' and 'nomarchy-welcome' in Hyprland to isolate hang.
- Increase VM memory to 4096MB and cores to 4.
- Enable serial console debugging for VM.
- Enable qemuGuest service.
2026-04-05 13:23:20 +01:00
Bernardo Magri
663ee214d6 fix(vm): restore Plymouth splash and fix SDDM session selection
- Restore 'quiet' and 'splash' to kernel parameters to enable Plymouth.
- Re-enable graphics and virtio drivers for VM configurations.
- Add Interface=Qt5 to SDDM theme metadata for proper loading.
- Set default autoLogin.session to hyprland-uwsm to ensure correct session start.
- Enable services.xserver for improved display manager compatibility.
2026-04-05 13:22:09 +01:00
Bernardo Magri
ac6087559d fix(vm): ensure Plymouth display and fix black screen in Hyprland
- Force essential kernel parameters for VMs (video mode, splash).
- Add necessary virtio drivers to initrd.availableKernelModules.
- Fix black screen in Hyprland by disabling hardware cursors.
- Add fallback wallpaper logic to prevent swww crashes.
2026-04-05 12:48:43 +01:00
Bernardo Magri
2afd5eaa36 fix(vm): fix Plymouth theme path and optimize VM graphics for splash screen 2026-04-05 12:41:21 +01:00
Bernardo Magri
34c87d21ef fix(sddm): enable withUWSM for hyprland to resolve evaluation error 2026-04-05 11:21:47 +01:00
Bernardo Magri
9d36110123 fix(vm): fix Plymouth, SDDM, and autologin for VM testing
- Add virtio_gpu to initrd.kernelModules for early graphics support in VMs.
- Add 'render' group to VM users to ensure GPU acceleration.
- Move autologin defaults to sddm.nix to ensure they are consistently applied.
- Ensure SDDM theme has better session detection for uwsm.
2026-04-05 11:20:24 +01:00
Bernardo Magri
8a72a09bd8 fix(system): enable uwsm and fix session detection to allow VM login
- Enable programs.uwsm for session management.
- Improve SDDM theme session detection logic to be case-insensitive and more robust.
- Perform a global cleanup of 'Nnomarchy' and 'org.nnomarchy' typos across all scripts and configurations.
2026-04-05 11:18:41 +01:00
Bernardo Magri
7f086f07bf chore(branding): add missing icon.svg asset 2026-04-05 11:15:09 +01:00
Bernardo Magri
d59cb8f0ca fix(flake): set home-manager.useGlobalPkgs to false to resolve evaluation warnings 2026-04-05 11:15:02 +01:00
Bernardo Magri
854f429360 fix(bin): correct VM runner binary names and fix typos in test scripts 2026-04-05 11:10:57 +01:00
131 changed files with 493 additions and 410 deletions

56
assets/branding/icon.svg Normal file
View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="icon.svg"
inkscape:export-filename="logo.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.82803284"
inkscape:cx="215.57116"
inkscape:cy="452.27675"
inkscape:window-width="1025"
inkscape:window-height="1012"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" /><defs
id="defs1" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g4"
transform="translate(3.1953242,-22.686801)"
style="fill:#000088;fill-opacity:1"><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 25.136891,85.823024 25.557592,210.77125 88.452409,174.38061 67.417351,160.49747 57.110174,166.38729 V 105.80633 Z"
id="path1" /><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 67.728991,112.41131 182.54178,185.60757 153.16137,202.85259 67.830432,148.17947 Z"
id="path2" /><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 139.74857,145.88014 140.00405,110.4959 54.800856,56.333749 25.675926,73.32329 Z"
id="path3" /><path
style="fill:#000088;stroke-width:0.264583;fill-opacity:1"
d="M 182.2863,172.70573 V 48.286069 l -62.59305,36.406166 20.82177,13.668277 10.21927,-5.74834 0.12774,60.165978 z"
id="path4" /></g></g></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -11,10 +11,10 @@ Rectangle {
property int sessionIndex: {
for (var i = 0; i < sessionModel.rowCount(); i++) {
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
if (name.indexOf("uwsm") !== -1)
if (name.toLowerCase().indexOf("uwsm") !== -1)
return i
}
return sessionModel.lastIndex
return Math.max(0, sessionModel.lastIndex)
}
Connections {

View File

@@ -3,4 +3,5 @@ Name=Nomarchy
Description=Minimal terminal-style login theme matching the Limine bootloader aesthetic
Author=Nomarchy
Type=sddm-theme
Interface=Qt5
Version=1.0

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Returns the name of the current monospace font being used by extracting it from the Waybar stylesheet.
# This can be changed using nnomarchy-font-set.
# This can be changed using nomarchy-font-set.
grep -oP 'font-family:\s*["'\'']?\K[^;"'\'']+' ~/.config/waybar/style.css | head -n1

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Returns a list of all the monospace fonts available on the system that can be set using nnomarchy-font-set.
# Returns a list of all the monospace fonts available on the system that can be set using nomarchy-font-set.
fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|nnomarchy' | sort -u
fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|nomarchy' | sort -u

View File

@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# Set the system-wide monospace font that should be used by the terminal, hyprlock, waybar, swayosd, etc.
# Declarative version for Nnomarchy NixOS.
# Declarative version for Nomarchy NixOS.
font_name="$1"
if [[ -z $font_name ]]; then
echo "Usage: nnomarchy-font-set <font-name>"
echo "Usage: nomarchy-font-set <font-name>"
exit 1
fi
@@ -31,7 +31,7 @@ if fc-list | grep -iq "$font_name"; then
notify-send -u low " You must restart Ghostty to see font change"
fi
nnomarchy-hook font-set "$font_name"
nomarchy-hook font-set "$font_name"
else
echo "Font '$font_name' not found."
exit 1

View File

@@ -1,7 +1,7 @@
#!/bin/bash
CURRENT_THEME_NAME=$(cat "$HOME/.config/nnomarchy/current/theme.name")
THEME_USER_BACKGROUNDS="$HOME/.config/nnomarchy/backgrounds/$CURRENT_THEME_NAME"
CURRENT_THEME_NAME=$(cat "$HOME/.config/nomarchy/current/theme.name")
THEME_USER_BACKGROUNDS="$HOME/.config/nomarchy/backgrounds/$CURRENT_THEME_NAME"
mkdir -p "$THEME_USER_BACKGROUNDS"
nautilus "$THEME_USER_BACKGROUNDS"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Cycles through the background images available for the current theme.
# Declarative + Hybrid (instant swww) for Nnomarchy NixOS.
# Declarative + Hybrid (instant swww) for Nomarchy NixOS.
STATE_DIR="$HOME/.config/home-manager"
STATE_FILE="$STATE_DIR/state.json"
@@ -11,10 +11,10 @@ mkdir -p "$STATE_DIR"
THEME_NAME=$(jq -r '.theme // "nord"' "$STATE_FILE")
# Resolve themes directory (Built-in from Nix store via Home Manager, or user extra)
if [ -d "$HOME/.config/nnomarchy/themes/$THEME_NAME" ]; then
THEMES_DIR="$HOME/.config/nnomarchy/themes"
if [ -d "$HOME/.config/nomarchy/themes/$THEME_NAME" ]; then
THEMES_DIR="$HOME/.config/nomarchy/themes"
else
THEMES_DIR="$HOME/.local/share/nnomarchy/themes"
THEMES_DIR="$HOME/.local/share/nomarchy/themes"
fi
BG_DIR="$THEMES_DIR/$THEME_NAME/backgrounds"

View File

@@ -3,12 +3,12 @@
# Sets the specified image as the current background
if [[ -z $1 ]]; then
echo "Usage: nnomarchy-theme-bg-set <path-to-image>" >&2
echo "Usage: nomarchy-theme-bg-set <path-to-image>" >&2
exit 1
fi
BACKGROUND="$1"
CURRENT_BACKGROUND_LINK="$HOME/.config/nnomarchy/current/background"
CURRENT_BACKGROUND_LINK="$HOME/.config/nomarchy/current/background"
# Create symlink to the new background
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"

View File

@@ -1,6 +1,6 @@
#!/bin/bash
THEME_NAME_PATH="$HOME/.config/nnomarchy/current/theme.name"
THEME_NAME_PATH="$HOME/.config/nomarchy/current/theme.name"
if [[ -f $THEME_NAME_PATH ]]; then
cat $THEME_NAME_PATH | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'

View File

@@ -1,10 +1,10 @@
#!/bin/bash
# nnomarchy-theme-install: Install a new theme from a git repo for Nnomarchy
# Usage: nnomarchy-theme-install <git-repo-url>
# nomarchy-theme-install: Install a new theme from a git repo for Nomarchy
# Usage: nomarchy-theme-install <git-repo-url>
if [[ -z $1 ]]; then
echo -e "\e[32mSee https://manuals.omamix.org/2/the-nnomarchy-manual/90/extra-themes\n\e[0m"
echo -e "\e[32mSee https://manuals.omamix.org/2/the-nomarchy-manual/90/extra-themes\n\e[0m"
REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
else
REPO_URL="$1"
@@ -14,8 +14,8 @@ if [[ -z $REPO_URL ]]; then
exit 1
fi
THEMES_DIR="$HOME/.config/nnomarchy/themes"
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^nnomarchy-//; s/-theme$//')
THEMES_DIR="$HOME/.config/nomarchy/themes"
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^nomarchy-//; s/-theme$//')
THEME_PATH="$THEMES_DIR/$THEME_NAME"
# Remove existing theme if present
@@ -23,11 +23,11 @@ if [[ -d $THEME_PATH ]]; then
rm -rf "$THEME_PATH"
fi
# Clone the repo directly to ~/.config/nnomarchy/themes
# Clone the repo directly to ~/.config/nomarchy/themes
if ! git clone "$REPO_URL" "$THEME_PATH"; then
echo "Error: Failed to clone theme repo."
exit 1
fi
# Apply the new theme with nnomarchy-theme-set
nnomarchy-theme-set $THEME_NAME
# Apply the new theme with nomarchy-theme-set
nomarchy-theme-set $THEME_NAME

View File

@@ -1,7 +1,7 @@
#!/bin/bash
{
find ~/.config/nnomarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) -printf '%f\n'
find ~/.config/nomarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) -printf '%f\n'
find "$NOMARCHY_PATH/assets/themes/" -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
} | sort -u | while read -r name; do
echo "$name" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'

View File

@@ -2,8 +2,8 @@
# Refresh the current theme from its templates.
THEME_NAME_PATH="$HOME/.config/nnomarchy/current/theme.name"
THEME_NAME_PATH="$HOME/.config/nomarchy/current/theme.name"
if [[ -f $THEME_NAME_PATH ]]; then
nnomarchy-theme-set "$(cat $THEME_NAME_PATH)"
nomarchy-theme-set "$(cat $THEME_NAME_PATH)"
fi

View File

@@ -1,10 +1,10 @@
#!/bin/bash
# nnomarchy-theme-remove: Remove a theme from Nnomarchy by name
# Usage: nnomarchy-theme-remove <theme-name>
# nomarchy-theme-remove: Remove a theme from Nomarchy by name
# Usage: nomarchy-theme-remove <theme-name>
if [[ -z $1 ]]; then
mapfile -t extra_themes < <(find ~/.config/nnomarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
mapfile -t extra_themes < <(find ~/.config/nomarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
if (( ${#extra_themes[@]} > 0 )); then
THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
@@ -16,8 +16,8 @@ else
THEME_NAME="$1"
fi
THEMES_DIR="$HOME/.config/nnomarchy/themes"
CURRENT_DIR="$HOME/.config/nnomarchy/current"
THEMES_DIR="$HOME/.config/nomarchy/themes"
CURRENT_DIR="$HOME/.config/nomarchy/current"
THEME_PATH="$THEMES_DIR/$THEME_NAME"
# Ensure a theme was set

View File

@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# Set the system theme declaratively.
# Usage: nnomarchy-theme-set <theme-name>
# Usage: nomarchy-theme-set <theme-name>
THEME_NAME="$1"
if [[ -z $THEME_NAME ]]; then
echo "Usage: nnomarchy-theme-set <theme-name>"
echo "Usage: nomarchy-theme-set <theme-name>"
exit 1
fi
@@ -14,10 +14,10 @@ STATE_DIR="$HOME/.config/home-manager"
STATE_FILE="$STATE_DIR/state.json"
# Resolve themes directory (Built-in from Nix store via Home Manager, or user extra)
if [ -d "$HOME/.config/nnomarchy/themes/$THEME_NAME" ]; then
THEMES_DIR="$HOME/.config/nnomarchy/themes"
if [ -d "$HOME/.config/nomarchy/themes/$THEME_NAME" ]; then
THEMES_DIR="$HOME/.config/nomarchy/themes"
else
THEMES_DIR="$HOME/.local/share/nnomarchy/themes"
THEMES_DIR="$HOME/.local/share/nomarchy/themes"
fi
mkdir -p "$STATE_DIR"
@@ -26,7 +26,7 @@ mkdir -p "$STATE_DIR"
if [ ! -d "$THEMES_DIR/$THEME_NAME" ] && ! [[ "$THEME_NAME" == "nord" ]]; then
echo "Theme '$THEME_NAME' not found in $THEMES_DIR"
# Check if it exists in the palettes file
# (Assuming nnomarchy-palettes.nix is imported in Nix)
# (Assuming nomarchy-palettes.nix is imported in Nix)
fi
TMP_JSON=$(mktemp)
@@ -49,9 +49,9 @@ if [ -d "$BG_DIR" ]; then
fi
echo "Theme set to $THEME_NAME. Applying changes with env-update..."
rm -rf "$HOME/.config/nnomarchy/current/theme"
rm -rf "$HOME/.config/nomarchy/current/theme"
env-update
nnomarchy-theme-set-templates
nomarchy-theme-set-templates
nnomarchy-hook theme-set "$THEME_NAME"
nomarchy-hook theme-set "$THEME_NAME"

View File

@@ -1,4 +1,4 @@
#!/bin/bash
nnomarchy-theme-set-keyboard-asus-rog
nnomarchy-theme-set-keyboard-f16
nomarchy-theme-set-keyboard-asus-rog
nomarchy-theme-set-keyboard-f16

View File

@@ -1,7 +1,7 @@
#!/bin/bash
ASUSCTL_THEME=~/.config/nnomarchy/current/theme/keyboard.rgb
ASUSCTL_THEME=~/.config/nomarchy/current/theme/keyboard.rgb
if nnomarchy-cmd-present asusctl; then
if nomarchy-cmd-present asusctl; then
asusctl aura effect static -c $(sed 's/^#//' $ASUSCTL_THEME)
fi

View File

@@ -1,8 +1,8 @@
#!/bin/bash
FRAMEWORK16_THEME=~/.config/nnomarchy/current/theme/keyboard.rgb
FRAMEWORK16_THEME=~/.config/nomarchy/current/theme/keyboard.rgb
if nnomarchy-cmd-present qmk_hid && [[ -f $FRAMEWORK16_THEME ]]; then
if nomarchy-cmd-present qmk_hid && [[ -f $FRAMEWORK16_THEME ]]; then
hex=$(cat "$FRAMEWORK16_THEME")
hex="${hex#\#}"

View File

@@ -1,25 +1,25 @@
#!/bin/bash
# Sync Nnomarchy theme to all Obsidian vaults
# Sync Nomarchy theme to all Obsidian vaults
CURRENT_THEME_DIR="$HOME/.config/nnomarchy/current/theme"
CURRENT_THEME_DIR="$HOME/.config/nomarchy/current/theme"
[[ -f $CURRENT_THEME_DIR/obsidian.css ]] || exit 0
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null | while read -r vault_path; do
[[ -d $vault_path/.obsidian ]] || continue
theme_dir="$vault_path/.obsidian/themes/Nnomarchy"
theme_dir="$vault_path/.obsidian/themes/Nomarchy"
mkdir -p "$theme_dir"
[[ -f $theme_dir/manifest.json ]] || cat >"$theme_dir/manifest.json" <<'EOF'
{
"name": "Nnomarchy",
"name": "Nomarchy",
"version": "1.0.0",
"minAppVersion": "0.16.0",
"description": "Automatically syncs with your current Nnomarchy system theme colors and fonts",
"author": "Nnomarchy",
"authorUrl": "https://nnomarchy.org"
"description": "Automatically syncs with your current Nomarchy system theme colors and fonts",
"author": "Nomarchy",
"authorUrl": "https://nomarchy.org"
}
EOF

View File

@@ -1,8 +1,8 @@
#!/bin/bash
TEMPLATES_DIR="$NOMARCHY_PATH/assets/themed"
USER_TEMPLATES_DIR="$HOME/.config/nnomarchy/themed"
NEXT_THEME_DIR="$HOME/.config/nnomarchy/current/theme"
USER_TEMPLATES_DIR="$HOME/.config/nomarchy/themed"
NEXT_THEME_DIR="$HOME/.config/nomarchy/current/theme"
COLORS_FILE="$NEXT_THEME_DIR/colors.toml"
# Convert hex color to decimal RGB (e.g., "#1e1e2e" -> "30,30,46")

View File

@@ -1,14 +1,14 @@
#!/bin/bash
# Sync Nnomarchy theme to VS Code, VSCodium, and Cursor
# Sync Nomarchy theme to VS Code, VSCodium, and Cursor
VS_CODE_THEME="$HOME/.config/nnomarchy/current/theme/vscode.json"
VS_CODE_THEME="$HOME/.config/nomarchy/current/theme/vscode.json"
set_theme() {
local editor_cmd="$1"
local settings_path="$2"
nnomarchy-cmd-present "$editor_cmd" && [[ $NNOMARCHY_TOGGLE_SKIP_VSCODE_THEME != "true" ]] || return 0
nomarchy-cmd-present "$editor_cmd" && [[ $NNOMARCHY_TOGGLE_SKIP_VSCODE_THEME != "true" ]] || return 0
if [[ -f $VS_CODE_THEME ]]; then
theme_name=$(jq -r '.name' "$VS_CODE_THEME")

View File

@@ -1,6 +1,6 @@
#!/bin/bash
for dir in ~/.config/nnomarchy/themes/*/; do
for dir in ~/.config/nomarchy/themes/*/; do
if [[ -d $dir ]] && [[ ! -L ${dir%/} ]] && [[ -d $dir/.git ]]; then
echo "Updating: $(basename "$dir")"
git -C "$dir" pull

View File

@@ -2,4 +2,4 @@
# Launch the fastfetch TUI that gives information about the current system.
exec nnomarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"
exec nomarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Launch the Nnomarchy audio controls TUI (provided by wiremix).
# Launch the Nomarchy audio controls TUI (provided by wiremix).
nnomarchy-launch-or-focus-tui wiremix
nomarchy-launch-or-focus-tui wiremix

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Launch the Nnomarchy bluetooth controls TUI (provided by bluetui).
# Launch the Nomarchy bluetooth controls TUI (provided by bluetui).
# Also attempts to unblock bluetooth service if rfkill had blocked it.
rfkill unblock bluetooth
exec nnomarchy-launch-or-focus-tui bluetui
exec nomarchy-launch-or-focus-tui bluetui

View File

@@ -3,11 +3,11 @@
# Launch the default editor as determined by $EDITOR (set via ~/.config/uwsm/default) (or nvim if missing).
# Starts suitable editors in a terminal window and otherwise as a regular application.
nnomarchy-cmd-present "$EDITOR" || EDITOR=nvim
nomarchy-cmd-present "$EDITOR" || EDITOR=nvim
case "$EDITOR" in
nvim | vim | nano | micro | hx | helix | fresh)
exec nnomarchy-launch-tui "$EDITOR" "$@"
exec nomarchy-launch-tui "$EDITOR" "$@"
;;
*)
exec setsid uwsm-app -- "$EDITOR" "$@"

View File

@@ -4,7 +4,7 @@
# Use by some default bindings, like the one for Spotify, to ensure there is only one instance of the application open.
if (($# == 0)); then
echo "Usage: nnomarchy-launch-or-focus [window-pattern] [launch-command]"
echo "Usage: nomarchy-launch-or-focus [window-pattern] [launch-command]"
exit 1
fi

View File

@@ -1,9 +1,9 @@
#!/bin/bash
# Launch or focus on a given TUI identified by the passed in as the command.
# Use by commands like nnomarchy-launch-wifi to ensure there is only one wifi configuration screen open.
# Use by commands like nomarchy-launch-wifi to ensure there is only one wifi configuration screen open.
APP_ID="org.nnomarchy.$(basename "$1")"
LAUNCH_COMMAND="nnomarchy-launch-tui $@"
APP_ID="org.nomarchy.$(basename "$1")"
LAUNCH_COMMAND="nomarchy-launch-tui $@"
exec nnomarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND"
exec nomarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND"

View File

@@ -4,12 +4,12 @@
# Use by some default bindings, like the one for WhatsApp, to ensure there is only one instance of the application open.
if (($# == 0)); then
echo "Usage: nnomarchy-launch-or-focus-webapp [window-pattern] [url-and-flags...]"
echo "Usage: nomarchy-launch-or-focus-webapp [window-pattern] [url-and-flags...]"
exit 1
fi
WINDOW_PATTERN="$1"
shift
LAUNCH_COMMAND="nnomarchy-launch-webapp $@"
LAUNCH_COMMAND="nomarchy-launch-webapp $@"
exec nnomarchy-launch-or-focus "$WINDOW_PATTERN" "$LAUNCH_COMMAND"
exec nomarchy-launch-or-focus "$WINDOW_PATTERN" "$LAUNCH_COMMAND"

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Launch the Nnomarchy screensaver in the default terminal on the system with the correct font configuration.
# Launch the Nomarchy screensaver in the default terminal on the system with the correct font configuration.
# Exit early if we don't have the tte show
if ! command -v tte &>/dev/null; then
@@ -8,7 +8,7 @@ if ! command -v tte &>/dev/null; then
fi
# Exit early if screensave is already running
pgrep -f org.nnomarchy.screensaver && exit 0
pgrep -f org.nomarchy.screensaver && exit 0
# Allow screensaver to be turned off but also force started
# Skip if screensaver is disabled in configuration
@@ -29,23 +29,23 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
case $terminal in
*Alacritty*)
hyprctl dispatch exec -- \
alacritty --class=org.nnomarchy.screensaver \
--config-file ~/.local/share/nnomarchy/default/alacritty/screensaver.toml \
-e nnomarchy-cmd-screensaver
alacritty --class=org.nomarchy.screensaver \
--config-file ~/.local/share/nomarchy/default/alacritty/screensaver.toml \
-e nomarchy-cmd-screensaver
;;
*ghostty*)
hyprctl dispatch exec -- \
ghostty --class=org.nnomarchy.screensaver \
--config-file=~/.local/share/nnomarchy/default/ghostty/screensaver \
ghostty --class=org.nomarchy.screensaver \
--config-file=~/.local/share/nomarchy/default/ghostty/screensaver \
--font-size=18 \
-e nnomarchy-cmd-screensaver
-e nomarchy-cmd-screensaver
;;
*kitty*)
hyprctl dispatch exec -- \
kitty --class=org.nnomarchy.screensaver \
kitty --class=org.nomarchy.screensaver \
--override font_size=18 \
--override window_padding_width=0 \
-e nnomarchy-cmd-screensaver
-e nomarchy-cmd-screensaver
;;
*)
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Launch the TUI command passed in as an argument in the default terminal with an org.nnomarchy.COMMAND app id for styling.
# Launch the TUI command passed in as an argument in the default terminal with an org.nomarchy.COMMAND app id for styling.
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.nnomarchy.$(basename $1) -e "$1" "${@:2}"
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.nomarchy.$(basename $1) -e "$1" "${@:2}"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Launch the Nnomarchy wifi controls (provided by the Impala TUI).
# Launch the Nomarchy wifi controls (provided by the Impala TUI).
# Attempts to unblock the wifi service first in case it should be been blocked.
rfkill unblock wifi
nnomarchy-launch-or-focus-tui impala
nomarchy-launch-or-focus-tui impala

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Restart an application by killing it and relaunching via uwsm.
# Usage: nnomarchy-restart-app <application-name> [application-args...]
# Usage: nomarchy-restart-app <application-name> [application-args...]
pkill -x $1
setsid uwsm-app -- "$@" >/dev/null 2>&1 &

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Reload btop configuration (used by the Nnomarchy theme switching).
# Reload btop configuration (used by the Nomarchy theme switching).
pkill -SIGUSR2 btop

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Reload opencode configuration (used by the Nnomarchy theme switching).
# Reload opencode configuration (used by the Nomarchy theme switching).
if pgrep -x opencode >/dev/null; then
killall -SIGUSR2 opencode

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Remove all TUIs installed via nnomarchy-tui-install.
# Remove all TUIs installed via nomarchy-tui-install.
# Identifies TUIs by their Exec pattern (xdg-terminal-exec --app-id=TUI.).
set -e

View File

@@ -3,4 +3,4 @@ set -e
# Used by Voxtype waybar module to open config on right click
exec nnomarchy-launch-editor ~/.config/voxtype/config.toml
exec nomarchy-launch-editor ~/.config/voxtype/config.toml

View File

@@ -4,18 +4,18 @@ set -e
# Install voxtype and configure it for use.
if gum confirm "Install Voxtype + AI model (~150MB) to enable dictation?"; then
nnomarchy-pkg-add wtype voxtype-bin
nomarchy-pkg-add wtype voxtype-bin
# Setup voxtype
mkdir -p ~/.config/voxtype
cp ~/.config/nomarchy/default/voxtype/config.toml ~/.config/voxtype/
voxtype setup --download --no-post-install
if nnomarchy-hw-vulkan; then
if nomarchy-hw-vulkan; then
voxtype setup gpu --enable || true
fi
voxtype setup systemd
nnomarchy-restart-waybar
nomarchy-restart-waybar
notify-send " Voxtype Dictation Ready" "Press Super + Ctrl + X to toggle dictation.\nEdit ~/.config/voxtype/config.toml for options." -t 10000
fi

View File

@@ -1,5 +1,5 @@
#!/bin/bash
set -e
nnomarchy-launch-floating-terminal-with-presentation "voxtype setup model"
nnomarchy-restart-waybar
nomarchy-launch-floating-terminal-with-presentation "voxtype setup model"
nomarchy-restart-waybar

View File

@@ -3,7 +3,7 @@ set -e
# Remove voxtype and its configurations.
if nnomarchy-cmd-present voxtype; then
if nomarchy-cmd-present voxtype; then
echo "Uninstall Voxtype to remove dictation."
# Remove services
@@ -12,7 +12,7 @@ if nnomarchy-cmd-present voxtype; then
systemctl --user daemon-reload
# Remove packages and configs
nnomarchy-pkg-drop wtype voxtype-bin
nomarchy-pkg-drop wtype voxtype-bin
rm -rf ~/.config/voxtype
rm -rf ~/.local/share/voxtype
else

View File

@@ -1,6 +1,6 @@
#!/bin/bash
if nnomarchy-cmd-present voxtype; then
if nomarchy-cmd-present voxtype; then
voxtype status --follow --extended --format json | while read -r line; do
echo "$line" | jq -c '. + {alt: .class}'
done

View File

@@ -8,4 +8,4 @@ if [[ $url =~ ^mailto: ]]; then
web_url="https://app.hey.com/messages/new?to=$email"
fi
exec nnomarchy-launch-webapp "$web_url"
exec nomarchy-launch-webapp "$web_url"

View File

@@ -17,4 +17,4 @@ if [[ $url =~ ^zoom(mtg|us):// ]]; then
fi
fi
exec nnomarchy-launch-webapp "$web_url"
exec nomarchy-launch-webapp "$web_url"

View File

@@ -60,7 +60,7 @@ else
fi
# Use custom exec if provided, otherwise default behavior
EXEC_COMMAND="${CUSTOM_EXEC:-nnomarchy-launch-webapp $APP_URL}"
EXEC_COMMAND="${CUSTOM_EXEC:-nomarchy-launch-webapp $APP_URL}"
# Create application .desktop file
DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop"

View File

@@ -8,7 +8,7 @@ DESKTOP_DIR="$HOME/.local/share/applications/"
if (( $# == 0 )); then
# Find all web apps
while IFS= read -r -d '' file; do
if grep -q '^Exec=.*\(nnomarchy-launch-webapp\|nnomarchy-webapp-handler\).*' "$file"; then
if grep -q '^Exec=.*\(nomarchy-launch-webapp\|nomarchy-webapp-handler\).*' "$file"; then
WEB_APPS+=("$(basename "${file%.desktop}")")
fi
done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0)

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Remove all web apps installed via nnomarchy-webapp-install.
# Identifies web apps by their Exec pattern (nnomarchy-launch-webapp or nnomarchy-webapp-handler).
# Remove all web apps installed via nomarchy-webapp-install.
# Identifies web apps by their Exec pattern (nomarchy-launch-webapp or nomarchy-webapp-handler).
set -e
@@ -12,7 +12,7 @@ echo "Scanning for web apps in $APP_DIR..."
webapp_desktop_files=()
while IFS= read -r -d '' file; do
if grep -q "Exec=nnomarchy-launch-webapp\|Exec=nnomarchy-webapp-handler" "$file" 2>/dev/null; then
if grep -q "Exec=nomarchy-launch-webapp\|Exec=nomarchy-webapp-handler" "$file" 2>/dev/null; then
webapp_desktop_files+=("$file")
fi
done < <(find "$APP_DIR" -maxdepth 1 -name "*.desktop" -print0 2>/dev/null)

View File

@@ -35,7 +35,7 @@ install_windows() {
check_prerequisites
nnomarchy-pkg-add freerdp openbsd-netcat gum
nomarchy-pkg-add freerdp openbsd-netcat gum
mkdir -p "$HOME/.windows"
mkdir -p "$HOME/.config/windows"
@@ -50,7 +50,7 @@ install_windows() {
[Desktop Entry]
Name=Windows
Comment=Start Windows VM via Docker and connect with RDP
Exec=uwsm app -- nnomarchy-windows-vm launch
Exec=uwsm app -- nomarchy-windows-vm launch
Icon=$HOME/.local/share/applications/icons/windows.png
Terminal=false
Type=Application
@@ -177,7 +177,7 @@ EOF
services:
windows:
image: dockurr/windows
container_name: nnomarchy-windows
container_name: nomarchy-windows
environment:
VERSION: "11"
RAM_SIZE: "$SELECTED_RAM"
@@ -236,7 +236,7 @@ EOF
echo ""
echo "Once finished, launch 'Windows' via Super + Space"
echo ""
echo "To stop the VM: nnomarchy-windows-vm stop"
echo "To stop the VM: nomarchy-windows-vm stop"
echo "To change resources: ~/.config/windows/docker-compose.yml"
echo ""
}
@@ -269,7 +269,7 @@ launch_windows() {
# Check if config exists
if [[ ! -f $COMPOSE_FILE ]]; then
echo "Windows VM not configured. Please run: nnomarchy-windows-vm install"
echo "Windows VM not configured. Please run: nomarchy-windows-vm install"
exit 1
fi
@@ -282,7 +282,7 @@ launch_windows() {
[[ -z $WIN_PASS ]] && WIN_PASS="admin"
# Check if container is already running
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' nnomarchy-windows 2>/dev/null)
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' nomarchy-windows 2>/dev/null)
if [[ $CONTAINER_STATUS != "running" ]]; then
echo "Starting Windows VM..."
@@ -292,21 +292,21 @@ launch_windows() {
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
echo "❌ Failed to start Windows VM!"
echo " Try checking: nnomarchy-windows-vm status"
echo " View logs: docker logs nnomarchy-windows"
echo " Try checking: nomarchy-windows-vm status"
echo " View logs: docker logs nomarchy-windows"
notify-send -u critical "Windows VM" "Failed to start Windows VM"
exit 1
fi
echo "Waiting for Windows VM to start..."
WAIT_COUNT=0
until docker logs nnomarchy-windows 2>&1 | grep -qi "windows started successfully"; do
until docker logs nomarchy-windows 2>&1 | grep -qi "windows started successfully"; do
sleep 2
WAIT_COUNT=$((WAIT_COUNT + 1))
if (( WAIT_COUNT > 60 )); then # 2 minutes timeout
echo ""
echo "❌ Timeout: Windows VM failed to start within 2 minutes"
echo " Check logs: docker logs nnomarchy-windows"
echo " Check logs: docker logs nomarchy-windows"
exit 1
fi
done
@@ -315,7 +315,7 @@ launch_windows() {
# Build the connection info
if [[ $KEEP_ALIVE = "true" ]]; then
LIFECYCLE="VM will keep running after RDP closes
To stop: nnomarchy-windows-vm stop"
To stop: nomarchy-windows-vm stop"
else
LIFECYCLE="VM will auto-stop when RDP closes"
fi
@@ -342,7 +342,7 @@ To stop: nnomarchy-windows-vm stop"
# If scale is less than 130%, don't set any scale (use default 100)
# Connect with RDP in fullscreen (auto-detects resolution)
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /clipboard /cert:ignore /title:"Windows VM - Nnomarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /clipboard /cert:ignore /title:"Windows VM - Nomarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
# After RDP closes, stop the container unless --keep-alive was specified
if [[ $KEEP_ALIVE = "false" ]]; then
@@ -353,7 +353,7 @@ To stop: nnomarchy-windows-vm stop"
else
echo ""
echo "RDP session closed. Windows VM is still running."
echo "To stop it: nnomarchy-windows-vm stop"
echo "To stop it: nomarchy-windows-vm stop"
fi
}
@@ -371,15 +371,15 @@ stop_windows() {
status_windows() {
if [[ ! -f $COMPOSE_FILE ]]; then
echo "Windows VM not configured."
echo "To set up: nnomarchy-windows-vm install"
echo "To set up: nomarchy-windows-vm install"
exit 1
fi
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' nnomarchy-windows 2>/dev/null)
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' nomarchy-windows 2>/dev/null)
if [[ -z $CONTAINER_STATUS ]]; then
echo "Windows VM container not found."
echo "To start: nnomarchy-windows-vm launch"
echo "To start: nomarchy-windows-vm launch"
elif [[ $CONTAINER_STATUS = "running" ]]; then
gum style \
--border normal \
@@ -391,16 +391,16 @@ status_windows() {
"Web interface: http://127.0.0.1:8006" \
"RDP available: port 3389" \
"" \
"To connect: nnomarchy-windows-vm launch" \
"To stop: nnomarchy-windows-vm stop"
"To connect: nomarchy-windows-vm launch" \
"To stop: nomarchy-windows-vm stop"
else
echo "Windows VM is stopped (status: $CONTAINER_STATUS)"
echo "To start: nnomarchy-windows-vm launch"
echo "To start: nomarchy-windows-vm launch"
fi
}
show_usage() {
echo "Usage: nnomarchy-windows-vm [command] [options]"
echo "Usage: nomarchy-windows-vm [command] [options]"
echo ""
echo "Commands:"
echo " install Install and configure Windows VM"
@@ -413,10 +413,10 @@ show_usage() {
echo " help Show this help message"
echo ""
echo "Examples:"
echo " nnomarchy-windows-vm install # Set up Windows VM for first time"
echo " nnomarchy-windows-vm launch # Connect to VM (auto-stop on exit)"
echo " nnomarchy-windows-vm launch -k # Connect to VM (keep running)"
echo " nnomarchy-windows-vm stop # Shut down the VM"
echo " nomarchy-windows-vm install # Set up Windows VM for first time"
echo " nomarchy-windows-vm launch # Connect to VM (auto-stop on exit)"
echo " nomarchy-windows-vm launch -k # Connect to VM (keep running)"
echo " nomarchy-windows-vm stop # Shut down the VM"
}
# Main command dispatcher

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Returns the battery full capacity in Wh (rounded to whole number).
# Used by nnomarchy-battery-status for displaying battery capacity.
# Used by nomarchy-battery-status for displaying battery capacity.
battery_info=$(upower -i $(upower -e | grep BAT))

View File

@@ -3,13 +3,13 @@
# Designed to be run by systemd timer every 30 seconds and alerts if battery is low
BATTERY_THRESHOLD=10
NOTIFICATION_FLAG="/run/user/$UID/nnomarchy_battery_notified"
BATTERY_LEVEL=$(nnomarchy-battery-remaining)
NOTIFICATION_FLAG="/run/user/$UID/nomarchy_battery_notified"
BATTERY_LEVEL=$(nomarchy-battery-remaining)
BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}')
send_notification() {
notify-send -u critical "󱐋 Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
nnomarchy-hook battery-low "$1"
nomarchy-hook battery-low "$1"
}
if [[ -n $BATTERY_LEVEL && $BATTERY_LEVEL =~ ^[0-9]+$ ]]; then

View File

@@ -18,8 +18,8 @@ power_rate=$(echo "$battery_info" | awk '/energy-rate/ {
}')
state=$(echo "$battery_info" | awk '/state/ { print $2; exit }')
time_remaining=$(nnomarchy-battery-remaining-time)
capacity=$(nnomarchy-battery-capacity)
time_remaining=$(nomarchy-battery-remaining-time)
capacity=$(nomarchy-battery-capacity)
if [[ $state == "charging" ]]; then
echo "󰁹 Battery ${percentage}% · ${time_remaining} to full ·  ${power_rate}W / ${capacity}Wh"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Adjust brightness on the most likely display device.
# Usage: nnomarchy-brightness-display <step>
# Usage: nomarchy-brightness-display <step>
step="${1:-+5%}"
@@ -18,4 +18,4 @@ done
brightnessctl -d "$device" set "$step" >/dev/null
# Use SwayOSD to display the new brightness setting.
nnomarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')"
nomarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')"

View File

@@ -8,5 +8,5 @@ else
device="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
sudo asdcontrol "$device" -- "$1" >/dev/null
value="$(sudo asdcontrol "$device" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
nnomarchy-swayosd-brightness "$(( value * 100 / 60000 ))"
nomarchy-swayosd-brightness "$(( value * 100 / 60000 ))"
fi

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Adjust keyboard backlight brightness using available steps.
# Usage: nnomarchy-brightness-keyboard <up|down|cycle>
# Usage: nomarchy-brightness-keyboard <up|down|cycle>
direction="${1:-up}"
@@ -39,4 +39,4 @@ brightnessctl -d "$device" set "$new_brightness" >/dev/null
# Use SwayOSD to display the new brightness setting.
percent=$((new_brightness * 100 / max_brightness))
nnomarchy-swayosd-kbd-brightness "$percent"
nomarchy-swayosd-kbd-brightness "$percent"

View File

@@ -3,4 +3,4 @@
# Detect whether the computer is a Framework Laptop 16.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Framework" ]] &&
nnomarchy-hw-match "Laptop 16"
nomarchy-hw-match "Laptop 16"

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Match against the computer's DMI product name (case-insensitive).
# Usage: nnomarchy-hw-match "XPS"
# Usage: nomarchy-hw-match "XPS"
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null

View File

@@ -3,4 +3,4 @@
# Detect whether the computer is a Microsoft Surface device.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Microsoft Corporation" ]] &&
nnomarchy-hw-match "Surface"
nomarchy-hw-match "Surface"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Returns a list of all the available power profiles on the system.
# Used by the Nnomarchy Menu under Setup > Power Profile.
# Used by the Nomarchy Menu under Setup > Power Profile.
powerprofilesctl list |
awk '/^\s*[* ]\s*[a-zA-Z0-9\-]+:$/ { gsub(/^[*[:space:]]+|:$/,""); print }' |

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Restart makima - key remapping service for remapping Copilot key to Nnomarchy Menu
# Restart makima - key remapping service for remapping Copilot key to Nomarchy Menu
sudo systemctl restart makima

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Toggle dedicated vs integrated GPU mode via supergfxd (for hybrid gpu laptops, like Asus G14).
# Declarative enablement + Runtime mode switching for Nnomarchy NixOS.
# Declarative enablement + Runtime mode switching for Nomarchy NixOS.
STATE_FILE="/etc/nixos/state.json"
@@ -30,14 +30,14 @@ case "$gpu_mode" in
if gum confirm "Switch to Hybrid mode (enables dGPU) and reboot?"; then
supergfxctl -m Hybrid
echo "Switching to Hybrid mode..."
nnomarchy-system-reboot
nomarchy-system-reboot
fi
;;
"Hybrid")
if gum confirm "Switch to Integrated mode (disables dGPU) and reboot?"; then
supergfxctl -m Integrated
echo "Switching to Integrated mode..."
nnomarchy-system-reboot
nomarchy-system-reboot
fi
;;
*)

View File

@@ -1,14 +1,14 @@
#!/usr/bin/env bash
# Toggles wifi power saving declaratively.
# Usage: nnomarchy-wifi-powersave <on|off>
# Usage: nomarchy-wifi-powersave <on|off>
STATE_FILE="/etc/nixos/state.json"
case "$1" in
on) value="true" ;;
off) value="false" ;;
*) echo "Usage: nnomarchy-wifi-powersave <on|off>"; exit 1 ;;
*) echo "Usage: nomarchy-wifi-powersave <on|off>"; exit 1 ;;
esac
sudo jq ".wifi.powersave = $value" "$STATE_FILE" > /tmp/state.json && sudo mv /tmp/state.json "$STATE_FILE"

View File

@@ -11,7 +11,7 @@ SWAPSIZE=$(( 1024 * ${SWAPSIZE_KB:-0} ))
HIBERNATION_IMAGE_SIZE=$(cat /sys/power/image_size)
if (( SWAPSIZE > HIBERNATION_IMAGE_SIZE )) && [[ -f /etc/mkinitcpio.conf.d/nnomarchy_resume.conf ]]; then
if (( SWAPSIZE > HIBERNATION_IMAGE_SIZE )) && [[ -f /etc/mkinitcpio.conf.d/nomarchy_resume.conf ]]; then
exit 0
else
exit 1

View File

@@ -3,7 +3,7 @@
# Removes hibernation setup: disables swap, removes swapfile, removes fstab entry,
# removes resume hook, and removes suspend-then-hibernate configuration.
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/nnomarchy_resume.conf"
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/nomarchy_resume.conf"
# Check if hibernation is configured
if [[ ! -f $MKINITCPIO_CONF ]] || ! grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then

View File

@@ -13,7 +13,7 @@ if ! command -v limine-mkinitcpio &>/dev/null; then
exit 0
fi
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/nnomarchy_resume.conf"
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/nomarchy_resume.conf"
# Check if hibernation is already configured
if [[ -f $MKINITCPIO_CONF ]] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
@@ -95,5 +95,5 @@ sudo limine-update
echo
if [[ $1 != "--force" ]] && gum confirm "Reboot to enable hibernation?"; then
nnomarchy-system-reboot
nomarchy-system-reboot
fi

View File

@@ -3,7 +3,7 @@
PKG_NAME="$1"
if [ -z "$PKG_NAME" ]; then
echo "Usage: nnomarchy-pkg-add <package-name>"
echo "Usage: nomarchy-pkg-add <package-name>"
exit 1
fi

View File

@@ -3,14 +3,14 @@
PKG_NAME="$1"
if [ -z "$PKG_NAME" ]; then
echo "Usage: nnomarchy-pkg-remove <package-name>"
echo "Usage: nomarchy-pkg-remove <package-name>"
exit 1
fi
STATE_FILE="$HOME/.config/home-manager/user-packages.json"
if [ ! -f "$STATE_FILE" ]; then
echo "No packages managed by nnomarchy-pkg yet."
echo "No packages managed by nomarchy-pkg yet."
exit 0
fi

View File

@@ -2,4 +2,4 @@
# Restart the XCompose input method service (fcitx5) to apply new compose key settings.
nnomarchy-restart-app fcitx5 --disable notificationitem
nomarchy-restart-app fcitx5 --disable notificationitem

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Configure DNS declaratively for Nnomarchy NixOS.
# Configure DNS declaratively for Nomarchy NixOS.
# Hybrid: updates /etc/nixos/state.json and runs sys-update.
STATE_FILE="/etc/nixos/state.json"

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Configure FIDO2 support declaratively for Nnomarchy NixOS.
# Configure FIDO2 support declaratively for Nomarchy NixOS.
STATE_FILE="/etc/nixos/state.json"

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Configure fingerprint support declaratively for Nnomarchy NixOS.
# Configure fingerprint support declaratively for Nomarchy NixOS.
STATE_FILE="/etc/nixos/state.json"

View File

@@ -2,7 +2,7 @@
# Prompt for sudo once and keep the credential alive in the background.
# Source this script so the trap applies to the calling shell:
# source nnomarchy-sudo-keepalive
# source nomarchy-sudo-keepalive
sudo -v
while true; do sudo -n true; sleep 60; done 2>/dev/null &

View File

@@ -4,8 +4,8 @@
# First run: enables passwordless sudo for 15 minutes (after confirmation).
# Second run: disables it early.
NOPASSWD_FILE="/etc/sudoers.d/99-nnomarchy-nopasswd-${USER}"
TIMER_NAME="nnomarchy-nopasswd-expire-${USER}"
NOPASSWD_FILE="/etc/sudoers.d/99-nomarchy-nopasswd-${USER}"
TIMER_NAME="nomarchy-nopasswd-expire-${USER}"
# Safety: if the file exists but the timer doesn't (e.g. after reboot), clean up
if sudo test -f "$NOPASSWD_FILE" && ! systemctl is-active "${TIMER_NAME}.timer" &>/dev/null; then
@@ -36,7 +36,7 @@ else
sudo systemd-run --on-active=15m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
rm "$NOPASSWD_FILE"
echo "Passwordless sudo has been ENABLED. It will automatically disable in 15 minutes."
echo "Note: if you restart before then, run nnomarchy-sudo-passwordless-toggle again to disable it."
echo "Note: if you restart before then, run nomarchy-sudo-passwordless-toggle again to disable it."
else
echo "Aborted. No changes made."
fi

View File

@@ -7,5 +7,5 @@
nohup bash -c "sleep 2 && uwsm stop" >/dev/null 2>&1 &
# Now close all windows
nnomarchy-hyprland-window-close-all
nomarchy-hyprland-window-close-all
sleep 1 # Allow apps like Chrome to shutdown correctly

View File

@@ -3,11 +3,11 @@
# Reboot command that first closes all application windows (thus giving them a chance to save state).
# This is particularly helpful for applications like Chromium that otherwise won't shutdown cleanly.
nnomarchy-state clear re*-required
nomarchy-state clear re*-required
# Schedule the reboot to happen after closing windows (detached from terminal)
nohup bash -c "sleep 2 && systemctl reboot --no-wall" >/dev/null 2>&1 &
# Now close all windows
nnomarchy-hyprland-window-close-all
nomarchy-hyprland-window-close-all
sleep 1 # Allow apps like Chrome to shutdown correctly

View File

@@ -3,11 +3,11 @@
# Shutdown command that first closes all application windows (thus giving them a chance to save state).
# This is particularly helpful for applications like Chromium that otherwise won't shutdown cleanly.
nnomarchy-state clear re*-required
nomarchy-state clear re*-required
# Schedule the shutdown to happen after closing windows (detached from terminal)
nohup bash -c "sleep 2 && systemctl poweroff --no-wall" >/dev/null 2>&1 &
# Now close all windows
nnomarchy-hyprland-window-close-all
nomarchy-hyprland-window-close-all
sleep 1 # Allow apps like Chrome to shutdown correctly

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Select system timezone declaratively for Nnomarchy NixOS.
# Select system timezone declaratively for Nomarchy NixOS.
STATE_FILE="/etc/nixos/state.json"

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Nnomarchy Update Script
# Nomarchy Update Script
# 1. Updates the flake inputs in /etc/nixos
# 2. Applies system-wide NixOS changes
# 3. Applies user-level Home Manager changes
@@ -10,11 +10,11 @@ set -e
REPO_DIR="/etc/nixos"
if [ ! -d "$REPO_DIR" ]; then
echo "Error: $REPO_DIR not found. Are you running on a Nnomarchy system?"
echo "Error: $REPO_DIR not found. Are you running on a Nomarchy system?"
exit 1
fi
echo "--- Starting Nnomarchy Update ---"
echo "--- Starting Nomarchy Update ---"
# 1. Update Flake Lock
echo "Updating flake inputs..."
@@ -35,4 +35,4 @@ if [ -d "$REPO_DIR/.git" ]; then
sudo git -C "$REPO_DIR" commit -m "chore: update system (flake.lock)" || echo "No lockfile changes to commit."
fi
echo "--- Nnomarchy Update Complete ---"
echo "--- Nomarchy Update Complete ---"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash
# Build the Nnomarchy Installer ISO declaratively using the flake.
# Build the Nomarchy Installer ISO declaratively using the flake.
echo "Building Nnomarchy Installer ISO..."
echo "Building Nomarchy Installer ISO..."
# The output will be a symlink named 'result' in the current directory
nix build .#nixosConfigurations.installerIso.config.system.build.isoImage

View File

@@ -19,7 +19,7 @@ WEBCAM="false"
WEBCAM_DEVICE=""
RESOLUTION=""
STOP_RECORDING="false"
RECORDING_FILE="/tmp/nnomarchy-screenrecord-filename"
RECORDING_FILE="/tmp/nomarchy-screenrecord-filename"
for arg in "$@"; do
case "$arg" in

View File

@@ -3,7 +3,7 @@
# Share clipboard, file, or folder using LocalSend. Bound to Super + Ctrl + S by default.
if (($# == 0)); then
echo "Usage: nnomarchy-cmd-share [clipboard|file|folder]"
echo "Usage: nomarchy-cmd-share [clipboard|file|folder]"
exit 1
fi

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Add an EFI boot entry for the Nnomarchy UKI, allowing the system to boot directly
# Add an EFI boot entry for the Nomarchy UKI, allowing the system to boot directly
# without a bootloader like Limine. Requires UEFI firmware and a built UKI.
if [[ ! -d /sys/firmware/efi ]]; then
@@ -23,10 +23,10 @@ if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then
exit 1
fi
uki_file=$(find /boot/EFI/Linux/ -name "nnomarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
uki_file=$(find /boot/EFI/Linux/ -name "nomarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
if [[ -z $uki_file ]]; then
echo "Error: No Nnomarchy UKI found in /boot/EFI/Linux/" >&2
echo "Error: No Nomarchy UKI found in /boot/EFI/Linux/" >&2
exit 1
fi
@@ -40,6 +40,6 @@ if gum confirm "Setup direct boot (so snapshot booting must be done via bios)?";
sudo efibootmgr --create \
--disk "$disk" \
--part "$part" \
--label "Nnomarchy" \
--label "Nomarchy" \
--loader "\\EFI\\Linux\\$uki_file"
fi

View File

@@ -1,9 +1,9 @@
#!/bin/bash
# Returns drive information about a given volumne, like /dev/nvme0, which is used by nnomarchy-drive-select.
# Returns drive information about a given volumne, like /dev/nvme0, which is used by nomarchy-drive-select.
if (($# == 0)); then
echo "Usage: nnomarchy-drive-info [/dev/drive]"
echo "Usage: nomarchy-drive-info [/dev/drive]"
exit 1
else
drive="$1"

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Select a drive from a list with info that includes space and brand. Used by nnomarchy-drive-set-password.
# Select a drive from a list with info that includes space and brand. Used by nomarchy-drive-set-password.
if (($# == 0)); then
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
@@ -11,7 +11,7 @@ fi
drives_with_info=""
while IFS= read -r drive; do
[[ -n $drive ]] || continue
drives_with_info+="$(nnomarchy-drive-info "$drive")"$'\n'
drives_with_info+="$(nomarchy-drive-info "$drive")"$'\n'
done <<<"$drives"
selected_drive="$(printf "%s" "$drives_with_info" | gum choose --header "Select drive")" || exit 1

View File

@@ -8,7 +8,7 @@ if [[ -n $encrypted_drives ]]; then
if (( $(wc -l <<<encrypted_drives) == 1 )); then
drive_to_change="$encrypted_drives"
else
drive_to_change="$(nnomarchy-drive-select "$encrypted_drives")"
drive_to_change="$(nomarchy-drive-select "$encrypted_drives")"
fi
if [[ -n $drive_to_change ]]; then

View File

@@ -1,16 +1,16 @@
#!/bin/bash
# Run a named hook, like post-update (available in ~/.config/nnomarchy/hooks/post-update).
# Run a named hook, like post-update (available in ~/.config/nomarchy/hooks/post-update).
set -e
if (( $# < 1 )); then
echo "Usage: nnomarchy-hook [name] [args...]"
echo "Usage: nomarchy-hook [name] [args...]"
exit 1
fi
HOOK=$1
HOOK_PATH="$HOME/.config/nnomarchy/hooks/$1"
HOOK_PATH="$HOME/.config/nomarchy/hooks/$1"
shift
if [[ -f $HOOK_PATH ]]; then

View File

@@ -14,4 +14,4 @@ if pgrep -x "1password" >/dev/null; then
fi
# Avoid running screensaver when locked
pkill -f org.nnomarchy.screensaver
pkill -f org.nomarchy.screensaver

View File

@@ -1,8 +1,8 @@
#!/bin/bash
# Launch the Nnomarchy Menu or takes a parameter to jump straight to a submenu.
# Launch the Nomarchy Menu or takes a parameter to jump straight to a submenu.
export PATH="$HOME/.local/share/nnomarchy/bin:$PATH"
export PATH="$HOME/.local/share/nomarchy/bin:$PATH"
# Set to true when going directly to a submenu, so we can exit directly
BACK_TO_EXIT=false
@@ -42,30 +42,30 @@ menu() {
fi
fi
echo -e "$options" | nnomarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
echo -e "$options" | nomarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
}
terminal() {
xdg-terminal-exec --app-id=org.nnomarchy.terminal "$@"
xdg-terminal-exec --app-id=org.nomarchy.terminal "$@"
}
present_terminal() {
nnomarchy-launch-floating-terminal-with-presentation $1
nomarchy-launch-floating-terminal-with-presentation $1
}
open_in_editor() {
notify-send -u low "Editing config file" "$1"
nnomarchy-launch-editor "$1"
nomarchy-launch-editor "$1"
}
show_learn_menu() {
case $(menu "Learn" " Keybindings\n Nnomarchy\n Hyprland\n󰣇 Arch\n Neovim\n󱆃 Bash") in
*Keybindings*) nnomarchy-menu-keybindings ;;
*Nnomarchy*) nnomarchy-launch-webapp "https://learn.omacom.io/2/the-nnomarchy-manual" ;;
*Hyprland*) nnomarchy-launch-webapp "https://wiki.hypr.land/" ;;
*Arch*) nnomarchy-launch-webapp "https://wiki.archlinux.org/title/Main_page" ;;
*Bash*) nnomarchy-launch-webapp "https://devhints.io/bash" ;;
*Neovim*) nnomarchy-launch-webapp "https://www.lazyvim.org/keymaps" ;;
case $(menu "Learn" " Keybindings\n Nomarchy\n Hyprland\n󰣇 Arch\n Neovim\n󱆃 Bash") in
*Keybindings*) nomarchy-menu-keybindings ;;
*Nomarchy*) nomarchy-launch-webapp "https://learn.omacom.io/2/the-nomarchy-manual" ;;
*Hyprland*) nomarchy-launch-webapp "https://wiki.hypr.land/" ;;
*Arch*) nomarchy-launch-webapp "https://wiki.archlinux.org/title/Main_page" ;;
*Bash*) nomarchy-launch-webapp "https://devhints.io/bash" ;;
*Neovim*) nomarchy-launch-webapp "https://www.lazyvim.org/keymaps" ;;
*) show_main_menu ;;
esac
}
@@ -82,7 +82,7 @@ show_trigger_menu() {
show_capture_menu() {
case $(menu "Capture" " Screenshot\n Screenrecord\n󰃉 Color") in
*Screenshot*) nnomarchy-cmd-screenshot ;;
*Screenshot*) nomarchy-cmd-screenshot ;;
*Screenrecord*) show_screenrecord_menu ;;
*Color*) pkill hyprpicker || hyprpicker -a ;;
*) back_to show_trigger_menu ;;
@@ -117,18 +117,18 @@ show_webcam_select_menu() {
}
show_screenrecord_menu() {
nnomarchy-cmd-screenrecord --stop-recording && exit 0
nomarchy-cmd-screenrecord --stop-recording && exit 0
case $(menu "Screenrecord" " With no audio\n With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
*"With no audio") nnomarchy-cmd-screenrecord ;;
*"With desktop audio") nnomarchy-cmd-screenrecord --with-desktop-audio ;;
*"With desktop + microphone audio") nnomarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
*"With no audio") nomarchy-cmd-screenrecord ;;
*"With desktop audio") nomarchy-cmd-screenrecord --with-desktop-audio ;;
*"With desktop + microphone audio") nomarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
*"With desktop + microphone audio + webcam")
local device=$(show_webcam_select_menu) || {
back_to show_capture_menu
return
}
nnomarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
nomarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
;;
*) back_to show_capture_menu ;;
esac
@@ -136,9 +136,9 @@ show_screenrecord_menu() {
show_share_menu() {
case $(menu "Share" " Clipboard\n File \n Folder") in
*Clipboard*) nnomarchy-cmd-share clipboard ;;
*File*) terminal bash -c "nnomarchy-cmd-share file" ;;
*Folder*) terminal bash -c "nnomarchy-cmd-share folder" ;;
*Clipboard*) nomarchy-cmd-share clipboard ;;
*File*) terminal bash -c "nomarchy-cmd-share file" ;;
*Folder*) terminal bash -c "nomarchy-cmd-share folder" ;;
*) back_to show_trigger_menu ;;
esac
}
@@ -146,21 +146,21 @@ show_share_menu() {
show_toggle_menu() {
case $(menu "Toggle" "󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Display Scaling") in
*Screensaver*) nnomarchy-toggle-screensaver ;;
*Nightlight*) nnomarchy-toggle-nightlight ;;
*Idle*) nnomarchy-toggle-idle ;;
*Bar*) nnomarchy-toggle-waybar ;;
*Layout*) nnomarchy-hyprland-workspace-layout-toggle ;;
*Ratio*) nnomarchy-hyprland-window-single-square-aspect-toggle ;;
*Gaps*) nnomarchy-hyprland-window-gaps-toggle ;;
*Scaling*) nnomarchy-hyprland-monitor-scaling-cycle ;;
*Screensaver*) nomarchy-toggle-screensaver ;;
*Nightlight*) nomarchy-toggle-nightlight ;;
*Idle*) nomarchy-toggle-idle ;;
*Bar*) nomarchy-toggle-waybar ;;
*Layout*) nomarchy-hyprland-workspace-layout-toggle ;;
*Ratio*) nomarchy-hyprland-window-single-square-aspect-toggle ;;
*Gaps*) nomarchy-hyprland-window-gaps-toggle ;;
*Scaling*) nomarchy-hyprland-monitor-scaling-cycle ;;
*) back_to show_trigger_menu ;;
esac
}
show_hardware_menu() {
case $(menu "Toggle" " Hybrid GPU") in
*"Hybrid GPU"*) present_terminal nnomarchy-toggle-hybrid-gpu ;;
*"Hybrid GPU"*) present_terminal nomarchy-toggle-hybrid-gpu ;;
*) show_trigger_menu ;;
esac
}
@@ -171,26 +171,26 @@ show_style_menu() {
*Font*) show_font_menu ;;
*Background*) show_background_menu ;;
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
*Screensaver*) open_in_editor ~/.config/nnomarchy/branding/screensaver.txt ;;
*About*) open_in_editor ~/.config/nnomarchy/branding/about.txt ;;
*Screensaver*) open_in_editor ~/.config/nomarchy/branding/screensaver.txt ;;
*About*) open_in_editor ~/.config/nomarchy/branding/about.txt ;;
*) show_main_menu ;;
esac
}
show_theme_menu() {
nnomarchy-launch-walker -m menus:nnomarchythemes --width 800 --minheight 400
nomarchy-launch-walker -m menus:nomarchythemes --width 800 --minheight 400
}
show_background_menu() {
nnomarchy-launch-walker -m menus:nnomarchyBackgroundSelector --width 800 --minheight 400
nomarchy-launch-walker -m menus:nomarchyBackgroundSelector --width 800 --minheight 400
}
show_font_menu() {
theme=$(menu "Font" "$(nnomarchy-font-list)" "--width 350" "$(nnomarchy-font-current)")
theme=$(menu "Font" "$(nomarchy-font-list)" "--width 350" "$(nomarchy-font-current)")
if [[ $theme == "CNCLD" || -z $theme ]]; then
back_to show_style_menu
else
nnomarchy-font-set "$theme"
nomarchy-font-set "$theme"
fi
}
@@ -202,16 +202,16 @@ show_setup_menu() {
options="$options\n󰱔 DNS\n Security\n Config"
case $(menu "Setup" "$options") in
*Audio*) nnomarchy-launch-audio ;;
*Wifi*) nnomarchy-launch-wifi ;;
*Bluetooth*) nnomarchy-launch-bluetooth ;;
*Audio*) nomarchy-launch-audio ;;
*Wifi*) nomarchy-launch-wifi ;;
*Bluetooth*) nomarchy-launch-bluetooth ;;
*Power*) show_setup_power_menu ;;
*System*) show_setup_system_menu ;;
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
*Input*) open_in_editor ~/.config/hypr/input.conf ;;
*Key\ Remapping*) nnomarchy-setup-makima && open_in_editor "$HOME/.config/makima/AT Translated Set 2 keyboard.toml" && nnomarchy-restart-makima ;;
*DNS*) present_terminal nnomarchy-setup-dns ;;
*Key\ Remapping*) nomarchy-setup-makima && open_in_editor "$HOME/.config/makima/AT Translated Set 2 keyboard.toml" && nomarchy-restart-makima ;;
*DNS*) present_terminal nomarchy-setup-dns ;;
*Security*) show_setup_security_menu ;;
*Config*) show_setup_config_menu ;;
*) show_main_menu ;;
@@ -219,7 +219,7 @@ show_setup_menu() {
}
show_setup_power_menu() {
profile=$(menu "Power Profile" "$(nnomarchy-powerprofiles-list)" "" "$(powerprofilesctl get)")
profile=$(menu "Power Profile" "$(nomarchy-powerprofiles-list)" "" "$(powerprofilesctl get)")
if [[ $profile == "CNCLD" || -z $profile ]]; then
back_to show_setup_menu
@@ -230,8 +230,8 @@ show_setup_power_menu() {
show_setup_security_menu() {
case $(menu "Setup" "󰈷 Fingerprint\n Fido2") in
*Fingerprint*) present_terminal nnomarchy-setup-fingerprint ;;
*Fido2*) present_terminal nnomarchy-setup-fido2 ;;
*Fingerprint*) present_terminal nomarchy-setup-fingerprint ;;
*Fido2*) present_terminal nomarchy-setup-fido2 ;;
*) show_setup_menu ;;
esac
}
@@ -240,13 +240,13 @@ show_setup_config_menu() {
case $(menu "Setup" " Defaults\n Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar\n󰞅 XCompose") in
*Defaults*) open_in_editor ~/.config/uwsm/default ;;
*Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;;
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && nnomarchy-restart-hypridle ;;
*Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && nomarchy-restart-hypridle ;;
*Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
*Hyprsunset*) open_in_editor ~/.config/hypr/hyprsunset.conf && nnomarchy-restart-hyprsunset ;;
*Swayosd*) open_in_editor ~/.config/swayosd/config.toml && nnomarchy-restart-swayosd ;;
*Walker*) open_in_editor ~/.config/walker/config.toml && nnomarchy-restart-walker ;;
*Waybar*) open_in_editor ~/.config/waybar/config.jsonc && nnomarchy-restart-waybar ;;
*XCompose*) open_in_editor ~/.XCompose && nnomarchy-restart-xcompose ;;
*Hyprsunset*) open_in_editor ~/.config/hypr/hyprsunset.conf && nomarchy-restart-hyprsunset ;;
*Swayosd*) open_in_editor ~/.config/swayosd/config.toml && nomarchy-restart-swayosd ;;
*Walker*) open_in_editor ~/.config/walker/config.toml && nomarchy-restart-walker ;;
*Waybar*) open_in_editor ~/.config/waybar/config.jsonc && nomarchy-restart-waybar ;;
*XCompose*) open_in_editor ~/.XCompose && nomarchy-restart-xcompose ;;
*) show_setup_menu ;;
esac
}
@@ -260,16 +260,16 @@ show_setup_system_menu() {
options="$options󰒲 Disable Suspend"
fi
if nnomarchy-hibernation-available; then
if nomarchy-hibernation-available; then
options="$options\n󰤁 Disable Hibernate"
else
options="$options\n󰤁 Enable Hibernate"
fi
case $(menu "System" "$options") in
*Suspend*) nnomarchy-toggle-suspend ;;
*"Enable Hibernate"*) present_terminal nnomarchy-hibernation-setup ;;
*"Disable Hibernate"*) present_terminal nnomarchy-hibernation-remove ;;
*Suspend*) nomarchy-toggle-suspend ;;
*"Enable Hibernate"*) present_terminal nomarchy-hibernation-setup ;;
*"Disable Hibernate"*) present_terminal nomarchy-hibernation-remove ;;
*) show_setup_menu ;;
esac
}
@@ -277,25 +277,25 @@ show_setup_system_menu() {
show_update_menu() {
case $(menu "Update" "  Nnomarchy\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in
*Nnomarchy*) present_terminal nnomarchy-update ;;
*Themes*) present_terminal nnomarchy-theme-update ;;
case $(menu "Update" "  Nomarchy\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in
*Nomarchy*) present_terminal nomarchy-update ;;
*Themes*) present_terminal nomarchy-theme-update ;;
*Process*) show_update_process_menu ;;
*Hardware*) show_update_hardware_menu ;;
*Firmware*) present_terminal nnomarchy-update-firmware ;;
*Timezone*) present_terminal nnomarchy-tz-select ;;
*Time*) present_terminal nnomarchy-update-time ;;
*Firmware*) present_terminal nomarchy-update-firmware ;;
*Timezone*) present_terminal nomarchy-tz-select ;;
*Time*) present_terminal nomarchy-update-time ;;
*Password*) show_update_password_menu ;;
*) show_main_menu ;;
esac
}
show_update_process_menu() {
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
*Hypridle*) nnomarchy-restart-hypridle ;;
*Hyprsunset*) nnomarchy-restart-hyprsunset ;;
*Swayosd*) nnomarchy-restart-swayosd ;;
*Walker*) nnomarchy-restart-walker ;;
*Waybar*) nnomarchy-restart-waybar ;;
*Hypridle*) nomarchy-restart-hypridle ;;
*Hyprsunset*) nomarchy-restart-hyprsunset ;;
*Swayosd*) nomarchy-restart-swayosd ;;
*Walker*) nomarchy-restart-walker ;;
*Waybar*) nomarchy-restart-waybar ;;
*) show_update_menu ;;
esac
}
@@ -304,39 +304,39 @@ show_update_process_menu() {
show_update_hardware_menu() {
case $(menu "Restart" " Audio\n󱚾 Wi-Fi\n󰂯 Bluetooth") in
*Audio*) present_terminal nnomarchy-restart-pipewire ;;
*Wi-Fi*) present_terminal nnomarchy-restart-wifi ;;
*Bluetooth*) present_terminal nnomarchy-restart-bluetooth ;;
*Audio*) present_terminal nomarchy-restart-pipewire ;;
*Wi-Fi*) present_terminal nomarchy-restart-wifi ;;
*Bluetooth*) present_terminal nomarchy-restart-bluetooth ;;
*) show_update_menu ;;
esac
}
show_update_password_menu() {
case $(menu "Update Password" " Drive Encryption\n User") in
*Drive*) present_terminal nnomarchy-drive-set-password ;;
*Drive*) present_terminal nomarchy-drive-set-password ;;
*User*) present_terminal passwd ;;
*) show_update_menu ;;
esac
}
show_about() {
nnomarchy-launch-about
nomarchy-launch-about
}
show_system_menu() {
local options="󱄄 Screensaver\n Lock"
[[ $NNOMARCHY_TOGGLE_SUSPEND != "false" ]] && options="$options\n󰒲 Suspend"
nnomarchy-hibernation-available && options="$options\n󰤁 Hibernate"
nomarchy-hibernation-available && options="$options\n󰤁 Hibernate"
options="$options\n󰍃 Logout\n󰜉 Restart\n󰐥 Shutdown"
case $(menu "System" "$options") in
*Screensaver*) nnomarchy-launch-screensaver force ;;
*Lock*) nnomarchy-lock-screen ;;
*Screensaver*) nomarchy-launch-screensaver force ;;
*Lock*) nomarchy-lock-screen ;;
*Suspend*) systemctl suspend ;;
*Hibernate*) systemctl hibernate ;;
*Logout*) nnomarchy-system-logout ;;
*Restart*) nnomarchy-system-reboot ;;
*Shutdown*) nnomarchy-system-shutdown ;;
*Logout*) nomarchy-system-logout ;;
*Restart*) nomarchy-system-reboot ;;
*Shutdown*) nomarchy-system-shutdown ;;
*) back_to show_main_menu ;;
esac
}
@@ -366,7 +366,7 @@ go_to_menu() {
}
# Allow user extensions and overrides
USER_EXTENSIONS="$HOME/.config/nnomarchy/extensions/menu.sh"
USER_EXTENSIONS="$HOME/.config/nomarchy/extensions/menu.sh"
[[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS"
toggle_existing_menu

View File

@@ -79,7 +79,7 @@ parse_keycodes() {
# Fetch dynamic keybindings from Hyprland
#
# Also do some pre-processing:
# - Remove standard Nnomarchy bin path prefix
# - Remove standard Nomarchy bin path prefix
# - Remove uwsm prefix
# - Map numeric modifier key mask to a textual rendition
# - Output comma-separated values that the parser can understand
@@ -88,7 +88,7 @@ dynamic_bindings() {
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' |
sed -r \
-e 's/null//' \
-e 's,~/.local/share/nnomarchy/bin/,,' \
-e 's,~/.local/share/nomarchy/bin/,,' \
-e 's,uwsm app -- ,,' \
-e 's,uwsm-app -- ,,' \
-e 's/@0//' \
@@ -172,7 +172,7 @@ prioritize_entries() {
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/) && !match(line, /SUPER SHIFT.*\+.*B.*→.*Browser/)) prio = 2
if (match(line, /File manager/) && !match(line, /File manager \(cwd\)/)) prio = 3
if (match(line, /Launch apps/)) prio = 4
if (match(line, /Nnomarchy menu/)) prio = 5
if (match(line, /Nomarchy menu/)) prio = 5
if (match(line, /System menu/)) prio = 6
if (match(line, /Theme menu/)) prio = 7
if (match(line, /Full screen/)) prio = 8

View File

@@ -3,7 +3,7 @@
# Dismiss a mako notification on the basis of its summary. Used by the first-run notifications to dismiss them after clicking for action.
if (($# == 0)); then
echo "Usage: nnomarchy-notification-dismiss <summary>"
echo "Usage: nomarchy-notification-dismiss <summary>"
exit 1
fi

View File

@@ -1,13 +1,13 @@
#!/bin/bash
# Install an npx wrapper for a given npm package.
# Usage: nnomarchy-npx-install <package> [command-name]
# Usage: nomarchy-npx-install <package> [command-name]
#
# If command-name is omitted, it defaults to the package name.
# Example: nnomarchy-npx-install opencode-ai opencode
# Example: nomarchy-npx-install opencode-ai opencode
if [[ -z $1 ]]; then
echo "Usage: nnomarchy-npx-install <package> [command-name]"
echo "Usage: nomarchy-npx-install <package> [command-name]"
exit 1
fi

View File

@@ -1,21 +1,21 @@
#!/usr/bin/env bash
# Nnomarchy on-boot initialization script.
# Nomarchy on-boot initialization script.
# Automatically detects the hardware, applies necessary runtime tweaks,
# and sets the correct screen resolution/scaling.
# 1. Automatically configure optimal screen resolution and scaling
nnomarchy-hyprland-monitor-scaling-cycle >/dev/null 2>&1
nomarchy-hyprland-monitor-scaling-cycle >/dev/null 2>&1
# 2. Hardware-specific runtime tweaks
if nnomarchy-hw-match "Laptop 16"; then
if nomarchy-hw-match "Laptop 16"; then
# Framework 16 specific tweaks
nnomarchy-theme-set-keyboard-f16 >/dev/null 2>&1
nomarchy-theme-set-keyboard-f16 >/dev/null 2>&1
fi
if nnomarchy-hw-asus-rog; then
if nomarchy-hw-asus-rog; then
# Asus ROG specific tweaks
nnomarchy-theme-set-keyboard-asus-rog >/dev/null 2>&1
nomarchy-theme-set-keyboard-asus-rog >/dev/null 2>&1
fi
# 3. Declarative hardware configuration check (nixos-hardware)

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Overwrite the user config for fastfetch with the Nnomarchy default.
# Overwrite the user config for fastfetch with the Nomarchy default.
nnomarchy-refresh-config fastfetch/config.jsonc
nomarchy-refresh-config fastfetch/config.jsonc

View File

@@ -3,20 +3,20 @@
set -e
COMMAND="$1"
NOMARCHY_PATH=${NOMARCHY_PATH:-$HOME/.local/share/nnomarchy}
NOMARCHY_PATH=${NOMARCHY_PATH:-$HOME/.local/share/nomarchy}
if [[ -z $COMMAND ]]; then
echo "Usage: nnomarchy-snapshot <create|restore>" >&2
echo "Usage: nomarchy-snapshot <create|restore>" >&2
exit 1
fi
if ! command -v snapper &>/dev/null; then
exit 127 # nnomarchy-update can use this to just ignore if snapper is not available
exit 127 # nomarchy-update can use this to just ignore if snapper is not available
fi
case "$COMMAND" in
create)
DESC="$(nnomarchy-version)"
DESC="$(nomarchy-version)"
echo -e "\e[32mCreate system snapshot\e[0m"

View File

@@ -1,24 +1,24 @@
#!/bin/bash
# Manage persistent runtime state files for Nnomarchy indicators.
# Usage: nnomarchy-state <set|clear> <state-name-or-pattern>
# Manage persistent runtime state files for Nomarchy indicators.
# Usage: nomarchy-state <set|clear> <state-name-or-pattern>
# Used to track whether things like reboot, restart, etc are required.
# DO NOT use this for configuration toggles (suspend, screensaver, etc).
# Use declarative Nnomarchy NixOS home-manager options for those instead.
# Use declarative Nomarchy NixOS home-manager options for those instead.
STATE_DIR="$HOME/.local/state/nnomarchy"
STATE_DIR="$HOME/.local/state/nomarchy"
mkdir -p "$STATE_DIR"
COMMAND="$1"
STATE_NAME="$2"
if [[ -z $COMMAND ]]; then
echo "Usage: nnomarchy-state <set|clear> <state-name-or-pattern>"
echo "Usage: nomarchy-state <set|clear> <state-name-or-pattern>"
exit 1
fi
if [[ -z $STATE_NAME ]]; then
echo "Usage: nnomarchy-state $COMMAND <state-name>"
echo "Usage: nomarchy-state $COMMAND <state-name>"
exit 1
fi

View File

@@ -1,11 +1,11 @@
#!/usr/bin/env bash
# nnomarchy-sync: Automate backing up and restoring Nnomarchy declarative configurations and dynamic state.
# nomarchy-sync: Automate backing up and restoring Nomarchy declarative configurations and dynamic state.
set -e
if [[ -z $1 ]]; then
echo "Usage: nnomarchy-sync <push|pull> [repo-url]"
echo "Usage: nomarchy-sync <push|pull> [repo-url]"
echo " push: Backup current state to the configured repository."
echo " pull: Restore state from the configured repository and apply updates."
exit 1
@@ -18,7 +18,7 @@ STATE_DIR="$HOME/.config/home-manager"
CONFIG_DIR="/etc/nixos"
# Identify the target repo directory (we use a local dot-folder to stage things)
SYNC_DIR="$HOME/.local/share/nnomarchy-sync"
SYNC_DIR="$HOME/.local/share/nomarchy-sync"
mkdir -p "$SYNC_DIR"
cd "$SYNC_DIR"
@@ -26,14 +26,14 @@ cd "$SYNC_DIR"
if [ ! -d ".git" ]; then
if [[ -z $REPO_URL ]]; then
echo "Error: No Git repository configured. Please provide a repo-url for the first run:"
echo "Example: nnomarchy-sync push git@github.com:username/nnomarchy-backup.git"
echo "Example: nomarchy-sync push git@github.com:username/nomarchy-backup.git"
exit 1
fi
git init
git remote add origin "$REPO_URL"
# Basic configuration for automated commits
git config user.name "Nnomarchy Sync"
git config user.email "sync@nnomarchy.local"
git config user.name "Nomarchy Sync"
git config user.email "sync@nomarchy.local"
fi
if [[ "$COMMAND" == "push" ]]; then

View File

@@ -1,13 +1,13 @@
#!/usr/bin/env bash
# Build and run the Nnomarchy Installer VM for testing.
# Build and run the Nomarchy Installer VM for testing.
echo "Building Nnomarchy Installer VM..."
echo "Building Nomarchy Installer VM..."
nix build .#nixosConfigurations.installerVm.config.system.build.vm
if [ $? -eq 0 ]; then
echo "Success! Launching Installer VM..."
./result/bin/run-nnomarchy-installer-vm
./result/bin/run-nomarchy-installer-vm
else
echo "Error: VM build failed."
exit 1

View File

@@ -1,14 +1,14 @@
#!/usr/bin/env bash
# Build and run the Nnomarchy VM (installed environment) for testing.
# Build and run the Nomarchy VM (installed environment) for testing.
echo "Building Nnomarchy VM (Installed Environment)..."
echo "Note: To test the INSTALLER, run 'nnomarchy-test-installer' instead."
echo "Building Nomarchy VM (Installed Environment)..."
echo "Note: To test the INSTALLER, run 'nomarchy-test-installer' instead."
nix build .#nixosConfigurations.vm.config.system.build.vm
if [ $? -eq 0 ]; then
echo "Success! Launching VM..."
./result/bin/run-nnomarchy-vm
./result/bin/run-nomarchy-vm
else
echo "Error: VM build failed."
exit 1

View File

@@ -3,7 +3,7 @@
# Toggle to pop-out a tile to stay fixed on a display basis.
# Usage:
# nnomarchy-hyprland-window-pop [width height [x y]]
# nomarchy-hyprland-window-pop [width height [x y]]
#
# Arguments:
# width Optional. Width of the floating window. Default: 1300

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Reload hyprland configuration (used by the Nnomarchy theme switching).
# Reload hyprland configuration (used by the Nomarchy theme switching).
hyprctl reload >/dev/null

View File

@@ -2,4 +2,4 @@
# Restart the hypridle service (used for idle detection and auto-lock).
nnomarchy-restart-app hypridle
nomarchy-restart-app hypridle

View File

@@ -2,4 +2,4 @@
# Restart the hyprsunset service (used for blue light filtering/night light).
nnomarchy-restart-app hyprsunset
nomarchy-restart-app hyprsunset

Some files were not shown because too many files have changed in this diff Show More