{ pkgs, inputs, lib, ... }: let home-manager = builtins.fetchTarball { url = "https://github.com/nix-community/home-manager/archive/release-24.11.tar.gz"; sha256 = "0c07xj74vsj37d3a8f98i9rhhhr99ckwlp45n40f0qkmigm3pk8s"; #sha256 = "15k41il0mvmwyv6jns4z8k6khhmb22jk5gpcqs1paym3l01g6abn"; }; in { imports = [ ./hardware-configuration.nix (import "${home-manager}/nixos") inputs.spicetify-nix.nixosModules.default ]; programs.spicetify = let spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; in { enable = true; enabledExtensions = with spicePkgs.extensions; [ adblock hidePodcasts shuffle # shuffle+ (special characters are sanitized out of extension names) ]; #theme = spicePkgs.themes.catppuccin; #colorScheme = "mocha"; }; boot.loader = { efi = { canTouchEfiVariables = true; efiSysMountPoint = "/boot/efi"; }; grub = { efiSupport = true; #efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work on this system device = "nodev"; useOSProber = false; }; # GitHub: vinceliuice/grub2-themes grub2-theme = { enable = true; theme = "whitesur"; # stylish, vimix, or whitesur footer = true; customResolution = "1920x1080"; # Optional: Set a custom resolution }; }; # Set your time zone. time.timeZone = "Australia/Brisbane"; # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; console = { font = "Lat2-Terminus16"; keyMap = "us"; #packages = with pkgs; [ # nerdfonts #]; }; # ----- NETWORKING SECTION ----- networking.hostName = "lolcathost"; networking.networkmanager.enable = true; # Open ports in the firewall. # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; # Or disable the firewall altogether. networking.firewall.enable = true; # ----- SERVICES ----- services = { # Set display manager (login screen) displayManager = { # sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects sddm = { enable = true; wayland.enable = true; # enable experimental sddm support for wayland theme = "corners"; }; defaultSession = "hyprland"; }; # Enable sound #hardware.pulseaudio.enable = false; pipewire = { enable = true; wireplumber.enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; jack.enable = true; }; # Enable touchpad support libinput.enable = true; tumbler.enable = true; # Thunar image thumbnail support gvfs.enable = true; # Thunar mount, trash, and other functionality }; security.rtkit.enable = true; # I *think* this is for pipewire # allow wheel group to use passwordless sudo users = { # using fish as the login shell tends # to go very poorly because it isn't # POSIX compliant, so we'll just use # simple Bash then :) defaultUserShell = pkgs.bash; users = { # literally me fr (personal account) me = { isNormalUser = true; extraGroups = ["wheel" "docker"]; shell = pkgs.bash; #pkgs.fish packages = let # TODO: can I just do this: https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake#url-like-syntax # instead to use colmena's flake.nix by specifying a rev hash in the flake input? colmena-src = pkgs.fetchFromGitHub { owner = "zhaofengli"; repo = "colmena"; rev = "47b6414d800c8471e98ca072bc0835345741a56a"; sha256 = "rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc="; }; colmena-latest = pkgs.callPackage "${colmena-src}/package.nix" {}; in with pkgs; [ firefox nitch starfetch hyprpanel # flatpak requires gnome-software # for graphical applications flatpak gnome-software colmena-latest jetbrains.rider gitkraken ]; }; # user for my professional jobs and stuff ae = { isNormalUser = true; extraGroups = ["wheel"]; shell = pkgs.bash; #pkgs.fish packages = with pkgs; [ ]; }; # # This is the user account for servers # dev = { # isNormalUser = true; # extraGroups = ["wheel"]; # shell = pkgs.bash; #pkgs.zsh # packages = with pkgs; [ # ]; # }; # user for friends to ssh into friends = { isNormalUser = true; shell = pkgs.fish; packages = with pkgs; [ ]; }; }; }; home-manager = { users.me = import ../../homes/me; #extraSpecialArgs = {inherit inputs pkgs;}; sharedModules = [ inputs.ags.homeManagerModules.default inputs.nixcord.homeManagerModules.nixcord #{nixpkgs.overlays = [inputs.hyprpanel.overlay];} ]; }; # ---- SYSTEM PACKAGES ----- environment.systemPackages = with pkgs; [ # User Environment inputs.swww.packages.${pkgs.system}.swww helvum easyeffects ani-cli wl-clipboard # clipboard for wayland pavucontrol (callPackage ../sddm-theme-corners.nix {}).sddm-theme-corners # dependencies for my sddm theme: pkgs.libsForQt5.qt5.qtgraphicaleffects python311 # I use 3.11 since it's in a pretty stable state now poetry # python dependency management and packaging # DEBUG: using neofetch temporarily to see if my system upgrades properly neofetch # fish plugins grc # colorise command outputs httpie curlie zoxide doggo tldr btop # TODO: once upgraded past Nix-24.07 this line won't be necessary (I think) # helix will support nixd by default # SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix nixd # lsp for nix # Pretty necessary git git-filter-repo brightnessctl acpi vim powertop gcc # Unix Commands wget tree unzip ]; # Enable the use of certain programs programs = { hyprland = { enable = true; #package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; #portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; xwayland.enable = true; }; zsh.enable = true; fish.enable = true; # I want to use fish as my login shell but it always goes terrible # cause it isn't POSIX compliant, so instead Bash is my login and # will just exec fish (^-^) bash = { interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" exec ${pkgs.fish}/bin/fish $LOGIN_OPTION fi ''; }; # Thunar also uses: `services.tumbler` & `services.gvfs` thunar = { enable = true; plugins = with pkgs.xfce; [ thunar-volman # for removable drives (ie USBs) thunar-archive-plugin # create and extract archives thunar-media-tags-plugin # change metadata for media files ]; }; }; # ----- FONTS ----- fonts = { enableDefaultPackages = true; # no clue what this line does tbh packages = with pkgs; [ #(nerdfonts.override { # fonts = [ # "Cousine" # "Iosevka" # "JetBrainsMono" # ]; # }) nerdfonts geist-font # for my hyprlock theme # texlive maintains a noto-emoji flake texlivePackages.noto-emoji ]; # TODO: change my default fonts fontconfig = { defaultFonts = { serif = ["Iosevka"]; # TODO: package Iosevka Etoile since Iosevka isn't a serif font sansSerif = ["Iosevka "]; monospace = ["Cousine"]; emoji = ["Noto Emoji"]; }; }; }; # Enable the new CLI commands and the flakes as experimental features nix.settings.experimental-features = [ "nix-command" "flakes" ]; virtualisation.docker.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; # }; # Enable the OpenSSH daemon. # services.openssh.enable = true; # Enable OpenGL hardware = { graphics.enable = true; }; # DO NOT MODIFY system.stateVersion = "24.05"; # Did you read the comment? }