Added Raspi 4 Conf
This commit is contained in:
197
hosts/rpi4/configuration.nix
Normal file
197
hosts/rpi4/configuration.nix
Normal file
@@ -0,0 +1,197 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
./fan-controll.nix
|
||||
];
|
||||
|
||||
# Use the extlinux boot loader. (NixOS wants to enable GRUB by default)
|
||||
boot.loader.grub.enable = false;
|
||||
# Enables the generation of /boot/extlinux/extlinux.conf
|
||||
boot.loader.generic-extlinux-compatible.enable = true;
|
||||
|
||||
# 📝 Uncomment the default hostname.
|
||||
networking.hostName = "nix-rpi4-1"; # Define your hostname.
|
||||
# Pick only one of the below networking options.
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
# 📝 If you are using ethernet to connect to the device, uncomment the NetworkManager option.
|
||||
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Select internationalisation properties.
|
||||
# i18n.defaultLocale = "en_US.UTF-8";
|
||||
# console = {
|
||||
# font = "Lat2-Terminus16";
|
||||
# keyMap = "us";
|
||||
# useXkbConfig = true; # use xkb.options in tty.
|
||||
# };
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
# services.xserver.enable = true;
|
||||
|
||||
# Configure keymap in X11
|
||||
# services.xserver.xkb.layout = "us";
|
||||
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable sound.
|
||||
# hardware.pulseaudio.enable = true;
|
||||
# OR
|
||||
# services.pipewire = {
|
||||
# enable = true;
|
||||
# pulse.enable = true;
|
||||
# };
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
# services.libinput.enable = true;
|
||||
|
||||
# Define a user account. Don't forget to set a password with 'passwd'.
|
||||
# users.users.alice = {
|
||||
# isNormalUser = true;
|
||||
# extraGroups = [ "wheel" ]; # Enable 'sudo' for the user.
|
||||
# packages = with pkgs; [
|
||||
# firefox
|
||||
# tree
|
||||
# ];
|
||||
# };
|
||||
|
||||
# Enable Raspberry Pi 4 GPIO support
|
||||
# hardware.raspberry-pi."4".enable = true;
|
||||
|
||||
# 📝 Make sure the `nixos` user stays.
|
||||
users.users.nixos = {
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" "gpio" ]; # Enable 'sudo' for the user.
|
||||
shell = pkgs.fish;
|
||||
# 📝 Re-add the trusted SSH keys.
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCaLHfxVylghDMYR8t4QMUpeRRqXasNABQKBEy9MmhbUXCcWiPbPMSZH8FMHON34rm2OrXP1kY/8jQxqBJDA+SqpFR2AZ4Khk9iVMaq5GHxxpn2amZUjoBa+fB29WaiE1npV5JVJV3O0ylw6GtiCnpneE6fGx2MO1vOY/7zKrUX/OK7WfwkDpeEzZgV/j/md917HrzUVeZwdeTq3WCRO8Gew6R8Xs6FRjSiGuH0dq14D4Ow5Zf1cI1jx+JfD/5vGasw8HXPu1NdxsOE+6D7/22IKqGr+S74/lAoyyD5qqk0s05lw8UY/PXBLJaNLZu9Fwx0BqTHpJEvftpmvd9wUxgR3msx9VXtKNSrqivIbDgeU+3oGzzkrGZODl7FCp4XKGmbrX85Z6lKwEGgv5jez4MLZcmT86bxB7m1wIbqSbVtfhS+GI7yPTA/kLzzFa14Im/+LTj95pb8qs2ALMwTMP1j2f9A6D3RriOFihL+68qn+YbK58KuV1R0f+CQRmlfVbk= phil@web.cyperpunk.de"
|
||||
];
|
||||
# 📝 Give user an empty password.
|
||||
# ⚠️ This is pretty risky, so use only in initial setup.
|
||||
password = "1P2h3i4lon";
|
||||
};
|
||||
|
||||
users.users.phil = {
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" "gpio" "i2c" ]; # Enable 'sudo' for the user.
|
||||
shell = pkgs.fish;
|
||||
# 📝 Re-add the trusted SSH keys.
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCaLHfxVylghDMYR8t4QMUpeRRqXasNABQKBEy9MmhbUXCcWiPbPMSZH8FMHON34rm2OrXP1kY/8jQxqBJDA+SqpFR2AZ4Khk9iVMaq5GHxxpn2amZUjoBa+fB29WaiE1npV5JVJV3O0ylw6GtiCnpneE6fGx2MO1vOY/7zKrUX/OK7WfwkDpeEzZgV/j/md917HrzUVeZwdeTq3WCRO8Gew6R8Xs6FRjSiGuH0dq14D4Ow5Zf1cI1jx+JfD/5vGasw8HXPu1NdxsOE+6D7/22IKqGr+S74/lAoyyD5qqk0s05lw8UY/PXBLJaNLZu9Fwx0BqTHpJEvftpmvd9wUxgR3msx9VXtKNSrqivIbDgeU+3oGzzkrGZODl7FCp4XKGmbrX85Z6lKwEGgv5jez4MLZcmT86bxB7m1wIbqSbVtfhS+GI7yPTA/kLzzFa14Im/+LTj95pb8qs2ALMwTMP1j2f9A6D3RriOFihL+68qn+YbK58KuV1R0f+CQRmlfVbk= phil@web.cyperpunk.de"
|
||||
];
|
||||
# 📝 Give user an empty password.
|
||||
# ⚠️ This is pretty risky, so use only in initial setup.
|
||||
password = "1P2h3i4lon";
|
||||
};
|
||||
# 📝 Remove the need to be prompted for a password when using `sudo`.
|
||||
# ⚠️ This is pretty risky, so use only in initial setup.
|
||||
security.sudo.wheelNeedsPassword = false;
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
# 📝 Uncomment system packages to ensure that vim access stays.
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
wget
|
||||
git
|
||||
fastfetch
|
||||
neovim
|
||||
curl
|
||||
fish
|
||||
kitty
|
||||
libgpiod
|
||||
hping
|
||||
gcc
|
||||
libraspberrypi
|
||||
eza
|
||||
fzf
|
||||
stress-ng
|
||||
i2c-tools
|
||||
];
|
||||
|
||||
# Enable fish shell
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
ls = "eza";
|
||||
la = "eza -la";
|
||||
f = "fzf";
|
||||
i = "kitty +kitten icat";
|
||||
tw = "tw --theme config";
|
||||
};
|
||||
interactiveShellInit = ''
|
||||
starship init fish | source
|
||||
fzf --fish | source
|
||||
function fish_greeting
|
||||
fastfetch
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# 📝 Add SSH access, but only using SSH keys, and to the NixOS user.
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
authorizedKeysInHomedir = true; # Do not trust SSH keys in ~/.ssh/authorized_keys.
|
||||
settings = {
|
||||
PasswordAuthentication = true; # Disable password authentication.
|
||||
AllowUsers = [ "nixos" "phil" ]; # Allow only login via the "nixos" user.
|
||||
PermitRootLogin = "no"; # Disable root login via SSH.
|
||||
};
|
||||
};
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
# 📝 Uncomment firewall option if you are okay with disabling the firewall entirely during initial setup.
|
||||
networking.firewall.enable = false;
|
||||
|
||||
# Copy the NixOS configuration file and link it from the resulting system
|
||||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
# system.copySystemConfiguration = true;
|
||||
|
||||
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||
#
|
||||
# Most users should NEVER change this value after the initial install, for any reason,
|
||||
# even if you've upgraded your system to a new NixOS release.
|
||||
#
|
||||
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||
# to actually do that.
|
||||
#
|
||||
# This value being lower than the current NixOS release does NOT mean your system is
|
||||
# out of date, out of support, or vulnerable.
|
||||
#
|
||||
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||
# and migrated your data accordingly.
|
||||
#
|
||||
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||
system.stateVersion = "24.11"; # Did you read the comment?
|
||||
|
||||
}
|
||||
50
hosts/rpi4/fan-controll.nix
Normal file
50
hosts/rpi4/fan-controll.nix
Normal file
@@ -0,0 +1,50 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
(python3.withPackages (ps: [ ps.smbus2 ]))
|
||||
];
|
||||
|
||||
|
||||
# Fan control service
|
||||
systemd.services.argon-fan = {
|
||||
description = "Argon40 Fan Control via I2C";
|
||||
after = [ "multi-user.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
Restart = "always";
|
||||
ExecStart = pkgs.writeScript "argon-fan.py" ''
|
||||
#!${pkgs.python3.withPackages (ps: [ ps.smbus2 ])}/bin/python3
|
||||
import smbus2
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
bus = smbus2.SMBus(1)
|
||||
|
||||
while True:
|
||||
try:
|
||||
# Get temperature
|
||||
temp_output = subprocess.check_output(['${pkgs.libraspberrypi}/bin/vcgencmd', 'measure_temp']).decode()
|
||||
temp = float(temp_output.replace("temp=","").replace("'C\n",""))
|
||||
|
||||
# Set fan speed based on temperature (0-100)
|
||||
if temp < 55:
|
||||
speed = 0
|
||||
elif temp < 60:
|
||||
speed = 25
|
||||
elif temp < 65:
|
||||
speed = 50
|
||||
else:
|
||||
speed = 100
|
||||
|
||||
bus.write_byte(0x1a, speed)
|
||||
print(f"Temp: {temp}°C, Fan: {speed}%")
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
time.sleep(30)
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
26
hosts/rpi4/hardware-configuration.nix
Normal file
26
hosts/rpi4/hardware-configuration.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
|
||||
fsType = "ext4";
|
||||
};
|
||||
fileSystems."/storage" =
|
||||
{ device = "/dev/disk/by-label/STORAGE";
|
||||
fsType = "ext4";
|
||||
options = [ "nofail" ];
|
||||
};
|
||||
swapDevices = [
|
||||
{ device = "/swapfile";
|
||||
size = 4096;
|
||||
}
|
||||
];
|
||||
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||
hardware.i2c.enable = true;
|
||||
}
|
||||
Reference in New Issue
Block a user