nixpkgs/nixos/modules/programs/sway.nix

74 lines
1.8 KiB
Nix
Raw Normal View History

2017-10-17 14:09:42 +00:00
{ config, pkgs, lib, ... }:
with lib;
2017-10-25 16:35:00 +00:00
let
cfg = config.programs.sway;
sway = pkgs.sway;
swayWrapped = pkgs.writeShellScriptBin "sway" ''
if [ "$1" != "" ]; then
sway-setcap "$@"
exit
fi
2017-10-25 16:35:00 +00:00
${cfg.extraSessionCommands}
exec ${pkgs.dbus.dbus-launch} --exit-with-session sway-setcap
2017-10-25 16:35:00 +00:00
'';
swayJoined = pkgs.symlinkJoin {
name = "sway-wrapped";
paths = [ swayWrapped sway ];
};
in
2017-10-17 14:09:42 +00:00
{
2017-10-25 16:35:00 +00:00
options.programs.sway = {
enable = mkEnableOption "sway";
extraSessionCommands = mkOption {
default = "";
type = types.lines;
example = ''
2017-10-25 19:29:27 +00:00
export XKB_DEFAULT_LAYOUT=us,de
export XKB_DEFAULT_VARIANT=,nodeadkeys
2017-10-25 16:35:00 +00:00
export XKB_DEFAULT_OPTIONS=grp:alt_shift_toggle,
'';
description = ''
Shell commands executed just before sway is started.
'';
};
2017-10-17 14:09:42 +00:00
2017-10-25 16:35:00 +00:00
extraPackages = mkOption {
type = with types; listOf package;
2017-10-25 19:29:27 +00:00
default = with pkgs; [
i3status xwayland rxvt_unicode dmenu
];
2017-10-25 16:35:00 +00:00
example = literalExample ''
with pkgs; [
2017-10-25 19:29:27 +00:00
i3status xwayland rxvt_unicode dmenu
2017-10-25 16:35:00 +00:00
]
'';
description = ''
Extra packages to be installed system wide.
'';
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ swayJoined ] ++ cfg.extraPackages;
2017-10-17 14:09:42 +00:00
security.wrappers.sway = {
program = "sway-setcap";
source = "${sway}/bin/sway";
2017-10-17 14:09:42 +00:00
capabilities = "cap_sys_ptrace,cap_sys_tty_config=eip";
owner = "root";
group = "sway";
permissions = "u+rx,g+rx";
};
users.extraGroups.sway = {};
security.pam.services.swaylock = {};
2017-10-25 16:35:00 +00:00
hardware.opengl.enable = mkDefault true;
fonts.enableDefaultFonts = mkDefault true;
programs.dconf.enable = mkDefault true;
2017-10-17 14:09:42 +00:00
};
}