diff --git a/hosts/dunamis/configuration.nix b/hosts/dunamis/configuration.nix index 9e467fc..aa31ea2 100644 --- a/hosts/dunamis/configuration.nix +++ b/hosts/dunamis/configuration.nix @@ -1,6 +1,7 @@ { config, inputs, + pkgs, ... }: { imports = with inputs; [ @@ -22,6 +23,11 @@ time.timeZone = "Europe/Kyiv"; desktop.niri.enable = true; + # TODO: make a module for autologin + services.greetd.settings.initial_session = { + user = "user"; + command = "${pkgs.niri}/bin/niri-session"; + }; module = { config = { diff --git a/modules/nixos/desktop/common/default.nix b/modules/nixos/desktop/common/default.nix new file mode 100644 index 0000000..00993b4 --- /dev/null +++ b/modules/nixos/desktop/common/default.nix @@ -0,0 +1,16 @@ +{config, ...}: { + imports = [ + ./gnome-keyring.nix + ./greeter.nix + ./pam-rtprio.nix + ./pipewire.nix + ]; + fonts.fontDir.enable = true; + security = { + pam = { + services.greetd.enableGnomeKeyring = config.services.greetd.enable && config.services.gnome.gnome-keyring.enable; + }; + }; + services.udisks2.enable = true; + programs.dconf.enable = true; +} diff --git a/modules/nixos/desktop/common/gnome-keyring.nix b/modules/nixos/desktop/common/gnome-keyring.nix new file mode 100644 index 0000000..246b9c7 --- /dev/null +++ b/modules/nixos/desktop/common/gnome-keyring.nix @@ -0,0 +1,25 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) mkEnableOption mkIf; + cfg = config.module.desktop.gnome-keyring; +in { + options = { + module.desktop.gnome-keyring.enable = mkEnableOption "enable gnome keyring"; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + gcr_4 + libsecret + ]; + # programs.seahorse.enable = true; + services.gnome.gnome-keyring.enable = true; + xdg.portal.config.common = { + "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; + }; + }; +} diff --git a/modules/nixos/desktop/common/greeter.nix b/modules/nixos/desktop/common/greeter.nix new file mode 100644 index 0000000..0e18ef9 --- /dev/null +++ b/modules/nixos/desktop/common/greeter.nix @@ -0,0 +1,48 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) mkOption mkIf getExe types mkMerge; + cfg = config.module.desktop; +in { + options = { + module.desktop.displayManager = mkOption { + default = "greetd"; + type = types.enum [ + "cosmic" + "gdm" + "greetd" + "sddm" + ]; + }; + }; + + config = mkMerge [ + (mkIf (cfg.displayManager == "cosmic") { + services.displayManager.cosmic-greeter.enable = true; + }) + (mkIf (cfg.displayManager == "gdm") { + services.xserver.displayManager.gdm.enable = true; + }) + (mkIf (cfg.displayManager == "greetd") { + programs.regreet.enable = true; + services.greetd = { + enable = true; + vt = 1; + settings = { + default_session = { + command = "${getExe pkgs.cage} -s -m last -- ${getExe pkgs.greetd.regreet}"; + }; + }; + }; + }) + (mkIf (cfg.displayManager == "sddm") { + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + }; + }) + ]; +} diff --git a/modules/nixos/desktop/common/pam-rtprio.nix b/modules/nixos/desktop/common/pam-rtprio.nix new file mode 100644 index 0000000..9d91437 --- /dev/null +++ b/modules/nixos/desktop/common/pam-rtprio.nix @@ -0,0 +1,10 @@ +{ + security.pam.loginLimits = [ + { + domain = "@users"; + item = "rtprio"; + type = "-"; + value = -1; + } + ]; +} diff --git a/modules/nixos/desktop/cosmic.nix b/modules/nixos/desktop/cosmic.nix index aff4f9b..dae4da9 100644 --- a/modules/nixos/desktop/cosmic.nix +++ b/modules/nixos/desktop/cosmic.nix @@ -16,17 +16,11 @@ in { mkEnableOption "enable cosmic desktop"; }; config = mkIf cfg.enable { - environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1; + module.desktop.displayManager = "cosmic"; sound.pipewire.enable = true; - services = { - desktopManager.cosmic.enable = true; - displayManager.cosmic-greeter.enable = true; - gnome.gnome-keyring.enable = true; - dbus = { - apparmor = "enabled"; - implementation = "broker"; - }; - }; + + environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1; + services.desktopManager.cosmic.enable = true; systemd = { packages = [pkgs.observatory]; services.monitord.wantedBy = ["multi-user.target"]; @@ -37,10 +31,7 @@ in { xdg-desktop-portal-cosmic xdg-desktop-portal-gtk ]; - config.cosmic = { - default = ["cosmic" "gtk"]; - "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; - }; + config.cosmic.default = ["cosmic" "gtk"]; }; }; } diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix index 3140e4a..ca85196 100644 --- a/modules/nixos/desktop/default.nix +++ b/modules/nixos/desktop/default.nix @@ -1,6 +1,6 @@ { imports = [ - ./common/pipewire.nix + ./common ./cosmic.nix ./gnome.nix ./hyprland.nix diff --git a/modules/nixos/desktop/gnome.nix b/modules/nixos/desktop/gnome.nix index 7aec45b..794ea0c 100644 --- a/modules/nixos/desktop/gnome.nix +++ b/modules/nixos/desktop/gnome.nix @@ -11,19 +11,12 @@ in { mkEnableOption "enable gnome desktop"; }; config = mkIf cfg.enable { + module.desktop.displayManager = "gdm"; sound.pipewire.enable = true; + services.xserver = { enable = true; - displayManager.gdm.enable = true; desktopManager.gnome.enable = true; }; - programs.dconf.enable = true; - programs.seahorse.enable = true; - services.gnome.gnome-keyring.enable = true; - services.udisks2.enable = true; - services.dbus = { - apparmor = "enabled"; - implementation = "broker"; - }; }; } diff --git a/modules/nixos/desktop/hyprland.nix b/modules/nixos/desktop/hyprland.nix index 8325dc9..9d702db 100644 --- a/modules/nixos/desktop/hyprland.nix +++ b/modules/nixos/desktop/hyprland.nix @@ -4,8 +4,9 @@ pkgs, lib, ... -}: -with lib; let +}: let + inherit (lib) mkEnableOption mkIf; + inherit (perSystem) hyprland; cfg = config.desktop.hyprland; in { options = { @@ -13,65 +14,23 @@ in { mkEnableOption "enable hyprland desktop"; }; config = mkIf cfg.enable { + module.desktop.displayManager = "greetd"; + module.desktop.gnome-keyring.enable = true; sound.pipewire.enable = true; + programs.hyprland = { enable = true; - package = perSystem.hyprland.hyprland; - portalPackage = perSystem.hyprland.xdg-desktop-portal-hyprland; - }; - environment.systemPackages = with pkgs; [ - brightnessctl - gcr_4 - ]; - fonts.fontDir.enable = true; - security.pam = { - services.hyprlock = {}; - loginLimits = [ - { - domain = "@users"; - item = "rtprio"; - type = "-"; - value = 1; - } - ]; - }; - services = { - gnome.gnome-keyring.enable = true; - udisks2.enable = true; - dbus = { - apparmor = "enabled"; - implementation = "broker"; - }; - }; - programs = { - dconf.enable = true; - seahorse.enable = true; + package = hyprland.hyprland; + portalPackage = hyprland.xdg-desktop-portal-hyprland; }; + security.pam.services.hyprlock = {}; xdg.portal = { enable = true; extraPortals = [ - perSystem.hyprland.xdg-desktop-portal-hyprland + hyprland.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk ]; - config.common.default = [ - "hyprland" - "gtk" - ]; - }; - - programs.regreet.enable = true; - services.greetd = { - enable = true; - vt = 6; - settings = { - default_session = { - command = "${pkgs.cage}/bin/cage -s -m last -- ${pkgs.greetd.regreet}/bin/regreet"; - }; - initial_session = { - user = "user"; - command = "Hyprland"; - }; - }; + config.hyprland.default = ["hyprland" "gtk"]; }; }; } diff --git a/modules/nixos/desktop/niri.nix b/modules/nixos/desktop/niri.nix index fe0fe9f..0820def 100644 --- a/modules/nixos/desktop/niri.nix +++ b/modules/nixos/desktop/niri.nix @@ -4,7 +4,7 @@ lib, ... }: let - inherit (lib) mkIf mkEnableOption getExe; + inherit (lib) mkIf mkEnableOption; cfg = config.desktop.niri; in { options = { @@ -12,62 +12,22 @@ in { mkEnableOption "enable niri desktop"; }; config = mkIf cfg.enable { + module.desktop.displayManager = "greetd"; + module.desktop.gnome-keyring.enable = true; sound.pipewire.enable = true; + + security = { + soteria.enable = true; # polkit agent in rust + pam.services.gtklock = {}; + }; programs.niri.enable = true; # wayland compositor in rust - environment.systemPackages = with pkgs; [ - brightnessctl - gcr_4 - ]; - fonts.fontDir.enable = true; - security.soteria.enable = true; - security.pam = { - services.greetd.enableGnomeKeyring = true; - services.gtklock = {}; - loginLimits = [ - { - domain = "@users"; - item = "rtprio"; - type = "-"; - value = 1; - } - ]; - }; - services = { - gnome.gnome-keyring.enable = true; - udisks2.enable = true; - dbus = { - apparmor = "enabled"; - implementation = "broker"; - }; - }; - programs = { - dconf.enable = true; - seahorse.enable = true; - }; xdg.portal = { enable = true; extraPortals = with pkgs; [ xdg-desktop-portal-gnome xdg-desktop-portal-gtk ]; - config.niri = { - default = ["gnome" "gtk"]; - "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; - }; - }; - programs.regreet.enable = true; - services.greetd = { - enable = true; - vt = 6; - settings = { - default_session = { - command = "${pkgs.cage}/bin/cage -s -m last -- ${getExe pkgs.greetd.regreet}"; - }; - initial_session = { - user = "user"; - command = "${pkgs.niri}/bin/niri-session"; - }; - }; + config.niri.default = ["gnome" "gtk"]; }; }; } diff --git a/modules/nixos/desktop/plasma.nix b/modules/nixos/desktop/plasma.nix index 2f222fe..9cc28bb 100644 --- a/modules/nixos/desktop/plasma.nix +++ b/modules/nixos/desktop/plasma.nix @@ -13,27 +13,13 @@ in { options = { desktop.plasma = { enable = mkEnableOption "enable plasma desktop"; - # sddmEnable = mkEnableOption "enable simple display manager"; }; }; config = mkIf cfg.enable { - stylix.targets.qt.enable = mkDefault false; - environment.systemPackages = with pkgs; [gcr_4]; - services = { - gnome.gnome-keyring.enable = true; - desktopManager.plasma6.enable = true; - displayManager.sddm = { - enable = true; # cfg.sddmEnable; - wayland.enable = true; - }; - }; - fonts.fontDir.enable = true; + module.desktop.displayManager = "sddm"; + sound.pipewire.enable = true; - xdg.portal = { - enable = true; - config.common = { - "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; - }; - }; + services.desktopManager.plasma6.enable = true; + stylix.targets.qt.enable = mkDefault false; }; }