From cd795fd3f0a910b60cf9823284f3e99ba367301e Mon Sep 17 00:00:00 2001 From: Pratham Patel Date: Mon, 24 Mar 2025 01:39:32 +0530 Subject: [PATCH] nixos/modules: cosmic: init --- .../services/desktop-managers/cosmic.nix | 142 ++++++++++++++++++ .../services/x11/desktop-managers/default.nix | 1 + 2 files changed, 143 insertions(+) create mode 100644 nixos/modules/services/desktop-managers/cosmic.nix diff --git a/nixos/modules/services/desktop-managers/cosmic.nix b/nixos/modules/services/desktop-managers/cosmic.nix new file mode 100644 index 000000000000..a6aa7cc3e826 --- /dev/null +++ b/nixos/modules/services/desktop-managers/cosmic.nix @@ -0,0 +1,142 @@ +# SPDX-License-Identifier: MIT +# SPDX-FileCopyrightText: Lily Foster +# Portions of this code are adapted from nixos-cosmic +# https://github.com/lilyinstarlight/nixos-cosmic + +{ + config, + lib, + pkgs, + utils, + ... +}: + +let + cfg = config.services.desktopManager.cosmic; +in +{ + meta.maintainers = with lib.maintainers; [ + thefossguy + HeitorAugustoLN + nyabinary + ahoneybun + ]; + + options = { + services.desktopManager.cosmic = { + enable = lib.mkEnableOption "Enable the COSMIC desktop environment"; + + xwayland.enable = lib.mkEnableOption "Xwayland support for the COSMIC compositor" // { + default = true; + }; + }; + }; + + config = lib.mkIf cfg.enable { + # Environment packages + environment.pathsToLink = [ + "/share/backgrounds" + "/share/cosmic" + ]; + environment.systemPackages = + with pkgs; + [ + adwaita-icon-theme + alsa-utils + cosmic-applets + cosmic-applibrary + cosmic-bg + (cosmic-comp.override { useXWayland = false; }) + cosmic-edit + cosmic-files + config.services.displayManager.cosmic-greeter.package + cosmic-icons + cosmic-idle + cosmic-launcher + cosmic-notifications + cosmic-osd + cosmic-panel + cosmic-player + cosmic-randr + cosmic-screenshot + cosmic-session + cosmic-settings + cosmic-settings-daemon + cosmic-term + cosmic-wallpapers + cosmic-workspaces-epoch + hicolor-icon-theme + playerctl + pop-icon-theme + pop-launcher + xdg-user-dirs + ] + ++ lib.optionals cfg.xwayland.enable [ + xwayland + ] + ++ lib.optionals config.services.flatpak.enable [ + cosmic-store + ]; + + # Distro-wide defaults for graphical sessions + services.graphical-desktop.enable = true; + + xdg = { + icons.fallbackCursorThemes = lib.mkDefault [ "Cosmic" ]; + + portal = { + enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-cosmic + xdg-desktop-portal-gtk + ]; + configPackages = lib.mkDefault [ pkgs.xdg-desktop-portal-cosmic ]; + }; + }; + + systemd = { + packages = [ pkgs.cosmic-session ]; + user.targets = { + cosmic-session = { + wants = [ "xdg-desktop-autostart.target" ]; + before = [ "xdg-desktop-autostart.target" ]; + }; + tray = { + description = "Cosmic Tray Target"; + requires = [ "graphical-session-pre.target" ]; + }; + }; + }; + + fonts.packages = with pkgs; [ + fira + noto-fonts + open-sans + ]; + + # Required options for the COSMIC DE + environment.sessionVariables.X11_BASE_RULES_XML = "${config.services.xserver.xkb.dir}/rules/base.xml"; + environment.sessionVariables.X11_EXTRA_RULES_XML = "${config.services.xserver.xkb.dir}/rules/base.extras.xml"; + programs.dconf.enable = true; + programs.dconf.packages = [ pkgs.cosmic-session ]; + security.polkit.enable = true; + security.rtkit.enable = true; + services.accounts-daemon.enable = true; + services.displayManager.sessionPackages = [ pkgs.cosmic-session ]; + services.libinput.enable = true; + services.upower.enable = true; + # Setup PAM authentication for the `cosmic-greeter` user + security.pam.services.cosmic-greeter = { }; + + # Good to have defaults + hardware.bluetooth.enable = lib.mkDefault true; + networking.networkmanager.enable = lib.mkDefault true; + services.acpid.enable = lib.mkDefault true; + services.avahi.enable = lib.mkDefault true; + services.gnome.gnome-keyring.enable = lib.mkDefault true; + services.gvfs.enable = lib.mkDefault true; + services.power-profiles-daemon.enable = lib.mkDefault ( + !config.hardware.system76.power-daemon.enable + ); + }; +} diff --git a/nixos/modules/services/x11/desktop-managers/default.nix b/nixos/modules/services/x11/desktop-managers/default.nix index 42e66e86e1a3..4c0de95040c9 100644 --- a/nixos/modules/services/x11/desktop-managers/default.nix +++ b/nixos/modules/services/x11/desktop-managers/default.nix @@ -21,6 +21,7 @@ in ./lxqt.nix ./enlightenment.nix ./gnome.nix ./retroarch.nix ./kodi.nix ./mate.nix ./pantheon.nix ./surf-display.nix ./cde.nix ./cinnamon.nix ./budgie.nix ./deepin.nix ../../desktop-managers/lomiri.nix + ../../desktop-managers/cosmic.nix ]; options = {