Compare commits
4 Commits
14dd663d56
...
13ecfa92f0
| Author | SHA1 | Date | |
|---|---|---|---|
| 13ecfa92f0 | |||
| 61d591f5d2 | |||
| b39808d847 | |||
|
|
50a558615c |
@@ -169,6 +169,11 @@ ryzenadj)**, **no Secure Boot**, and the **stateVersion override**.
|
|||||||
nomarchy.hardware.amd.enable = true; # amd-pstate + radeonsi VA-API
|
nomarchy.hardware.amd.enable = true; # amd-pstate + radeonsi VA-API
|
||||||
# nomarchy.hardware.amd.rocm.enable = true; # opt-in GPU compute (multi-GB)
|
# nomarchy.hardware.amd.rocm.enable = true; # opt-in GPU compute (multi-GB)
|
||||||
|
|
||||||
|
# LUKS machines: the disk passphrase already gates access, so boot
|
||||||
|
# straight into the session — this is what nomarchy-install sets on
|
||||||
|
# encrypted installs. Omit it on unencrypted machines.
|
||||||
|
nomarchy.system.greeter.autoLogin = username;
|
||||||
|
|
||||||
# CRITICAL: keep your ORIGINAL install's value — never Nomarchy's 26.05.
|
# CRITICAL: keep your ORIGINAL install's value — never Nomarchy's 26.05.
|
||||||
system.stateVersion = "24.11";
|
system.stateVersion = "24.11";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,15 +74,18 @@ let
|
|||||||
(e: "${e.mods}, ${e.key}, exec, ${focusOrLaunch}/bin/nomarchy-focus-or-launch ${e.class} ${e.command}")
|
(e: "${e.mods}, ${e.key}, exec, ${focusOrLaunch}/bin/nomarchy-focus-or-launch ${e.class} ${e.command}")
|
||||||
lofEntries;
|
lofEntries;
|
||||||
|
|
||||||
# SUPER+1..9 / SUPER+SHIFT+1..9 workspace binds, generated.
|
# SUPER+1..9,0 / SUPER+SHIFT+1..9,0 workspace binds, generated
|
||||||
|
# (the 0 key is workspace 10).
|
||||||
workspaceBinds = builtins.concatLists (builtins.genList
|
workspaceBinds = builtins.concatLists (builtins.genList
|
||||||
(i:
|
(i:
|
||||||
let ws = toString (i + 1);
|
let
|
||||||
|
ws = toString (i + 1);
|
||||||
|
key = if i == 9 then "0" else ws;
|
||||||
in [
|
in [
|
||||||
"$mod, ${ws}, workspace, ${ws}"
|
"$mod, ${key}, workspace, ${ws}"
|
||||||
"$mod SHIFT, ${ws}, movetoworkspace, ${ws}"
|
"$mod SHIFT, ${key}, movetoworkspace, ${ws}"
|
||||||
])
|
])
|
||||||
9);
|
10);
|
||||||
|
|
||||||
# The keyboard binds — single source shared with the SUPER+? cheatsheet
|
# The keyboard binds — single source shared with the SUPER+? cheatsheet
|
||||||
# (rofi.nix renders the same list). Edit them in ./keybinds.nix.
|
# (rofi.nix renders the same list). Edit them in ./keybinds.nix.
|
||||||
|
|||||||
@@ -87,8 +87,8 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
extra = [
|
extra = [
|
||||||
{ keys = "SUPER + 1-9"; desc = "Switch to workspace 1-9"; }
|
{ keys = "SUPER + 1-9, 0"; desc = "Switch to workspace 1-10 (0 = 10)"; }
|
||||||
{ keys = "SUPER + SHIFT + 1-9"; desc = "Move window to workspace 1-9"; }
|
{ keys = "SUPER + SHIFT + 1-9, 0"; desc = "Move window to workspace 1-10 (0 = 10)"; }
|
||||||
{ keys = "SUPER + drag"; desc = "Move (LMB) / resize (RMB) window"; }
|
{ keys = "SUPER + drag"; desc = "Move (LMB) / resize (RMB) window"; }
|
||||||
{ keys = "Volume / Brightness"; desc = "Hardware keys, shown via the OSD"; }
|
{ keys = "Volume / Brightness"; desc = "Hardware keys, shown via the OSD"; }
|
||||||
{ keys = "Bar: click"; desc = "Caffeine — hold the screen awake (idle inhibitor)"; }
|
{ keys = "Bar: click"; desc = "Caffeine — hold the screen awake (idle inhibitor)"; }
|
||||||
|
|||||||
@@ -35,6 +35,19 @@ let
|
|||||||
base0E = hex c.accentAlt;# magenta
|
base0E = hex c.accentAlt;# magenta
|
||||||
base0F = hex c.bad; # brown/deprecated
|
base0F = hex c.bad; # brown/deprecated
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Submenu arrow, bundled: adw-gtk3 (and our earlier fix) look up
|
||||||
|
# pan-end-symbolic in the ICON theme, but Papirus doesn't ship it and
|
||||||
|
# its inheritance chain (breeze-dark → hicolor) is broken here — so
|
||||||
|
# menu arrows rendered as nothing (nm-applet: no hint that "VPN
|
||||||
|
# Connections" opens a submenu). Same trick adw-gtk3 uses for its
|
||||||
|
# check marks: a bundled asset via -gtk-recolor(url(…)), immune to
|
||||||
|
# icon-pack coverage. Shape traced from Adwaita's pan-end-symbolic.
|
||||||
|
panEndSvg = pkgs.writeText "nomarchy-pan-end-symbolic.svg" ''
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
|
||||||
|
<path d="M 6 4 L 10 8 L 6 12 Z"/>
|
||||||
|
</svg>
|
||||||
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = lib.mkIf cfg.stylix.enable {
|
config = lib.mkIf cfg.stylix.enable {
|
||||||
@@ -67,14 +80,16 @@ in
|
|||||||
menu menuitem:disabled, .menu menuitem:disabled {
|
menu menuitem:disabled, .menu menuitem:disabled {
|
||||||
color: #${base16.base03};
|
color: #${base16.base03};
|
||||||
}
|
}
|
||||||
/* Submenu disclosure arrows — without this they pick muted. */
|
/* Submenu disclosure arrows — bundled asset, NOT an icon-theme
|
||||||
|
lookup: pan-end-symbolic is missing from Papirus and its
|
||||||
|
broken inheritance chain, so -gtk-icontheme() drew nothing. */
|
||||||
menu menuitem arrow, .menu menuitem arrow,
|
menu menuitem arrow, .menu menuitem arrow,
|
||||||
menu menuitem:hover arrow, menu menuitem:selected arrow {
|
menu menuitem:hover arrow, menu menuitem:selected arrow {
|
||||||
min-width: 16px;
|
min-width: 16px;
|
||||||
min-height: 16px;
|
min-height: 16px;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
-gtk-icon-source: -gtk-icontheme("pan-end-symbolic");
|
-gtk-icon-source: -gtk-recolor(url("${panEndSvg}"));
|
||||||
}
|
}
|
||||||
menu menuitem:hover arrow, menu menuitem:selected arrow {
|
menu menuitem:hover arrow, menu menuitem:selected arrow {
|
||||||
color: #${base16.base00};
|
color: #${base16.base00};
|
||||||
|
|||||||
@@ -107,15 +107,20 @@ let
|
|||||||
|
|
||||||
# VPN indicator — shows a shield when a NetworkManager VPN/WireGuard
|
# VPN indicator — shows a shield when a NetworkManager VPN/WireGuard
|
||||||
# connection is active OR Tailscale is up; prints nothing otherwise so the
|
# connection is active OR Tailscale is up; prints nothing otherwise so the
|
||||||
# module self-hides (like nightlight/updates). Click opens the VPN submenu.
|
# module self-hides (like nightlight/updates). The tooltip names each
|
||||||
|
# active VPN (NM connection names, "Tailscale") — without it a forgotten
|
||||||
|
# tailscaled reads as "the icon is stuck". Click opens the VPN submenu.
|
||||||
vpnStatus = pkgs.writeShellScriptBin "nomarchy-vpn-status" ''
|
vpnStatus = pkgs.writeShellScriptBin "nomarchy-vpn-status" ''
|
||||||
active=$(nmcli -t -f TYPE connection show --active 2>/dev/null | grep -Exm1 'vpn|wireguard')
|
names=$(nmcli -t -f NAME,TYPE connection show --active 2>/dev/null \
|
||||||
|
| awk -F: '$2=="vpn"||$2=="wireguard"{print $1}')
|
||||||
ts=""
|
ts=""
|
||||||
if command -v tailscale >/dev/null 2>&1; then
|
if command -v tailscale >/dev/null 2>&1; then
|
||||||
[ "$(tailscale status --json 2>/dev/null | jq -r '.BackendState // empty')" = Running ] && ts=1
|
[ "$(tailscale status --json 2>/dev/null | jq -r '.BackendState // empty')" = Running ] && ts=Tailscale
|
||||||
fi
|
fi
|
||||||
[ -n "$active" ] || [ -n "$ts" ] || exit 0
|
[ -n "$names$ts" ] || exit 0
|
||||||
printf '{"text":"","tooltip":"VPN active (click to manage)","class":"on"}\n'
|
list=$(printf '%s\n' "$names" "$ts" | grep -v '^$' | paste -sd ', ' -)
|
||||||
|
tip=$(printf 'VPN: %s\n(click to manage)' "$list" | jq -Rs 'rtrimstr("\n")')
|
||||||
|
printf '{"text":"","tooltip":%s,"class":"on"}\n' "$tip"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Health warning — self-gates: prints nothing while nomarchy-doctor
|
# Health warning — self-gates: prints nothing while nomarchy-doctor
|
||||||
@@ -260,6 +265,13 @@ let
|
|||||||
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span>{capacity}%";
|
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span>{capacity}%";
|
||||||
format-charging = "<span size='${toString (t.fonts.size + 2)}pt'> </span>{capacity}%";
|
format-charging = "<span size='${toString (t.fonts.size + 2)}pt'> </span>{capacity}%";
|
||||||
format-icons = [ " " " " " " " " " " ];
|
format-icons = [ " " " " " " " " " " ];
|
||||||
|
# The kernel's "Not charging" maps to waybar's Plugged state — on a
|
||||||
|
# machine with a charge cap that's the hold band doing its job
|
||||||
|
# (power.nix sets start = cap − 10), which reads as "broken charger"
|
||||||
|
# without an explanation. The cap value isn't baked here: the menu
|
||||||
|
# can change it live (sysfs + state, no rebuild), so a number would
|
||||||
|
# go stale.
|
||||||
|
tooltip-format-plugged = "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust";
|
||||||
# Click either the battery or the power-profile icon → the combined
|
# Click either the battery or the power-profile icon → the combined
|
||||||
# power menu (profile + charge cap). The granular System rows stay.
|
# power menu (profile + charge cap). The granular System rows stay.
|
||||||
on-click = "nomarchy-menu powermgmt";
|
on-click = "nomarchy-menu powermgmt";
|
||||||
|
|||||||
@@ -126,6 +126,7 @@
|
|||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
||||||
|
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
|
|||||||
@@ -118,6 +118,7 @@
|
|||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
||||||
|
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
|
|||||||
@@ -82,6 +82,7 @@
|
|||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
||||||
|
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
||||||
"format-full": " 100%",
|
"format-full": " 100%",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
" ",
|
||||||
|
|||||||
@@ -82,6 +82,7 @@
|
|||||||
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
"format": "<span size='13pt'>{icon}</span>{capacity}%",
|
||||||
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
"format-charging": "<span size='13pt'> </span>{capacity}%",
|
||||||
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
"format-plugged": "<span size='13pt'> </span>{capacity}%",
|
||||||
|
"tooltip-format-plugged": "Plugged in, not charging — held at {capacity}% by the battery charge cap\nCharging resumes ~10% below the cap · click to adjust",
|
||||||
"format-icons": [
|
"format-icons": [
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
|
|||||||
Reference in New Issue
Block a user