Instll steam and the zfs_clone_send / zfs_clone_recv scripts.

This commit is contained in:
Tom Alexander 2025-01-11 13:48:46 -05:00
parent af07d43c18
commit 1acf889c68
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
8 changed files with 106 additions and 7 deletions

View File

@ -10,6 +10,7 @@
{ {
imports = [ imports = [
./roles/reset ./roles/reset
./util/unfree_polyfill
./roles/iso ./roles/iso
./hosts/odo ./hosts/odo
"${ "${
@ -43,6 +44,7 @@
./roles/kubernetes ./roles/kubernetes
./roles/rust ./roles/rust
./roles/media ./roles/media
./roles/steam
]; ];
nix.settings.experimental-features = [ nix.settings.experimental-features = [

View File

@ -14,9 +14,7 @@
(chromium.override { enableWideVine = true; }) (chromium.override { enableWideVine = true; })
]; ];
nixpkgs.config.allowUnfreePredicate = allowedUnfree = [
pkg:
builtins.elem (lib.getName pkg) [
"chromium" "chromium"
"chromium-unwrapped" "chromium-unwrapped"
"widevine-cdm" "widevine-cdm"

View File

@ -0,0 +1,38 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [ ];
options.me.games = lib.mkOption {
type = lib.types.bool;
default = config.me.graphical;
example = true;
description = "Whether we want to install games.";
};
config = (
lib.mkMerge [
(lib.mkIf config.me.games {
allowedUnfree = [
"steam"
"steam-original"
"steam-unwrapped"
"steam-run"
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
# dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
})
]
);
}

View File

@ -392,4 +392,11 @@ in
# For mounting drives in pcmanfm # For mounting drives in pcmanfm
services.gvfs.enable = true; services.gvfs.enable = true;
# Auto-launch sway
environment.loginShellInit = ''
# TODO: This shouldn't be shoe-horned into the sway config
doas iw dev wlan0 set power_save off
[[ "$(tty)" = "/dev/tty1" ]] && exec sway
'';
} }

View File

@ -5,6 +5,20 @@
... ...
}: }:
let
zfs_clone_send =
(pkgs.writeScriptBin "zfs_clone_send" (builtins.readFile ./files/zfs_clone_send.bash)).overrideAttrs
(old: {
buildCommand = "${old.buildCommand}\n patchShebangs $out";
});
zfs_clone_recv =
(pkgs.writeScriptBin "zfs_clone_recv" (builtins.readFile ./files/zfs_clone_recv.bash)).overrideAttrs
(old: {
buildCommand = "${old.buildCommand}\n patchShebangs $out";
});
in
{ {
imports = [ ]; imports = [ ];
@ -18,4 +32,8 @@
trim.enable = true; trim.enable = true;
}; };
environment.systemPackages = with pkgs; [
zfs_clone_send
zfs_clone_recv
];
} }

View File

@ -0,0 +1,13 @@
#!/usr/bin/env bash
#
# A zfs-send alias that creates a perfect clone with good defaults.
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# -s if the stream is interrupted, save the partial stream. The stream can then be resumed by doing a zfs send -t token where token is the receive_resume_token prop on the dataset we received into.
# -u Do not mount the filesystem we are receiving. We can always mount afterwards but this avoids issues with streams with mountpoints to places like /
# Can optionally add -F to destroy the dataset in the recv location.
exec zfs recv -s -u "${@}"
# To delete an interrupted recv, run `zfs receive -A dataset`

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
#
# A zfs-send alias that creates a perfect clone with good defaults.
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
exec zfs send --compressed --replicate --large-block --embed --verbose --raw "${@}"

View File

@ -0,0 +1,15 @@
{ config, lib, ... }:
let
inherit (builtins) elem;
inherit (lib) getName mkOption;
inherit (lib.types) listOf str;
in
{
# Pending https://github.com/NixOS/nixpkgs/issues/55674
options.allowedUnfree = mkOption {
type = listOf str;
default = [ ];
};
config.nixpkgs.config.allowUnfreePredicate = p: elem (getName p) config.allowedUnfree;
}