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.
This commit is contained in:
2026-08-14 17:48:52 +02:00
parent 28c181d768
commit ec881f6401
7 changed files with 31 additions and 165 deletions
+19
View File
@@ -1,5 +1,24 @@
# Decisions
## 2026-08-14 moonset and moonlock dropped; the power menu is a Quickshell popout
- **Who**: Dominik, ClaudeCode
- **Why**: The power menu became `PowerPopout.qml` in the moonarch Quickshell
config (see `moonarch/DECISIONS.md`, same date), and moonset was the last thing
invoking moonlock. Both packages therefore leave this flake with nothing to
replace them: the popout ships inside the config tree that is already deployed.
- **Tradeoffs**: The flake keeps the ability to package a moonarch program —
`stasis` and `sweet-cursors` still use that path — so nothing was generalised
away. What is lost is the pinning discipline for two programs that no longer
exist here; the tags in `flake.nix` were the only record of which version was
deployed, and that record now lives in the retired repos' own history.
- **How**: Inputs `moonlock` and `moonset` removed, `moonarchPackages` entries
with them, `pkgs/moonlock.nix` and `pkgs/moonset.nix` deleted, `flake.lock`
regenerated. `modules/desktop.nix` drops both packages from `systemPackages`,
the generated `environment.etc."moonlock/moonlock.toml"` and
`"moonset/moonset.toml"`, and the moonlock PAM stack — swaylock's comes from
`programs.niri.enable`.
## 2026-08-14 regreet and swaylock from nixpkgs, autologin after LUKS
- **Who**: Dominik, ClaudeCode
+11 -9
View File
@@ -4,10 +4,11 @@ NixOS configuration for a scrollable-tiling Wayland desktop: niri as the
compositor, Quickshell as the bar and launcher, regreet as the login greeter,
swaylock as the screen locker, Catppuccin Mocha throughout.
Ships Nix packages for the components that are not in nixpkgs — moonset, stasis,
sweet-cursors — and NixOS modules that assemble them into a working session.
`moonlock` is still packaged here for one reason: moonset's Lock action invokes
it by name. It goes with the moonset release that changes that.
Ships Nix packages for the components that are not in nixpkgs — stasis,
sweet-cursors, the moonarch helper scripts — and NixOS modules that assemble them
into a working session. Greeter, locker and power menu are no longer own programs:
`regreet` and `swaylock` come from nixpkgs, the power menu is a Quickshell popout
inside the moonarch config.
The XDG configuration files (niri, Quickshell, foot, GTK, Qt) come from the
`moonarch` repository, which is consumed as a flake input. One set of config
@@ -18,8 +19,6 @@ files therefore stays valid on both NixOS and Arch.
```
flake.nix Inputs and outputs
pkgs/ Build recipes
moonlock.nix screen locker, retired but still called by moonset
moonset.nix session power menu
stasis.nix idle manager
sweet-cursors.nix cursor theme
moonarch-scripts.nix battery and camera helpers
@@ -41,7 +40,7 @@ hands them the packages and the config source.
Build a single package:
```bash
nix build .#moonlock
nix build .#stasis
```
Build a whole system without activating it:
@@ -141,13 +140,16 @@ With `encrypt = true` everything below the ESP sits in a LUKS2 container named
## Version bumps
The application repos are pinned to release tags. After tagging a new version:
`stasis` is pinned to a release tag. After a new upstream release:
```bash
# adjust the tag in flake.nix, then
nix flake update moonlock
nix flake update stasis
```
`moonarch` tracks `main`, so its config changes arrive with
`nix flake update moonarch`.
## Configuration files
Config files are deployed unchanged wherever possible. These are generated
Generated
-36
View File
@@ -37,40 +37,6 @@
"url": "https://gitea.moonarch.de/nevaforget/moonarch.git"
}
},
"moonlock": {
"flake": false,
"locked": {
"lastModified": 1786101894,
"narHash": "sha256-AcekcezH0GiyiMxRDRBVQZZ7idAg2Jzqc+taCk/ILSw=",
"ref": "refs/tags/v0.6.21",
"rev": "db8e5807e72f60a0cd6ec71f735eb1b82a3b4d9b",
"revCount": 66,
"type": "git",
"url": "https://gitea.moonarch.de/nevaforget/moonlock.git"
},
"original": {
"ref": "refs/tags/v0.6.21",
"type": "git",
"url": "https://gitea.moonarch.de/nevaforget/moonlock.git"
}
},
"moonset": {
"flake": false,
"locked": {
"lastModified": 1786101922,
"narHash": "sha256-XGrpX3Mh3/2thJXBv3IYQrSPJIriDIIlOdZavdSmQoU=",
"ref": "refs/tags/v0.9.2",
"rev": "55c683a2d7c5a51554134a88d4807b403e8042fb",
"revCount": 52,
"type": "git",
"url": "https://gitea.moonarch.de/nevaforget/moonset.git"
},
"original": {
"ref": "refs/tags/v0.9.2",
"type": "git",
"url": "https://gitea.moonarch.de/nevaforget/moonset.git"
}
},
"nixos-hardware": {
"inputs": {
"nixpkgs": "nixpkgs"
@@ -122,8 +88,6 @@
"inputs": {
"disko": "disko",
"moonarch": "moonarch",
"moonlock": "moonlock",
"moonset": "moonset",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2",
"stasis": "stasis",
-18
View File
@@ -20,14 +20,6 @@
url = "git+https://gitea.moonarch.de/nevaforget/moonarch.git";
flake = false;
};
moonlock = {
url = "git+https://gitea.moonarch.de/nevaforget/moonlock.git?ref=refs/tags/v0.6.21";
flake = false;
};
moonset = {
url = "git+https://gitea.moonarch.de/nevaforget/moonset.git?ref=refs/tags/v0.9.2";
flake = false;
};
sweet-cursors = {
url = "git+https://gitea.moonarch.de/nevaforget/Sweet-cursors.git";
flake = false;
@@ -45,16 +37,6 @@
pkgs = nixpkgs.legacyPackages.${system};
moonarchPackages = {
moonlock = pkgs.callPackage ./pkgs/moonlock.nix {
src = inputs.moonlock;
version = "0.6.21";
};
moonset = pkgs.callPackage ./pkgs/moonset.nix {
src = inputs.moonset;
version = "0.9.2";
};
sweet-cursors = pkgs.callPackage ./pkgs/sweet-cursors.nix {
src = inputs.sweet-cursors;
version = "0-unstable";
+1 -23
View File
@@ -66,18 +66,6 @@ in
# stasis reads /etc/stasis/ as its system-wide fallback, never /etc/xdg/.
"stasis/stasis.rune".source = "${xdg}/stasis/stasis.rune";
# moonlock and moonset fall back to /usr/share/moonarch/wallpaper.jpg,
# which does not exist here, so the wallpaper is pointed at the store path
# explicitly. Both read these files as their system-wide config.
"moonlock/moonlock.toml".text = ''
background_path = "${wallpaper}"
'';
# blur matches the value set in ~/.config/moonset/moonset.toml on Arch.
"moonset/moonset.toml".text = ''
background_path = "${wallpaper}"
background_blur = 20.0
'';
# Configs outside /etc/xdg/ in the Arch package as well.
"mpv/mpv.conf".source = "${etc}/mpv/mpv.conf";
"xdg-desktop-portal/niri-portals.conf".source =
@@ -157,15 +145,11 @@ in
environment.systemPackages = with pkgs; [
# Own programs
moonarchPkgs.moonset
moonarchPkgs.sweet-cursors
moonarchPkgs.stasis
moonarchPkgs.moonarch-scripts
# Only still installed because moonset's Lock action invokes moonlock by
# name and has no lock_command option. Idle and lid-close use swaylock.
moonarchPkgs.moonlock
# Session lock
# Session lock. The power menu is a Quickshell popout, not a package.
swaylock
# Compositor extras
@@ -244,10 +228,4 @@ in
"C %h/.config/waypaper/config.ini 0644 - - - ${waypaperConfig}"
"C %h/.config/swaylock/config 0644 - - - ${swaylockConfig}"
];
# PAM stack for moonlock, shipped by the package but owned by the system.
# swaylock needs none of this: programs.niri.enable brings
# security.pam.services.swaylock with it. Goes away with moonlock.
security.pam.services.moonlock.text =
builtins.readFile "${moonarchPkgs.moonlock}/share/moonlock/moonlock-pam";
}
-46
View File
@@ -1,46 +0,0 @@
# ABOUTME: Nix build recipe for moonlock, the Wayland lockscreen.
# ABOUTME: Counterpart to moonarch-pkgbuilds/moonlock/PKGBUILD.
{ lib
, rustPlatform
, pkg-config
, wrapGAppsHook4
, glib
, gtk4
, gtk4-layer-shell
, pam
, systemd
, src
, version
}:
rustPlatform.buildRustPackage {
pname = "moonlock";
inherit version src;
cargoLock.lockFile = "${src}/Cargo.lock";
# glib provides glib-compile-resources, which build.rs invokes to bundle
# style.css and the default avatar into the binary.
nativeBuildInputs = [ pkg-config wrapGAppsHook4 glib ];
buildInputs = [ gtk4 gtk4-layer-shell pam systemd ];
postInstall = ''
install -Dm644 config/moonlock.toml.example \
"$out/share/moonlock/moonlock.toml.example"
# The PAM stack lives in /etc and is owned by the NixOS module, not by
# this package. It is shipped here so the module can reference it.
install -Dm644 config/moonlock-pam \
"$out/share/moonlock/moonlock-pam"
'';
meta = {
description = "Secure Wayland lockscreen with GTK4, PAM and fingerprint support";
homepage = "https://gitea.moonarch.de/nevaforget/moonlock";
license = lib.licenses.mit;
mainProgram = "moonlock";
platforms = lib.platforms.linux;
};
}
-33
View File
@@ -1,33 +0,0 @@
# ABOUTME: Nix build recipe for moonset, the Wayland session power menu.
# ABOUTME: Counterpart to moonarch-pkgbuilds/moonset/PKGBUILD.
{ lib
, rustPlatform
, pkg-config
, wrapGAppsHook4
, glib
, gtk4
, gtk4-layer-shell
, src
, version
}:
rustPlatform.buildRustPackage {
pname = "moonset";
inherit version src;
cargoLock.lockFile = "${src}/Cargo.lock";
# glib provides glib-compile-resources for the GResource bundle in build.rs.
nativeBuildInputs = [ pkg-config wrapGAppsHook4 glib ];
buildInputs = [ gtk4 gtk4-layer-shell ];
meta = {
description = "Wayland session power menu with GTK4 and Layer Shell";
homepage = "https://gitea.moonarch.de/nevaforget/moonset";
license = lib.licenses.mit;
mainProgram = "moonset";
platforms = lib.platforms.linux;
};
}