Starting work on fan control with opencode

This commit is contained in:
2025-08-08 18:18:21 -04:00
parent 911f3589a2
commit 857f0daa95
3 changed files with 64 additions and 0 deletions

26
AGENTS.md Normal file
View File

@@ -0,0 +1,26 @@
# AGENTS.md
This document outlines the development conventions for this NixOS-based infrastructure repository.
## Build & Deployment
- **Build/Deploy:** Use `nixos-rebuild switch --flake .#<hostname>` to build and deploy the configuration for a specific host.
- **Development Shell:** Activate the development environment with `nix develop`.
## Linting & Formatting
- **Formatting:** This project uses `nixpkgs-fmt` for automatic formatting. Ensure it is run before committing changes.
- `nixpkgs-fmt .`
- **Linting:** No specific linter is configured, but adhere to standard Nix language conventions.
## Testing
- No automated testing suite is configured. Manually verify changes by deploying to a non-critical host.
## Code Style & Conventions
- **Imports:** Keep module imports clean and organized at the top of files.
- **Naming:** Follow Nix community conventions for variable and function names (e.g., `camelCase` for variables, `kebab-case` for package names).
- **Secrets:** Secrets are managed with `agenix`. Edit encrypted files with `agenix -e <file>`.
- **Modularity:** Structure configurations into logical, reusable modules under `modules/`. New modules should be registered in `modules/nixos/default.nix` to be available to all hosts.
- **Error Handling:** Ensure Nix expressions are robust and handle potential evaluation errors gracefully.

View File

@@ -5,5 +5,6 @@
# ./programs
./services
./filesystem
./services/systemd
];
}

View File

@@ -0,0 +1,37 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.systemd-fancon;
in
{
options.services.systemd-fancon = {
enable = mkEnableOption "systemd-fancon service for fan control";
config = mkOption {
type = types.lines;
default = "";
description = "Configuration for systemd-fancon.";
};
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
systemd-fancon
lm_sensors
];
boot.kernelModules = [ "amdgpu" ];
systemd.services.systemd-fancon = {
description = "systemd-fancon service";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.systemd-fancon}/bin/systemd-fancon -c ${cfg.configFile}";
Restart = "on-failure";
};
configFile = pkgs.writeText "systemd-fancon.conf" cfg.config;
};
};
}