diff --git a/INSTALL-laptop.md b/INSTALL-laptop.md deleted file mode 100644 index c6dba84..0000000 --- a/INSTALL-laptop.md +++ /dev/null @@ -1,223 +0,0 @@ -# ThinkPad NixOS Installation Guide - -This guide provides step-by-step instructions for installing the NixOS configuration on your ThinkPad laptop. - -## Prerequisites - -- **ThinkPad laptop** (tested models: T480, T490, X1 Carbon) -- **USB flash drive** (8GB+ recommended) -- **Backup your data** - this will erase everything on the target device -- **NixOS ISO** - Download from [nixos.org](https://nixos.org/download.html) -- **Internet connection** (wired recommended for initial setup) - -## Preparation - -### 1. Create NixOS Installation Media - -```bash -# On another Linux machine or macOS: -sudo dd if=nixos-minimal-*.iso of=/dev/sdX bs=4M status=progress oflag=sync -# Replace /dev/sdX with your USB device (e.g., /dev/sdb) -# WARNING: This will erase the target device completely -``` - -### 2. Boot from USB - -1. Insert USB drive into ThinkPad -2. Power on and press **F12** to enter boot menu -3. Select the USB drive -4. At GRUB menu, select "NixOS" - -## Installation Steps - -### 3. Prepare Disks - -```bash -# Identify your disk (likely /dev/nvme0n1 for NVMe SSDs) -lsblk - -# Partition the disk (adjust for your needs) -sudo gdisk /dev/nvme0n1 -# Use: o (create new GPT), n (new partition), accept defaults for EFI (512M), then Linux filesystem (rest) -# Set type for EFI to EF00, Linux filesystem to 8300 -# Write changes with w -``` - -### 4. Format Partitions - -```bash -# Format EFI partition -sudo mkfs.fat -F32 /dev/nvme0n1p1 - -# Format root partition -sudo mkfs.ext4 /dev/nvme0n1p2 - -# Mount partitions -sudo mount /dev/nvme0n1p2 /mnt -sudo mkdir -p /mnt/boot/efi -sudo mount /dev/nvme0n1p1 /mnt/boot/efi -``` - -### 5. Generate NixOS Configuration - -```bash -# Generate initial configuration -sudo nixos-generate-config --root /mnt - -# This creates /mnt/etc/nixos/configuration.nix and hardware-configuration.nix -``` - -### 6. Clone Your Nixy Configuration - -```bash -# Clone your nixy repository -sudo nix-shell -p git -git clone https://gitea.doomlabs.de/KptltD00M/nixy.git /mnt/etc/nixos/nixy -cd /mnt/etc/nixos/nixy - -# Copy hardware configuration -sudo cp /mnt/etc/nixos/hardware-configuration.nix hosts/laptop/hardware-configuration.nix -``` - -### 7. Install NixOS - -```bash -# Switch to your laptop configuration -sudo nixos-install --flake /mnt/etc/nixos/nixy#laptop - -# When prompted, set a root password -``` - -### 8. Post-Installation - -```bash -# After reboot, log in as root -# Clone your configuration to your user -git clone https://gitea.doomlabs.de/KptltD00M/nixy.git ~/nixy -cd ~/nixy - -# Switch to your user configuration -nix run nixpkgs#home-manager -- switch --flake .#andi@laptop - -# Reboot -reboot -``` - -## ThinkPad-Specific Configuration - -### 1. Trackpad Configuration - -The configuration includes touchpad settings optimized for ThinkPad hardware. If you need to adjust: - -```nix -# Edit hosts/laptop/home.nix -programs.hyprland = { - touchpad = { - naturalScroll = true; - tap-to-click = true; - disableWhileTyping = false; - }; -}; -``` - -### 2. Keyboard Backlight - -```bash -# Enable keyboard backlight control -sudo nix-env -iA nixos.hid-tools -sudo systemctl enable --now thinkpad-keyboard-backlight.service -``` - -### 3. Power Management - -```bash -# Install TLP for better power management -sudo nix-env -iA nixos.tlp -sudo systemctl enable --now tlp -``` - -## Troubleshooting - -### Common Issues - -**1. WiFi not working:** -```bash -# Install firmware for your WiFi card -sudo nix-env -iA nixos.firmware -``` - -**2. Suspend/resume issues:** -```bash -# Edit hardware-configuration.nix -boot.kernelPackages = pkgs.linuxPackages_latest; -``` - -**3. Screen tearing:** -```bash -# Enable TearFree in hosts/laptop/configuration.nix -services.xserver.videoDrivers = [ "modesetting" ]; -``` - -### Debugging Commands - -```bash -# Check hardware detection -sudo dmesg | grep -i thinkpad - -# Check battery status -upower -i /org/freedesktop/UPower/devices/battery_BAT0 - -# Check display configuration -hyprctl monitors -``` - -## Maintenance - -### Updating Your System - -```bash -# Update flake inputs -nix flake update - -# Rebuild system -sudo nixos-rebuild switch --flake ~/nixy#laptop - -# Rebuild home configuration -nix run nixpkgs#home-manager -- switch --flake ~/nixy#andi@laptop -``` - -### Backup Configuration - -```bash -# Backup your hardware configuration -cp /etc/nixos/hardware-configuration.nix ~/nixy/hosts/laptop/ - -# Commit changes -cd ~/nixy -git add . -git commit -m "Update hardware config for ThinkPad" -git push -``` - -## Additional Resources - -- [NixOS Manual](https://nixos.org/manual/nixos/stable/) -- [ThinkPad Wiki](https://www.thinkwiki.org/) -- [NixOS Discourse](https://discourse.nixos.org/) - -## Notes - -- **ThinkPad T480/X1 Carbon specific:** These models have excellent Linux support. The configuration includes: - - Trackpoint acceleration settings - - Keyboard backlight control - - Power management profiles - - Display brightness controls - - Suspend/resume fixes - -- **Encryption:** If you enabled encryption during install, use: - ```bash - sudo cryptsetup luksOpen /dev/nvme0n1p2 cryptroot - sudo mount /dev/mapper/cryptroot /mnt - ``` - -- **Multi-boot:** If dual-booting with Windows, ensure Secure Boot is disabled in BIOS. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 7cf1fd7..ce0b532 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,16 +1,16 @@ -# Contributing to Nixy - -Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the issues! - -The process is straight-forward. - -- Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1) -- Fork Nixy [git repository](https://github.com/anotherhadi/nixy). -- Write your changes (new theme, bug fixes, issues fix, ...). -- Create a Pull Request against the main branch of Nixy. - -> [!TIP] -> To update the README, change the `./.github/assets/README_template.md` - -> [!IMPORTANT] -> Don't push your host's folder +# Contributing to Nixy + +Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the issues! + +The process is straight-forward. + +- Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1) +- Fork Nixy [git repository](https://github.com/anotherhadi/nixy). +- Write your changes (new theme, bug fixes, issues fix, ...). +- Create a Pull Request against the main branch of Nixy. + +> [!TIP] +> To update the README, change the `./.github/assets/README_template.md` + +> [!IMPORTANT] +> Don't push your host's folder diff --git a/flake.lock b/flake.lock index 365867f..1587984 100644 --- a/flake.lock +++ b/flake.lock @@ -213,98 +213,6 @@ "type": "github" } }, - "caelestia-cli": { - "inputs": { - "caelestia-shell": "caelestia-shell", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1780375472, - "narHash": "sha256-Q8RAJoYlakA6B2I5DVcuxzNbhCNU1nnIjqQZYP1KGrM=", - "owner": "caelestia-dots", - "repo": "cli", - "rev": "d1c8c8fc09738d1b40576e97c274b4a11a2e0ac7", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "cli", - "type": "github" - } - }, - "caelestia-cli_2": { - "inputs": { - "caelestia-shell": [ - "caelestia-shell" - ], - "nixpkgs": [ - "caelestia-shell", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1779768519, - "narHash": "sha256-2n/447oNfAZrl1yncafLPgXMx5tuTF6T2B+zI/zFYkI=", - "owner": "caelestia-dots", - "repo": "cli", - "rev": "64a5507e74f6c7d0c29f9131964412f8f8c4dd89", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "cli", - "type": "github" - } - }, - "caelestia-shell": { - "inputs": { - "caelestia-cli": [ - "caelestia-cli" - ], - "nixpkgs": [ - "caelestia-cli", - "nixpkgs" - ], - "quickshell": "quickshell" - }, - "locked": { - "lastModified": 1780196414, - "narHash": "sha256-iXmyWULTZuRd68xRL79e9GyYL9FZ6gfh6zl1PPlWX2A=", - "owner": "caelestia-dots", - "repo": "shell", - "rev": "63bb82762bb29ac9b7fcd5b97839abae721ce860", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "shell", - "type": "github" - } - }, - "caelestia-shell_2": { - "inputs": { - "caelestia-cli": "caelestia-cli_2", - "nixpkgs": [ - "nixpkgs" - ], - "quickshell": "quickshell_2" - }, - "locked": { - "lastModified": 1780196414, - "narHash": "sha256-iXmyWULTZuRd68xRL79e9GyYL9FZ6gfh6zl1PPlWX2A=", - "owner": "caelestia-dots", - "repo": "shell", - "rev": "63bb82762bb29ac9b7fcd5b97839abae721ce860", - "type": "github" - }, - "original": { - "owner": "caelestia-dots", - "repo": "shell", - "type": "github" - } - }, "crane": { "locked": { "lastModified": 1779130139, @@ -372,6 +280,38 @@ } }, "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { "flake": false, "locked": { "lastModified": 1777699697, @@ -442,6 +382,24 @@ } }, "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_4" + }, + "locked": { + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "nvf", @@ -462,7 +420,7 @@ "type": "github" } }, - "flake-parts_5": { + "flake-parts_6": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -499,6 +457,32 @@ "type": "github" } }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "nix-gaming", + "flake-compat" + ], + "gitignore": "gitignore_2", + "nixpkgs": [ + "nix-gaming", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781733627, + "narHash": "sha256-U3yTuGBnmXvXoQI3qkpfEDsn9RovQPAjN7ndRco+3u0=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "3bbec39bc90eadfa031e6f3b77272f3f60803e39", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -521,6 +505,28 @@ "type": "github" } }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "nix-gaming", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "gnome-shell": { "flake": false, "locked": { @@ -999,6 +1005,50 @@ "type": "github" } }, + "nix-citizen": { + "inputs": { + "flake-compat": "flake-compat_2", + "nix-gaming": [ + "nix-gaming" + ], + "nixpkgs": "nixpkgs_7", + "treefmt-nix": "treefmt-nix_4" + }, + "locked": { + "lastModified": 1782345817, + "narHash": "sha256-HfMMa51hKi6KPrGGerg6vrdKdJcSEmhEbCM1hCCQNX8=", + "owner": "LovingMelody", + "repo": "nix-citizen", + "rev": "9d93df2ace0c1c2f83b7d03bfee81441d63ec5e0", + "type": "github" + }, + "original": { + "owner": "LovingMelody", + "repo": "nix-citizen", + "type": "github" + } + }, + "nix-gaming": { + "inputs": { + "flake-compat": "flake-compat_3", + "flake-parts": "flake-parts_4", + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1782619847, + "narHash": "sha256-13XsPDHTG3vkNjagqQvFRG0zZK0yrDwfcU5ou/KtIFM=", + "owner": "fufexan", + "repo": "nix-gaming", + "rev": "55d03bdd91952ff6fd0b0779efe79da67323b6c5", + "type": "github" + }, + "original": { + "owner": "fufexan", + "repo": "nix-gaming", + "type": "github" + } + }, "nix-index-database": { "inputs": { "nixpkgs": [ @@ -1021,8 +1071,8 @@ }, "nixarr": { "inputs": { - "nixpkgs": "nixpkgs_7", - "treefmt-nix": "treefmt-nix_4", + "nixpkgs": "nixpkgs_9", + "treefmt-nix": "treefmt-nix_5", "vpnconfinement": "vpnconfinement", "website-builder": "website-builder" }, @@ -1042,7 +1092,7 @@ }, "nixos-hardware": { "inputs": { - "nixpkgs": "nixpkgs_8" + "nixpkgs": "nixpkgs_10" }, "locked": { "lastModified": 1780310866, @@ -1120,6 +1170,21 @@ "type": "github" } }, + "nixpkgs-lib_4": { + "locked": { + "lastModified": 1777168982, + "narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "nixpkgs-stable": { "locked": { "lastModified": 1779796641, @@ -1137,6 +1202,35 @@ } }, "nixpkgs_10": { + "locked": { + "lastModified": 1767892417, + "narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=", + "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", + "type": "tarball", + "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1780243769, + "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "331800de5053fcebacf6813adb5db9c9dca22a0c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { "locked": { "lastModified": 1778869304, "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", @@ -1152,7 +1246,7 @@ "type": "github" } }, - "nixpkgs_11": { + "nixpkgs_13": { "locked": { "lastModified": 1780749050, "narHash": "sha256-3av0pIjlOWQ6rDbNOmpUSvbNnJkGORQKKjb4LtCZsIY=", @@ -1168,7 +1262,7 @@ "type": "github" } }, - "nixpkgs_12": { + "nixpkgs_14": { "locked": { "lastModified": 1778869304, "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", @@ -1184,7 +1278,7 @@ "type": "github" } }, - "nixpkgs_13": { + "nixpkgs_15": { "locked": { "lastModified": 1775888245, "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=", @@ -1200,7 +1294,7 @@ "type": "github" } }, - "nixpkgs_14": { + "nixpkgs_16": { "locked": { "lastModified": 1780243769, "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", @@ -1297,6 +1391,38 @@ } }, "nixpkgs_7": { + "locked": { + "lastModified": 1781577229, + "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1782175435, + "narHash": "sha256-EMzXKmnOtBQ2MnvpiNOm7E+kOMvdPrIKaeg52Tip2Uk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "89570f24e97e614aa34aa9ab1c927b6578a43775", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { "locked": { "lastModified": 1775595990, "narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=", @@ -1312,39 +1438,10 @@ "type": "github" } }, - "nixpkgs_8": { - "locked": { - "lastModified": 1767892417, - "narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=", - "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", - "type": "tarball", - "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz" - }, - "original": { - "type": "tarball", - "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" - } - }, - "nixpkgs_9": { - "locked": { - "lastModified": 1780243769, - "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "331800de5053fcebacf6813adb5db9c9dca22a0c", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "notashelf-tuigreet": { "inputs": { "crane": "crane", - "nixpkgs": "nixpkgs_10", + "nixpkgs": "nixpkgs_12", "rust-overlay": "rust-overlay" }, "locked": { @@ -1388,7 +1485,7 @@ }, "nur-anotherhadi": { "inputs": { - "nixpkgs": "nixpkgs_11" + "nixpkgs": "nixpkgs_13" }, "locked": { "lastModified": 1781028989, @@ -1427,11 +1524,11 @@ }, "nvf": { "inputs": { - "flake-compat": "flake-compat_2", - "flake-parts": "flake-parts_4", + "flake-compat": "flake-compat_4", + "flake-parts": "flake-parts_5", "mnw": "mnw", "ndg": "ndg", - "nixpkgs": "nixpkgs_12", + "nixpkgs": "nixpkgs_14", "systems": "systems_5" }, "locked": { @@ -1471,64 +1568,21 @@ "type": "github" } }, - "quickshell": { - "inputs": { - "nixpkgs": [ - "caelestia-cli", - "caelestia-shell", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1779430452, - "narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=", - "ref": "refs/heads/master", - "rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00", - "revCount": 819, - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - }, - "original": { - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - } - }, - "quickshell_2": { - "inputs": { - "nixpkgs": [ - "caelestia-shell", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1779430452, - "narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=", - "ref": "refs/heads/master", - "rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00", - "revCount": 819, - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - }, - "original": { - "type": "git", - "url": "https://git.outfoxxed.me/outfoxxed/quickshell" - } - }, "root": { "inputs": { "awesome-wallpapers": "awesome-wallpapers", "blog": "blog", - "caelestia-cli": "caelestia-cli", - "caelestia-shell": "caelestia-shell_2", "default-creds": "default-creds", "helium-browser": "helium-browser", "home-manager": "home-manager", "hyprland": "hyprland", "iknowyou": "iknowyou", + "nix-citizen": "nix-citizen", + "nix-gaming": "nix-gaming", "nix-index-database": "nix-index-database", "nixarr": "nixarr", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs_11", "nixpkgs-stable": "nixpkgs-stable", "notashelf-tuigreet": "notashelf-tuigreet", "nur-anotherhadi": "nur-anotherhadi", @@ -1560,7 +1614,7 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_13" + "nixpkgs": "nixpkgs_15" }, "locked": { "lastModified": 1780547341, @@ -1583,9 +1637,9 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_6", "gnome-shell": "gnome-shell", - "nixpkgs": "nixpkgs_14", + "nixpkgs": "nixpkgs_16", "nur": "nur", "systems": "systems_6", "tinted-kitty": "tinted-kitty", @@ -1828,6 +1882,27 @@ } }, "treefmt-nix_4": { + "inputs": { + "nixpkgs": [ + "nix-citizen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1780220602, + "narHash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "db947814a175b7ca6ded66e21383d938df01c227", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_5": { "inputs": { "nixpkgs": [ "nixarr", diff --git a/flake.nix b/flake.nix index 03dec01..f694390 100644 --- a/flake.nix +++ b/flake.nix @@ -16,6 +16,9 @@ notashelf-tuigreet.url = "github:NotAShelf/tuigreet"; helium-browser.url = "github:oxcl/nix-flake-helium-browser"; nur-anotherhadi.url = "github:anotherhadi/nur-packages"; + nix-citizen.url = "github:LovingMelody/nix-citizen"; + nix-gaming.url = "github:fufexan/nix-gaming"; + nix-citizen.inputs.nix-gaming.follows = "nix-gaming"; nix-index-database = { url = "github:nix-community/nix-index-database"; @@ -25,14 +28,7 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - caelestia-shell = { - url = "github:caelestia-dots/shell"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - caelestia-cli = { - url = "github:caelestia-dots/cli"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + # Server nixarr.url = "github:rasmus-kirk/nixarr"; diff --git a/home/programs/group/basic-apps.nix b/home/programs/group/basic-apps.nix index b1e9dc0..fc65068 100644 --- a/home/programs/group/basic-apps.nix +++ b/home/programs/group/basic-apps.nix @@ -26,6 +26,9 @@ pkgs.wifitui # TUI for managing wifi pkgs-nur-hadi.usbguard-tui # TUI for managing USBGuard rules + blueman # Bluetooth manager (blueman-manager, blueman-adapters, blueman-sendto) + bluez # Bluetooth stack tools (bluetoothctl) + # I love CLIs httpie # Command-line HTTP client, a user-friendly cURL replacement diff --git a/home/programs/group/gaming-apps.nix b/home/programs/group/gaming-apps.nix new file mode 100644 index 0000000..5c9fb2d --- /dev/null +++ b/home/programs/group/gaming-apps.nix @@ -0,0 +1,45 @@ +{ + pkgs, + ... +}: { + home.packages = (with pkgs; [ + + # ───────────────────────────────────────────────────────────── + # Game launchers + # ───────────────────────────────────────────────────────────── + + lutris # Universal launcher for Wine, emulators, and native games + #prismlauncher # Minecraft launcher with Fabric/Forge/Quilt support + + # ───────────────────────────────────────────────────────────── + # Performance & overlays + # ───────────────────────────────────────────────────────────── + + mangohud # FPS and hardware monitoring overlay + goverlay # GUI for MangoHud and vkBasalt + gamescope # Micro-compositor for better fullscreen, scaling and frame limiting + gamemode # Requests performance optimizations while gaming + + # ───────────────────────────────────────────────────────────── + # Proton & Wine + # ───────────────────────────────────────────────────────────── + + protonup-qt # Install and update GE-Proton, Wine-GE, Luxtorpeda, etc. + winetricks # Install Windows runtimes into Wine prefixes + protontricks # Winetricks for Steam Proton prefixes + wineWow64Packages.staging # Wine (32/64-bit) with staging patches + + # ───────────────────────────────────────────────────────────── + # Vulkan layers + # ───────────────────────────────────────────────────────────── + vkbasalt # Vulkan post-processing (CAS sharpening, FXAA, etc.) + + # ───────────────────────────────────────────────────────────── + # Runner layers + # ───────────────────────────────────────────────────────────── + steam-run # Run generic Linux binaries inside Steam's runtime + appimage-run # Execute AppImages on NixOS + + + ]); +} diff --git a/home/programs/star-citizen/README.md b/home/programs/star-citizen/README.md new file mode 100644 index 0000000..01e08bc --- /dev/null +++ b/home/programs/star-citizen/README.md @@ -0,0 +1,110 @@ +# Star Citizen on Nixy + +This repo already includes Star Citizen support through `nix-citizen`. + +Relevant files: + +- `flake.nix` — declares the `nix-citizen` and `nix-gaming` inputs +- `home/programs/star-citizen/default.nix` — Home Manager module that installs the chosen Star Citizen package +- `home/programs/steam/system.nix` — Steam / gamescope / gamemode setup +- `home/programs/group/gaming-apps.nix` — extra gaming tools such as `lutris`, `mangohud`, `protonup-qt`, and `wine` + +## Recommended package + +For most setups, start with: + +- `rsi-launcher-umu` + +If you want the game package instead of just the launcher, try: + +- `star-citizen-umu` + +The `*-umu` variants are usually the safest choice on Nix-based gaming setups because they are designed around UMU/Proton style runtime handling. + +## How to enable it + +Your laptop and home-pc profiles already import the module: + +- `hosts/laptop/home.nix` +- `hosts/home-pc/home.nix` + +So you only need to turn it on in the relevant Home Manager config. + +Add or update: + +```nix +programs.star-citizen = { + enable = true; + package = "rsi-launcher-umu"; +}; +``` + +If you want the packaged game instead of the launcher, use: + +```nix +programs.star-citizen = { + enable = true; + package = "star-citizen-umu"; +}; +``` + +## Rebuild + +This flake exposes NixOS host outputs, so apply the change with your normal host rebuild command from the repo root: + +```bash +sudo nixos-rebuild switch --flake .#thinkpad +``` + +or: + +```bash +sudo nixos-rebuild switch --flake .#home-pc +``` + +If you’re building from one of the host directories directly, use the host-specific `nixos-rebuild` flow you already use in this repo. + +## First launch checklist + +Before launching the game, make sure: + +- `Steam` module is enabled +- `gamescope` and `gamemode` are available +- `protonup-qt` is installed so you can manage `GE-Proton` / `Wine-GE` +- you have enough disk space for the launcher and game files +- your GPU drivers are set up properly + +Useful tools already included in this repo: + +- `lutris` +- `mangohud` +- `goverlay` +- `gamescope` +- `gamemode` +- `protonup-qt` +- `winetricks` +- `protontricks` + +## Notes + +- Star Citizen is a Windows game, so the launcher/game still downloads its own data after installation. +- If the launcher starts but the game fails to launch, try switching the package to another `nix-citizen` option from `home/programs/star-citizen/default.nix`. +- If you want overlay/performance debugging, launch the game with `MANGOHUD=1` or use the included `mangohud` / `goverlay` tools. + +## Troubleshooting + +### Launcher doesn’t appear + +- Rebuild the Home Manager profile +- Check that `programs.star-citizen.enable = true;` +- Confirm the module is imported in the host profile you are using + +### Launcher opens but game fails + +- Try `rsi-launcher-umu` or `star-citizen-umu` +- Verify `protonup-qt` has a current `GE-Proton` +- Make sure `gamescope` / `gamemode` are enabled in your gaming setup + +### Need a clean reset + +If you want to switch package variants, change `programs.star-citizen.package` and rebuild again. The package selection is the only thing the module installs. diff --git a/home/programs/star-citizen/default.nix b/home/programs/star-citizen/default.nix new file mode 100644 index 0000000..0979d2a --- /dev/null +++ b/home/programs/star-citizen/default.nix @@ -0,0 +1,35 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + cfg = config.programs.star-citizen; + system = pkgs.stdenv.hostPlatform.system; +in { + options.programs.star-citizen = { + enable = lib.mkEnableOption "Star Citizen via nix-citizen"; + + package = lib.mkOption { + type = lib.types.enum [ + "rsi-launcher" + "rsi-launcher-git" + "rsi-launcher-umu" + "star-citizen" + "star-citizen-git" + "star-citizen-umu" + "lug-helper" + ]; + default = "rsi-launcher"; + description = "Package from nix-citizen to install when Star Citizen is enabled."; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ + inputs.nix-citizen.packages.${system}.${cfg.package} + ]; + }; +} diff --git a/home/programs/steam/default.nix b/home/programs/steam/default.nix index 06fe77b..8ec58d3 100644 --- a/home/programs/steam/default.nix +++ b/home/programs/steam/default.nix @@ -1,27 +1,8 @@ { - pkgs, ... }: { - home.packages = with pkgs; [ - steam - protonup-ng - ]; - - xdg.desktopEntries = { - Steam = { - name = "Steam"; - exec = "${pkgs.steam}/bin/steam"; - icon = "steam"; - type = "Application"; - categories = [ - "Game" - "Network" - ]; - terminal = false; - }; - }; - home.sessionVariables = { + # Better Steam scaling on HiDPI displays STEAM_FORCE_DESKTOPUI_SCALING = "1.25"; }; } diff --git a/home/programs/steam/system.nix b/home/programs/steam/system.nix index 6e0ab4a..e2da8b8 100644 --- a/home/programs/steam/system.nix +++ b/home/programs/steam/system.nix @@ -1,13 +1,27 @@ -{ ... }: { - # Steam runtime tweaks (user-session level, not NixOS system config) +{ + pkgs, + ... +}: { - home.sessionVariables = { - # Improves scaling consistency on HiDPI / Wayland setups - STEAM_FORCE_DESKTOPUI_SCALING = "1.25"; - - # Optional Proton-related behavior toggles (safe defaults) - PROTON_ENABLE_NVAPI = "1"; - PROTON_NO_ESYNC = "0"; - PROTON_NO_FSYNC = "0"; + hardware.graphics = { + enable = true; + enable32Bit = true; }; + + programs.steam = { + enable = true; + gamescopeSession.enable = true; + + remotePlay.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + + extraCompatPackages = with pkgs; [ + proton-ge-bin + ]; + }; + + programs.gamescope.enable = true; + programs.gamemode.enable = true; + + hardware.steam-hardware.enable = true; } diff --git a/home/system/hyprland/bindings.nix b/home/system/hyprland/bindings.nix index 526c782..574d490 100644 --- a/home/system/hyprland/bindings.nix +++ b/home/system/hyprland/bindings.nix @@ -2,29 +2,226 @@ pkgs, lib, config, + pkgs-nur-hadi, ... -}: let +}: +let colors = config.lib.stylix.colors; - mkMenu = menu: let - configFile = pkgs.writeText "config.yaml" ( - lib.generators.toYAML {} { - anchor = "bottom-right"; - border = "#${colors.base0D}80"; - background = "#${colors.base01}EE"; - color = "#${colors.base05}"; - margin_right = 15; - margin_bottom = 15; - rows_per_column = 5; + mkMenu = menu: + let + configFile = pkgs.writeText "config.yaml" ( + lib.generators.toYAML { } { + anchor = "bottom-right"; + border = "#${colors.base0D}80"; + background = "#${colors.base01}EE"; + color = "#${colors.base05}"; + margin_right = 15; + margin_bottom = 15; + rows_per_column = 5; - inherit menu; - } - ); - in + inherit menu; + } + ); + in pkgs.writeShellScriptBin "menu" '' exec ${lib.getExe pkgs.wlr-which-key} ${configFile} ''; -in { + + gui = exe: "uwsm app -- ${exe}"; + term = exe: "uwsm app -- ${pkgs.ghostty}/bin/ghostty -e ${exe}"; + + appsMenu = mkMenu [ + { + key = "f"; + desc = "Firefox"; + cmd = gui "${pkgs.firefox}/bin/firefox"; + } + { + key = "o"; + desc = "Obsidian"; + cmd = gui "${pkgs.obsidian}/bin/obsidian"; + } + { + key = "t"; + desc = "TickTick"; + cmd = gui "${pkgs.ticktick}/bin/ticktick"; + } + { + key = "n"; + desc = "OnlyOffice"; + cmd = gui "${pkgs.onlyoffice-desktopeditors}/bin/onlyoffice-desktopeditors"; + } + { + key = "v"; + desc = "Vesktop"; + cmd = gui "${pkgs.vesktop}/bin/vesktop"; + } + { + key = "l"; + desc = "VLC"; + cmd = gui "${pkgs.vlc}/bin/vlc"; + } + ]; + + devMenu = mkMenu [ + { + key = "z"; + desc = "Zed"; + cmd = gui "${pkgs.zed-editor}/bin/zed"; + } + { + key = "c"; + desc = "VSCodium"; + cmd = gui "${pkgs.vscodium}/bin/codium"; + } + { + key = "g"; + desc = "Ghostty"; + cmd = gui "${pkgs.ghostty}/bin/ghostty"; + } + { + key = "f"; + desc = "Fastfetch"; + cmd = term "${pkgs.fastfetch}/bin/fastfetch"; + } + { + key = "d"; + desc = "Dysk"; + cmd = term "${pkgs.dysk}/bin/dysk"; + } + { + key = "w"; + desc = "Wikiman"; + cmd = term "${pkgs.wikiman}/bin/wikiman"; + } + { + key = "s"; + desc = "STTR"; + cmd = term "${pkgs.sttr}/bin/sttr"; + } + ]; + + gamingMenu = mkMenu [ + { + key = "l"; + desc = "Lutris"; + cmd = gui "${pkgs.lutris}/bin/lutris"; + } + { + key = "p"; + desc = "ProtonUp-Qt"; + cmd = gui "${pkgs.protonup-qt}/bin/protonup-qt"; + } + { + key = "g"; + desc = "GOverlay"; + cmd = gui "${pkgs.goverlay}/bin/goverlay"; + } + ]; + + utilityMenu = mkMenu [ + { + key = "B"; + desc = "Blueman"; + cmd = gui "${pkgs.blueman}/bin/blueman-manager"; + } + { + key = "x"; + desc = "Bluetoothctl"; + cmd = term "${pkgs.bluez}/bin/bluetoothctl"; + } + { + key = "w"; + desc = "WiFi TUI"; + cmd = term "${pkgs.wifitui}/bin/wifitui"; + } + { + key = "m"; + desc = "Wiremix"; + cmd = term "${pkgs.wiremix}/bin/wiremix"; + } + { + key = "u"; + desc = "USBGuard TUI"; + cmd = term "${pkgs-nur-hadi.usbguard-tui}/bin/usbguard-tui"; + } + { + key = "c"; + desc = "Caligula"; + cmd = term "${pkgs.caligula}/bin/caligula"; + } + { + key = "h"; + desc = "Browsh"; + cmd = term "${pkgs.browsh}/bin/browsh"; + } + { + key = "p"; + desc = "Peaclock"; + cmd = term "${pkgs.peaclock}/bin/peaclock"; + } + { + key = "o"; + desc = "Cbonsai"; + cmd = term "${pkgs.cbonsai}/bin/cbonsai"; + } + { + key = "i"; + desc = "Pipes"; + cmd = term "${pkgs.pipes}/bin/pipes"; + } + { + key = "t"; + desc = "Tealdeer"; + cmd = term "${pkgs.tealdeer}/bin/tldr"; + } + { + key = "s"; + desc = "Hyprlock"; + cmd = gui "${pkgs.hyprlock}/bin/hyprlock"; + } + ]; + + systemMenu = mkMenu [ + { + key = "l"; + desc = "Lock"; + cmd = "hyprlock"; + } + { + key = "w"; + desc = "Restart Waybar"; + cmd = "pkill -x waybar; waybar"; + } + { + key = "r"; + desc = "Restart Walker"; + cmd = "systemctl --user restart walker.service"; + } + { + key = "e"; + desc = "Restart Elephant"; + cmd = "systemctl --user restart elephant.service"; + } + { + key = "s"; + desc = "Suspend"; + cmd = "systemctl suspend"; + } + { + key = "p"; + desc = "Power Off"; + cmd = "systemctl poweroff"; + } + { + key = "b"; + desc = "Reboot"; + cmd = "systemctl reboot"; + } + ]; +in +{ wayland.windowManager.hyprland.settings = { "$mod" = "SUPER"; "$shiftMod" = "SUPER_SHIFT"; @@ -37,53 +234,28 @@ in { + lib.getExe (mkMenu [ { key = "a"; - desc = "Proton Authenticator"; - cmd = "env WEBKIT_DISABLE_COMPOSITING_MODE=1 ${pkgs.proton-authenticator}/bin/proton-authenticator"; + desc = "Apps"; + cmd = lib.getExe appsMenu; } { - key = "p"; - desc = "Proton Pass"; - cmd = "${pkgs.proton-pass}/bin/proton-pass"; + key = "d"; + desc = "Dev"; + cmd = lib.getExe devMenu; } { - key = "v"; - desc = "Proton VPN"; - cmd = "${pkgs.proton-vpn}/bin/protonvpn-app"; + key = "g"; + desc = "Gaming"; + cmd = lib.getExe gamingMenu; } { - key = "c"; - desc = "Proton Calendar"; - cmd = "${config.programs.librewolf.package}/bin/helium 'https://calendar.proton.me/'"; - } - { - key = "m"; - desc = "Proton Mail"; - cmd = "${config.programs.librewolf.package}/bin/helium 'https://mail.proton.me/'"; - } - { - key = "o"; - desc = "Obsidian"; - cmd = "${pkgs.obsidian}/bin/obsidian"; + key = "u"; + desc = "Utilities"; + cmd = lib.getExe utilityMenu; } { key = "s"; - desc = "Signal"; - cmd = "${pkgs.signal-desktop}/bin/signal-desktop"; - } - { - key = "t"; - desc = "TickTick"; - cmd = "${pkgs.ticktick}/bin/ticktick"; - } - { - key = "b"; - desc = "Helium"; - cmd = "${config.programs.librewolf.package}/bin/helium"; - } - { - key = "i"; - desc = "Helium (Incognito)"; - cmd = "${config.programs.librewolf.package}/bin/helium --incognito"; + desc = "System"; + cmd = lib.getExe systemMenu; } ]) ) @@ -91,14 +263,13 @@ in { "$mod,B, exec, uwsm app -- ${config.programs.librewolf.package}/bin/helium" # Browser # Power - "$mod, X, global, caelestia:session" # Powermenu ( - "$shiftMod, X, exec, " + "$mod, X, exec, " + lib.getExe (mkMenu [ { key = "l"; desc = "Lock"; - cmd = "hyprctl dispatch global caelestia:lock"; + cmd = "hyprlock"; } { key = "s"; @@ -122,8 +293,8 @@ in { } { key = "c"; - desc = "Restart caelestia"; - cmd = "hyprctl dispatch exec 'caelestia-shell kill | sleep 1 | caelestia-shell'"; + desc = "Restart Waybar"; + cmd = "pkill -x waybar; waybar"; } ]) ) @@ -131,10 +302,9 @@ in { # Quick launch "$mod,RETURN, exec, uwsm app -- ${pkgs.ghostty}/bin/ghostty" # Ghostty (terminal) "$mod,E, exec, uwsm app -- ${pkgs.thunar}/bin/thunar" # Thunar - "$shiftMod, E, exec, pkill fuzzel || caelestia emoji -p" # Emoji picker - "$mod, SPACE, global, caelestia:launcher" # Launcher - "$mod, N, exec, caelestia shell drawers toggle sidebar" # Sidebar (Notifications, quick actions) - "$mod, D, exec, caelestia shell drawers toggle dashboard" # Dashboard + "$mod, SPACE, exec, walker" # Launcher + "$mod, N, exec, ${lib.getExe pkgs.grimblast} save area" # Save screenshot + "$mod, D, exec, ${lib.getExe pkgs.grimblast} copy area" # Copy screenshot # Windows "$mod,Q, killactive," # Close window @@ -152,10 +322,9 @@ in { "$shiftMod,L, focusmonitor, 1" # Focus next monitor # Utilities - "$shiftMod, SPACE, exec, caelestia shell gameMode toggle" # Toggle Focus/Game mode - "$shiftMod, S, global, caelestia:screenshotFreeze" # Capture region (freeze) - ", Print, global, caelestia:screenshotFreeze" # Capture region (freeze) - "$shiftMod+Alt, S, global, caelestia:screenshot" # Capture region + "$shiftMod, S, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region + ", Print, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region + "$shiftMod+Alt, S, exec, ${lib.getExe pkgs.grimblast} save area" # Capture region ] ++ (builtins.concatLists ( builtins.genList ( @@ -176,32 +345,20 @@ in { bindl = [ # Brightness - ", XF86MonBrightnessUp, global, caelestia:brightnessUp" - ", XF86MonBrightnessDown, global, caelestia:brightnessDown" + ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set 5%+" + ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%-" # Media - ", XF86AudioPlay, global, caelestia:mediaToggle" - ", XF86AudioPause, global, caelestia:mediaToggle" - ", XF86AudioNext, global, caelestia:mediaNext" - ", XF86AudioPrev, global, caelestia:mediaPrev" - ", XF86AudioStop, global, caelestia:mediaStop" + ", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause" + ", XF86AudioPause, exec, ${lib.getExe pkgs.playerctl} play-pause" + ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next" + ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous" + ", XF86AudioStop, exec, ${lib.getExe pkgs.playerctl} stop" # Sound ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" ", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" ]; - - bindin = [ - # Launcher - "$mod, mouse:272, global, caelestia:launcherInterrupt" - "$mod, mouse:273, global, caelestia:launcherInterrupt" - "$mod, mouse:274, global, caelestia:launcherInterrupt" - "$mod, mouse:275, global, caelestia:launcherInterrupt" - "$mod, mouse:276, global, caelestia:launcherInterrupt" - "$mod, mouse:277, global, caelestia:launcherInterrupt" - "$mod, mouse_up, global, caelestia:launcherInterrupt" - "$mod, mouse_down, global, caelestia:launcherInterrupt" - ]; }; } diff --git a/home/system/hyprland/default.nix b/home/system/hyprland/default.nix index aa158bb..7e9f18b 100644 --- a/home/system/hyprland/default.nix +++ b/home/system/hyprland/default.nix @@ -19,6 +19,7 @@ in { ./animations.nix ./bindings.nix ./polkitagent.nix + ./hyprlock.nix ./keyboard-backlight.nix # CHANGEME: This is for omen laptop only ]; @@ -31,6 +32,7 @@ in { libxcb hyprland-qtutils adw-gtk3 + hyprlock hyprshot hyprpicker swappy diff --git a/home/system/hyprland/hyprlock.nix b/home/system/hyprland/hyprlock.nix new file mode 100644 index 0000000..bc80b2a --- /dev/null +++ b/home/system/hyprland/hyprlock.nix @@ -0,0 +1,58 @@ +{config, ...}: let + c = config.lib.stylix.colors; + fontSans = config.stylix.fonts.sansSerif.name; +in { + xdg.configFile."hypr/hyprlock.conf".text = '' + general { + hide_cursor = true + grace = 0 + } + + background { + monitor = + color = rgba(${c."base00-rgb-r"}, ${c."base00-rgb-g"}, ${c."base00-rgb-b"}, 0.90) + blur_passes = 2 + blur_size = 8 + noise = 0.01 + } + + label { + monitor = + text = cmd[update:1000] date +"%A, %d %B %Y" + color = rgba(${c."base05-rgb-r"}, ${c."base05-rgb-g"}, ${c."base05-rgb-b"}, 1.0) + font_size = 30 + font_family = "${fontSans}" + position = 0, 140 + halign = center + valign = center + } + + label { + monitor = + text = cmd[update:1000] date +"%H:%M" + color = rgba(${c."base0D-rgb-r"}, ${c."base0D-rgb-g"}, ${c."base0D-rgb-b"}, 1.0) + font_size = 54 + font_family = "${fontSans}" + position = 0, 60 + halign = center + valign = center + } + + input-field { + monitor = + size = 320, 52 + outline_thickness = 2 + outer_color = rgba(${c."base03-rgb-r"}, ${c."base03-rgb-g"}, ${c."base03-rgb-b"}, 0.60) + inner_color = rgba(${c."base01-rgb-r"}, ${c."base01-rgb-g"}, ${c."base01-rgb-b"}, 0.92) + font_color = rgba(${c."base05-rgb-r"}, ${c."base05-rgb-g"}, ${c."base05-rgb-b"}, 1.0) + fail_color = rgba(${c."base08-rgb-r"}, ${c."base08-rgb-g"}, ${c."base08-rgb-b"}, 1.0) + check_color = rgba(${c."base0B-rgb-r"}, ${c."base0B-rgb-g"}, ${c."base0B-rgb-b"}, 1.0) + dots_spacing = 0.3 + dots_center = true + hide_input = false + position = 0, -20 + halign = center + valign = center + } + ''; +} diff --git a/home/system/walker/default.nix b/home/system/walker/default.nix new file mode 100644 index 0000000..78284ef --- /dev/null +++ b/home/system/walker/default.nix @@ -0,0 +1,42 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + walker + elephant + ]; + + systemd.user.services.elephant = { + Unit = { + Description = "Elephant backend service"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + }; + + Service = { + ExecStart = "${pkgs.elephant}/bin/elephant"; + Restart = "on-failure"; + RestartSec = 5; + }; + }; + + systemd.user.services.walker = { + Unit = { + Description = "Walker application service"; + PartOf = [ "graphical-session.target" ]; + After = [ "elephant.service" "graphical-session.target" ]; + Requires = [ "elephant.service" ]; + }; + + Service = { + ExecStart = "${pkgs.walker}/bin/walker --gapplication-service"; + Restart = "on-failure"; + RestartSec = 5; + }; + }; + + wayland.windowManager.hyprland.settings.exec-once = [ + "dbus-update-activation-environment --systemd --all" + "systemctl --user start elephant.service walker.service" + ]; +} diff --git a/home/system/waybar/default.nix b/home/system/waybar/default.nix new file mode 100644 index 0000000..f168144 --- /dev/null +++ b/home/system/waybar/default.nix @@ -0,0 +1,277 @@ +{ pkgs, config, lib, ... }: + +let + colors = config.lib.stylix.colors; + rgb = base: + "${colors."${base}-rgb-r"}, ${colors."${base}-rgb-g"}, ${colors."${base}-rgb-b"}"; + terminal = cmd: "uwsm app -- ${lib.getExe pkgs.ghostty} -e ${cmd}"; + + radius = toString config.theme.bar-rounding; +in +{ + home.packages = with pkgs; [ + waybar + ]; + + xdg.configFile."waybar/config".text = builtins.toJSON { + layer = "top"; + position = "top"; + height = 38; + + spacing = 10; + + "margin-top" = 8; + "margin-left" = 8; + "margin-right" = 8; + + "gtk-layer-shell" = true; + "reload_style_on_change" = true; + + "modules-left" = [ + "hyprland/workspaces" + "tray" + ]; + + "modules-center" = [ + "hyprland/window" + ]; + + "modules-right" = [ + "custom/bluetooth" + "network" + "battery" + "pulseaudio" + "clock" + ]; + + "hyprland/workspaces" = { + format = "{name}"; + "disable-scroll" = true; + "all-outputs" = true; + "on-click" = "activate"; + + "persistent-workspaces" = { + "*" = 5; + }; + }; + + "hyprland/window" = { + format = "{}"; + "max-length" = 70; + "separate-outputs" = true; + }; + + tray = { + spacing = 8; + "icon-size" = 20; + }; + + network = { + interval = 2; + + "format-wifi" = "󰖩 {signalStrength}%"; + "format-ethernet" = "󰈀 {ifname}"; + "format-linked" = "󰈀 {ifname}"; + "format-disconnected" = "󰖪"; + + "tooltip-format" = "{essid}\n{ipaddr}"; + "on-click" = terminal "wifitui"; + }; + + battery = { + interval = 30; + states = { + warning = 30; + critical = 15; + }; + + format = "󰁹 {capacity}%"; + "format-charging" = "󰂄 {capacity}%"; + "format-plugged" = "󰂄 {capacity}%"; + "format-full" = "󰁹 {capacity}%"; + "tooltip-format" = "Battery {capacity}%\n{timeTo} remaining"; + }; + + "custom/bluetooth" = { + exec = "echo 󰂯"; + interval = 3600; + tooltip = false; + "on-click" = "uwsm app -- blueman-manager"; + }; + + pulseaudio = { + "scroll-step" = 5; + + format = "󰕾 {volume}%"; + "format-muted" = "󰖁"; + + tooltip = true; + "on-click" = terminal "wiremix"; + }; + + clock = { + interval = 1; + + format = "󰥔 {:%H:%M}"; + "tooltip-format" = "{:%A, %d %B %Y}"; + }; + }; + + xdg.configFile."waybar/style.css".text = '' + * { + border: none; + min-height: 0; + + font-family: + "${config.stylix.fonts.sansSerif.name}", + "${config.stylix.fonts.monospace.name}", + sans-serif; + + font-size: 13px; + } + + window#waybar { + background: transparent; + color: #${colors.base05}; + } + + .modules-left, + .modules-center, + .modules-right { + margin: 6px 0; + } + + #workspaces, + #window, + #tray, + #custom-bluetooth, + #network, + #battery, + #pulseaudio, + #clock { + background: rgba(${rgb "base01"}, 0.76); + + border: 1px solid rgba(${rgb "base03"}, 0.45); + + border-radius: ${radius}px; + + padding: 0 14px; + margin: 6px 4px; + + transition: + background-color 180ms ease, + border-color 180ms ease, + color 180ms ease; + } + + #workspaces { + padding: 4px; + } + + #workspaces button { + background: transparent; + color: #${colors.base04}; + + padding: 0 12px; + margin: 0 2px; + + border-radius: ${radius}px; + + transition: all 180ms ease; + } + + #workspaces button:hover { + background: rgba(${rgb "base02"}, 0.70); + color: #${colors.base05}; + } + + #workspaces button.active { + background: #${colors.base0D}; + color: #${colors.base00}; + } + + #workspaces button.urgent { + background: #${colors.base08}; + color: #${colors.base00}; + } + + #window { + min-width: 260px; + + padding-left: 18px; + padding-right: 18px; + + color: #${colors.base05}; + } + + #window.empty { + background: transparent; + border: none; + } + + #tray { + padding-left: 10px; + padding-right: 10px; + } + + #custom-bluetooth { + color: #${colors.base0E}; + } + + #network { + color: #${colors.base0C}; + } + + #network.disconnected { + color: #${colors.base08}; + } + + #battery { + color: #${colors.base0A}; + } + + #battery.charging, + #battery.plugged { + color: #${colors.base0B}; + } + + #battery.warning { + color: #${colors.base0A}; + } + + #battery.critical { + color: #${colors.base08}; + } + + #pulseaudio { + color: #${colors.base0B}; + } + + #pulseaudio.muted { + color: #${colors.base08}; + } + + #clock { + color: #${colors.base0D}; + font-weight: 600; + } + + tooltip { + background: rgba(${rgb "base00"}, 0.90); + + border: 1px solid rgba(${rgb "base03"}, 0.70); + + border-radius: ${radius}px; + } + + tooltip label { + color: #${colors.base05}; + } + ''; + + wayland.windowManager.hyprland.settings = { + exec-once = [ + "waybar" + ]; + }; +} diff --git a/hosts/home-pc/configuration.nix b/hosts/home-pc/configuration.nix index 8ac5152..0c4513d 100644 --- a/hosts/home-pc/configuration.nix +++ b/hosts/home-pc/configuration.nix @@ -1,6 +1,8 @@ {config, ...}: { imports = [ - # Mostly system related configuration + # ───────────────────────────────────────────────────────────── + # System configuration + # ───────────────────────────────────────────────────────────── ../../nixos/audio.nix ../../nixos/bluetooth.nix ../../nixos/fonts.nix @@ -13,8 +15,14 @@ ../../nixos/utils.nix ../../nixos/hyprland.nix + # ───────────────────────────────────────────────────────────── + # Graphics Card + # ───────────────────────────────────────────────────────────── ../../nixos/amd-graphics.nix + # ───────────────────────────────────────────────────────────── + # System integration for Steam + # ───────────────────────────────────────────────────────────── ../../nixos/steam.nix # You should let those lines as is diff --git a/hosts/home-pc/flake.nix b/hosts/home-pc/flake.nix index 963a5c2..28da1a5 100644 --- a/hosts/home-pc/flake.nix +++ b/hosts/home-pc/flake.nix @@ -3,16 +3,35 @@ nixpkgs, ... }: + nixpkgs.lib.nixosSystem { modules = [ { nixpkgs.overlays = []; - _module.args = {inherit inputs;}; + _module.args = { + inherit inputs; + }; } + + ({ config, pkgs, lib, ... }: { + # ───────────────────────────────────────────────────────────── + # AMD Microcode + # ───────────────────────────────────────────────────────────── + hardware.cpu.amd.updateMicrocode = true; + + # ───────────────────────────────────────────────────────────── + # Hardware accelaration + # ───────────────────────────────────────────────────────────── + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + }) + inputs.home-manager.nixosModules.home-manager inputs.stylix.nixosModules.stylix inputs.nix-index-database.nixosModules.default - inputs.helium-browser.nixosModules.default + ./configuration.nix ]; } diff --git a/hosts/home-pc/home.nix b/hosts/home-pc/home.nix index 0f68e87..ddd2b25 100644 --- a/hosts/home-pc/home.nix +++ b/hosts/home-pc/home.nix @@ -1,6 +1,8 @@ {config, ...}: { imports = [ + # ───────────────────────────────────────────────────────────── # Programs + # ───────────────────────────────────────────────────────────── ../../home/programs/ghostty ../../home/programs/nvf ../../home/programs/shell @@ -12,21 +14,32 @@ ../../home/programs/nix-utils ../../home/programs/spotatui ../../home/programs/yazi - ../../home/programs/steam + # ───────────────────────────────────────────────────────────── + # Gaming + # ───────────────────────────────────────────────────────────── + ../../home/programs/steam + ../../home/programs/star-citizen + + # ───────────────────────────────────────────────────────────── + # Groups + # ───────────────────────────────────────────────────────────── ../../home/programs/group/basic-apps.nix ../../home/programs/group/dev.nix ../../home/programs/group/misc.nix + ../../home/programs/group/gaming-apps.nix - # System (Desktop environment like stuff) + # ───────────────────────────────────────────────────────────── + # System + # ───────────────────────────────────────────────────────────── ../../home/system/hyprland - ../../home/system/caelestia-shell + ../../home/system/waybar + ../../home/system/walker ../../home/system/hyprpaper ../../home/system/mime ../../home/system/udiskie ./variables.nix # Mostly user-specific configuration - #./secrets # CHANGEME: You should probably remove this line, this is where I store my secrets ]; home = { @@ -47,6 +60,10 @@ programs = { home-manager.enable = true; + star-citizen = { + enable = true; + package = "rsi-launcher-umu"; + }; nixy = { enable = true; configDirectory = config.var.configDirectory; diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix index b7e5f18..cb5a9d0 100644 --- a/hosts/laptop/configuration.nix +++ b/hosts/laptop/configuration.nix @@ -1,29 +1,32 @@ -{ config, ... }: +{ config, ... }: { + imports = [ + # ───────────────────────────────────────────────────────────── + # System configuration + # ───────────────────────────────────────────────────────────── + ../../nixos/audio.nix + ../../nixos/bluetooth.nix + ../../nixos/fonts.nix + ../../nixos/home-manager.nix + ../../nixos/nix.nix + ../../nixos/systemd-boot.nix + ../../nixos/tuigreet.nix + ../../nixos/users.nix + ../../nixos/utils.nix + ../../nixos/hyprland.nix -{ -imports = [ -# System configuration -../../nixos/audio.nix -../../nixos/bluetooth.nix -../../nixos/fonts.nix -../../nixos/home-manager.nix -../../nixos/nix.nix -../../nixos/systemd-boot.nix -../../nixos/tuigreet.nix -../../nixos/users.nix -../../nixos/utils.nix -../../nixos/hyprland.nix + # ───────────────────────────────────────────────────────────── + # System integration for Steam + # ───────────────────────────────────────────────────────────── + ../../nixos/steam.nix -../../nixos/steam.nix + # You should let those lines as is + ./hardware-configuration.nix + ./variables.nix -# Machine-specific files -./hardware-configuration.nix -./variables.nix + ]; -]; - -home-manager.users."${config.var.username}" = import ./home.nix; -services.flatpak.enable = true; - -system.stateVersion = "24.05"; + home-manager.users."${config.var.username}" = import ./home.nix; + services.flatpak.enable = true; + # Don't touch this + system.stateVersion = "24.05"; } diff --git a/hosts/laptop/flake.nix b/hosts/laptop/flake.nix index 1e74f53..272f7d4 100644 --- a/hosts/laptop/flake.nix +++ b/hosts/laptop/flake.nix @@ -14,21 +14,29 @@ nixpkgs.lib.nixosSystem { } ({ config, pkgs, lib, ... }: { - # Intel microcode + # ───────────────────────────────────────────────────────────── + # Intel Microcode + # ───────────────────────────────────────────────────────────── hardware.cpu.intel.updateMicrocode = true; - # Graphics support + # ───────────────────────────────────────────────────────────── + # Hardware accelaration + # ───────────────────────────────────────────────────────────── hardware.graphics = { enable = true; enable32Bit = true; }; - # Power management + # ───────────────────────────────────────────────────────────── + # Power management + # ───────────────────────────────────────────────────────────── powerManagement.cpuFreqGovernor = "powersave"; services.tlp.enable = true; services.power-profiles-daemon.enable = false; - # Kernel modules commonly needed on ThinkPads + # ───────────────────────────────────────────────────────────── + # Kernel modules commonly needed on ThinkPads + # ───────────────────────────────────────────────────────────── boot.kernelModules = [ "i915" "snd_hda_intel" @@ -39,7 +47,6 @@ nixpkgs.lib.nixosSystem { inputs.home-manager.nixosModules.home-manager inputs.stylix.nixosModules.stylix inputs.nix-index-database.nixosModules.default - inputs.helium-browser.nixosModules.default ./configuration.nix ]; diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index 7b53a2b..32d3403 100644 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -1,6 +1,8 @@ {config, ...}: { imports = [ + # ───────────────────────────────────────────────────────────── # Programs + # ───────────────────────────────────────────────────────────── ../../home/programs/ghostty ../../home/programs/nvf ../../home/programs/shell @@ -12,15 +14,26 @@ ../../home/programs/nix-utils ../../home/programs/spotatui ../../home/programs/yazi + + # ───────────────────────────────────────────────────────────── + # Gaming + # ───────────────────────────────────────────────────────────── ../../home/programs/steam + # ───────────────────────────────────────────────────────────── + # Groups + # ───────────────────────────────────────────────────────────── ../../home/programs/group/basic-apps.nix ../../home/programs/group/dev.nix ../../home/programs/group/misc.nix + ../../home/programs/group/gaming-apps.nix - # System (Desktop environment like stuff) + # ───────────────────────────────────────────────────────────── + # System + # ───────────────────────────────────────────────────────────── ../../home/system/hyprland - ../../home/system/caelestia-shell + ../../home/system/waybar + ../../home/system/walker ../../home/system/hyprpaper ../../home/system/mime ../../home/system/udiskie diff --git a/hosts/work/home.nix b/hosts/work/home.nix index a64d1a9..3f7887d 100644 --- a/hosts/work/home.nix +++ b/hosts/work/home.nix @@ -22,7 +22,8 @@ # System (Desktop environment like stuff) ../../home/system/hyprland - ../../home/system/caelestia-shell + ../../home/system/waybar + ../../home/system/walker ../../home/system/hyprpaper ../../home/system/mime ../../home/system/udiskie diff --git a/nixos/nix.nix b/nixos/nix.nix index 5ee8294..11c24a9 100644 --- a/nixos/nix.nix +++ b/nixos/nix.nix @@ -44,11 +44,13 @@ in { "https://cache.nixos.org?priority=10" "https://hyprland.cachix.org" + "https://nix-citizen.cachix.org" "https://nix-community.cachix.org" "https://numtide.cachix.org" ]; trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "nix-citizen.cachix.org-1:lPMkWc2X8XD4/7YPEEwXKKBg+SVbYTVrAaLA2wQTKCo=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE=" ];