{ pkgs, lib, config, ... }: let # TODO: make this configurable homeUser = "steveej"; in { services.xserver.serverFlagsSection = '' Option "BlankTime" "0" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" ''; hardware.opengl.enable = true; services.gvfs = { enable = true; package = lib.mkForce pkgs.gnome3.gvfs; }; environment.systemPackages = with pkgs; [ # provides a default authentification client for policykit lxqt.lxqt-policykit ]; # required by swaywm security.polkit.enable = true; security.pam.services.swaylock = {}; # test these on https://mozilla.github.io/webrtc-landing/gum_test.html xdg.portal = { enable = true; # FIXME: `true` breaks xdg-open from alacritty: # $ xdg-open "https://github.com/" # Error: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.OpenURI” on object at path /org/freedesktop/portal/desktop xdgOpenUsePortal = true; wlr = { enable = true; settings = { screencast = { chooser_type = "dmenu"; # display the output as a list in favor of the default mouse selection chooser_cmd = lib.getExe (pkgs.writeShellApplication { name = "chooser_cmd"; runtimeInputs = [ pkgs.sway pkgs.jq pkgs.fuzzel pkgs.gnused ]; text = '' swaymsg -t get_outputs | jq '.[] | "\(.name)@\(.current_mode.width)x\(.current_mode.height) on \(.model)"' | sed 's/"//g' | fuzzel -d | sed 's/@.*//' ''; }); max_fps = 30; }; }; }; # keep the behaviour in < 1.17, which uses the first portal implementation found in lexicographical order, use the following: config = { common = { default = [ "wlr" "gtk" ]; }; }; extraPortals = [ # repoFlake.inputs.nixpkgs-wayland.packages.${pkgs.system}.xdg-desktop-portal-wlr # pkgs.xdg-desktop-portal-gtk (pkgs.xdg-desktop-portal-gtk.override (_: { buildPortalsInGnome = false; })) ]; }; # rtkit is optional but recommended security.rtkit.enable = true; services.pipewire = { audio.enable = true; enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; # If you want to use JACK applications, uncomment this #jack.enable = true; }; security.pam.services.getty.enableGnomeKeyring = true; security.pam.services."autovt@tty1".enableGnomeKeyring = true; services.gnome.gnome-keyring.enable = true; # autologin steveej on tty1 # TODO: make user configurable systemd.services."autovt@tty1".description = "Autologin at the TTY1"; systemd.services."autovt@tty1".after = ["systemd-logind.service"]; # without it user session not started and xorg can't be run from this tty systemd.services."autovt@tty1".wantedBy = ["multi-user.target"]; systemd.services."autovt@tty1".serviceConfig = { ExecStart = [ "" # override upstream default with an empty ExecStart "@${pkgs.utillinux}/sbin/agetty agetty --login-program ${pkgs.shadow}/bin/login --autologin steveej --noclear %I $TERM" ]; Restart = "always"; Type = "idle"; }; programs = let steveejSwayOnTty1 = '' if test $(id --user steveej) = $(id -u) && test $(tty) = "/dev/tty1"; then exec sway fi ''; in { bash.loginShellInit = steveejSwayOnTty1; # TODO: only do this when zsh is enabled. first naiv attempt lead infinite recursion zsh.loginShellInit = steveejSwayOnTty1; }; home-manager.users."${homeUser}" = _: { imports = [ ../../home-manager/profiles/sway-desktop.nix ]; }; }