Phase 2 of the in-flake-state philosophy, mirroring night-light: the
nomarchy-keyboard-watch daemon now remembers per-device layouts in the
git-tracked state file (settings.keyboard.devices) instead of
~/.local/state/nomarchy/keyboard-layouts.
- Reads the LIVE working-tree map (theme-sync get → jq) so a pick this
session is honoured at once; writes instantly with --no-switch (no
rebuild). Writes the whole map back at the dot-free parent path
(read-modify-write) so a device name with a dot can't corrupt the
tool's dotted set-path (Hyprland only sanitises spaces→-).
- Graduation: nomarchy.keyboard.devices now mkDefault-merges entries
from settings.keyboard.devices, so each remembered device becomes a
generated Hyprland device{} block on the next rebuild (reproducible,
hotplug-applied). A hand-written keyboard.devices.<name> still wins;
once baked, the watcher's is_declared check makes it step back.
- theme.nix seeds settings.keyboard.devices = {} (sparse state still
evaluates); options/template descriptions updated; ROADMAP marked done.
Eval-verified (graduation + mkDefault precedence) and the set/get
writer round-trips. Still needs the on-hardware hotplug re-verify (the
picker path isn't testable in CI).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
149 lines
6.2 KiB
Nix
149 lines
6.2 KiB
Nix
# Your user environment. The Nomarchy desktop (Hyprland, Waybar,
|
||
# Ghostty, theming engine, Stylix) comes from homeModules.nomarchy;
|
||
# tune it via the nomarchy.* options, add your own packages and
|
||
# programs below.
|
||
{ pkgs, ... }:
|
||
|
||
{
|
||
# ── Overrides (the desktop is on by default; tweak or opt out) ──────
|
||
# nomarchy.terminal = "kitty"; # swap the default terminal
|
||
# nomarchy.waybar.enable = false; # bring your own bar
|
||
# nomarchy.stylix.enable = false; # opt out of GTK/Qt theming
|
||
# nomarchy.keyboard.layout = "de"; # session keyboard (set the matching
|
||
# # services.xserver.xkb.layout in
|
||
# # system.nix too; the console + LUKS
|
||
# # prompt follow it automatically)
|
||
|
||
# ── Opt-in features — uncomment and tweak to enable ─────────────────
|
||
# nomarchy.nightlight = { # scheduled blue-light filter (hyprsunset)
|
||
# enable = true; # declarative opt-in (or just enable it from
|
||
# # the menu: System › Night light)
|
||
# temperature = 4000; # night warmth in K — lower is warmer
|
||
# sunset = "20:00";
|
||
# sunrise = "07:00";
|
||
# };
|
||
#
|
||
# nomarchy.updates = { # passive update-awareness indicator + notification
|
||
# enable = true;
|
||
# interval = "daily"; # how often to check (systemd OnCalendar)
|
||
# flatpak = true; # also count Flatpak updates when flatpak is on
|
||
# };
|
||
#
|
||
# nomarchy.monitors = [ # declarative per-output layout, hotplug-applied
|
||
# { name = "eDP-1"; position = "0x0"; }
|
||
# { name = "HDMI-A-1"; position = "auto-right"; }
|
||
# ]; # names from `hyprctl devices`
|
||
#
|
||
# nomarchy.keyboard.devices = { # a specific keyboard's own layout
|
||
# "keychron-keychron-k2" = { layout = "de"; };
|
||
# };
|
||
#
|
||
# nomarchy.keyboard.layouts = [ "de" "fr" ]; # rofi-prompt for a layout when a new
|
||
# # keyboard connects + remember it in the
|
||
# # flake state (graduates to .devices above)
|
||
|
||
# ── Application suite ───────────────────────────────────────────────
|
||
# A starter complete-workstation set, installed for your user — yours to
|
||
# curate. Delete a line to slim the machine; uncomment a suggestion (or
|
||
# add your own) to extend it. The desktop itself — terminal, editor
|
||
# keybinds, theming — comes from the modules; these are the heavier
|
||
# standalone apps the distro doesn't impose by default.
|
||
#
|
||
# Apps that need system setup beyond a package (Steam's 32-bit stack,
|
||
# a daemon, group membership, a kernel module) are NOT here — they're
|
||
# opt-in service toggles in system.nix instead (nomarchy.services.* —
|
||
# steam, libvirt, obs, docker, gamemode, kdeconnect, adb, wireshark,
|
||
# ollama, printing).
|
||
home.packages = with pkgs; [
|
||
libreoffice-fresh # office suite (documents, sheets, slides)
|
||
vscode # code editor (unfree; allowUnfree is on)
|
||
gimp # raster image editor
|
||
inkscape # vector graphics
|
||
mpv # media player
|
||
amberol # music player (local library; streaming → spotify below)
|
||
|
||
# ── More apps — uncomment to add ─────────────────────────────────
|
||
# Web browsers
|
||
# firefox
|
||
# chromium
|
||
# ungoogled-chromium
|
||
# brave # (unfree)
|
||
# google-chrome # (unfree)
|
||
|
||
# Communication
|
||
# signal-desktop
|
||
# telegram-desktop
|
||
# element-desktop # Matrix
|
||
# vesktop # Discord (themeable client)
|
||
# slack # (unfree)
|
||
# zoom-us # (unfree)
|
||
# teams-for-linux # community client (no official Linux app)
|
||
# thunderbird # email
|
||
|
||
# Office & documents
|
||
# onlyoffice-desktopeditors # stronger MS-Office fidelity
|
||
# kdePackages.okular # PDF viewer
|
||
# xournalpp # PDF annotation
|
||
# pdfarranger
|
||
# calibre # ebook library
|
||
# texliveFull # full LaTeX toolchain — multi-GB (texliveMedium is lighter)
|
||
|
||
# Notes / research
|
||
# logseq
|
||
# obsidian # (unfree)
|
||
# joplin-desktop
|
||
# anki-bin # flashcards
|
||
# zotero # reference manager
|
||
|
||
# Code & data
|
||
# zed-editor
|
||
# lazygit
|
||
# dbeaver-bin # database GUI
|
||
# bruno # API client
|
||
# distrobox # containerized dev shells
|
||
|
||
# Graphics & design
|
||
# krita # digital painting
|
||
# blender # 3D
|
||
# darktable # RAW photo
|
||
|
||
# Audio / video
|
||
# audacity
|
||
# shotcut # video editor
|
||
# kdePackages.kdenlive # video editor (pulls in KDE libs)
|
||
# handbrake # transcoder
|
||
|
||
# Media
|
||
# vlc
|
||
# spotify # (unfree)
|
||
# newsflash # RSS reader
|
||
|
||
# Gaming (Steam + GameMode are service toggles in system.nix)
|
||
# lutris
|
||
# heroic # Epic/GOG launcher
|
||
# bottles # Wine prefixes
|
||
# prismlauncher # Minecraft
|
||
# protonup-qt # Proton-GE manager
|
||
# mangohud # in-game overlay
|
||
|
||
# Files, sync & torrents
|
||
# nextcloud-client
|
||
# localsend # AirDrop-like transfer
|
||
# qbittorrent
|
||
|
||
# Security
|
||
# keepassxc
|
||
# bitwarden-desktop
|
||
|
||
# System
|
||
# gnome-disk-utility
|
||
# gparted
|
||
# baobab # disk usage
|
||
# wireguard-tools # WireGuard CLI (NetworkManager imports .conf tunnels natively)
|
||
|
||
# Local AI (Ollama is a service toggle in system.nix)
|
||
# lmstudio # (unfree; large closure)
|
||
# alpaca # GTK Ollama UI
|
||
];
|
||
}
|