with wayland I used:
{
services.cage = {
enable = true;
program = "${app}/bin/my_app";
user = "some_user";
};
# wait for network and DNS
systemd.services."cage-tty1".after = [
"network-online.target"
"systemd-resolved.service"
];
}
with x11 I used:
{ pkgs, app, user, ... }:
let
autostart = ''
#!${pkgs.bash}/bin/bash
# End all lines with '&' to not halt startup script execution
firefox --kiosk https://stigok.com/ &
'';
inherit (pkgs) writeScript;
in
{
services.xserver = {
enable = true;
layout = "us"; # keyboard layout
libinput.enable = true;
# Let lightdm handle autologin
displayManager.lightdm = {
enable = true;
# autoLogin = {
# timeout = 0;
# };
};
# Start openbox after autologin
windowManager.openbox.enable = true;
displayManager = {
defaultSession = "none+openbox";
autoLogin = {
inherit user;
enable = true;
};
};
};
systemd.services."display-manager".after = [
"network-online.target"
"systemd-resolved.service"
];
# Overlay to set custom autostart script for openbox
nixpkgs.overlays = with pkgs; [
(_self: super: {
openbox = super.openbox.overrideAttrs (_oldAttrs: rec {
postFixup = ''
ln -sf /etc/openbox/autostart $out/etc/xdg/openbox/autostart
'';
});
})
];
# By defining the script source outside of the overlay, we don't have to
# rebuild the package every time we change the startup script.
environment.etc."openbox/autostart".source = writeScript "autostart" autostart;
}
For x11, I stole that config from https://blog.stigok.com/2020/06/19/nixos-xserver-openbox-auto-start-browser-application.html
I regret nothing.