summaryrefslogtreecommitdiff
path: root/nix/hm-module.nix
diff options
context:
space:
mode:
authorDavi Ribeiro <104164579+Markus328@users.noreply.github.com>2025-08-12 12:06:24 -0300
committerGitHub <noreply@github.com>2025-08-13 01:06:24 +1000
commite34953f595eeb0a18159a569e1a1bc263f1df2c3 (patch)
treee1fd96350e2ded538fc2c875a36cbfa0b2b6ff71 /nix/hm-module.nix
parentnix: fix dep (diff)
downloadcaelestia-shell-e34953f595eeb0a18159a569e1a1bc263f1df2c3.tar.gz
caelestia-shell-e34953f595eeb0a18159a569e1a1bc263f1df2c3.tar.bz2
caelestia-shell-e34953f595eeb0a18159a569e1a1bc263f1df2c3.zip
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
Diffstat (limited to 'nix/hm-module.nix')
-rw-r--r--nix/hm-module.nix82
1 files changed, 82 insertions, 0 deletions
diff --git a/nix/hm-module.nix b/nix/hm-module.nix
new file mode 100644
index 0000000..631ee4a
--- /dev/null
+++ b/nix/hm-module.nix
@@ -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;
+ };
+}