{ config, pkgs, inputs, ... }: let unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.hostPlatform.system; config.allowUnfree = true; }; in { nixpkgs.config.allowUnfree = true; environment.systemPackages = with pkgs; [ acpi age alacritty bluez bluez-tools bitwarden-cli btop dconf deskflow direnv fastfetch firefox gemini-cli gimp git github-cli gnome-calculator (google-chrome.override { commandLineArgs = [ "--disable-pinch" ]; }) google-chrome google-java-format gnupg jdk jdt-language-server jq keepassxc lan-mouse libnotify macchanger mypy nautilus networkmanagerapplet nitrogen nix-direnv unstable.ollama pasystray playerctl pulseaudioFull python3 rclone rnote rustdesk sops ssh-to-age tldr tmux unrar unzip upower usbutils v4l-utils vim wget wl-clipboard xclip xournalpp zip (pkgs.writeShellScriptBin "unix" '' set -u DOTFILES="$HOME/.dotfiles" ERRFILE=$(mktemp) HOST=$(cat /etc/hostname) trap "rm -f '$ERRFILE'" EXIT echo "Building NixOS..." cd $DOTFILES && git stage -A sudo nixos-rebuild switch --flake "$DOTFILES#$HOST" 2>&1 | tee "$ERRFILE" STATUS=''${PIPESTATUS[0]} if [ "$STATUS" -ne 0 ]; then PATTERN=$(find "$DOTFILES" -type f -name "*.nix" -printf "%f\n" | sort -u | tr '\n' '|' | sed 's/|$//') MATCHES=$(grep -E "$PATTERN" "$ERRFILE" | sort -u) if [ -n "$MATCHES" ]; then printf '\nErrors in repo files:\n%s\n' "$MATCHES" fi exit 1 fi GEN=$(readlink /nix/var/nix/profiles/system | sed 's/system-\([0-9]*\)-link/\1/') VER=$(nixos-version) TIMESTAMP=$(date '+%Y-%m-%d %H:%M') cd "$DOTFILES" if [ -z "$(${pkgs.git}/bin/git status --porcelain)" ]; then echo "Generation $GEN active — no config changes to commit." exit 0 fi echo "Append to default commit message? Hit enter to skip." read -r msg_to_append ${pkgs.git}/bin/git add -A ${pkgs.git}/bin/git commit -m "nixos: gen $GEN @ $(hostname) — $TIMESTAMP $VER ----- $msg_to_append" ${pkgs.git}/bin/git push '') ]; programs.direnv.enable = true; programs.direnv.nix-direnv.enable = true; programs.steam = { enable = true; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; localNetworkGameTransfers.openFirewall = true; gamescopeSession.enable = true; }; }