mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-02-07 12:19:07 +00:00
189 lines
5.8 KiB
Nix
189 lines
5.8 KiB
Nix
{ config, options, lib, pkgs, foodogsquaredLib, ... }:
|
|
|
|
let
|
|
workflowId = "one.foodogsquared.HorizontalHunger";
|
|
|
|
cfg = config.workflows.workflows.${workflowId};
|
|
sessionConfig = config.programs.gnome-session.sessions.${workflowId};
|
|
|
|
requiredPackages = with pkgs; [
|
|
# The window manager. We only put this here since it has some commands that
|
|
# are useful to be having.
|
|
cfg.package
|
|
|
|
# The application opener.
|
|
junction
|
|
];
|
|
|
|
workflowEnvironment = foodogsquaredLib.nixos.mkNixoslikeEnvironment config {
|
|
name = "${workflowId}-env";
|
|
paths = requiredPackages ++ cfg.extraApps;
|
|
};
|
|
in
|
|
{
|
|
options.workflows.enable = lib.mkOption {
|
|
type = with lib.types; listOf (enum [ workflowId ]);
|
|
};
|
|
|
|
options.workflows.workflows.${workflowId} = {
|
|
package = lib.mkOption {
|
|
type = lib.types.package;
|
|
description = ''
|
|
Derivation containing {program}`niri` executable which is the preferred
|
|
window manager for this workflow.
|
|
'';
|
|
default = pkgs.niri;
|
|
};
|
|
|
|
extraApps = lib.mkOption {
|
|
type = with lib.types; listOf package;
|
|
default = with pkgs; [
|
|
flowtime
|
|
dialect
|
|
blanket
|
|
];
|
|
description = ''
|
|
A list of extraneous applications to be included with the desktop
|
|
session.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf (lib.elem workflowId config.workflows.enable) {
|
|
# Enable all of the core services.
|
|
hardware.bluetooth.enable = true;
|
|
programs.dconf.enable = true;
|
|
programs.xwayland.enable = true;
|
|
programs.gnupg.agent = {
|
|
enable = lib.mkDefault true;
|
|
pinentryPackage = pkgs.pinentry-gnome3;
|
|
};
|
|
security.polkit.enable = true;
|
|
services.colord.enable = lib.mkDefault true;
|
|
services.gnome.gnome-keyring.enable = lib.mkDefault true;
|
|
services.power-profiles-daemon.enable = true;
|
|
services.udisks2.enable = lib.mkDefault true;
|
|
services.upower.enable = config.powerManagement.enable;
|
|
services.libinput.enable = lib.mkDefault true;
|
|
|
|
# Configuring the preferred network manager.
|
|
networking.networkmanager.enable = true;
|
|
|
|
# Configuring the XDG desktop components. Take note all of these are
|
|
# required for the desktop widgets components to work since they rely on
|
|
# them.
|
|
xdg.mime.enable = true;
|
|
xdg.icons.enable = true;
|
|
|
|
# For now, the portal configuration doesn't work since Niri is now
|
|
# hardcoded to set the apprioriate envs for portal component. It is
|
|
# considered broken (or rather unused) for now.
|
|
xdg.portal =
|
|
lib.mkMerge [
|
|
{
|
|
enable = lib.mkDefault true;
|
|
extraPortals = [
|
|
pkgs.xdg-desktop-portal-gtk
|
|
];
|
|
|
|
# The option value is only a coerced `lib.type.str` so ehhh...
|
|
config.${workflowId}.default =
|
|
[ "gtk" ]
|
|
++ lib.optionals (config.services.gnome.gnome-keyring.enable) [ "gnome" ];
|
|
}
|
|
|
|
(lib.mkIf config.services.gnome.gnome-keyring.enable {
|
|
config.${workflowId} = {
|
|
"org.freedesktop.impl.portal.Secret" = "gnome-keyring";
|
|
};
|
|
})
|
|
];
|
|
|
|
# Install of the programs.
|
|
environment.systemPackages = requiredPackages ++ cfg.extraApps;
|
|
|
|
# Configuring the actual desktop session.
|
|
programs.gnome-session.sessions.${workflowId} = {
|
|
fullName = "Horizontal Hunger";
|
|
desktopNames = [ workflowId ];
|
|
|
|
systemd.targetUnit =
|
|
let
|
|
requiredComponents = [ "window-manager" ];
|
|
getId = lib.foldlAttrs (acc: _: v: acc ++ [ "${v.id}.target" ]) [ ];
|
|
in {
|
|
requires = getId (lib.filterAttrs (n: _: lib.elem n requiredComponents) sessionConfig.components);
|
|
wants = getId (lib.attrsets.removeAttrs sessionConfig.components requiredComponents);
|
|
};
|
|
|
|
components = {
|
|
window-manager = {
|
|
script = "${lib.getExe' cfg.package "niri"} --config /tmp/shared/modules/nixos/_private/workflows/horizontal-hunger/config/niri/config";
|
|
description = "Window manager";
|
|
|
|
systemd.serviceUnit = {
|
|
serviceConfig = {
|
|
Type = "notify";
|
|
NotifyAccess = "all";
|
|
OOMScoreAdjust = -1000;
|
|
};
|
|
|
|
unitConfig = {
|
|
OnFailure = [ "gnome-session-shutdown.target" ];
|
|
OnFailureJobMode = "replace-irreversibly";
|
|
};
|
|
|
|
startLimitBurst = 5;
|
|
startLimitIntervalSec = 10;
|
|
};
|
|
|
|
systemd.targetUnit = {
|
|
partOf = [ "gnome-session-initialized.target" ];
|
|
after = [ "gnome-session-initialized.target" ];
|
|
};
|
|
};
|
|
|
|
desktop-widgets = {
|
|
script = "${lib.getExe' pkgs.ags "ags"} --config /tmp/shared/modules/nixos/_private/workflows/horizontal-hunger/config/ags/config.js";
|
|
description = "Desktop widgets";
|
|
|
|
systemd.serviceUnit = {
|
|
serviceConfig = {
|
|
Type = "notify";
|
|
NotifyAccess = "all";
|
|
OOMScoreAdjust = -1000;
|
|
};
|
|
|
|
unitConfig = {
|
|
OnFailure = [ "gnome-session-shutdown.target" ];
|
|
OnFailureJobMode = "replace-irreversibly";
|
|
};
|
|
};
|
|
|
|
systemd.targetUnit = {
|
|
partOf = [ "gnome-session-initialized.target" ];
|
|
after = [ "gnome-session-initialized.target" ];
|
|
};
|
|
};
|
|
|
|
auth-agent = {
|
|
script = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
|
|
description = "Authentication agent";
|
|
|
|
systemd.serviceUnit = {
|
|
serviceConfig = {
|
|
Type = "notify";
|
|
NotifyAccess = "all";
|
|
OOMScoreAdjust = -500;
|
|
};
|
|
};
|
|
|
|
systemd.targetUnit = {
|
|
partOf = [ "graphical-session.target" "gnome-session.target" ];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|