# 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`).
{ config, lib, pkgs, inputs, ... }:
{
nixpkgs.config.allowUnfree = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# programs.hyprland.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
programs.neovim = {
enable = true;
defaultEditor = true;
};
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
time.timeZone = "America/Toronto";
# 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;
fonts.fontconfig.enable = true;
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
virtualisation.docker.enable = true;
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "not-nix"; # Add this line
users.jeremy = { pkgs, ... }: {
home.stateVersion = "25.11";
programs.waybar = {
enable = false;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 24;
margin-top = 0;
margin-left = 0;
margin-right = 0;
spacing = 4;
modules-left = [ "niri/workspaces" "niri/window" ];
modules-center = [];
modules-right = [ "cpu" "memory" "tray" "battery" "pulseaudio" "clock" ];
"niri/workspaces" = {
format = "{index}";
active-only = true;
};
"clock" = {
format = "{:%H:%M | %a %d}";
tooltip-format = "{:%Y %B}\n{calendar}";
};
"pulseaudio" = {
format = "{icon} {volume}%";
format-muted = "";
format-icons = {
default = [ "" "" "" ];
};
on-click = "pavucontrol";
};
"cpu" = { format = " {usage}%"; };
"memory" = { format = " {percentage}%"; };
"battery" = {
states = { critical = 15; };
format = "{icon} {capacity}%";
format-icons = [ "" "" "" "" "" ];
};
};
};
style = ''
* {
font-family: "JetBrainsMono Nerd Font";
font-size: 15px;
border: none;
border-radius: 0;
}
window#waybar {
background: #000;
color: #cdd6f4;
}
#workspaces button {
padding: 0 8px;
color: #bac2de;
}
#workspaces button.focused {
color: #7fc8ff;
background: rgba(127, 200, 255, 0.1);
border-bottom: 2px solid #7fc8ff;
}
#clock, #cpu, #memory, #pulseaudio, #battery {
padding: 0 10px;
margin: 4px 2px;
}
#clock {
font-weight: bold;
color: #89b4fa;
}
'';
};
programs.neovim = { # Configure nvim
enable = true;
extraConfig = ''
set number relativenumber
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab
set cc=80
'';
};
programs.vscode = { # Configure vscodium
enable = true;
package = pkgs.vscodium;
mutableExtensionsDir = true; # Keep theme updated
profiles.default.extensions = with pkgs.vscode-extensions; [
jnoortheen.nix-ide # NIX syntax highlighting. Also uses nixfmt package
rust-lang.rust-analyzer # Rust
mkhl.direnv # recognize custom nix environments
tamasfe.even-better-toml # toml file support
myriad-dreamin.tinymist # typst files
tekumara.typos-vscode # spellcheck
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "skillavid-pure-black";
publisher = "redwan-hossain";
version = "5.0.0";
sha256 = "sha256-/gLvhw0XcUb6Jch/LZ4k7xpSS9wdYWVf5u7uvOHS+i8=";
}
{
name = "remote-ssh-edit";
publisher = "ms-vscode-remote";
version = "0.47.2";
sha256 = "1hp6gjh4xp2m1xlm1jsdzxw9d8frkiidhph6nvl24d0h8z34w49g";
}
];
};
};
};
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
users.users.jeremy = {
isNormalUser = true;
extraGroups = [ "wheel" "docker" "wireshark" "adbusers" "plugdev" "networkmanager" ];
shell = pkgs.bash;
home = "/home/jeremy";
createHome = true;
packages = with pkgs; [
prismlauncher # minecraft launcher
discord-canary
# godot # 4.5.1 for now
inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.godot_4
nextcloud-client
steam
signal-desktop
docker
# swaybg # wallpaper
nixfmt # nix file formatting
openrgb # RGB editor
furmark # Room heater
obsidian # note taking
gcc
xauth
burpsuite
python3
direnv # develop projects in custom environments
# hyprshot # screenshots
typst # typst compilation
tinymist # typst previews
binaryninja-free # broke ahh cracker
patchelf # make programs understand nix. good for downloaded executables such as crackmes
starsector # support indie games!
htop
mullvad-vpn # arrr
qbittorrent # arrr
mpv # arrr
wireshark
obs-studio
slack
scrcpy # phone rdp
android-tools # phone rdp
wireguard-tools
blender # drone
];
};
# Use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [
firefox
neovim
wget
gnome-disk-utility
dunst
libnotify
rofi
alacritty
vscodium
ncdu
nmap
kitty
git
unzip
pavucontrol # PulseAudio Volume Control
bluez # Bluetooth support
bluez-tools # Bluetooth tools
polkit_gnome
usbutils # for lsusb
xwayland-satellite # xwayland support
fuzzel # menu
networkmanagerapplet
wireless-regdb
];
fonts.packages = [ pkgs.nerd-fonts.jetbrains-mono ];
programs.niri.enable = false;
boot.initrd.kernelModules = [ "amdgpu" ];
environment.sessionVariables = {
SUDO_EDITOR = "nvim";
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.ollama = {
enable = true;
package = pkgs.ollama;
acceleration = "rocm";
host = "0.0.0.0";
};
services.pulseaudio.enable = false; # Use Pipewire
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
jack.enable = false;
};
# networking = {
# interfaces.eno1 = {
# ipv4.addresses = [{
# address = "192.168.2.100";
# prefixLength = 24;
# }];
# };
# defaultGateway = {
# address = "192.168.2.1";
# interface = "eno1";
# };
# # interfaces.ens3 = {
# # ipv4.addresses = [{
# # address = "10.40.0.132";
# # prefixLength = 24;
# # }];
# # };
# # defaultGateway = {
# # address = "10.40.0.1";
# # interface = "wlp10s0";
# # };
# };
security.rtkit.enable = true; # Enable RealtimeKit for audio purposes
services.hardware.openrgb = { # Enable OpenRGB
enable = true;
package = pkgs.openrgb-with-all-plugins;
motherboard = "amd";
server.port = 6742;
};
services.udisks2.enable = true; # Enable gnome-disks
# services.displayManager.sddm.enable = true; # Enable display manager
# services.displayManager.sddm.wayland.enable = true; # Wayland
services.mullvad-vpn.package = pkgs.mullvad-vpn; # arr
services.resolved.enable = true; # for mullvad
# programs.ssh.startAgent = true; # Enable SSH tools
# programs.thunar.enable = true; # file manager
programs.wireshark.enable = true;
# virtualisation.waydroid.enable = true; # android :0
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"steam"
"steam-original"
"steam-unwrapped"
"steam-run"
"furmark"
"burpsuite"
"slack"
];
# 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;
# };
# Enable OpenSSH daemon
services.openssh = {
enable = true;
ports = [2121];
settings.X11Forwarding = true;
};
networking.firewall.allowedTCPPorts = [2121];
networking.networkmanager.enable = true;
programs.nm-applet.enable = true;
# Binaries auto linked
programs.nix-ld.enable = true;
programs.nix-ld.libraries = with pkgs; [
stdenv.cc.cc
zlib
fuse3
icu
nss
openssl
curl
expat
wayland
libxkbcommon
libGL
gtk3
glib
pango
harfbuzz
cairo
gdk-pixbuf
webkitgtk_4_1
libsoup_3
gobject-introspection
];
services.displayManager.gdm.enable = true;
services.desktopManager.gnome.enable = true;
services.gnome.core-apps.enable = true;
services.gnome.core-developer-tools.enable = false;
services.gnome.games.enable = false;
environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-user-docs ];
# udev rules for pyocd for UTAT
services.udev.extraRules = ''
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374e", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374b", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374f", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="3753", MODE="0666", GROUP="plugdev"
'';
# bootloader device
# boot.loader.grub.device = "/dev/sda";
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# 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.
#programs.wireshark.enable = true;
# 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 = "25.11"; # Did you read the comment?
}