system: replace host detection with capabilities module #4
@@ -14,8 +14,9 @@ let
|
|||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
installPhase = "install -Dm755 ${./arrhist.py} $out/bin/arrhist";
|
installPhase = "install -Dm755 ${./arrhist.py} $out/bin/arrhist";
|
||||||
};
|
};
|
||||||
withArrhist = if (osConfig.system.name == "gunter") then true else false;
|
cfg = osConfig.host.capabilities;
|
||||||
withBattery = if (osConfig.system.name == "magicman") then true else false;
|
withArrhist = cfg.enableArrhist;
|
||||||
|
withBattery = cfg.hasBattery;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sops.secrets."sonarr_base_url" = { };
|
sops.secrets."sonarr_base_url" = { };
|
||||||
@@ -153,7 +154,7 @@ in
|
|||||||
settings = [
|
settings = [
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
volInterval = if (osConfig.system.name == "gunter") then "5" else "1";
|
volInterval = toString cfg.volumeScrollStep;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
"layer" = "top";
|
"layer" = "top";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{ pkgs, osConfig, ... }:
|
{ pkgs, osConfig, ... }:
|
||||||
let
|
let
|
||||||
withCuda = if (osConfig.system.name == "gunter") then true else false;
|
withCuda = osConfig.host.capabilities.hasCuda;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
{ pkgs, config, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
|
cfg = osConfig.host.capabilities;
|
||||||
|
backupEnabled = cfg.backupRepository != null && cfg.backupPassword != null;
|
||||||
|
|
||||||
# Backup home script
|
# Backup home script
|
||||||
backup-home = pkgs.writeShellApplication {
|
backup-home = pkgs.writeShellApplication {
|
||||||
name = "backup-home";
|
name = "backup-home";
|
||||||
@@ -12,8 +21,8 @@ let
|
|||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
echo "========== BACKUP HOME STARTING =========="
|
echo "========== BACKUP HOME STARTING =========="
|
||||||
export RESTIC_PASSWORD="gunter.home.2rjus.net"
|
export RESTIC_PASSWORD="${cfg.backupPassword}"
|
||||||
export RESTIC_REPOSITORY="rest:http://10.69.12.52:8000/gunter.home.2rjus.net"
|
export RESTIC_REPOSITORY="${cfg.backupRepository}"
|
||||||
SECRET_PATH="$XDG_CONFIG_HOME/sops-nix/secrets/gotify_backup_home"
|
SECRET_PATH="$XDG_CONFIG_HOME/sops-nix/secrets/gotify_backup_home"
|
||||||
|
|
||||||
if ! [ -f "$SECRET_PATH" ]; then
|
if ! [ -f "$SECRET_PATH" ]; then
|
||||||
@@ -53,7 +62,7 @@ let
|
|||||||
retval=$?
|
retval=$?
|
||||||
if [ $retval -ne 0 ]; then
|
if [ $retval -ne 0 ]; then
|
||||||
curl "https://gotify.t-juice.club/message?token=$GOTIFY_TOKEN" \
|
curl "https://gotify.t-juice.club/message?token=$GOTIFY_TOKEN" \
|
||||||
-F "title=Backup of home@gunter failed!" \
|
-F "title=Backup of home@${osConfig.networking.hostName} failed!" \
|
||||||
-F "message=Please check status of backup-home service"
|
-F "message=Please check status of backup-home service"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -92,9 +101,9 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sops.secrets."gotify_backup_home" = { };
|
sops.secrets."gotify_backup_home" = lib.mkIf backupEnabled { };
|
||||||
|
|
||||||
systemd.user.services.backup-home = {
|
systemd.user.services.backup-home = lib.mkIf backupEnabled {
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Backup home directory";
|
Description = "Backup home directory";
|
||||||
After = [
|
After = [
|
||||||
@@ -107,7 +116,7 @@ in
|
|||||||
ExecStart = "${backup-home}/bin/backup-home";
|
ExecStart = "${backup-home}/bin/backup-home";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
systemd.user.timers.backup-home = {
|
systemd.user.timers.backup-home = lib.mkIf backupEnabled {
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Backup home directory";
|
Description = "Backup home directory";
|
||||||
After = [ "network.target" ];
|
After = [ "network.target" ];
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ in
|
|||||||
|
|
||||||
matchBlocks = {
|
matchBlocks = {
|
||||||
"bmo.uio.no-on-eduroam" = (
|
"bmo.uio.no-on-eduroam" = (
|
||||||
lib.mkIf (osConfig.system.name == "magicman") (
|
lib.mkIf (osConfig.host.capabilities.hasEduroamAccess) (
|
||||||
lib.hm.dag.entryBefore [ "bmo.uio.no" "*" ] {
|
lib.hm.dag.entryBefore [ "bmo.uio.no" "*" ] {
|
||||||
match = "host bmo.uio.no exec \"nmcli -g GENERAL.STATE c s eduroam|grep -q -E '\\bactiv'\"";
|
match = "host bmo.uio.no exec \"nmcli -g GENERAL.STATE c s eduroam|grep -q -E '\\bactiv'\"";
|
||||||
hostname = "bmo.uio.no";
|
hostname = "bmo.uio.no";
|
||||||
|
|||||||
@@ -113,6 +113,18 @@
|
|||||||
# ];
|
# ];
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
|
||||||
|
# Host capabilities
|
||||||
|
host.capabilities = {
|
||||||
|
hasCuda = true;
|
||||||
|
hasBattery = false;
|
||||||
|
formFactor = "desktop";
|
||||||
|
volumeScrollStep = 5;
|
||||||
|
enableArrhist = true;
|
||||||
|
hasEduroamAccess = false;
|
||||||
|
backupRepository = "rest:http://10.69.12.52:8000/gunter.home.2rjus.net";
|
||||||
|
backupPassword = "gunter.home.2rjus.net";
|
||||||
|
};
|
||||||
|
|
||||||
# Install system-wide packages
|
# Install system-wide packages
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
curl
|
curl
|
||||||
@@ -123,7 +135,7 @@
|
|||||||
wget
|
wget
|
||||||
v4l-utils
|
v4l-utils
|
||||||
nmap
|
nmap
|
||||||
(lib.mkIf (config.system.name == "gunter") pciutils)
|
pciutils
|
||||||
|
|
||||||
# X shit
|
# X shit
|
||||||
# xorg.xorgserver
|
# xorg.xorgserver
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Host capabilities
|
||||||
|
host.capabilities = {
|
||||||
|
hasCuda = false;
|
||||||
|
hasBattery = true;
|
||||||
|
formFactor = "laptop";
|
||||||
|
volumeScrollStep = 1;
|
||||||
|
enableArrhist = false;
|
||||||
|
hasEduroamAccess = true;
|
||||||
|
backupRepository = null;
|
||||||
|
backupPassword = null;
|
||||||
|
};
|
||||||
|
|
||||||
# Bluetooth stuff
|
# Bluetooth stuff
|
||||||
services.blueman.enable = true;
|
services.blueman.enable = true;
|
||||||
hardware.bluetooth.enable = true;
|
hardware.bluetooth.enable = true;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
./fwupd.nix
|
./fwupd.nix
|
||||||
./git.nix
|
./git.nix
|
||||||
./greetd.nix
|
./greetd.nix
|
||||||
|
./host-capabilities.nix
|
||||||
./hyprland.nix
|
./hyprland.nix
|
||||||
./label.nix
|
./label.nix
|
||||||
./libvirt.nix
|
./libvirt.nix
|
||||||
|
|||||||
64
system/host-capabilities.nix
Normal file
64
system/host-capabilities.nix
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.host.capabilities = {
|
||||||
|
# Hardware capabilities
|
||||||
|
hasCuda = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Whether the host has CUDA-capable GPU (for btop, OBS, etc.)";
|
||||||
|
};
|
||||||
|
|
||||||
|
hasBattery = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Whether the host has a battery (laptop)";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Form factor
|
||||||
|
formFactor = mkOption {
|
||||||
|
type = types.enum [
|
||||||
|
"desktop"
|
||||||
|
"laptop"
|
||||||
|
];
|
||||||
|
default = "desktop";
|
||||||
|
description = "Physical form factor of the host";
|
||||||
|
};
|
||||||
|
|
||||||
|
# UI behavior customizations
|
||||||
|
volumeScrollStep = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 5;
|
||||||
|
description = "Volume adjustment step percentage for scroll wheel";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Service-specific features
|
||||||
|
enableArrhist = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Enable Sonarr/Radarr monitoring widget (arrhist)";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Network environment features
|
||||||
|
hasEduroamAccess = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Whether this host can connect to eduroam (for SSH config)";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Backup configuration
|
||||||
|
backupRepository = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = "Restic backup repository URL for this host";
|
||||||
|
example = "rest:http://10.69.12.52:8000/gunter.home.2rjus.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
backupPassword = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = "Restic backup password identifier for this host";
|
||||||
|
example = "gunter.home.2rjus.net";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user