Commit Graph

154 Commits

Author SHA1 Message Date
Bernardo Magri
220fc7f699 fix: point downstream flakes at git.bemagri.xyz, not github
Upstream Nomarchy is hosted on the self-hosted Gitea at
git.bemagri.xyz/bernardo/Nomarchy.git, not github.com/bemagri/nomarchy.

- installer/install.sh: generated `nomarchy.url` now uses
  `git+https://git.bemagri.xyz/bernardo/Nomarchy.git` (with `?rev=<sha>`
  for the pinned form).
- MIGRATION.md: matches; the `hardware_detect` clone snippet now points
  at the same URL.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:46:59 +01:00
Bernardo Magri
f0bd25f902 fix: stop the "nix-colors / non-existent input nixpkgs" warning
nix-colors is a pure data flake (base16 schemes) — it declares no inputs,
so `inputs.nixpkgs.follows = "nixpkgs"` against it produces a warning on
every evaluation. Drop the override and just `url`-import it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:45:31 +01:00
Bernardo Magri
955269f9a2 docs: add MIGRATION.md for in-place adoption from existing NixOS
Documents the layered-adoption path: add nomarchy as a flake input, build
a single pkgs with nomarchy.overlays.default, wire nomarchy.nixosModules
into both nixosSystem and a standalone homeManagerConfiguration, and
rebuild. Preserves the user's hardware-configuration, hostname, and
account; no reformat.

Calls out the conflicts an existing config will hit (DM, Hyprland, audio,
NetworkManager, user groups, /etc/os-release rebrand, autoLogin) with
explicit mkForce/drop-this-line guidance. Points at the live-ISO clean
install as the alternative for users who'd rather start fresh.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:40:31 +01:00
Bernardo Magri
bb435a47bb fix(live-iso): stop initrd GPU panic + clear install pointer on login
- boot.initrd.kernelModules force-loaded amdgpu+radeon+nouveau+i915 in the
  live ISO, panicking on hosts where more than one driver matched the GPU.
  Move them to availableKernelModules so udev only loads what fits.
- Override services.getty.helpLine with a Nomarchy welcome that points at
  `sudo /etc/install.sh` (+ --dry-run / --resume variants). Replaces the
  upstream "NixOS" message.
- Ship installer/hardware-db.sh as /etc/hardware-db.sh so the installer's
  auto-detection works when invoked from the live ISO.
- Add live-ISO-only Hyprland exec-once: notify-send + an alacritty
  "Nomarchy Installer" terminal that prints the install commands. The
  graphical autologin user now sees a pointer instead of guessing how to
  start the install.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:24:49 +01:00
Bernardo Magri
e66537523a feat(installer): UX polish — dry-run, resume, UEFI gate, pre-flight, zram
Adds command-line flags and safety rails on top of the existing install.sh.

CLI:
- `--dry-run` generates the flake into /tmp/nomarchy-dryrun.* and parse-checks
  every produced file without touching the disk. Skips LUKS / user password
  prompts and the destructive confirmation; sets safe stub values.
- `--resume` reloads non-secret answers from /tmp/nomarchy-install.state.sh
  (saved via `declare -p` after each step) and skips already-answered prompts.
  Passwords are NEVER persisted — the user re-enters them.
- `--help` documents the flags.

Safety:
- Bail early in check_environment if /sys/firmware/efi is absent. The disko
  config assumes UEFI + ESP; on a BIOS-booted host we'd partially install
  before failing.
- After nixos-install, run `nixos-rebuild dry-build --flake /etc/nixos#$HOSTNAME`
  inside `nixos-enter` to surface evaluation errors while the live ISO is
  still around to fix them.
- ENABLE_IMPERMANENCE now defaults to "" so the resume path can distinguish
  "not yet asked" from a deliberate "false" answer.

Generated config:
- system.nix gets `zramSwap.enable = true;` — near-free memory headroom on
  small machines, harmless on big ones (kernel only uses it under pressure).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:18:41 +01:00
Bernardo Magri
04512eabcd fix: include modifications missed by 528447c
Previous commit only picked up the new files (branding.nix, hardware-db.sh).
This adds the matching wires:

- core/system/default.nix: import branding.nix
- flake.nix: expose overlays.default = nomarchyOverlay for downstream flakes
- installer/disko-golden.nix: 1 GiB /boot, @snapshots subvolume, LUKS key
  via /dev/shm
- installer/install.sh: hardware auto-detect, hostname prompt, pinned
  nomarchy commit, shared pkgs in generated flake, flake.lock generation,
  post-install home-manager switch via nixos-enter

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:07:17 +01:00
Bernardo Magri
528447cc19 feat: smarter installer + Nomarchy os-release rebrand
Hardware:
- New installer/hardware-db.sh: flat regex table mapping sys_vendor +
  product_name to nixos-hardware modules (Framework, Dell, Lenovo, Surface,
  ASUS, Apple T2, System76).
- install.sh:select_hardware now auto-detects CPU vendor, GPU vendor, chassis
  type, and known model, then offers Accept / Add / Override. Manual menu
  retained as a fallback.
- Fixes a latent bug where HARDWARE_MODULES used literal "\n" inside a
  heredoc, producing invalid Nix.

Downstream flake:
- Capture the running Nomarchy commit and pin `nomarchy.url` to it so the
  installed system can't drift onto a newer breaking main.
- Prompt for a real hostname; nixosConfigurations.<hostname> replaces the
  generic .default. networking.hostName lands in system.nix.
- Generated flake now derives a single `pkgs` from nixpkgs + Nomarchy's
  `overlays.default` and shares it between nixosSystem and the standalone
  homeManagerConfiguration so dotfile-fast-iteration with nomarchy-env-update
  stays separate from `nixos-rebuild` while still seeing Nomarchy packages.
- `nix flake lock` runs in /mnt/etc/nixos before nixos-install so first boot
  consumes the resolved set.
- Post-install, run home-manager switch inside `nixos-enter` via runuser so
  the user's first login already has dotfiles. Failure is non-fatal.

Disk layout:
- /boot bumped to 1 GiB (was 512 MiB; tight with multi-generation kernels).
- New @snapshots subvolume at /.snapshots for snapper/btrbk/rollback.
- LUKS passphrase moved from /tmp/secret.key to /dev/shm/nomarchy-luks.key
  (tmpfs), shredded after disko, LUKS_PASSWORD unset.

Branding:
- New core/system/branding.nix sets system.nixos.distroId = "nomarchy" and
  distroName = "Nomarchy". /etc/os-release now reports Nomarchy, so fastfetch
  and other os-release readers show the right name.

Cleanup:
- flake.nix exposes `overlays.default = nomarchyOverlay` for downstream use.
- Trailing duplicated `main "$@"` + orphan `}` removed from install.sh.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 10:06:47 +01:00
Bernardo Magri
877da19770 feat: make VM and live ISO match an installed Nomarchy
- Migrate VM and graphical ISO to home-manager.nixosModules.home-manager;
  drop the standalone-HM sudo-based activation script (ran HM against
  /root because HOME wasn't reset) in flake.nix, core/system/vm-guest.nix,
  hosts/live-iso.nix.
- Run swaybg as nomarchy-wallpaper.service instead of a silent Hyprland
  exec-once so failures surface in systemctl.
- Skip the battery monitor unit on hosts without /sys/class/power_supply/BAT*
  (VMs, desktops).
- Don't wrap walker --dmenu in uwsm-app; redirect setsid background std-fds
  in nomarchy-launch-walker so $(menu ...) in nomarchy-menu doesn't hang.
- Restart waybar/walker via systemctl --user rather than pkill + uwsm-app
  to stop the post-theme-switch color race.
- Wire nomarchy-restart-walker/-waybar into nomarchy-theme-set so themes
  that only change the imported CSS reload correctly.
- Waybar: pin #custom-nomarchy to the Nomarchy font and use the U+F000
  codepoint so the logo shows across all themes.
- Auto-install the correct icon-theme package per palette via a new
  nomarchyLib.iconThemePackage helper in lib/default.nix; Everforest now
  actually renders for summer-night.
- Pre-cache every theme's HM generation: new packages.allThemeVariants
  flake output and nomarchy-themes-prebuild script so theme switches are
  cache-only (no Stylix rebuild, no downloads).
- Add nomarchy-test-live-iso to boot the graphical ISO in QEMU the same
  way nomarchy-test-vm does, with virtio-gpu support added to live-iso.nix.
- Installer-generated home.nix/system.nix now ship a curated, commented
  app menu (btop/fastfetch/chromium on by default) plus optional system
  services (Docker, libvirtd, Tailscale, Syncthing, Flatpak, Steam).
- nomarchy-test-vm now wipes the stale nomarchy.qcow2 before launch.
- Remove obsolete GEMINI.md and PLAN.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 18:20:54 +01:00
Bernardo Magri
096124c04a fix: resolve makima 404 and undefined overridesDir variable 2026-04-13 21:19:42 +01:00
Bernardo Magri
3101c0fea2 fix: resolve waybar css selector mismatch and update audit documentation 2026-04-13 20:16:21 +01:00
Bernardo Magri
d9c35f5ff6 fix: resolve evaluation purity, missing packages, and brittle paths 2026-04-13 19:50:09 +01:00
Bernardo Magri
cabc668c77 fix: exhaustive logical audit of installer, live-iso and system configurations 2026-04-13 19:26:47 +01:00
Bernardo Magri
2d587d40ff feat: pre-activate standalone Home Manager environment in VM and Live ISO 2026-04-13 15:24:51 +01:00
Bernardo Magri
d3042c4fb6 fix: disambiguate home-manager package from flake input to fix evaluation error 2026-04-13 15:11:09 +01:00
Bernardo Magri
b84693bc52 fix: remove invalid home-manager configuration from nixosConfigurations 2026-04-13 14:44:57 +01:00
Bernardo Magri
17de084789 fix: resolve standalone home-manager configuration and fix installer iso syntax 2026-04-13 14:42:52 +01:00
Bernardo Magri
1b75a440b1 fix: update nomarchy-test-vm to use the default flake configuration 2026-04-13 13:59:03 +01:00
Bernardo Magri
540718693f fix: revert to standalone Home Manager architecture for fast UI updates 2026-04-13 13:57:31 +01:00
Bernardo Magri
73ae1232f3 fix: switch from home-manager to nixos-rebuild for environment updates and align flake outputs 2026-04-13 13:46:12 +01:00
Bernardo Magri
6dd3c4b6e2 fix: include nomarchy flake in VM at /etc/nomarchy 2026-04-13 13:33:40 +01:00
Bernardo Magri
9746e75bc5 fix: dynamic flake path resolution and replace env-update/sys-update aliases with scripts 2026-04-13 13:25:54 +01:00
Bernardo Magri
866e556656 fix: bundle home-manager and nixos-rebuild with user scripts and fix theme-switching globbing error 2026-04-13 13:14:46 +01:00
Bernardo Magri
66096cbc46 feat: improve video configuration for VM and Live ISO 2026-04-13 13:05:59 +01:00
Bernardo Magri
8e4e801244 fix: rename and track Nomarchy.ttf font for flake build 2026-04-13 12:34:15 +01:00
Bernardo Magri
6f4741c060 fix: package theme engine and system scripts and fix env-update scriptability 2026-04-13 11:37:03 +01:00
Bernardo Magri
f0800e60ca fix: enable flakes and nix-command and set NIX_PATH for nix-shell 2026-04-13 11:33:07 +01:00
Bernardo Magri
ab9700f054 fixing summer-night waybar 2026-04-13 11:25:01 +01:00
Bernardo Magri
6b3e96b3b3 feat: add walker and rofi themes for summer-night and fix styling logic 2026-04-13 11:19:43 +01:00
Bernardo Magri
0e5fb6c813 fixing summer-night waybar 2026-04-13 08:37:50 +01:00
Bernardo Magri
f4ecaed31a docs: move STRUCTURE.md to docs/ and update README.md reference 2026-04-12 23:05:23 +01:00
Bernardo Magri
1853617f12 docs: add detailed STRUCTURE.md documentation 2026-04-12 23:04:26 +01:00
Bernardo Magri
ffdc67d246 fix: resolve 'outside /home/bernardo' build failure by avoiding directory symlink conflicts
- Update app configurations (btop, kitty, ghostty, opencode, lazygit, tmux) to manage individual files instead of entire directories.
- Use 'recursive = true' for chromium and elephant configurations to allow multiple modules to contribute to the same directory.
- This prevents conflicts when the theme loader tries to add themed config files into directories that were previously managed as monolithic symlinks.
2026-04-12 22:53:44 +01:00
Bernardo Magri
b3fb246ce3 fix: allow unfree packages to resolve VS Code build failure
- Add 'nixpkgs.config.allowUnfree = true' to core/system/default.nix for global NixOS configuration.
- Add 'nixpkgs.config.allowUnfree = true' to features/default.nix for Home Manager package set.
- This resolves evaluation errors when VS Code is included in the build.
2026-04-12 22:48:44 +01:00
Bernardo Magri
5f0834f30c refactor: consolidate app configurations and utility scripts
- Move 32+ app-specific scripts from features/apps/scripts/ to features/scripts/utils/ for centralized packaging.
- Create individual Nix modules for orphaned app configurations (btop, kitty, tmux, etc.) in features/apps/ using xdg.configFile.
- Fix broken paths in core/system/makima.nix and features/apps/vscode.nix.
- Update VSCode configuration to use the modern 'profiles.default.userSettings' API, resolving deprecation warnings.
- Merge duplicate 'nomarchy-launch-walker' scripts into a single robust utility.
- Remove stale root 'config/' directory.
- Update README.md and docs/creating-themes.md to reflect the new architecture and keybindings.
- Ensure all modules are correctly imported and verified via nix flake check.
2026-04-12 22:32:44 +01:00
Bernardo Magri
a7dbca80a6 fix: resolve VM startup failures, broken Hyprland functionality, and theme integration
- Fix QEMU syntax and root filesystem conflicts in vm-guest.nix.
- Repair numerous broken relative paths and imports across the codebase.
- Set 'summer-night' as the default distro theme with full branding integration.
- Implement declarative system-wide font installation including the 'nomarchy' font.
- Fix Waybar startup by dynamically generating theme-aware CSS.
- Restore Hyprland keybindings (Super+Return, Super+Space) and wallpaper loading.
- Add missing scripts: nomarchy-launch-walker, nomarchy-toggle-waybar, nomarchy-refresh-config.
- Enable UWSM and correctly disable conflicting Hyprland systemd services.
2026-04-12 20:54:03 +01:00
Bernardo Magri
bbdf34ced8 refactor: implement component-based architecture for enhanced maintainability
- Reorganize directory structure into core/, features/, and themes/
- Colocate application Nix logic, configs, scripts, and theme overrides
- Implement 'Inversion of Control' for theming: apps now pull theme-specific layouts
- Update flake.nix and shared library paths to match the new structure
- Document the new Feature-Centric architecture in README.md
2026-04-12 14:51:15 +01:00
Bernardo Magri
a9ee79a5ce fix: add stylix compatibility shims for missing program options
Stylix unconditionally imports all target modules, which expect certain
program options to exist even when those programs aren't enabled. This
causes evaluation errors.

Add stylix-compat.nix with stub options for:
- programs.neovim.initLua (maps to extraLuaConfig)
- programs.opencode.tui/themes

Also:
- Disable neovim/neovide stylix targets (we deploy theme lua via theme-loader)
- Set autoEnable = false to only enable explicitly listed targets
- Enable programs.neovim to satisfy stylix's neovim target
- Update stylix to latest version

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 20:20:32 +01:00
Bernardo Magri
b27fc5aee8 refactor: major architectural restructure for theme-centric organization
Theme System:
- Move all theme app configs to apps/ subdirectory (20 themes)
- Add theme-loader.nix for dynamic theme config deployment
- Simplify stylix.nix to focus on base theming only

Override System:
- Add overrides.nix for file-based config overrides
- Add behavior-configs.nix for non-visual configuration
- Split hypr/nomarchy.conf into behavior vs visual sections

Module Improvements:
- Add lib.mkDefault to all customizable settings
- Add modules/lib/ with shared utilities and state schema
- Update all home and system modules for downstream overridability

Installer:
- New minimal TTY installer (installer/install.sh)
- Golden path: BTRFS + LUKS2 (disko-golden.nix)
- New installer-iso.nix for TTY-only installation
- Keep graphical installer as installerIsoGraphical option

Cleanup:
- Remove obsolete install.sh, disko-ext4.nix, install-nomarchy.sh
- Update live-iso.nix references
- Add .claude/ to .gitignore for local IDE settings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 19:38:27 +01:00
Bernardo Magri
769fd88f25 fixing install.sh 2026-04-10 20:28:54 +01:00
Bernardo Magri
9f62f0f5f1 fixing install.sh 2026-04-10 20:25:58 +01:00
Bernardo Magri
7590fc4057 fix(install): fix gum syntax and TTY redirection in bootstrap script 2026-04-10 20:22:13 +01:00
Bernardo Magri
db18304fb6 fix(install): fix syntax errors, module references and branding in install script 2026-04-10 19:52:01 +01:00
Bernardo Magri
57580dbdb0 adding install script 2026-04-10 18:51:01 +01:00
Bernardo Magri
c6902d5b6d fixing hyprland errors 2026-04-09 13:38:00 +01:00
Bernardo Magri
ef54a4b67c fix: stabilize waybar with systemd and correct shebangs 2026-04-08 20:03:15 +01:00
Bernardo Magri
8ae026474f fix: provide declarative fallback for theme hyprland.conf 2026-04-08 19:26:34 +01:00
Bernardo Magri
1184cad61a fix: exclude ported apps from XDG auto-mapping to avoid collisions 2026-04-07 18:59:45 +01:00
Bernardo Magri
3ff6815ab0 refactor: rename Hyprland entrypoint to nomarchy.conf and finalize config sourcing 2026-04-07 18:57:21 +01:00
Bernardo Magri
98b7c99023 feat: enable Hyprland and wlroots logging for debugging 2026-04-06 22:18:20 +01:00
Bernardo Magri
d0f7e67d3d fix: add wrapQtAppsHook to SDDM theme derivation 2026-04-06 21:53:58 +01:00