2022-08-05 22:47:53 +00:00
|
|
|
{ lib, config, pkgs, ... }:
|
2022-06-07 00:39:40 +00:00
|
|
|
|
|
|
|
with lib;
|
|
|
|
let
|
2022-08-01 07:23:49 +00:00
|
|
|
cfg = config.sane.gui.phosh;
|
2022-06-07 00:39:40 +00:00
|
|
|
in
|
|
|
|
{
|
|
|
|
options = {
|
2022-08-01 07:23:49 +00:00
|
|
|
sane.gui.phosh.enable = mkOption {
|
2022-06-07 00:39:40 +00:00
|
|
|
default = false;
|
|
|
|
type = types.bool;
|
|
|
|
};
|
2022-10-19 12:18:13 +00:00
|
|
|
sane.gui.phosh.useGreeter = mkOption {
|
|
|
|
description = ''
|
|
|
|
launch phosh via a greeter (like lightdm-mobile-greeter).
|
|
|
|
phosh is usable without a greeter, but skipping the greeter means no PAM session.
|
|
|
|
'';
|
2022-10-20 12:03:30 +00:00
|
|
|
default = true;
|
2022-10-19 12:18:13 +00:00
|
|
|
type = types.bool;
|
|
|
|
};
|
2022-06-07 00:39:40 +00:00
|
|
|
};
|
|
|
|
|
2023-02-03 22:55:39 +00:00
|
|
|
config = mkMerge [
|
2022-10-19 12:18:13 +00:00
|
|
|
{
|
2023-02-03 22:55:39 +00:00
|
|
|
sane.programs.phoshApps = {
|
|
|
|
package = null;
|
|
|
|
suggestedPrograms = [
|
|
|
|
"guiApps"
|
|
|
|
# TODO: see about removing gnome-bluetooth if the in-built gnome-settings bluetooth manager can work
|
|
|
|
"gnome.gnome-bluetooth"
|
2023-03-10 09:02:26 +00:00
|
|
|
"gnome.gnome-terminal"
|
2023-02-04 10:00:10 +00:00
|
|
|
"phosh-mobile-settings"
|
2023-02-11 00:51:20 +00:00
|
|
|
# "plasma5Packages.konsole" # more reliable terminal
|
2023-02-03 22:55:39 +00:00
|
|
|
];
|
|
|
|
};
|
|
|
|
}
|
2023-02-04 00:43:00 +00:00
|
|
|
{
|
|
|
|
sane.programs = {
|
|
|
|
inherit (pkgs // {
|
|
|
|
"gnome.gnome-bluetooth" = pkgs.gnome.gnome-bluetooth;
|
2023-03-10 09:02:26 +00:00
|
|
|
"gnome.gnome-terminal" = pkgs.gnome.gnome-terminal;
|
2023-02-04 10:00:10 +00:00
|
|
|
"plasma5Packages.konsole" = pkgs.plasma5Packages.konsole;
|
2023-02-04 00:43:00 +00:00
|
|
|
})
|
|
|
|
phosh-mobile-settings
|
2023-02-04 10:00:10 +00:00
|
|
|
"plasma5Packages.konsole"
|
2023-02-04 00:43:00 +00:00
|
|
|
# "gnome.gnome-bluetooth"
|
2023-03-10 09:02:26 +00:00
|
|
|
"gnome.gnome-terminal"
|
2023-02-04 00:43:00 +00:00
|
|
|
;
|
|
|
|
};
|
|
|
|
}
|
2023-02-03 22:55:39 +00:00
|
|
|
|
|
|
|
(mkIf cfg.enable {
|
|
|
|
sane.programs.phoshApps.enableFor.user.colin = true;
|
2022-08-02 23:00:37 +00:00
|
|
|
|
2023-03-01 08:18:00 +00:00
|
|
|
# TODO(2023/02/28): remove this qt.style = "gtk2" override.
|
|
|
|
# gnome by default tells qt to stylize its apps similar to gnome.
|
|
|
|
# but the package needed for that doesn't cross-compile, hence i disable that here.
|
2023-03-04 03:58:57 +00:00
|
|
|
# qt.platformTheme = "gtk2";
|
|
|
|
# qt.style = "gtk2";
|
2023-03-01 08:18:00 +00:00
|
|
|
|
2022-10-19 12:18:13 +00:00
|
|
|
# docs: https://github.com/NixOS/nixpkgs/blob/nixos-22.05/nixos/modules/services/x11/desktop-managers/phosh.nix
|
|
|
|
services.xserver.desktopManager.phosh = {
|
|
|
|
enable = true;
|
|
|
|
user = "colin";
|
|
|
|
group = "users";
|
|
|
|
phocConfig = {
|
|
|
|
# xwayland = "true";
|
|
|
|
# find default outputs by catting /etc/phosh/phoc.ini
|
|
|
|
outputs.DSI-1 = {
|
|
|
|
scale = 1.5;
|
|
|
|
};
|
2022-06-07 00:39:40 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2023-02-07 03:24:46 +00:00
|
|
|
# phosh enables `services.gnome.{core-os-services, core-shell}`
|
|
|
|
# and this in turn enables some default apps we don't really care about.
|
|
|
|
# see <nixos/modules/services/x11/desktop-managers/gnome.nix>
|
|
|
|
environment.gnome.excludePackages = with pkgs; [
|
|
|
|
# gnome.gnome-menus # unused outside gnome classic, but probably harmless
|
|
|
|
gnome-tour
|
|
|
|
];
|
|
|
|
services.dleyna-renderer.enable = false;
|
|
|
|
services.dleyna-server.enable = false;
|
|
|
|
services.gnome.gnome-browser-connector.enable = false;
|
|
|
|
services.gnome.gnome-initial-setup.enable = false;
|
|
|
|
services.gnome.gnome-online-accounts.enable = false;
|
|
|
|
services.gnome.gnome-remote-desktop.enable = false;
|
|
|
|
services.gnome.gnome-user-share.enable = false;
|
|
|
|
services.gnome.rygel.enable = false;
|
|
|
|
|
|
|
|
# gnome doesn't use mkDefault for these -- unclear why not
|
|
|
|
services.gnome.evolution-data-server.enable = mkForce false;
|
|
|
|
services.gnome.gnome-online-miners.enable = mkForce false;
|
|
|
|
|
2022-10-19 12:18:13 +00:00
|
|
|
# XXX: phosh enables networkmanager by default; can probably disable these lines
|
|
|
|
networking.useDHCP = false;
|
|
|
|
networking.networkmanager.enable = true;
|
|
|
|
networking.wireless.enable = lib.mkForce false;
|
2022-08-03 23:23:36 +00:00
|
|
|
|
2022-10-19 12:18:13 +00:00
|
|
|
# XXX: not clear if these are actually needed?
|
|
|
|
hardware.bluetooth.enable = true;
|
|
|
|
services.blueman.enable = true;
|
2022-08-05 22:47:53 +00:00
|
|
|
|
2022-10-19 12:18:13 +00:00
|
|
|
hardware.opengl.enable = true;
|
|
|
|
hardware.opengl.driSupport = true;
|
2022-06-07 01:10:19 +00:00
|
|
|
|
2022-10-19 12:18:13 +00:00
|
|
|
environment.variables = {
|
|
|
|
# Qt apps won't always start unless this env var is set
|
|
|
|
QT_QPA_PLATFORM = "wayland";
|
|
|
|
# electron apps (e.g. Element) should use the wayland backend
|
|
|
|
# toggle this to have electron apps (e.g. Element) use the wayland backend.
|
|
|
|
# phocConfig.xwayland should be disabled if you do this
|
|
|
|
NIXOS_OZONE_WL = "1";
|
|
|
|
};
|
2022-08-05 22:47:53 +00:00
|
|
|
|
2023-01-30 03:00:55 +00:00
|
|
|
programs.dconf.packages = [
|
2023-02-11 00:51:20 +00:00
|
|
|
# org.kde.konsole.desktop
|
2023-01-30 03:00:55 +00:00
|
|
|
(pkgs.writeTextFile {
|
|
|
|
name = "dconf-phosh-settings";
|
|
|
|
destination = "/etc/dconf/db/site.d/00_phosh_settings";
|
|
|
|
text = ''
|
|
|
|
[org/gnome/desktop/interface]
|
|
|
|
show-battery-percentage=true
|
|
|
|
|
|
|
|
[org/gnome/settings-daemon/plugins/power]
|
|
|
|
sleep-inactive-ac-timeout=5400
|
|
|
|
sleep-inactive-battery-timeout=5400
|
2023-01-30 03:38:46 +00:00
|
|
|
|
|
|
|
[sm/puri/phosh]
|
2023-02-11 00:51:20 +00:00
|
|
|
favorites=['gpodder.desktop', 'nheko.desktop', 'sublime-music.desktop', 'firefox.desktop', 'org.gnome.Terminal.desktop']
|
2023-01-30 03:00:55 +00:00
|
|
|
'';
|
|
|
|
})
|
|
|
|
];
|
2023-02-03 22:55:39 +00:00
|
|
|
})
|
2023-01-30 03:00:55 +00:00
|
|
|
|
2023-02-03 22:55:39 +00:00
|
|
|
(mkIf (cfg.enable && cfg.useGreeter) {
|
2022-10-19 15:12:56 +00:00
|
|
|
services.xserver.enable = true;
|
2022-10-21 04:16:38 +00:00
|
|
|
# NB: setting defaultSession has the critical side-effect that it lets org.freedesktop.AccountsService
|
|
|
|
# know that our user exists. this ensures lightdm succeeds when calling /org/freedesktop/AccountsServices ListCachedUsers
|
2022-10-21 06:41:52 +00:00
|
|
|
# lightdm greeters get the login users from lightdm which gets it from org.freedesktop.Accounts.ListCachedUsers.
|
|
|
|
# this requires the user we want to login as to be cached.
|
|
|
|
services.xserver.displayManager.job.preStart = ''
|
|
|
|
${pkgs.systemd}/bin/busctl call org.freedesktop.Accounts /org/freedesktop/Accounts org.freedesktop.Accounts CacheUser s colin
|
|
|
|
'';
|
2022-11-02 11:59:36 +00:00
|
|
|
# services.xserver.displayManager.defaultSession = "sm.puri.Phosh"; # XXX: not sure why this doesn't propagate correctly.
|
|
|
|
services.xserver.displayManager.lightdm.extraSeatDefaults = ''
|
|
|
|
user-session = phosh
|
|
|
|
'';
|
2022-11-02 11:13:41 +00:00
|
|
|
# services.xserver.displayManager.lightdm.greeters.gtk.enable = false; # gtk greeter overrides our own?
|
|
|
|
# services.xserver.displayManager.lightdm.greeter = {
|
|
|
|
# enable = true;
|
|
|
|
# package = pkgs.lightdm-mobile-greeter.xgreeters;
|
|
|
|
# name = "lightdm-mobile-greeter";
|
|
|
|
# };
|
|
|
|
# # services.xserver.displayManager.lightdm.enable = true;
|
|
|
|
|
|
|
|
services.xserver.displayManager.lightdm.enable = true;
|
|
|
|
services.xserver.displayManager.lightdm.greeters.mobile.enable = true;
|
2022-10-19 15:12:56 +00:00
|
|
|
|
|
|
|
systemd.services.phosh.wantedBy = lib.mkForce []; # disable auto-start
|
2022-10-19 12:18:13 +00:00
|
|
|
})
|
2023-02-03 22:55:39 +00:00
|
|
|
];
|
2022-06-07 00:39:40 +00:00
|
|
|
}
|