# This is your system's configuration file. # Use this to configure your system environment (it replaces /etc/nixos/configuration.nix) { inputs, lib, config, pkgs, ... }: { # You can import other NixOS modules here imports = [ ./hardware-configuration.nix ]; services.xserver = { enable = true; xkb.layout = "us"; }; services.libinput.enable = true; services.tailscale.enable = true; hardware.graphics = { enable = true; enable32Bit = true; }; nixpkgs = { # Configure your nixpkgs instance config = { # Disable if you don't want unfree packages allowUnfree = true; }; }; nix = { # This will add each flake input as a registry # To make nix3 commands consistent with your flake registry = lib.mapAttrs (_: value: {flake = value;}) inputs; # This will additionally add your inputs to the system's legacy channels # Making legacy nix commands consistent as well, awesome! nixPath = lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry; settings = { # Enable flakes and new 'nix' command experimental-features = "nix-command flakes"; # Deduplicate and optimize nix store auto-optimise-store = true; }; }; # the configuration (pain) programs = { gnupg.agent = { enable = true; enableSSHSupport = true; }; hyprland = { enable = true; xwayland.enable = true; }; zsh.enable = true; }; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; }; environment.systemPackages = with pkgs; [ gcc git grim lxqt.lxqt-policykit pavucontrol pciutils pulseaudio screen slurp usbutils wget wl-clipboard xdg-utils swaynotificationcenter swayidle wofi swaylock gnome-keyring gtklock tailscale ]; services.printing.enable = true; fonts.packages = with pkgs; [ font-awesome nerdfonts jetbrains-mono winePackages.fonts ]; networking.hostName = "sunfish"; networking.networkmanager.enable = true; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; boot.initrd.systemd.enable = true; boot.kernelPackages = pkgs.linuxPackages_latest; # Set a time zone, idiot time.timeZone = "Europe/London"; # Fun internationalisation stuffs (AAAAAAAA) i18n.defaultLocale = "en_GB.UTF-8"; i18n.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"; }; # define user acc users.users.floppydisk = { isNormalUser = true; description = "Frankie B."; extraGroups = ["networkmanager" "wheel"]; openssh.authorizedKeys.keys = [ # TODO: Add your SSH public key(s) here, if you plan on using SSH to connect ]; shell = pkgs.zsh; }; nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 30d"; }; # This setups a SSH server. Very important if you're setting up a headless system. # Feel free to remove if you don't need it. services.openssh.enable = true; services.greetd = { enable = true; restart = true; settings = { default_session = { command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; user = "greeter"; }; }; }; systemd.services.greetd.serviceConfig = { Type = "idle"; StandardInput = "tty"; StandardOutput = "tty"; StandardError = "journal"; TTYReset = "true"; TTYHangup = "true"; TTYVTDisallocate = true; }; systemd.services.NetworkManager-wait-online.enable = lib.mkForce false; security.pam.services.gtklock.text = lib.readFile "${pkgs.gtklock}/etc/pam.d/gtklock"; networking.firewall.enable = false; system.stateVersion = "24.05"; }