blob: 92f2f5131cac4418691c9e4cfca1d05c34d6944a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
self: {
config,
pkgs,
lib,
...
}: let
inherit (pkgs.stdenv.hostPlatform) system;
cli-default = self.inputs.caelestia-cli.packages.${system}.default;
shell-default = self.packages.${system}.with-cli;
cfg = config.programs.caelestia;
in {
imports = [
(lib.mkRenamedOptionModule ["programs" "caelestia" "environment"] ["programs" "caelestia" "systemd" "environment"])
];
options = with lib; {
programs.caelestia = {
enable = mkEnableOption "Enable Caelestia shell";
package = mkOption {
type = types.package;
default = shell-default;
description = "The package of Caelestia shell";
};
systemd = {
enable = mkOption {
type = types.bool;
default = true;
description = "Enable the systemd service for Caelestia shell";
};
target = mkOption {
type = types.str;
description = ''
The systemd target that will automatically start the Caelestia shell.
'';
default = config.wayland.systemd.target;
};
environment = mkOption {
type = types.listOf types.str;
description = "Extra Environment variables to pass to the Caelestia shell systemd service.";
default = [];
example = [
"QT_QPA_PLATFORMTHEME=gtk3"
];
};
};
settings = mkOption {
type = types.attrsOf types.anything;
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
};
settings = mkOption {
type = types.attrsOf types.anything;
default = {};
description = "Caelestia CLI settings";
};
extraConfig = mkOption {
type = types.str;
default = "{}";
description = "Caelestia CLI extra configs written to cli.json";
};
};
};
};
config = let
cli = cfg.cli.package;
shell = cfg.package;
in
lib.mkIf cfg.enable {
systemd.user.services.caelestia = lib.mkIf cfg.systemd.enable {
Unit = {
Description = "Caelestia Shell Service";
After = [cfg.systemd.target];
PartOf = [cfg.systemd.target];
X-Restart-Triggers = lib.mkIf (cfg.settings != {}) [
"${config.xdg.configFile."caelestia/shell.json".source}"
];
};
Service = {
Type = "exec";
ExecStart = "${shell}/bin/caelestia-shell";
Restart = "on-failure";
RestartSec = "5s";
TimeoutStopSec = "5s";
Environment =
[
"QT_QPA_PLATFORM=wayland"
]
++ cfg.systemd.environment;
Slice = "session.slice";
};
Install = {
WantedBy = [cfg.systemd.target];
};
};
xdg.configFile = let
mkConfig = c:
lib.pipe (
if c.extraConfig != ""
then c.extraConfig
else "{}"
) [
builtins.fromJSON
(lib.recursiveUpdate c.settings)
builtins.toJSON
];
in {
"caelestia/shell.json".text = mkConfig cfg;
"caelestia/cli.json".text = mkConfig cfg.cli;
};
home.packages = [shell] ++ lib.optional cfg.cli.enable cli;
};
}
|