nix: add home manager module (#402)

* nix/hm: add home manager module

* nix/hm: remove uneeded options

* nix/hm: add cli option

* nix/hm: allow shell use CLI when 'cli.enable' is false

* nix/hm: fix systemd service

* nix/hm: use config dir from xdg standard
This commit is contained in:
Davi Ribeiro 2025-08-12 12:06:24 -03:00 committed by GitHub
parent 8c436c420b
commit e34953f595
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 86 additions and 2 deletions

View file

@ -29,7 +29,7 @@
formatter = forAllSystems (pkgs: pkgs.alejandra); formatter = forAllSystems (pkgs: pkgs.alejandra);
packages = forAllSystems (pkgs: rec { packages = forAllSystems (pkgs: rec {
caelestia-shell = pkgs.callPackage ./default.nix { caelestia-shell = pkgs.callPackage ./nix {
rev = self.rev or self.dirtyRev; rev = self.rev or self.dirtyRev;
quickshell = inputs.quickshell.packages.${pkgs.system}.default.override { quickshell = inputs.quickshell.packages.${pkgs.system}.default.override {
withX11 = false; withX11 = false;
@ -51,5 +51,7 @@
CAELESTIA_BD_PATH = "${shell}/bin/beat_detector"; CAELESTIA_BD_PATH = "${shell}/bin/beat_detector";
}; };
}); });
homeManagerModules.default = import ./nix/hm-module.nix self;
}; };
} }

View file

@ -62,7 +62,7 @@ in
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "caelestia-shell"; pname = "caelestia-shell";
version = "${rev}"; version = "${rev}";
src = ./.; src = ./..;
nativeBuildInputs = [gcc makeWrapper]; nativeBuildInputs = [gcc makeWrapper];
buildInputs = [quickshell aubio pipewire]; buildInputs = [quickshell aubio pipewire];

82
nix/hm-module.nix Normal file
View file

@ -0,0 +1,82 @@
self: {
config,
pkgs,
lib,
...
}: let
cli-default = self.inputs.caelestia-cli.packages.${pkgs.system}.default;
shell-default = self.packages.${pkgs.system}.with-cli;
cfg = config.programs.caelestia;
in {
options = with lib; {
programs.caelestia = {
enable = mkEnableOption "Enable Caelestia shell";
package = mkOption {
type = types.package;
default = shell-default;
description = "The package of Caelestia shell";
};
settings = mkOption {
type = types.attrs;
default = {};
description = "Caelestia shell settings";
};
extraConfig = mkOption {
type = types.str;
default = "";
description = "Caelestia shell extra configs written to shell.json";
};
cli = {
enable = mkEnableOption "Enable Caelestia CLI";
package = mkOption {
type = types.package;
default = cli-default;
description = "The package of Caelestia CLI"; # Doesn't override the shell's CLI, only change from home.packages
};
};
};
};
config = let
cli = cfg.cli.package or cli-default;
shell = cfg.package or shell-default;
in
lib.mkIf cfg.enable {
systemd.user.services.caelestia = {
Unit = {
Description = "Caelestia Shell Service";
After = ["graphical-session.target"];
PartOf = ["graphical-session.target"];
};
Service = {
Type = "exec";
ExecStart = "${shell}/bin/caelestia-shell";
Restart = "on-failure";
RestartSec = "5s";
TimeoutStopSec = "5s";
Environment = [
"QT_QPA_PLATFORM=wayland"
];
Slice = "session.slice";
};
Install = {
WantedBy = ["graphical-session.target"];
};
};
xdg.configFile."caelestia/shell.json".text = let
extraConfig =
if cfg.extraConfig != ""
then cfg.extraConfig
else "{}";
in
builtins.toJSON (lib.recursiveUpdate
(cfg.settings or {}) (builtins.fromJSON extraConfig));
home.packages = [shell] ++ lib.optional cfg.cli.enable cli;
};
}