nixos-config/modules/nixos/workflows/mosey-branch/default.nix
Gabriel Arazas 3afb2e4d56
workflows: remove conditional config
Now this is handled on the host-specific modules.
2023-12-27 09:27:02 +08:00

180 lines
5.3 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.workflows.workflows.mosey-branch;
workflowName = "mosey-branch";
createServiceScript = { runtimeInputs ? [ ], text, name }:
let
runtimeInputs' = runtimeInputs ++ [ pkgs.dbus ];
text' = ''
DESKTOP_AUTOSTART_ID="''${DESKTOP_AUTOSTART_ID:-}"
echo "$DESKTOP_AUTOSTART_ID"
test -n "$DESKTOP_AUTOSTART_ID" && {
dbus-send --print-reply --session \
--dest=org.gnome.SessionManager "/org/gnome/SessionManager" \
org.gnome.SessionManager.RegisterClient \
"string:${workflowName}" "string:$DESKTOP_AUTOSTART_ID"
}
${text}
'';
script = pkgs.writeShellApplication {
inherit name;
runtimeInputs = runtimeInputs';
text = text';
};
in
"${script}/bin/${name}";
customDesktopSession = pkgs.callPackage ./config/desktop-session {
serviceScript = createServiceScript {
name = "${workflowName}-service-script";
runtimeInputs = with pkgs; [ hyprland ];
text = ''
Hyprland --config ${./config/hyprland/hyprland.conf}
test -n "$DESKTOP_AUTOSTART_ID" && {
dbus-send --print-reply --session \
--dest=org.gnome.SessionManager "/org/gnome/SessionManager" \
org.gnome.SessionManager.Logout "uint32:1"
}
'';
};
agsScript = createServiceScript {
name = "${workflowName}-widgets";
runtimeInputs = with pkgs; [ ags ];
text = "ags";
};
polkitScript = createServiceScript {
name = "${workflowName}-authentication-agent";
text = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
};
};
requiredPackages = with pkgs; [
# The star of this show: the window manager (or Wayland compositor if you
# want to be a hair-pulling semantic bastard).
hyprland
# Setting up the widget system that will be used for notifications,
# bar and its widgets, and custom menus.
gjs
ags
gtk4-layer-shell
# Install with the custom desktop session files.
customDesktopSession
# Optional dependencies that are required in this workflow module.
socat
qt5.qtwayland
qt6.qtwayland
pciutils
# The authentication agent.
polkit_gnome
# The themes.
hicolor-icon-theme
# The chosen terminal emulator.
wezterm
];
in
{
options.workflows.workflows.mosey-branch = {
enable = lib.mkEnableOption "${workflowName}, foodogsquared's Hyprland-based desktop environment";
extraApps = lib.mkOption {
description = ''
Extra applications to be installed alongside the desktop environment.
'';
internal = true;
type = with lib.types; listOf package;
default = with pkgs; [
amberol # Simplest music player.
gradience # Gradually theme your shell with cadence.
blanket # Blanket yourself in ambient sounds.
eyedropper # Some nice eyedropper tool.
shortwave # Your internet radio.
flowtime # A nice timer for overworked students.
gnome-solanum # Cute little matador timer.
gnome-frog # Read them QR codes where it sends you to that one video everytime.
gnome.gnome-boxes # Virtual machines, son.
tangram # Make yourself a professional social media manager.
];
};
debug = lib.mkEnableOption "gnome-session debug messages";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = cfg.extraApps ++ requiredPackages;
# Install all of the required systemd units.
systemd.packages = with pkgs.gnome; [
customDesktopSession
gnome-session
];
# We'll have to include them for gnome-session to recognize it in NixOS
# systems.
environment.pathsToLink = [ "/share/gnome-session" ];
environment.sessionVariables.GNOME_SESSION_DEBUG = lib.mkIf cfg.debug "1";
# Our preferred display manager.
services.xserver = {
enable = true;
displayManager = {
gdm.enable = lib.mkDefault true;
sessionPackages = [ customDesktopSession ];
};
updateDbusEnvironment = true;
};
# Setting up some hardware settings.
hardware.opengl.enable = true;
hardware.bluetooth.enable = true;
services.udisks2.enable = true;
services.upower.enable = true;
services.power-profiles-daemon.enable = true;
services.colord.enable = true;
services.system-config-printer.enable = config.services.printing.enable;
# Setting up some more core services.
security.polkit.enable = true;
services.accounts-daemon.enable = true;
services.dleyna-renderer.enable = true;
services.dleyna-server.enable = true;
programs.dconf.enable = true;
programs.xwayland.enable = true;
fonts.enableDefaultPackages = true;
# The phone sync component which is handy.
programs.kdeconnect = {
enable = true;
package = pkgs.valent;
};
# Harmonious themes. Since we're making this very similar to GNOME
# appearance-wise, layout-wise, and setup-wise, we may as well make it
# similar.
qt = {
enable = true;
platformTheme = "gnome";
style = "adwaita";
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-hyprland
xdg-desktop-portal-gtk
];
};
};
}