Add basic flake configuration

finchie
Nov 5, 2023, 6:25 AM
6I2HQYU2ZU5STWSYDZV3PLK6J3J4DWKXIJEZ3CCOVPXUJRR627BAC

Dependencies

Change contents

  • file addition: hardware-configuration.nix (----------)
    [2.1]
    # Do not modify this file! It was generated by ‘nixos-generate-config’
    # and may be overwritten by future invocations. Please make changes
    # to /etc/nixos/configuration.nix instead.
    { config, lib, pkgs, modulesPath, ... }:
    {
    imports =
    [ (modulesPath + "/installer/scan/not-detected.nix")
    ];
    boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ];
    boot.initrd.kernelModules = [ ];
    boot.kernelModules = [ "kvm-intel" ];
    boot.extraModulePackages = [ ];
    fileSystems."/" =
    { device = "/dev/disk/by-uuid/9a5c78da-3650-4895-8f6a-f3ccf194ad90";
    fsType = "ext4";
    };
    fileSystems."/boot/efi" =
    { device = "/dev/disk/by-uuid/B8E0-2F59";
    fsType = "vfat";
    };
    swapDevices = [ ];
    # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
    # (the default) this is the recommended approach. When using systemd-networkd it's
    # still possible to use this option, but it's recommended to use it in conjunction
    # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
    networking.useDHCP = lib.mkDefault true;
    # networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
    # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
    hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
    }
  • file addition: flake.nix (----------)
    [2.1]
    # Thanks to https://colinramsay.co.uk/2021/10/19/migrating-a-nixos-install-to-flakes.html
    {
    # the source of your packages
    inputs = {
    # normal nix stuff
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    # Nixpkgs-wayland
    nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
    # only needed if you use as a package set:
    nixpkgs-wayland.inputs.nixpkgs.follows = "nixpkgs";
    # Rust via rust-overlay
    rust-overlay.url = "github:oxalica/rust-overlay";
    # Firefox nightly overlay
    firefox-nightly-overlay.url = "github:mozilla/nixpkgs-mozilla";
    };
    # what will be produced (i.e. the build)
    outputs = inputs: {
    nixosConfigurations."nixos" =
    let system = "x86_64-linux";
    python-packages = ps: with ps; [
    requests
    discordpy
    pandas
    numpy
    # spacy
    nose
    matplotlib
    seaborn
    basemap
    geopandas
    pyshp
    jupyter
    notebook
    ipython
    ipykernel
    openpyxl
    ];
    in inputs.nixpkgs.lib.nixosSystem {
    inherit system;
    modules = [({pkgs, config, ... }: {
    imports = [ ./configuration.nix ];
    config = {
    nix.settings = {
    # add binary caches
    trusted-public-keys = [
    "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
    "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
    ];
    substituters = [
    "https://cache.nixos.org"
    "https://nixpkgs-wayland.cachix.org"
    ];
    extra-substituters = [
    # Nix community's cache server
    "https://nix-community.cachix.org"
    ];
    extra-trusted-public-keys = [
    "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
    ];
    };
    nixpkgs.overlays = with inputs; [
    nixpkgs-wayland.overlay
    rust-overlay.overlays.default
    firefox-nightly-overlay.overlay
    ];
    # or, pull specific packages (built against inputs.nixpkgs, usually `nixos-unstable`)
    environment.systemPackages = with pkgs; [
    (rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
    extensions = [ "rust-src" "llvm-tools-preview" ];
    targets = [ "riscv32imc-unknown-none-elf" "x86_64-unknown-none" "wasm32-unknown-unknown" "wasm32-wasi" ];
    }))
    (python3.withPackages python-packages)
    latest.firefox-nightly-bin
    neofetch
    gnome.gnome-remote-desktop # Needed for screen sharing? see https://bbs.archlinux.org/viewtopic.php?id=283835
    nushellFull
    pandoc
    biome
    alacritty
    helix
    direnv
    discord-canary
    vscode
    git
    pijul
    steam
    sidequest
    ripgrep
    arduino
    bat
    bottom
    du-dust
    asciinema
    lapce
    fontconfig
    zoxide
    fd
    tokei
    hotspot
    onlyoffice-bin
    hyperfine
    psst
    bottles
    topgrade
    thunderbird-bin
    rustdesk
    steam-run
    lutris
    mdbook
    difftastic
    lurk
    typst
    obs-studio
    pkg-config
    openssl
    libiconv
    zstd
    xxHash
    yarn
    nodejs
    libudev-zero
    qemu
    llvmPackages.bintools
    xorg.libX11
    xorg.libxkbfile
    libsecret
    mold
    clang_14
    cmake
    fontconfig
    freetype
    ninja
    ruff
    libsodium
    ffmpeg
    tk
    zip
    gdb
    ];
    };
    })];
    };
    };
    }
  • file addition: configuration.nix (----------)
    [2.1]
    # Edit this configuration file to define what should be installed on
    # your system. Help is available in the configuration.nix(5) man page
    # and in the NixOS manual (accessible by running ‘nixos-help’).
    { config, pkgs, ... }:
    {
    imports =
    [ # Include the results of the hardware scan.
    ./hardware-configuration.nix
    ];
    # Try to pass through Wii remotes
    # services.udev.packages = [ pkgs.dolphinEmu ];
    # Enable Lorri daemon
    services.lorri.enable = true;
    # SSH Agent
    services.gnome.gnome-keyring.enable = true;
    security.pam.services.lightdm.enableGnomeKeyring = true;
    # Bootloader.
    boot.loader.systemd-boot.enable = true;
    boot.loader.efi.canTouchEfiVariables = true;
    boot.loader.efi.efiSysMountPoint = "/boot/efi";
    networking.hostName = "nixos"; # Define your hostname.
    # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
    # Configure network proxy if necessary
    # networking.proxy.default = "http://user:password@proxy:port/";
    # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
    # Enable networking
    networking.networkmanager.enable = true;
    # Dynamically configure time zone.
    services.automatic-timezoned.enable = true;
    # Select internationalisation properties.
    i18n.defaultLocale = "en_AU.utf8";
    # Enable the X11 windowing system.
    services.xserver.enable = true;
    # Enable the GNOME Desktop Environment.
    services.xserver.displayManager.gdm.enable = true;
    services.xserver.desktopManager.gnome.enable = true;
    services.xserver.displayManager.gdm.wayland = false; # I wish X11 wasn't required..
    # FUCK YOU GPG
    programs.gnupg.agent = {
    enable = true;
    enableSSHSupport = true;
    pinentryFlavor = "gnome3";
    };
    # Fix fonts
    fonts = {
    enableDefaultPackages = true;
    fontDir.enable = true;
    packages = with pkgs; [
    nerdfonts
    ];
    fontconfig.enable = true;
    };
    # Configure keymap in X11
    services.xserver = {
    layout = "au";
    xkbVariant = "";
    };
    # Enable CUPS to print documents.
    services.printing.enable = true;
    # Enable sound with pipewire.
    #sound.enable = true;
    hardware.pulseaudio.enable = false;
    # rtkit is optional but recommended
    security.rtkit.enable = true;
    services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this
    #jack.enable = true;
    };
    # Enable touchpad support (enabled default in most desktopManager).
    # services.xserver.libinput.enable = true;
    # Define a user account. Don't forget to set a password with ‘passwd’.
    users.users.finchie = {
    isNormalUser = true;
    description = "Finchie";
    extraGroups = [ "networkmanager" "wheel" ];
    };
    # Allow unfree packages
    nixpkgs.config.allowUnfree = true;
    # Firefox nightly overlay
    # nixpkgs.overlays =
    # let
    # moz-rev = "master";
    # moz-url = builtins.fetchTarball { url = "https://github.com/mozilla/nixpkgs-mozilla/archive/${moz-rev}.tar.gz";};
    # nightlyOverlay = (import "${moz-url}/firefox-overlay.nix");
    # in [
    # nightlyOverlay
    # (import "${fetchTarball "https://github.com/nix-community/fenix/archive/main.tar.gz"}/overlay.nix")
    # ];
    # List packages installed in system profile. To search, run:
    # $ nix search wget
    environment.systemPackages = with pkgs; [
    # latest.firefox-nightly-bin
    ];
    # Steam configuration
    nixpkgs.config.packageOverrides = pkgs: {
    steam = pkgs.steam.override {
    extraPkgs = pkgs: with pkgs; [
    libgdiplus
    ];
    };
    };
    programs.steam.enable = true;
    # 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;
    # passwordAuthentication = false; # default true
    # permitRootLogin = "yes";
    # challengeResponseAuthentication = false;
    };
    # Open ports in the firewall.
    # networking.firewall.allowedTCPPorts = [ ... ];
    # networking.firewall.allowedUDPPorts = [ ... ];
    # Or disable the firewall altogether.
    # networking.firewall.enable = false;
    # This value determines the NixOS release from which the default
    # settings for stateful data, like file locations and database versions
    # on your system were taken. It‘s perfectly fine and recommended to leavecatenate(variables, "bootdev", bootdev)
    # this value at the release version of the first install of this system.
    # Before changing this value read the documentation for this option
    # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
    system.stateVersion = "22.05"; # Did you read the comment?
    nix = {
    package = pkgs.nixUnstable;
    extraOptions = ''
    experimental-features = nix-command flakes
    '';
    };
    }
  • file addition: .ignore (----------)
    [2.1]
    .git
    .DS_Store
    flake.lock