Set Azedia up with NixOS for real.
This commit is contained in:
		
							parent
							
								
									06de266a7f
								
							
						
					
					
						commit
						9d95b34521
					
				| 
						 | 
				
			
			@ -6,6 +6,9 @@
 | 
			
		|||
  imports = [
 | 
			
		||||
    ./hardware-configuration.nix # Created by nixos-generate-config.
 | 
			
		||||
    ./packages.nix
 | 
			
		||||
    ./programs-services.nix
 | 
			
		||||
    ./system.nix
 | 
			
		||||
    ./users.nix
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  nix = {
 | 
			
		||||
| 
						 | 
				
			
			@ -15,17 +18,10 @@
 | 
			
		|||
  nixpkgs = {
 | 
			
		||||
    config = {
 | 
			
		||||
      allowUnfree = true;
 | 
			
		||||
      packageOverrides = pkgs: {
 | 
			
		||||
        # Add the unstable channel as a separate package set.
 | 
			
		||||
        unstable = import <nixos-unstable> {
 | 
			
		||||
          # Pass config through so everything is shared between all channels.
 | 
			
		||||
          config = config.nixpkgs.config;
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  # Before changing this value read the documentation for this option!
 | 
			
		||||
  # https://search.nixos.org/options?channel=23.05&show=system.stateVersion
 | 
			
		||||
  system.stateVersion = "23.05";
 | 
			
		||||
  # https://search.nixos.org/options?channel=23.11&show=system.stateVersion
 | 
			
		||||
  system.stateVersion = "23.11";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,8 +5,13 @@
 | 
			
		|||
{
 | 
			
		||||
  environment = {
 | 
			
		||||
    systemPackages = with pkgs; [
 | 
			
		||||
      exa
 | 
			
		||||
      bat
 | 
			
		||||
      eza
 | 
			
		||||
      fd
 | 
			
		||||
      git
 | 
			
		||||
      kitty.terminfo
 | 
			
		||||
      raspberrypi-eeprom
 | 
			
		||||
      starship
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
# Configuration for programs and services.
 | 
			
		||||
 | 
			
		||||
{ pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  programs = {
 | 
			
		||||
    zsh.enable = true;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  services = {
 | 
			
		||||
    openssh.enable = true;
 | 
			
		||||
 | 
			
		||||
    # Enable `resolved` so the `<hostname>.local` domain works.
 | 
			
		||||
    resolved.enable = true;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
# General system configuration.
 | 
			
		||||
 | 
			
		||||
{ pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  boot = {
 | 
			
		||||
    kernelPackages = pkgs.linuxKernel.packages.linux_rpi4;
 | 
			
		||||
    loader = {
 | 
			
		||||
      grub.enable = false;
 | 
			
		||||
      generic-extlinux-compatible.enable = true;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  console = {
 | 
			
		||||
    keyMap = "be-latin1";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  environment = {
 | 
			
		||||
    shells = [ pkgs.zsh ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  hardware.enableRedistributableFirmware = true;
 | 
			
		||||
 | 
			
		||||
  i18n = {
 | 
			
		||||
    defaultLocale = "en_US.UTF-8";
 | 
			
		||||
    extraLocaleSettings = {
 | 
			
		||||
      LC_ADDRESS = "en_GB.UTF-8";
 | 
			
		||||
      LC_IDENTIFICATION = "en_GB.UTF-8";
 | 
			
		||||
      LC_MEASUREMENT = "en_GB.UTF-8";
 | 
			
		||||
      LC_MONETARY = "en_GB.UTF-8";
 | 
			
		||||
      LC_NAME = "en_GB.UTF-8";
 | 
			
		||||
      LC_NUMERIC = "en_GB.UTF-8";
 | 
			
		||||
      LC_PAPER = "en_GB.UTF-8";
 | 
			
		||||
      LC_TELEPHONE = "en_GB.UTF-8";
 | 
			
		||||
      LC_TIME = "en_GB.UTF-8";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  networking = {
 | 
			
		||||
    hostName = "azedia";
 | 
			
		||||
 | 
			
		||||
    firewall = {
 | 
			
		||||
      # * 22 is for SSH.
 | 
			
		||||
      # * 53, 5353 and 5355 are for `resolved` so we can access the server via
 | 
			
		||||
      #   the `<hostname>.local` domain. Maybe not all of the ports are needed
 | 
			
		||||
      #   but having them all makes it work.
 | 
			
		||||
      # * 80 and 443 are for Caddy HTTP and HTTPS access respectively.
 | 
			
		||||
      allowedTCPPorts = [ 22 53 5353 5355 80 443 ];
 | 
			
		||||
      allowedUDPPorts = [ 22 53 5353 5355 80 443 ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    # It probably isn't necessary to manually set the IPs but do it anyway just
 | 
			
		||||
    # in case if something else gets messed up they at least stay the same. Both
 | 
			
		||||
    # IPs are the original ones that were automatically assigned.
 | 
			
		||||
    interfaces.wlan0.ipv4.addresses = [{
 | 
			
		||||
      address = "192.168.0.202";
 | 
			
		||||
      prefixLength = 24;
 | 
			
		||||
    }];
 | 
			
		||||
 | 
			
		||||
    interfaces.wlan0.ipv6.addresses = [{
 | 
			
		||||
      address = "2a02:1810:9c2d:6b00:afd9:d79c:644d:f12f";
 | 
			
		||||
      prefixLength = 64;
 | 
			
		||||
    }];
 | 
			
		||||
 | 
			
		||||
    wireless = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      # The "wireless.env" should have "HOME_SSID=name" and "HOME_PSK=password"
 | 
			
		||||
      # set in it, then NixOS uses them to replace the `@variable@` ones below.
 | 
			
		||||
      environmentFile = "/var/secrets/wireless.env";
 | 
			
		||||
      interfaces = [ "wlan0" ];
 | 
			
		||||
      networks."@HOME_SSID@".psk = "@HOME_PSK@";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  time.timeZone = "Europe/Brussels";
 | 
			
		||||
 | 
			
		||||
  virtualisation = {
 | 
			
		||||
    docker = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      storageDriver = "btrfs";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
 | 
			
		||||
    users.bauke = {
 | 
			
		||||
      description = "Bauke";
 | 
			
		||||
      extraGroups = [ "networkmanager" ];
 | 
			
		||||
      extraGroups = [ "docker" "wheel" ];
 | 
			
		||||
      isNormalUser = true;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in New Issue