Files
nixos-conf/configuration.nix
2026-02-01 11:42:48 -05:00

395 lines
12 KiB
Nix

# 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, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
<home-manager/nixos>
];
nixpkgs.config.allowUnfree = true;
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;
networking.hostName = "alien";
networking.networkmanager.enable = 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;
virtualisation.docker.enable = true;
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "not-nix"; # Add this line
users.jeremy = { pkgs, ... }: {
home.stateVersion = "25.11";
wayland.windowManager.hyprland = { # Configure hyprland
enable = true;
settings = {
general = {
gaps_in = 0;
gaps_out = 0;
border_size = 2;
};
decoration = {
rounding = 10;
# active_opacity = 0.9;
# inactive_opacity = 0.8;
# blur = {
# enabled = true;
# size = 10;
# passes = 3;
# vibrancy = 1;
# new_optimizations = true;
# ignore_opacity = true;
# noise = 0;
# brightness = 0.9;
# };
};
misc = {
key_press_enables_dpms = true;
mouse_move_enables_dpms = true;
};
"$mainMod" = "SUPER";
bind = [
"$mainMod, C, exec, alacritty"
"$mainMod, Q, killactive,"
"$mainMod, grave, exec, rofi -show drun"
"$mainMod, F, fullscreen"
"$mainMod, V, togglefloating,"
",F4, exec, rofi -show combi -combi-modes 'drun,filebrowser'"
"$mainMod, A, togglesplit"
", PRINT, exec, hyprshot -m region --clipboard-only"
"$mainMod, N, exec, codium ~/etc/nixos/configuratiuon.nix"
# Move between windows
"$mainMod, h, movefocus, l"
"$mainMod, j, movefocus, d"
"$mainMod, k, movefocus, u"
"$mainMod, l, movefocus, r"
# Switch workspaces with mainMod + [0-9]
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mainMod SHIFT, 1, movetoworkspace, 1"
"$mainMod SHIFT, 2, movetoworkspace, 2"
"$mainMod SHIFT, 3, movetoworkspace, 3"
"$mainMod SHIFT, 4, movetoworkspace, 4"
"$mainMod SHIFT, 5, movetoworkspace, 5"
"$mainMod SHIFT, 6, movetoworkspace, 6"
"$mainMod SHIFT, 7, movetoworkspace, 7"
"$mainMod SHIFT, 8, movetoworkspace, 8"
"$mainMod SHIFT, 9, movetoworkspace, 9"
"$mainMod SHIFT, 0, movetoworkspace, 10"
];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
binde = [
", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 && wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 && wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-"
];
bindl = [
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
];
monitor = [
"DP-2, 2560x1440@170, 0x0, 1"
"HDMI-A-1, 2560x1440@144, 2560x0, 1"
];
windowrulev2 = [
"tile, initialClass:^(Godot)$, initialTitle: ^(Godot)$"
"float, class:^(Godot)$, title:^(?!(.*Godot)).*$"
"float, initialTitle:^(Godot)$, class:^(?!(Godot)).*$"
];
exec-once = [
"swaybg -i ~/.wallpaper -m fill"
"nextcloud --background"
];
};
};
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=";
}
];
};
programs.rofi = { # Rofi config
enable = true;
theme = "dmenu";
font = "sans-serif";
package = pkgs.rofi;
modes = [
"drun"
"run"
"window"
"ssh"
];
extraConfig = {
show-icons = true;
display-drun = "";
drun-display-format = "{name}";
};
};
programs.waybar.enable = true;
programs.waybar.settings.main = {
layer = "top";
position = "top";
reload_style_on_change = true;
modules-left = [];
modules-center = ["hyprland/workspaces"];
modules-right = [
"tray"
"bluetooth"
"network"
"clock"
];
};
home.pointerCursor =
let
getFrom = url: hash: name: {
gtk.enable = true;
x11.enable = true;
name = name;
size = 48;
package =
pkgs.runCommand "moveUp" {} ''
mkdir -p $out/share/icons
ln -s ${pkgs.fetchzip {
url = url;
hash = hash;
}} $out/share/icons/${name}
'';
};
in
getFrom
"https://github.com/ful1e5/fuchsia-cursor/releases/download/v2.0.0/Fuchsia-Pop.tar.gz"
"sha256-BvVE9qupMjw7JRqFUj1J0a4ys6kc9fOLBPx2bGaapTk="
"Fuchsia-Pop";
};
};
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
users.users.jeremy = {
isNormalUser = true;
extraGroups = [ "wheel" "docker" ]; # Enable sudo
shell = pkgs.bash;
home = "/home/jeremy";
createHome = true;
packages = with pkgs; [
prismlauncher # minecraft launcher
discord-canary
godot # 4.5.1 for now
nextcloud-client
steam
signal-desktop
docker
swaybg # wallpaper
nixfmt # nix file formatting
openrgb # RGB editor
furmark # Room heater
obsidian # note taking
gcc
xauth
burpsuite
ollama
ollama-rocm
python3
direnv # develop projects in custom environments
hyprshot # screenshots
typst # typst compilation
tinymist # typst previews
hunspell # spellcheck dictionaries
hunspellDicts.en_US-large
];
};
# Use https://search.nixos.org/ to find more packages (and options).
environment.systemPackages = with pkgs; [
firefox
neovim
wget
networkmanager
gnome-disk-utility
dunst
libnotify
rofi
alacritty
vscodium
ncdu
nmap
kitty
git
unzip
pavucontrol # PulseAudio Volume Control
bluez # Bluetooth support
bluez-tools # Bluetooth tools
];
boot.initrd.kernelModules = [ "amdgpu" ];
environment.sessionVariables = {
SUDO_EDITOR = "nvim";
};
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.ollama = {
enable = true;
acceleration = "rocm";
environmentVariables = {
# Force Ollama to only see the dedicated GPU
HIP_VISIBLE_DEVICES = "0";
# Optional: Force the GPU architecture if discovery still fails
HSA_OVERRIDE_GFX_VERSION = "10.3.0";
};
};
services.pulseaudio.enable = false; # Use Pipewire
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 - hyprland
programs.ssh.startAgent = true; # Enable SSH tools
programs.thunar.enable = true; # file manager
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"steam"
"steam-original"
"steam-unwrapped"
"steam-run"
"furmark"
"burpsuite"
];
# 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];
# 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.
#
# 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?
}