steam: integrate into sane.programs, and enable for lappy

This commit is contained in:
Colin 2023-04-23 23:21:08 +00:00
parent 09a1d286d0
commit e7f02c057e
2 changed files with 27 additions and 4 deletions

View File

@ -1,8 +1,8 @@
{ lib, pkgs, ... }:
{ config, lib, pkgs, ... }:
let
inherit (builtins) attrNames concatLists;
inherit (lib) mapAttrs mapAttrsToList mkDefault mkMerge optional;
inherit (lib) mapAttrs mapAttrsToList mkDefault mkIf mkMerge optional;
flattenedPkgs = pkgs // (with pkgs; {
# XXX can't `inherit` a nested attr, so we move them to the toplevel
@ -218,6 +218,7 @@ let
mumble
obsidian
slic3r
steam
;
};
x86GuiPkgs = {
@ -361,6 +362,11 @@ in
# creds, widevine .so download. TODO: could easily manage these statically.
spotify.dir = [ ".config/spotify" ];
steam.dir = [
".steam"
".local/share/Steam"
];
# sublime music persists any downloaded albums here.
# it doesn't obey a conventional ~/Music/{Artist}/{Album}/{Track} notation, so no symlinking
# config (e.g. server connection details) is persisted in ~/.config/sublime-music/config.json
@ -392,5 +398,13 @@ in
# XXX: this might not be necessary. try removing this and cacert.unbundled (servo)?
environment.etc."ssl/certs".source = "${pkgs.cacert.unbundled}/etc/ssl/certs/*";
# steam requires system-level config for e.g. firewall or controller support
programs.steam = mkIf config.sane.programs.steam.enabled {
enable = true;
# not sure if needed: stole this whole snippet from the wiki
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
};
};
}

View File

@ -1,6 +1,6 @@
{ config, lib, pkgs, sane-lib, ... }:
let
inherit (builtins) any elem map;
inherit (builtins) any attrValues elem map;
inherit (lib)
filterAttrs
hasAttrByPath
@ -18,7 +18,7 @@ let
;
inherit (sane-lib) joinAttrsets;
cfg = config.sane.programs;
pkgSpec = types.submodule ({ name, ... }: {
pkgSpec = types.submodule ({ config, name, ... }: {
options = {
package = mkOption {
type = types.nullOr types.package;
@ -59,6 +59,12 @@ let
place this program on the PATH for some specified user(s).
'';
};
enabled = mkOption {
type = types.bool;
description = ''
generated (i.e. read-only) value indicating if the program is enabled either for any user or for the system.
'';
};
suggestedPrograms = mkOption {
type = types.listOf types.str;
default = [];
@ -83,6 +89,9 @@ let
};
};
config = {
enabled = config.enableFor.system || any (en: en) (attrValues config.enableFor.user);
};
});
toPkgSpec = types.coercedTo types.package (p: { package = p; }) pkgSpec;