# Edit this configuration file to define what should be installed on # your system. Help is available in the configuration.nix(5) man page, on # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). { hostname, inputs, config, lib, pkgs, ... }: { imports = [ # Include the results of the hardware scan. ./hardware-configuration.nix ../common ../common/programs ../common/services ../common/optional/networkmanager.nix ../common/optional/woodpecker-agent.nix ../common/physical ]; services.btrfs.autoScrub.enable = true; #Unfortunately, configuring this still requires some state on the end #machine. While NixOS is a good candidate for software defined networking, #its not clear to me how to get the IP addresses at build time. #Static addresses are probably the "easiest," most accessible method. services.nfs.server.exports = '' /srv/nfs 192.168.1.0/24 (rw,nohide,insecure,no_subtree_check) 100.64.0.0/24 (rw,nohide,insecure,no_subtree_check) ''; services.nfs.server = { enable = true; # fixed rpc.statd port; for firewall lockdPort = 4001; mountdPort = 4002; statdPort = 4000; extraNfsdConfig = ''''; }; networking.firewall = { enable = true; # for NFSv3; view with `rpcinfo -p` allowedTCPPorts = [ 111 2049 4000 4001 4002 20048 ]; allowedUDPPorts = [ 111 2049 4000 4001 4002 20048 ]; }; services.samba = { enable = true; openFirewall = true; settings = { global = { "workgroup" = "WORKGROUP"; "server string" = "smbnix"; "netbios name" = "smbnix"; "security" = "user"; #"use sendfile" = "yes"; #"max protocol" = "smb2"; # note: localhost is the ipv6 localhost ::1 "hosts allow" = "192.168.1.0/24 100.64.0.0/24 127.0.0.1 localhost"; "hosts deny" = "0.0.0.0/0"; "guest account" = "nobody"; "map to guest" = "bad user"; }; "public" = { "path" = "/srv/nfs/Shares/Public"; "browseable" = "yes"; "read only" = "no"; "guest ok" = "yes"; "create mask" = "0644"; "directory mask" = "0755"; "force user" = "samba"; "force group" = "samba"; }; "private" = { "path" = "/srv/nfs/Shares/Private"; "browseable" = "yes"; "read only" = "no"; "guest ok" = "no"; "create mask" = "0644"; "directory mask" = "0755"; "force user" = "samba"; "force group" = "samba"; }; }; }; users.users.samba = { isSystemUser = true; group = "samba"; home = "/srv/nfs"; }; users.groups.samba = {}; services.samba-wsdd = { enable = true; openFirewall = true; }; networking.firewall.allowPing = true; nixpkgs = { # You can add overlays here overlays = [ # If you want to use overlays exported from other flakes: # neovim-nightly-overlay.overlays.default # Or define it inline, for example: # (final: prev: { # hi = final.hello.overrideAttrs (oldAttrs: { # patches = [ ./change-hello-to-hi.patch ]; # }); # }) ]; # Configure your nixpkgs instance config = { # Disable if you don't want unfree packages allowUnfree = true; }; }; nix = let flakeInputs = lib.filterAttrs (_: lib.isType "flake") inputs; in { settings = { # Enable flakes and new 'nix' command experimental-features = "nix-command flakes"; # Opinionated: disable global registry flake-registry = ""; # Workaround for https://github.com/NixOS/nix/issues/9574 nix-path = config.nix.nixPath; }; # Opinionated: disable channels channel.enable = false; # Opinionated: make flake registry and nix path match flake inputs registry = lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs; nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs; }; users.users = { root = { openssh.authorizedKeys.keys = [ ''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPHS1VnYpuq5W2WWfd/t47rB/nEv0BNtRqz55jLxnbHL'' ''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJwRqzBdvd8HiPGMjH2tU1tZKzT+9i/2mRbafag0KcpI grantchristophera@gmail.com'' ]; }; }; # Use the GRUB 2 boot loader. boot.loader.grub.enable = true; # boot.loader.grub.efiSupport = true; # boot.loader.grub.efiInstallAsRemovable = true; # boot.loader.efi.efiSysMountPoint = "/boot/efi"; # Define on which hard drive you want to install Grub. boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only networking.hostName = hostname; # Define your hostname. # 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? }