Commit Graph
27 Commits
Author SHA1 Message Date
nevaforget c8d9a00a8d feat(services): report the age of the nixpkgs lock
A rebuild against an unchanged lock installs nothing new, so a machine
built daily can still run months-old packages. A user timer reads the
locked lastModified of the nixpkgs input and notifies once it passes
seven days, offering a terminal that runs the update.
2026-09-10 13:32:14 +02:00
nevaforget b1ed5d087b refactor(stasis): take the package from nixpkgs
nixpkgs carries stasis 1.5.1, so the pinned input and pkgs/stasis.nix go. It
ships no unit and has no NixOS module, so modules/services.nix keeps declaring
one; its actions run as `sh -lc` and it spawns niri and pactl directly, hence
the unit path.

stasis prefers a user config over /etc and generates its own when none exists,
so moonarch's is seeded into the home directory instead of only reaching /etc.
2026-08-31 11:58:33 +02:00
nevaforget 72af3e0cfc feat(desktop): let imperative nix commands see allowUnfree 2026-08-31 09:23:28 +02:00
nevaforget 3e40a701e7 fix(desktop): add the archiver, image viewer and cpufreq backend
Gaps against moonarch/packages/official.txt: zip, unzip and viewnior were
missing outright, and thunar-archive-plugin was installed without
xarchiver, which left its menu entries inert.

services.auto-cpufreq is the backend of the Quickshell CpuGov widget,
which calls 'auto-cpufreq --get-state' and 'pkexec auto-cpufreq --force';
without it the indicator has no state and the popout cannot switch.
2026-08-24 10:28:28 +02:00
nevaforget eca2264e64 docs(desktop): record why pactl is not installed
Steam prints "pactl: command not found" and it means nothing: it probes
wpctl and pactl both and uses whichever is on PATH, which wireplumber
provides. Closed as expected behaviour in nixpkgs#525793.
2026-08-20 18:43:31 +02:00
nevaforget e7ddf7bd1f fix(pipewire): denoising through configPackages, desktop gets steam and bitwig
The RNNoise config was deployed to /etc/xdg/pipewire, which PipeWire
never reads: it resolves $PIPEWIRE_CONFIG_DIR, then the home config, then
its compiled-in /etc/pipewire, and knows nothing of XDG_CONFIG_DIRS. An
installed system therefore had no denoising while carrying the file.

It now goes through services.pipewire.configPackages, with the LADSPA
plugin substituted to its store path since LADSPA_PATH has no /usr here.

Alongside, on the desktop host only: steam via its module (which also
turns on 32-bit graphics), bitwig-studio, and rtkit so a DAW can ask for
realtime scheduling at all.
2026-08-20 18:25:36 +02:00
nevaforget 35df48cdf8 feat(desktop): install librewolf as the browser
The package set provided no browser at all. Waterfox, which Arch runs,
is not in nixpkgs; packaging its upstream tarball worked but leaves
version and hash to be bumped by hand, with nothing signalling a missed
release — poor terms for the most exposed program on the machine.

librewolf comes from nixpkgs, so its updates arrive with the flake, and
it is fully substitutable. Its defaults are stricter than Waterfox's.
2026-08-20 17:57:22 +02:00
nevaforget 3361c7c46e feat(desktop): driverless printing, OpenVPN plugin, VLC
networking.networkmanager.plugins defaulted to an empty list, so
NetworkManager offered no OpenVPN connection type at all.

Printing is driverless: asked over IPP the Samsung M267x 287x reports
image/urf and application/PCLm, so CUPS builds the queue from the
printer's own capabilities. No PPD, no unfree driver, and no printer
declared here. Avahi provides the discovery and resolves .local.

VLC instead of the mpv the Arch lists carry.
2026-08-20 17:41:04 +02:00
nevaforget d36e5d6633 fix(zsh): seed a placeholder ~/.zshrc
zsh/newuser runs zsh-newuser-install on every interactive login while the
user has none of .zshenv, .zprofile, .zshrc or .zlogin. The whole
configuration lives in /etc/zshrc, which is not a personal file, so the
wizard never stopped coming up.

The seeded file carries comments only: sourcing the shared zshrc from it,
as the Arch counterpart does, would load it a second time.
2026-08-20 15:39:09 +02:00
nevaforget a5d6c3eb77 fix(zsh): defend the sourced zshrc against the /etc/zshrc defaults
/etc/zshrc renders promptInit and environment.shellAliases after
interactiveShellInit, so both overrode the shared zshrc: the prompt
became `prompt suse` and ls/ll/l fell back to coreutils. The plugin
sourcing in the zshrc points at the Arch path /usr/share/zsh/plugins
and silently found nothing.

Clear promptInit, drop the three aliases with null, and enable the
syntax-highlighting and autosuggestions modules.
2026-08-20 14:35:55 +02:00
nevaforget 427e667dff feat(desktop): thunar and the moonarch zshrc
Both were missing against the Arch package set: thunar with volman and the
archive plugin, tumbler and ffmpegthumbnailer (packages/official.txt:79-83),
and defaults/shell/zshrc, which Arch installs as /etc/zsh/zshrc.moonarch.
2026-08-20 14:16:51 +02:00
nevaforget 55c81dbb8a docs: correct false claims in the README
Verified against nix eval, upstream sources and a local test:

- testvm accepts SSH password authentication (NixOS default), the README
  claimed the opposite
- only /boot goes through by-partlabel; the filesystems inside the container
  come up as /dev/mapper/crypted
- kanshi parses an empty config fine; a missing one is the error case, in the
  README and in the desktop module comment
- modules/user.nix ABOUTME claimed a login name shared by every host
- the flake imports six modules, not five

Rewrites "Keeping a machine up to date": the checkout is ~/flakes/moonix and
/etc/nixos/flake.nix a symlink to it, which man 8 nixos-rebuild documents.
Drops the git and ssh-keygen basics. Adds an optional LUKS header backup step,
and records the checkout decision in DECISIONS.md.
2026-08-20 12:09:23 +02:00
nevaforget ec985a8f7f fix(desktop): follow swaylock config move, use blurred wallpaper
The config source is defaults/etc/swaylock/config now. The tmpfiles seed
stays: nixpkgs leaves meson's sysconfdir at $out/etc, so the
/etc/swaylock/config that Arch owns is never read here.
2026-08-18 17:34:01 +02:00
nevaforget f765a460b5 feat: drop moonlock and moonset
The power menu is a Quickshell popout in the moonarch config now, and it
was the last caller of moonlock. Inputs, package entries and both build
recipes are gone, together with the generated /etc configs and the
moonlock PAM stack — swaylock's comes from programs.niri.enable.
2026-08-14 17:48:52 +02:00
nevaforget 630faf5390 feat: regreet and swaylock from nixpkgs, autologin after LUKS
greetd.nix configures services.displayManager.regreet and keeps niri as
the greeter compositor, so niri-greeter.kdl stays the shared file that
carries the German keyboard layout. The moongreet input, its package and
pkgs/moongreet.nix are gone.

extraCss goes through builtins.readFile: the module only recognises a
direct /nix/store child as a path, so passing the file path as a string
wrote the path itself into /etc/greetd/regreet.css.

desktop.nix installs swaylock, seeds ~/.config/swaylock/config with the
wallpaper rewritten to the store path, and now owns the moonlock PAM
stack. The Colloid overrides moved to flake.nix so the greeter and the
desktop share one derivation.

initial_session is set per host because the accounts differ. greetd's
restart option flips itself off, verified.

flake.lock still pins moonarch at the pushed revision; it needs
`nix flake update moonarch` once the moonarch commit is pushed.
2026-08-14 14:32:43 +02:00
nevaforget bf915d66bb Install only the helper scripts that are still called
cpugov, sink-switcher and nightlight were referenced solely by the waybar
config; the Quickshell popouts cover all three. btnote, capsnote, vpn and
waybar-hidpp are unreferenced anywhere.

Adds the two system units for battery threshold restore and camera
shutoff, which had been missed.
2026-08-07 17:12:53 +02:00
nevaforget 9afff20b5e Set moonset background blur to match the Arch user config 2026-08-07 16:48:59 +02:00
nevaforget 7cd63e9e2b Point moonlock and moonset at the wallpaper store path
Both fall back to /usr/share/moonarch/wallpaper.jpg, which does not exist
under Nix, so they rendered without a background.
2026-08-07 16:46:56 +02:00
nevaforget e824177113 Wire stasis into the desktop and add its user service
Upstream ships a systemd unit in the Arch package but not in the source
tarball, so it is declared in the module.
2026-08-07 16:21:14 +02:00
nevaforget 5d9d5e8626 Seed waypaper config into the home directory
waypaper reads only ~/.config/waypaper/config.ini and has no system-wide
fallback, so it wrote its own default with an empty wallpaper entry and
nothing was ever set. systemd.user.tmpfiles 'C' copies the file once
without overwriting later user edits.
2026-08-07 15:41:58 +02:00
nevaforget f6140c07b6 Do not deploy the empty kanshi config
defaults/xdg/kanshi/config is a 0-byte placeholder, unused on Arch as
well, where kanshi reads ~/.config/kanshi/config instead. Deploying it
made kanshi fail to parse and restart in a loop. The unit now starts only
when a user config exists.
2026-08-07 15:36:51 +02:00
nevaforget d6c42526fb Drop waybar and swaync from the desktop set
Both are marked 'kept as a reserve' in the Arch config, a note left over
from the migration to the Quickshell bar. A fresh setup has no reason to
carry them, so the packages, their configs and the waybar-only helper
scripts stay out.
2026-08-07 15:02:39 +02:00
nevaforget 06a0e68bea Emit a complete XML document in fonts.fontconfig.localConf
localConf is written to /etc/fonts/local.conf verbatim. Without the XML
declaration and the fontconfig root element, fontconfig rejects the file
with 'junk after document element' and the generic-family defaults never
take effect.
2026-08-07 14:47:36 +02:00
nevaforget d9d616c45d Fix niri config discovery, polkit path, wallpaper stack
- NIRI_CONFIG points niri at /etc/xdg; without it niri writes its own
  default config, so none of the Moonarch settings applied.
- config.kdl spawns the polkit agent by FHS path, provided via tmpfiles
  instead of diverging the config shared with Arch.
- waypaper was missing entirely, hence no wallpaper. It invokes swww,
  which the maintained awww provides under a different name.
2026-08-07 13:17:46 +02:00
nevaforget 9de88b8d64 Package sweet-cursors and use it in the greeter 2026-08-07 12:58:15 +02:00
nevaforget e290c674ac Route fontconfig through fonts.fontconfig.localConf
/etc/fonts/conf.d is owned by the NixOS fontconfig module and rejects
environment.etc entries. Same content as
defaults/etc/fonts/conf.d/65-moonarch-fonts.conf.
2026-08-07 12:33:43 +02:00
nevaforget d485783cf7 Add NixOS modules for desktop, greetd and services 2026-08-07 12:26:46 +02:00