96 lines
2.1 KiB
Nix
96 lines
2.1 KiB
Nix
![]() |
{
|
||
|
lib,
|
||
|
pkgs,
|
||
|
config,
|
||
|
...
|
||
|
}:
|
||
|
|
||
|
with lib;
|
||
|
let
|
||
|
cfg = config.modules.desktop;
|
||
|
in
|
||
|
{
|
||
|
imports = [
|
||
|
# Import desktop environment modules
|
||
|
./background/glpaper/default.nix
|
||
|
./bar/waybar.nix
|
||
|
./lock-screen/waylock.nix
|
||
|
./window-manager/i3.nix
|
||
|
./window-manager/river.nix
|
||
|
];
|
||
|
|
||
|
options.modules.desktop = {
|
||
|
wayland = mkEnableOption "wayland";
|
||
|
# TODO: Remove, not needed with session/display manager
|
||
|
initScript = mkOption {
|
||
|
type = types.lines;
|
||
|
default = "${pkgs.bash}/bin/bash";
|
||
|
description = "Bash script to execute after logging in.";
|
||
|
};
|
||
|
# TODO: Find a nicer way to do this as this is also executed on startup
|
||
|
reloadScript = mkOption {
|
||
|
type = types.lines;
|
||
|
default = "";
|
||
|
description = "Shell script to execute after reload/rebuild.";
|
||
|
};
|
||
|
decorations = mkOption {
|
||
|
type = types.nullOr (
|
||
|
types.enum [
|
||
|
"csd"
|
||
|
"ssd"
|
||
|
]
|
||
|
);
|
||
|
default = null;
|
||
|
description = "Window decorations to use.";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config =
|
||
|
lib.recursiveUpdate
|
||
|
{
|
||
|
# Ensure desktop related systemd services (xdg) have access to session variables.
|
||
|
systemd.user.sessionVariables = config.home.sessionVariables;
|
||
|
|
||
|
home.packages = optionals cfg.wayland (
|
||
|
with pkgs;
|
||
|
[
|
||
|
wl-clipboard
|
||
|
wtype
|
||
|
grim
|
||
|
slurp
|
||
|
]
|
||
|
);
|
||
|
|
||
|
home.activation = {
|
||
|
customReloadScript = lib.hm.dag.entryAfter [ "writeBoundary" ] (
|
||
|
''
|
||
|
#!${pkgs.bash}/bin/bash
|
||
|
''
|
||
|
+ cfg.reloadScript
|
||
|
);
|
||
|
};
|
||
|
|
||
|
home.file.".initrc" = {
|
||
|
enable = true;
|
||
|
executable = true;
|
||
|
text =
|
||
|
''
|
||
|
#!${pkgs.bash}/bin/bash
|
||
|
|
||
|
''
|
||
|
+ cfg.initScript;
|
||
|
};
|
||
|
}
|
||
|
(
|
||
|
# TODO: Move to dedicated module within desktop or maybe theming?
|
||
|
if cfg.decorations == null then
|
||
|
{ }
|
||
|
else
|
||
|
{
|
||
|
csd = { };
|
||
|
ssd = { };
|
||
|
}
|
||
|
."${cfg.decorations}"
|
||
|
);
|
||
|
}
|