idk
This commit is contained in:
208
AGENTS.md
Normal file
208
AGENTS.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# Agent Guide
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
/etc/nixos/
|
||||
├── flake.nix # Main flake configuration
|
||||
├── flake.lock # Locked versions
|
||||
├── AGENTS.md # This file
|
||||
├── treefmt.nix # Code formatting config
|
||||
├── qemu.nix # QEMU testing config
|
||||
│
|
||||
├── systems/ # System configurations by architecture
|
||||
│ ├── aarch64-linux/
|
||||
│ │ ├── macbook-pro-nixos/ # Apple Silicon MacBook
|
||||
│ │ │ ├── default.nix
|
||||
│ │ │ ├── boot.nix
|
||||
│ │ │ ├── services.nix # logind, gdm, gnome, flatpak, etc.
|
||||
│ │ │ ├── filesystems.nix
|
||||
│ │ │ ├── hardware-configuration.nix
|
||||
│ │ │ └── firmware/ # Asahi firmware
|
||||
│ │ └── pi5/ # Raspberry Pi 5
|
||||
│ │ ├── default.nix
|
||||
│ │ ├── boot.nix
|
||||
│ │ ├── adguard.nix
|
||||
│ │ └── sops.nix
|
||||
│ ├── x86_64-linux/
|
||||
│ │ ├── matt-nixos/ # Desktop AMD system
|
||||
│ │ │ ├── default.nix
|
||||
│ │ │ ├── boot.nix
|
||||
│ │ │ ├── filesystems.nix
|
||||
│ │ │ ├── sops.nix
|
||||
│ │ │ └── services/
|
||||
│ │ │ ├── lsfg-vk/
|
||||
│ │ │ ├── ratbagd/
|
||||
│ │ │ └── restic/
|
||||
│ │ ├── allyx/ # ASUS ROG Ally X
|
||||
│ │ │ ├── default.nix
|
||||
│ │ │ └── boot.nix
|
||||
│ │ ├── nuc-nixos/ # Intel NUC
|
||||
│ │ ├── jallen-nas/ # NAS server
|
||||
│ │ └── iso-minimal/
|
||||
│ └── aarch64-darwin/
|
||||
│ └── macbook-pro/ # macOS (nix-darwin)
|
||||
│
|
||||
├── homes/ # Home-manager configurations
|
||||
│ ├── aarch64-linux/
|
||||
│ │ └── matt@macbook-pro-nixos/
|
||||
│ │ └── default.nix
|
||||
│ ├── x86_64-linux/
|
||||
│ └── aarch64-darwin/
|
||||
│
|
||||
├── modules/ # Shared modules
|
||||
│ ├── nixos/ # NixOS system modules
|
||||
│ ├── home/ # Home-manager modules
|
||||
│ └── darwin/ # nix-darwin modules
|
||||
│
|
||||
├── packages/ # Custom package overlays
|
||||
│ ├── omnissa/
|
||||
│ ├── bcachefs/
|
||||
│ ├── raspberrypi/
|
||||
│ ├── comfyui/
|
||||
│ ├── homeassistant/
|
||||
│ ├── librepods-beta/
|
||||
│ └── ...
|
||||
│
|
||||
└── secrets/ # SOPS secrets
|
||||
├── secrets.yaml # Master key config
|
||||
└── *-secrets.yaml # Per-host secrets
|
||||
```
|
||||
|
||||
## System Configurations
|
||||
|
||||
### macbook-pro-nixos (Apple Silicon MacBook)
|
||||
- **Path**: `systems/aarch64-linux/macbook-pro-nixos/`
|
||||
- **Key files**:
|
||||
- `services.nix:72-81` - logind/sleep settings
|
||||
- `default.nix` - main config, imports all parts
|
||||
- `boot.nix` - systemd-boot, kernel params
|
||||
- **Features**: Asahi Linux, GNOME, Hyprland option, battery management
|
||||
|
||||
### matt-nixos (AMD Desktop)
|
||||
- **Path**: `systems/x86_64-linux/matt-nixos/`
|
||||
- **Features**: AMD GPU (LACT), GNOME, gaming, Lanzaboote
|
||||
|
||||
### allyx (ASUS ROG Ally X)
|
||||
- **Path**: `systems/x86_64-linux/allyx/`
|
||||
- **Features**: Jovian NixOS, Steam, handheld-daemon, AMD GPU
|
||||
|
||||
### pi5 (Raspberry Pi 5)
|
||||
- **Path**: `systems/aarch64-linux/pi5/`
|
||||
- **Features**: Headless, AdGuard, Docker, static IP, UEFI boot
|
||||
|
||||
### jallen-nas (NAS Server)
|
||||
- **Path**: `systems/x86_64-linux/jallen-nas/`
|
||||
- **Features**: Headless, VPN, bcachefs, restic backups
|
||||
|
||||
## NixOS Modules (`modules/nixos/`)
|
||||
|
||||
### Desktop Environments
|
||||
- `desktop/gnome/default.nix` - GNOME configuration
|
||||
- `desktop/hyprland/default.nix` - Hyprland configuration
|
||||
- `desktop/cosmic/default.nix` - Cosmic DE configuration
|
||||
|
||||
### Hardware
|
||||
- `hardware/amd/default.nix` - AMD GPU (LACT)
|
||||
- `hardware/nvidia/default.nix` - NVIDIA GPU
|
||||
- `hardware/battery/default.nix` - Battery management
|
||||
- `hardware/raspberry-pi/` - Raspberry Pi support
|
||||
|
||||
### Boot & System
|
||||
- `boot/common/` - Common boot settings
|
||||
- `boot/lanzaboote/` - Lanzaboote (secure boot)
|
||||
- `boot/systemd-boot/` - Systemd-boot config
|
||||
- `boot/plymouth/` - Plymouth splash screen
|
||||
|
||||
### Networking
|
||||
- `network/default.nix` - Network configuration (hostname, firewall, NM)
|
||||
- `network/options.nix` - Network module options
|
||||
|
||||
### Other Services
|
||||
- `headless/default.nix` - Headless server config (watchdog, no suspend)
|
||||
- `gaming/default.nix` - Steam, Gamescope, Gamemode
|
||||
- `programs/default.nix` - System programs (nix-index, gnupg, etc.)
|
||||
|
||||
## Home-Manager Modules (`modules/home/`)
|
||||
|
||||
### Programs
|
||||
- `programs/waybar/` - Wayland bar
|
||||
- `programs/hyprland/` - Hyprland config
|
||||
- `programs/kitty/` - Kitty terminal
|
||||
- `programs/wofi/` - Wofi launcher
|
||||
- `programs/wlogout/` - Logout menu
|
||||
- `programs/btop/` - System monitor
|
||||
- `programs/git/` - Git configuration
|
||||
- `programs/zsh/` - Zsh configuration
|
||||
- `programs/mako/` - Notification daemon
|
||||
|
||||
### Desktop
|
||||
- `desktop/gnome/` - GNOME settings
|
||||
- `desktop/stylix/` - Stylix theming
|
||||
|
||||
### Services
|
||||
- `services/sops/` - SOPS integration
|
||||
|
||||
## Custom Packages (`packages/`)
|
||||
|
||||
- `omnissa/` - Omnissa Horizon client
|
||||
- `bcachefs/` - Bcachefs tools
|
||||
- `raspberrypi/` - Raspberry Pi firmware/tools
|
||||
- `comfyui/` - ComfyUI packages
|
||||
- `homeassistant/` - Home Assistant components
|
||||
- `librepods-beta/` - LibrePODS beta (AirPods support)
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Enable a desktop environment
|
||||
```nix
|
||||
${namespace}.desktop.gnome.enable = true;
|
||||
${namespace}.desktop.hyprland.enable = true;
|
||||
```
|
||||
|
||||
### Enable SOPS
|
||||
```nix
|
||||
${namespace}.sops.enable = true;
|
||||
```
|
||||
|
||||
### Enable headless mode
|
||||
```nix
|
||||
${namespace}.headless.enable = true;
|
||||
```
|
||||
|
||||
### System imports
|
||||
```nix
|
||||
imports = [
|
||||
./boot.nix
|
||||
./filesystems.nix
|
||||
./hardware-configuration.nix
|
||||
./services.nix
|
||||
];
|
||||
```
|
||||
|
||||
### Namespace options (flake.nix:253)
|
||||
```nix
|
||||
namespace = "mjallen";
|
||||
```
|
||||
|
||||
## SOPS Secrets
|
||||
|
||||
Secrets are encrypted with SOPS. Each system has its own secrets file:
|
||||
- `secrets/mac-secrets.yaml` - macbook-pro-nixos
|
||||
- `secrets/pi5-secrets.yaml` - pi5
|
||||
- `secrets/allyx-secrets.yaml` - allyx
|
||||
- `secrets/nuc-secrets.yaml` - nuc-nixos
|
||||
- `secrets/nas-secrets.yaml` - jallen-nas
|
||||
|
||||
## Flake Inputs (flake.nix)
|
||||
|
||||
Key inputs:
|
||||
- `nixpkgs-unstable` - Unstable channel
|
||||
- `nixpkgs-stable` - Stable channel (25.11)
|
||||
- `home-manager-unstable` - Home-manager
|
||||
- `nixos-apple-silicon` - Apple Silicon support
|
||||
- `nixos-hardware` - Common hardware configs
|
||||
- `disko` - Disk partitioning
|
||||
- `sops-nix` - Secrets management
|
||||
- `lanzaboote` - Secure boot
|
||||
- `jovian` - Steam Deck support (allyx)
|
||||
120
flake.lock
generated
120
flake.lock
generated
@@ -151,11 +151,11 @@
|
||||
"cachyos-kernel": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1773333570,
|
||||
"narHash": "sha256-Z+r3HFziyn0ExgJj8qkwoqPZwP8sQMESX6QBWa/8uwM=",
|
||||
"lastModified": 1773637879,
|
||||
"narHash": "sha256-hFKu2SaRoqt6+zbmcFW6A0AbBENIX8XooJLXQWa3sLc=",
|
||||
"owner": "CachyOS",
|
||||
"repo": "linux-cachyos",
|
||||
"rev": "261b59ccef1a9ca6a3a6344f585ee1ff593e4306",
|
||||
"rev": "fa09a5bc69d3e7feeed9b1402c7df06c8170402a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -167,11 +167,11 @@
|
||||
"cachyos-kernel-patches": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1773330205,
|
||||
"narHash": "sha256-YVASxGrJYFHtL+5D71hlbc74VfgDnQGRpzVu0YiFHtw=",
|
||||
"lastModified": 1773635524,
|
||||
"narHash": "sha256-JErpxWTdoHq4JuDerfsbPA60FmWOxK4oX9UL9CcsP/Q=",
|
||||
"owner": "CachyOS",
|
||||
"repo": "kernel-patches",
|
||||
"rev": "8242bda544657099da69993f019ff3fb23cfe05f",
|
||||
"rev": "5544a0679fd6f6fb714e275514449c4ab9db2a53",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -244,11 +244,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773025010,
|
||||
"narHash": "sha256-khlHllTsovXgT2GZ0WxT4+RvuMjNeR5OW0UYeEHPYQo=",
|
||||
"lastModified": 1773889306,
|
||||
"narHash": "sha256-PAqwnsBSI9SVC2QugvQ3xeYCB0otOwCacB1ueQj2tgw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "7b9f7f88ab3b339f8142dc246445abb3c370d3d3",
|
||||
"rev": "5ad85c82cc52264f4beddc934ba57f3789f28347",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -568,11 +568,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773367248,
|
||||
"narHash": "sha256-FFMc1uAwy2GYasd0rdNDVxKyAgzuoJH2M+GglBQbqf0=",
|
||||
"lastModified": 1774007980,
|
||||
"narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "be0c641a6a5564caa33982faa1fe2c60d92131c7",
|
||||
"rev": "9670de2921812bc4e0452f6e3efd8c859696c183",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -588,11 +588,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773264488,
|
||||
"narHash": "sha256-rK0507bDuWBrZo+0zts9bCs/+RRUEHuvFE5DHWPxX/Q=",
|
||||
"lastModified": 1773963144,
|
||||
"narHash": "sha256-WzBOBfSay3GYilUfKaUa1Mbf8/jtuAiJIedx7fWuIX4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "5c0f63f8d55040a7eed69df7e3fcdd15dfb5a04c",
|
||||
"rev": "a91b3ea73a765614d90360580b689c48102d1d33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -609,11 +609,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773367248,
|
||||
"narHash": "sha256-FFMc1uAwy2GYasd0rdNDVxKyAgzuoJH2M+GglBQbqf0=",
|
||||
"lastModified": 1774007980,
|
||||
"narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "be0c641a6a5564caa33982faa1fe2c60d92131c7",
|
||||
"rev": "9670de2921812bc4e0452f6e3efd8c859696c183",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -663,11 +663,11 @@
|
||||
"homebrew-cask": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1773417963,
|
||||
"narHash": "sha256-BdilqX31TH5WTRgKVSPNGJUHwOAHHT1xUe3oXC8GPEI=",
|
||||
"lastModified": 1774016339,
|
||||
"narHash": "sha256-Jm5bZFPd0GQGvknb9tsqWRh3M/+itroC0vIvoDW0cOE=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask",
|
||||
"rev": "294c9a01670be07a255cca3b4519ffe37d3130dc",
|
||||
"rev": "65b8191c7b9355eb2470dbe1eeb2633306064379",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -679,11 +679,11 @@
|
||||
"homebrew-core": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1773417171,
|
||||
"narHash": "sha256-QuAxK3GHyx/T8vJuv3Za7mCrUAjfZxsdP0zbkQyDNlE=",
|
||||
"lastModified": 1774017008,
|
||||
"narHash": "sha256-kpYHVxgi+nu2H0aHxzY+3HNBDmFmjQYIn+U7ifsTt0Q=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-core",
|
||||
"rev": "538b810c144eb4b692c680b2da2dafee9f725e77",
|
||||
"rev": "5541cf046f2005a02940da8086550ffcfa77da4c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -719,11 +719,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773380813,
|
||||
"narHash": "sha256-6GDKki2AIkWgnnTGA1enQB3I1mI6rdPe4rrXafmmIiY=",
|
||||
"lastModified": 1773949806,
|
||||
"narHash": "sha256-W25eg57cTQSwey9nEf1AhHy895Yiwq74PgyJl2EuY3Q=",
|
||||
"owner": "Jovian-Experiments",
|
||||
"repo": "Jovian-NixOS",
|
||||
"rev": "8347eae3a900c26b8223ee98697f30f4e88dc226",
|
||||
"rev": "425b357e190632600ca2b2daea3bdf28d57e3047",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -809,11 +809,11 @@
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773339151,
|
||||
"narHash": "sha256-T4mZqOKMX3bbOKm/KvlkIOznaUPFpBbNKBT5bDMdRkQ=",
|
||||
"lastModified": 1773804995,
|
||||
"narHash": "sha256-LL6EG35pbxgjsqYIpwUnpHGDmKFYttE+BILBNhsEaJk=",
|
||||
"owner": "xddxdd",
|
||||
"repo": "nix-cachyos-kernel",
|
||||
"rev": "a984d014ba87dbefd8868d1fe967cc540d313766",
|
||||
"rev": "3286b7ecf1d864e2be050af78aa633d4e3ae8fdb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -870,11 +870,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772945408,
|
||||
"narHash": "sha256-PMt48sEQ8cgCeljQ9I/32uoBq/8t8y+7W/nAZhf72TQ=",
|
||||
"lastModified": 1773552174,
|
||||
"narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "1c1d8ea87b047788fd7567adf531418c5da321ec",
|
||||
"rev": "8faeb68130df077450451b6734a221ba0d6cde42",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -927,11 +927,11 @@
|
||||
"nixpkgs": "nixpkgs_7"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773369788,
|
||||
"narHash": "sha256-32y9nyVU2rmXp/zMTNsVbIWNKMPUuBSj4bIAnaPiCVU=",
|
||||
"lastModified": 1773974569,
|
||||
"narHash": "sha256-Y71Afv2mVpus+EqUj0qAwPgyaABIvEtjnUAlw5EUo3A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"rev": "70e188702ad3b4dcf5de12ff64f0d31c906d6d7a",
|
||||
"rev": "5b8548f9e2cbe14146df30858bd281404957846f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -961,11 +961,11 @@
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1772972630,
|
||||
"narHash": "sha256-mUJxsNOrBMNOUJzN0pfdVJ1r2pxeqm9gI/yIKXzVVbk=",
|
||||
"lastModified": 1774018263,
|
||||
"narHash": "sha256-HHYEwK1A22aSaxv2ibhMMkKvrDGKGlA/qObG4smrSqc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "3966ce987e1a9a164205ac8259a5fe8a64528f72",
|
||||
"rev": "2d4b4717b2534fad5c715968c1cece04a172b365",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1055,11 +1055,11 @@
|
||||
},
|
||||
"nixpkgs-stable_2": {
|
||||
"locked": {
|
||||
"lastModified": 1773222311,
|
||||
"narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=",
|
||||
"lastModified": 1773814637,
|
||||
"narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0590cd39f728e129122770c029970378a79d076a",
|
||||
"rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1071,11 +1071,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1773389992,
|
||||
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
|
||||
"lastModified": 1773999129,
|
||||
"narHash": "sha256-YbW6qhVebC8xlQRBxoxctDpzViQb4+6bX7Dbm/UJ44A=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
|
||||
"rev": "c3961540aa9cf997445f11220ff1b3673e864992",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1087,11 +1087,11 @@
|
||||
},
|
||||
"nixpkgs_10": {
|
||||
"locked": {
|
||||
"lastModified": 1772736753,
|
||||
"narHash": "sha256-au/m3+EuBLoSzWUCb64a/MZq6QUtOV8oC0D9tY2scPQ=",
|
||||
"lastModified": 1773507054,
|
||||
"narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "917fec990948658ef1ccd07cef2a1ef060786846",
|
||||
"rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1135,11 +1135,11 @@
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1773276312,
|
||||
"narHash": "sha256-UujcRqoPEyi0Bd77+cqfAxa4aq0SoKOYTcJNWn+0ZvM=",
|
||||
"lastModified": 1773738184,
|
||||
"narHash": "sha256-zWRjT5oPabNCiC1A3QkFXpfnsgUjyg6fUZWC+IiiZH0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "87fd45fc9269db8f7197d27c620606323bbf5efa",
|
||||
"rev": "41a2715cc472025a19bc0eb9dc4ee8b7406bfa6f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1215,11 +1215,11 @@
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1773389992,
|
||||
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
|
||||
"lastModified": 1773999129,
|
||||
"narHash": "sha256-YbW6qhVebC8xlQRBxoxctDpzViQb4+6bX7Dbm/UJ44A=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
|
||||
"rev": "c3961540aa9cf997445f11220ff1b3673e864992",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1453,11 +1453,11 @@
|
||||
"nixpkgs": "nixpkgs_10"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773096132,
|
||||
"narHash": "sha256-M3zEnq9OElB7zqc+mjgPlByPm1O5t2fbUrH3t/Hm5Ag=",
|
||||
"lastModified": 1773889674,
|
||||
"narHash": "sha256-+ycaiVAk3MEshJTg35cBTUa0MizGiS+bgpYw/f8ohkg=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "d1ff3b1034d5bab5d7d8086a7803c5a5968cd784",
|
||||
"rev": "29b6519f3e0780452bca0ac0be4584f04ac16cc5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1510,11 +1510,11 @@
|
||||
"tinted-zed": "tinted-zed"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772296853,
|
||||
"narHash": "sha256-pAtzPsgHRKw/2Kv8HgAjSJg450FDldHPWsP3AKG/Xj0=",
|
||||
"lastModified": 1773792048,
|
||||
"narHash": "sha256-Oy9PCLG3vtflFBWcJd8c/EB3h5RU7ABAIDWn6JrGf6o=",
|
||||
"owner": "nix-community",
|
||||
"repo": "stylix",
|
||||
"rev": "c4b8e80a1020e09a1f081ad0f98ce804a6e85acf",
|
||||
"rev": "3f2f9d307fe58c6abe2a16eb9b62c42d53ef5ee1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
25
modules/nixos/homeassistant/dashboards/default.nix
Normal file
25
modules/nixos/homeassistant/dashboards/default.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
namespace,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.${namespace}.services.home-assistant;
|
||||
in
|
||||
{
|
||||
imports = [ ./options.nix ];
|
||||
|
||||
config = lib.mkIf (cfg.enable && cfg.dashboards != [ ]) {
|
||||
${namespace}.home.file = lib.genAttrs cfg.dashboards (
|
||||
dashboard:
|
||||
let
|
||||
dashboardFile = "homeassistant/lovelace/${dashboard.title}.yaml";
|
||||
in
|
||||
{
|
||||
text = lib.generators.toYAML { } dashboard;
|
||||
force = true;
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
10
modules/nixos/homeassistant/dashboards/options.nix
Normal file
10
modules/nixos/homeassistant/dashboards/options.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ lib, namespace, ... }:
|
||||
with lib;
|
||||
let
|
||||
inherit (lib.${namespace}) mkOpt;
|
||||
in
|
||||
{
|
||||
options.${namespace}.services.home-assistant.dashboards =
|
||||
mkOpt (types.listOf types.attrs) [ ]
|
||||
"Home Assistant dashboards configuration";
|
||||
}
|
||||
@@ -8,7 +8,10 @@ let
|
||||
cfg = config.${namespace}.services.home-assistant;
|
||||
in
|
||||
{
|
||||
imports = [ ./options.nix ];
|
||||
imports = [
|
||||
./options.nix
|
||||
./dashboards
|
||||
];
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# This bypasses the component validation and places it directly in HA's data directory
|
||||
|
||||
@@ -16,7 +16,7 @@ buildHomeAssistantComponent rec {
|
||||
hash = "sha256-w+7cC/jV+6bQM1aEPlO90Z1o9CcjmPvjNDSG9CduFFw=";
|
||||
};
|
||||
|
||||
buildInputs = with python3Packages; [
|
||||
nativeBuildInputs = with python3Packages; [
|
||||
beautifulsoup4
|
||||
dateparser
|
||||
pillow
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
logind = {
|
||||
settings = {
|
||||
Login = {
|
||||
HandleLidSwitchExternalPower = "ignore";
|
||||
HandleLidSwitchExternalPower = "suspend";
|
||||
HandleLidSwitch = "suspend";
|
||||
HandlePowerKeyLongPress = "poweroff";
|
||||
HandlePowerKey = "suspend";
|
||||
|
||||
@@ -84,6 +84,181 @@
|
||||
services = {
|
||||
home-assistant = {
|
||||
enable = true;
|
||||
dashboards = [
|
||||
{
|
||||
title = "Pets & Air Quality";
|
||||
path = "pets-air";
|
||||
icon = "mdi:paw";
|
||||
cards = [
|
||||
{
|
||||
type = "markdown";
|
||||
title = "🐾 Pets";
|
||||
content = "## Pet Management";
|
||||
}
|
||||
{
|
||||
type = "horizontal-stack";
|
||||
cards = [
|
||||
{
|
||||
type = "entity";
|
||||
entity = "select.joey_smart_feeder_manual_feed_quantity";
|
||||
name = "Joey Feed";
|
||||
}
|
||||
{
|
||||
type = "entity";
|
||||
entity = "select.luci_smart_feeder_manual_feed_quantity";
|
||||
name = "Luci Feed";
|
||||
}
|
||||
{
|
||||
type = "entity";
|
||||
entity = "text.joey_smart_feeder_text_on_display";
|
||||
name = "Joey Display";
|
||||
}
|
||||
{
|
||||
type = "entity";
|
||||
entity = "text.luci_smart_feeder_text_on_display";
|
||||
name = "Luci Display";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "entities";
|
||||
title = "🐱 Litter Robot";
|
||||
show_header_toggle = false;
|
||||
entities = [
|
||||
"vacuum.litter_robot_4_litter_box"
|
||||
{
|
||||
type = "button";
|
||||
entity = "button.garbage_goober_deep";
|
||||
name = "Deep Clean";
|
||||
}
|
||||
{
|
||||
type = "button";
|
||||
entity = "button.garbage_goober_pet_area_cleaning";
|
||||
name = "Pet Area";
|
||||
}
|
||||
{
|
||||
type = "button";
|
||||
entity = "button.garbage_goober_intensive_sweeping";
|
||||
name = "Intensive";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "markdown";
|
||||
title = "🌬️ Air Quality";
|
||||
content = "## Air Purifiers & Humidity";
|
||||
}
|
||||
{
|
||||
type = "horizontal-stack";
|
||||
cards = [
|
||||
{
|
||||
type = "tile";
|
||||
entity = "fan.living_room_air_purifier";
|
||||
name = "Living Room";
|
||||
icon = "mdi:air-purifier";
|
||||
features = [
|
||||
{
|
||||
type = "fan-speed";
|
||||
speed_count = 3;
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "tile";
|
||||
entity = "fan.bedroom_air_purifier";
|
||||
name = "Bedroom";
|
||||
icon = "mdi:air-purifier";
|
||||
features = [
|
||||
{
|
||||
type = "fan-speed";
|
||||
speed_count = 3;
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "tile";
|
||||
entity = "fan.bedroom_fan";
|
||||
name = "Bedroom Fan";
|
||||
icon = "mdi:fan";
|
||||
features = [
|
||||
{
|
||||
type = "fan-speed";
|
||||
speed_count = 4;
|
||||
presets = [
|
||||
{
|
||||
name = "auto";
|
||||
icon = "mdi:fan-auto";
|
||||
}
|
||||
{
|
||||
name = "low";
|
||||
icon = "mdi:fan-speed-1";
|
||||
}
|
||||
{
|
||||
name = "medium";
|
||||
icon = "mdi:fan-speed-2";
|
||||
}
|
||||
{
|
||||
name = "high";
|
||||
icon = "mdi:fan-speed-3";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "horizontal-stack";
|
||||
cards = [
|
||||
{
|
||||
type = "tile";
|
||||
entity = "humidifier.bedroom_humidifier";
|
||||
name = "Bedroom Humidifier";
|
||||
icon = "mdi:water-percent";
|
||||
features = [
|
||||
{
|
||||
type = "humidifier-toggle";
|
||||
}
|
||||
{
|
||||
type = "humidifier-modes";
|
||||
modes = [
|
||||
{
|
||||
name = "auto";
|
||||
icon = "mdi:refresh-auto";
|
||||
}
|
||||
{
|
||||
name = "low";
|
||||
icon = "mdi:water-percent";
|
||||
}
|
||||
{
|
||||
name = "medium";
|
||||
icon = "mdi:water-percent";
|
||||
}
|
||||
{
|
||||
name = "high";
|
||||
icon = "mdi:water-percent";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "humidifier-target-humidity";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
type = "entities";
|
||||
title = "⚠️ Status";
|
||||
show_header_toggle = false;
|
||||
entities = [
|
||||
"binary_sensor.bedroom_humidifier_low_water"
|
||||
"binary_sensor.bedroom_humidifier_water_tank_lifted"
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
automation = {
|
||||
lightswitch = {
|
||||
living-room-lights = {
|
||||
|
||||
Reference in New Issue
Block a user