114 lines
2.8 KiB
Nix
114 lines
2.8 KiB
Nix
defaultSession: {
|
|
config,
|
|
lib,
|
|
mainUser,
|
|
pkgs,
|
|
...
|
|
}: {
|
|
config = let
|
|
inherit (lib) findFirst getExe mkForce;
|
|
|
|
switch-session = pkgs.writeShellApplication {
|
|
name = "switch-session";
|
|
|
|
text = ''
|
|
mkdir -p /etc/sddm.conf.d
|
|
|
|
cat <<EOF | tee /etc/sddm.conf.d/autologin.conf
|
|
[Autologin]
|
|
User=${mainUser}
|
|
Session=$1
|
|
Relogin=true
|
|
EOF
|
|
'';
|
|
};
|
|
|
|
gaming-mode = pkgs.writeShellScriptBin "gaming-mode" ''
|
|
sudo ${pkgs.systemd}/bin/systemctl start to-gaming-mode.service
|
|
'';
|
|
in {
|
|
services.displayManager.sddm = {
|
|
enable = true;
|
|
autoLogin.relogin = true;
|
|
|
|
wayland = {
|
|
enable = true;
|
|
compositorCommand = "kwin";
|
|
};
|
|
};
|
|
|
|
# Sets the default session at launch
|
|
systemd.services."set-session" = {
|
|
wantedBy = ["multi-user.target"];
|
|
before = ["display-manager.service"];
|
|
|
|
path = [switch-session];
|
|
|
|
script = ''
|
|
switch-session "${defaultSession}"
|
|
'';
|
|
};
|
|
|
|
# Allows switching to gaming mode
|
|
systemd.services."to-gaming-mode" = {
|
|
wantedBy = mkForce [];
|
|
|
|
path = [switch-session];
|
|
|
|
script = ''
|
|
switch-session "gamescope-wayland"
|
|
systemctl restart display-manager
|
|
sleep 10
|
|
switch-session "${defaultSession}"
|
|
'';
|
|
};
|
|
|
|
# Make it so we don't need root to switch to gaming mode
|
|
security.sudo.extraRules = [
|
|
{
|
|
users = [mainUser];
|
|
groups = [100];
|
|
commands = [
|
|
{
|
|
command = "${pkgs.systemd}/bin/systemctl start to-gaming-mode.service";
|
|
options = ["SETENV" "NOPASSWD"];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
|
|
home-manager.users.${mainUser} = {
|
|
# Add desktop entry to make it GUI friendly
|
|
xdg.desktopEntries."Gaming Mode" = {
|
|
name = "Gaming Mode";
|
|
exec = getExe gaming-mode;
|
|
icon = "steam";
|
|
terminal = false;
|
|
type = "Application";
|
|
};
|
|
|
|
home.file."Desktop/Gaming Mode.desktop".source =
|
|
(
|
|
findFirst
|
|
(x: x.meta.name == "Gaming Mode.desktop") {}
|
|
config.home-manager.users.mariah.home.packages
|
|
)
|
|
+ "/share/applications/Gaming Mode.desktop";
|
|
|
|
# Fix remote control prompt showing up everytime
|
|
xdg.configFile = let
|
|
mkAutostart = name: flags: {
|
|
"autostart/${name}.desktop".text = "[Desktop Entry]\nType=Application\nExec=${name} ${flags}";
|
|
};
|
|
in (
|
|
# Needs xdg-desktop-portal-kde patch provided by `self.overlays.xdg-desktop-portal-kde`
|
|
{"plasmaremotedesktoprc".text = "[Sharing]\nUnattended=true";}
|
|
// (mkAutostart "krfb" "--nodialog %c")
|
|
// (mkAutostart "steam" "-silent %U")
|
|
);
|
|
};
|
|
};
|
|
|
|
# For accurate stack trace
|
|
_file = ./session-switching.nix;
|
|
}
|