diff --git a/.sops.yaml b/.sops.yaml index bc47ed3..4f904da 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -3,28 +3,12 @@ keys: - &tux age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - &hosts - - &sirius age1f860dfewlx5jtt9ejr47gywx70p3dmyc8mat29gpr75psljwjv8q5xyxkq + - &sirius age1maxsx5tq2h3d92rfyl8ekcdan5gu5cpch4qs3c56cu7qag02xgvs3h0gqc - &canopus age1x36yr8h993srfj29sfpzt4wyz52nztvncpmhgmfs0j26qvfecq3qvcm0an - - &homelab age1jg642q775gmnmxeu29gcf3lph8vem4xr8t84cxe809dpd0myrussh49h60 - - &arcturus age1zsl5d4vj6gl3h96y5p53sq5y4vr4vtlwp727h7rp9a4xfkxm53lqrh6r50 - - &alpha age1zujp5gxy7suv8ysnygv43cmzuvv36nxfg0ch7r3xg2emc6fz3vmqqujheq - - &vega age1ydkclhk9kwqdq74utesqdfupt43lz64d5k65gz2z9uyljcqq9fcq3hv28l - - &node age1put942dyhly8nk9c8n0h8tq0x6xplrg3uw5q0d2jmvwez3zq79qsapl7he - - &capella age1y4luzn2jls7rvgphej23srvdlx563lxq29tvf66vhwwzaf7c3f3qzvresh + - &arcturus age1huqa3hc7wcxk4dpelrzny437nzrx4fnll3d8g9ahznzk268yju5qufapxy + - &alpha age1mzxxxzhy3us3rd960ufqv7vlxj5cnug86md6x69llg9ujzw2pqws057llf creation_rules: - - path_regex: hosts/common/secrets.yaml$ - key_groups: - - age: - - *tux - - *sirius - - *canopus - - *homelab - - *arcturus - - *alpha - - *vega - - *node - - *capella - path_regex: hosts/sirius/secrets.yaml$ key_groups: - age: @@ -45,13 +29,3 @@ creation_rules: - age: - *tux - *alpha - - path_regex: hosts/capella/secrets.yaml$ - key_groups: - - age: - - *tux - - *capella - - path_regex: hosts/homelab/secrets.yaml$ - key_groups: - - age: - - *tux - - *homelab diff --git a/README.md b/README.md index a560371..180bc9d 100644 --- a/README.md +++ b/README.md @@ -15,196 +15,48 @@ ## Table of Contents - [Hosts](#hosts) -- [Installation](#installation) - [Components](#components) - [Showcase](#showcase) - [Pain](#spent-weeks-on-this-system-configuration-) ## Hosts -| | Hostname | Board | CPU | RAM | GPU | Purpose | -| --- | ---------- | ----------------- | ------------------ | ----- | ------------------------- | -------------------------------------------------------------------------------- | -| 🖥️ | `sirius` | MSI X570-A Pro | Ryzen 7 5700X3D | 64GB | RTX 3080 TI + RTX 3060 TI | Triple-monitor desktop running Windows Subsystem for Linux. | -| 💻 | `canopus` | Asus Zephyrus G15 | Ryzen 9 5900HS | 16GB | RTX 3060 | Optimized for productivity on the go and some gaming. | -| ☁️ | `homelab` | Minisforum MS-A1 | Ryzen 7 8700G | 32GB | Radeon 780M | WIP | -| ☁️ | `arcturus` | KVM | 4 Core | 8GB | | Primary server responsible for exposing my homelab applications to the internet. | -| ☁️ | `alpha` | KVM | 4 Core | 4GB | | Monitors uptime and health status of all services across the infrastructure. | -| 🥔 | `vega` | Raspberry Pi 3B+ | Cortex A53 | 1GB | | Running AdGuard Home for network-wide ad blocking. | -| 📱 | `capella` | Samsung S25 Ultra | Snapdragon 8 Elite | 12GB | Adreno 830 | Primary mobile for daily usage. (Locked) | -| 📱 | `rigel` | Motorola Edge 30 | Snapdragon 778G+ | 8GB | Adreno 642L | Secondary mobile for some fun. (Rooted) | -| ☁️ | `node` | ASRock B565D4 | Ryzen 9 5950X | 128GB | | Running Ethereum and BSC nodes. | - -## Installation - -> [!NOTE] -> This will get your base system ready, but keep in mind that many things might not work correctly — such as monitor resolution, font size, and more. - -### Prerequisites - -Boot into the NixOS bootable USB before proceeding with the installation steps. - -### Installation Steps - -#### 1. Clone the repository - -```bash -git clone https://github.com/tuxdotrs/nix-config.git -cd nix-config -``` - -#### 2. Gain root privileges - -```bash -sudo su - -``` - -#### 3. Set up disk partitioning - -Install the required tools: - -```bash -nix-shell -p disko neovim -``` - -Partition your disk using disko. **This will wipe your drive.** Replace `DISK_PATH` with your actual disk path (e.g., `/dev/vda` or `/dev/nvme0n1`): - -```bash -disko --mode disko ./hosts/canopus/disko.nix --arg device '"DISK_PATH"' -``` - -#### 4. Configure your disk - -Edit the configuration file: - -```bash -nvim ./hosts/canopus/default.nix -``` - -In the imports statement, replace: - -```nix -(import ./disko.nix {device = "/dev/nvme0n1";}) -``` - -with: - -```nix -(import ./disko.nix {device = "DISK_PATH";}) -``` - -Make sure to replace `DISK_PATH` with your actual disk path. - -#### 5. Generate hardware configuration - -```bash -nixos-generate-config --no-filesystems --root /mnt -``` - -Copy the generated hardware configuration to the repository: - -```bash -cp /mnt/etc/nixos/hardware-configuration.nix ./hosts/canopus/hardware.nix -``` - -#### 6. Install NixOS - -```bash -nixos-install --root /mnt --flake .#canopus -``` - -#### 7. Enter into the new system - -```bash -nixos-enter --root /mnt -``` - -#### 8. Set up directories and permissions - -```bash -mkdir -p /persist/home -chown -R tux:users /persist/home -``` - -#### 9. Set passwords - -Set the root password: - -```bash -passwd root -``` - -Set the user password: - -```bash -passwd tux -``` - -#### 10. Reboot - -```bash -reboot -``` - -Your NixOS system should now boot into a beautiful DE. +| | Hostname | Board | CPU | RAM | GPU | Purpose | +| --- | ---------- | ----------------- | ------------------ | ---- | ------------------------- | --------------------------------------------------------------------- | +| 🖥️ | `sirius` | MSI X570-A Pro | Ryzen 7 5700X3D | 64GB | RTX 3080 TI + RTX 3060 TI | Triple-monitor desktop for work, gaming, and media consumption. | +| 💻 | `canopus` | Asus Zephyrus G15 | Ryzen 9 5900HS | 16GB | RTX 3060 | Portable workstation for work, gaming, and media on the go. | +| ☁️ | `arcturus` | Minisforum MS-A1 | Ryzen 7 8700G | 32GB | Radeon 780M | Homelab server for self-hosted services and infrastructure workloads. | +| ☁️ | `alpha` | KVM | 2 Core | 4GB | | Public-facing server for exposing homelab services to the internet. | +| 📱 | `vega` | Samsung S25 Ultra | Snapdragon 8 Elite | 12GB | Adreno 830 | Primary mobile for daily usage. (Locked) | +| 📱 | `capella` | Motorola Edge 30 | Snapdragon 778G+ | 8GB | Adreno 642L | Secondary mobile for tinkering and experimentation. (Rooted) | ## Components -| | Wayland | Xorg | -| ------------- | -------- | ---------------- | -| DM | ly | ly | -| WM/DE | Hyprland | AwesomeWM | -| Compositor | Hyprland | Picom (Jonaburg) | -| Bar | tPanel | Wibar | -| Hotkeys | Hyprland | Awful | -| Launcher | tPanel | Rofi | -| Notifications | tPanel | Naughty | -| Terminal | Wezterm | Wezterm | -| Editor | Neovim | Neovim | +| | Wayland | Xorg | +| ------------- | -------- | ---- | +| DM | ly | - | +| WM/DE | Hyprland | - | +| Compositor | Hyprland | - | +| Bar | Tshell | - | +| Hotkeys | Hyprland | - | +| Launcher | Tshell | - | +| Notifications | Tshell | - | +| Terminal | Wezterm | - | +| Editor | Neovim | - | ## Showcase -### Desktop Hyprland +| **Desktop** | **Tshell** | +| --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| | | +| **Workflow** | **Neovim** | +| | | +| **Floating Terminal** | **Lazygit** | +| | | +| **Telescope** | **Firefox** | +| | | -![Desktop](https://raw.githubusercontent.com/tuxdotrs/nix-config/refs/heads/main/assets/hyprland/desktop.png) - -### tPanel - -![tPanel](https://raw.githubusercontent.com/tuxdotrs/nix-config/refs/heads/main/assets/hyprland/tPanel.png) - -### Workflow - -![Workflow](https://raw.githubusercontent.com/tuxdotrs/nix-config/refs/heads/main/assets/hyprland/workflow.png) - -## Showcase - -### Desktop AwesomeWM - -![2024-08-08_18-33](https://github.com/user-attachments/assets/1cdcc387-0f68-486c-a76c-a36ad2acb78d) - -![2024-08-08_18-18](https://github.com/user-attachments/assets/f3fc4da5-6c0d-4cda-934d-b68ca6494e02) - -### Neovim - -![2024-08-08_18-16](https://github.com/user-attachments/assets/f881c672-8d77-43ec-b637-df5004c7d11f) - -### Floating Terminal - -![2024-08-08_18-16_1](https://github.com/user-attachments/assets/3339ecf8-3264-4179-a093-337c844592a6) - -### Lazygit - -![2024-08-08_18-16_2](https://github.com/user-attachments/assets/6df15881-fc2b-41b1-af3b-124fe0599b94) - -### Telescope - -![2024-08-08_18-16_3](https://github.com/user-attachments/assets/03be05bc-8ede-4d6e-a341-2761d89b7288) - -### Firefox - -![2024-08-08_18-26](https://github.com/user-attachments/assets/6f12173b-2480-404e-b01a-599115a886c0) - -## Spent weeks on this system configuration 😢 +## Spent months on this system configuration 😢
diff --git a/flake.lock b/flake.lock old mode 100755 new mode 100644 index 6a1ac9f..086a898 --- a/flake.lock +++ b/flake.lock @@ -1,27 +1,5 @@ { "nodes": { - "ags": { - "inputs": { - "astal": "astal", - "nixpkgs": [ - "tpanel", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1764289441, - "narHash": "sha256-ak+lgFiYE5PHByN1/BRkO5JP498hno6Ix24C1Qf/vec=", - "owner": "aylur", - "repo": "ags", - "rev": "e169694390548dfd38ff40f1ef2163d6c3ffe3ea", - "type": "github" - }, - "original": { - "owner": "aylur", - "repo": "ags", - "type": "github" - } - }, "aquamarine": { "inputs": { "hyprutils": [ @@ -42,11 +20,11 @@ ] }, "locked": { - "lastModified": 1776876344, - "narHash": "sha256-Ubqb/agkuMJK+k19gjQgHux/eOYRc1sRGoOZOho8+VY=", + "lastModified": 1788016784, + "narHash": "sha256-RO90Fk+Rn2Yy+I8oL4ePTLLKLgOAr8hrTx7tlpwdLaA=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "648a13d0ee1e03a843b3e145b8ece15393058701", + "rev": "783bfd9ae441d1d0519b979ac68b73ddd6e81df0", "type": "github" }, "original": { @@ -55,28 +33,6 @@ "type": "github" } }, - "astal": { - "inputs": { - "nixpkgs": [ - "tpanel", - "ags", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1764173295, - "narHash": "sha256-Jh4VtPcK2Ov+RTcV9FtyQRsxiJmXFQGfqX6jjM7/mgc=", - "owner": "aylur", - "repo": "astal", - "rev": "7d1fac8a4b2a14954843a978d2ddde86168c75ef", - "type": "github" - }, - "original": { - "owner": "aylur", - "repo": "astal", - "type": "github" - } - }, "awww": { "inputs": { "flake-compat": "flake-compat", @@ -84,11 +40,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1777136912, - "narHash": "sha256-owyQdC2vi0kYC119fzyVQp0J4G0t1n4xXUwryhlBbqA=", + "lastModified": 1784030954, + "narHash": "sha256-MPMVSBhSEl+ShSrWVN5qH3FiX2gg8LbYA8L3nuQw5VE=", "ref": "refs/heads/main", - "rev": "f66e12a76dbc4c669b2f1375f78bce49f5b19d66", - "revCount": 1363, + "rev": "25ea4fd7a42359379da9ddadedda1c477caa4ae0", + "revCount": 1376, "type": "git", "url": "https://codeberg.org/LGFae/awww" }, @@ -97,6 +53,62 @@ "url": "https://codeberg.org/LGFae/awww" } }, + "cardwire": { + "inputs": { + "fenix": "fenix", + "git-hooks": "git-hooks", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1788457722, + "narHash": "sha256-UjAKoLsc+W837eDeA0XqLX3I1drmJMvEESKB0glHSps=", + "owner": "opengamingcollective", + "repo": "cardwire", + "rev": "db92fe8540aecdf9860df087485666a03b0c00ad", + "type": "github" + }, + "original": { + "owner": "opengamingcollective", + "repo": "cardwire", + "type": "github" + } + }, + "copyparty": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1788296568, + "narHash": "sha256-k0oAChIZU2ycgJQX6fup9ncSvvOU1K93ZcDZYGiBhuA=", + "owner": "9001", + "repo": "copyparty", + "rev": "4e318d516531e6a9c683b21e58b9cb48131eb175", + "type": "github" + }, + "original": { + "owner": "9001", + "repo": "copyparty", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1781825982, + "narHash": "sha256-SlXKwIRIhrOSAcTjCB3ftPLzJWZStQIPS7J1FlZPnKk=", + "owner": "ipetkov", + "repo": "crane", + "rev": "469fd08d0bcf6926321fa973c6777fbc87785dd7", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, "cyber-tux": { "inputs": { "nixpkgs": [ @@ -119,16 +131,16 @@ }, "deploy-rs": { "inputs": { - "flake-compat": "flake-compat_2", - "nixpkgs": "nixpkgs_2", + "flake-compat": "flake-compat_3", + "nixpkgs": "nixpkgs_5", "utils": "utils" }, "locked": { - "lastModified": 1770019181, - "narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=", + "lastModified": 1788395115, + "narHash": "sha256-7sprixDLchHgjQt1yNoc91d0L0lnbd1VUb3OPZpsIJk=", "owner": "serokell", "repo": "deploy-rs", - "rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171", + "rev": "a591d4600e8ada8b22489093ebf50337f4d98065", "type": "github" }, "original": { @@ -144,11 +156,11 @@ ] }, "locked": { - "lastModified": 1776613567, - "narHash": "sha256-gC9Cp5ibBmGD5awCA9z7xy6MW6iJufhazTYJOiGlCUI=", + "lastModified": 1781152676, + "narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=", "owner": "nix-community", "repo": "disko", - "rev": "32f4236bfc141ae930b5ba2fb604f561fed5219d", + "rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1", "type": "github" }, "original": { @@ -157,44 +169,22 @@ "type": "github" } }, - "emacs": { - "inputs": { - "nixpkgs": "nixpkgs_9", - "nixpkgs-stable": "nixpkgs-stable" - }, - "locked": { - "lastModified": 1777171226, - "narHash": "sha256-nEH9cLA1CRj5JAIjNHBqIam3SCetPNNVCqs8pc1SRao=", - "owner": "nix-community", - "repo": "emacs-overlay", - "rev": "ef37c2288f4e1f709f0317757527f52c8563651b", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "emacs-overlay", - "type": "github" - } - }, "fenix": { "inputs": { - "nixpkgs": [ - "nixpkgs-f2k", - "nixpkgs-fmt", - "nixpkgs" - ], + "nixpkgs": "nixpkgs_2", "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1637475807, - "narHash": "sha256-E3nzOvlzZXwyo8Stp5upKsTCDcqUTYAFj4EC060A31c=", + "lastModified": 1785572837, + "narHash": "sha256-7HLoqxURizfu1Gs5Xg0OTwi9s9Ewh7JpBeE2xVoZHAU=", "owner": "nix-community", "repo": "fenix", - "rev": "960e7fef45692a4fffc6df6d6b613b0399bbdfd5", + "rev": "e6dc05cac3bc08fc8b00cc1571a456a47d7ca782", "type": "github" }, "original": { "owner": "nix-community", + "ref": "monthly", "repo": "fenix", "type": "github" } @@ -218,15 +208,15 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", - "owner": "edolstra", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "type": "github" } @@ -234,11 +224,11 @@ "flake-compat_3": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "owner": "edolstra", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "type": "github" }, "original": { @@ -264,36 +254,22 @@ } }, "flake-compat_5": { - "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", - "revCount": 69, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" - } - }, - "flake-compat_6": { "flake": false, "locked": { "lastModified": 1767039857, "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "type": "github" } }, - "flake-compat_7": { + "flake-compat_6": { "flake": false, "locked": { "lastModified": 1767039857, @@ -311,14 +287,16 @@ }, "flake-parts": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib" + "nixpkgs-lib": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1788450739, + "narHash": "sha256-glZLQlzIn1fXH6PazR2iUmTo7kzzyYSshrWhLS9TqCU=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "31729ca8cbdb4fa927b34e5f4353e6a83f39e993", "type": "github" }, "original": { @@ -329,14 +307,17 @@ }, "flake-parts_2": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_2" + "nixpkgs-lib": [ + "hermes-agent", + "nixpkgs" + ] }, "locked": { - "lastModified": 1775087534, - "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "type": "github" }, "original": { @@ -346,6 +327,42 @@ } }, "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1785627969, + "narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "nur", @@ -366,13 +383,31 @@ "type": "github" } }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1788450739, + "narHash": "sha256-glZLQlzIn1fXH6PazR2iUmTo7kzzyYSshrWhLS9TqCU=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "31729ca8cbdb4fa927b34e5f4353e6a83f39e993", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "flake-utils": { "locked": { - "lastModified": 1637014545, - "narHash": "sha256-26IZAc5yzlD9FlDT54io1oqG/bBoyka+FJk5guaX4x4=", + "lastModified": 1678901627, + "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", "owner": "numtide", "repo": "flake-utils", - "rev": "bba5dcc8e0b20ab664967ad83d24d64cb64ec4f4", + "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", "type": "github" }, "original": { @@ -382,6 +417,28 @@ } }, "flake-utils_2": { + "inputs": { + "systems": [ + "mango", + "scenefx", + "systems" + ] + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { "inputs": { "systems": "systems_5" }, @@ -399,6 +456,24 @@ "type": "github" } }, + "flake-utils_4": { + "inputs": { + "systems": "systems_6" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "freetype2": { "flake": false, "locked": { @@ -416,34 +491,30 @@ "type": "github" } }, - "ghostty": { + "git-hooks": { "inputs": { - "flake-compat": "flake-compat_3", - "home-manager": "home-manager", - "nixpkgs": "nixpkgs_3", - "systems": "systems_2", - "zig": "zig", - "zon2nix": "zon2nix" + "flake-compat": "flake-compat_2", + "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1777175394, - "narHash": "sha256-O85asIMCDEZotzFUzgQ+6neoIxEgotjOKvmfNg1fkq0=", - "owner": "ghostty-org", - "repo": "ghostty", - "rev": "c74f6d56d1feef473033057bc0ff7e3f00cf6421", + "lastModified": 1787424939, + "narHash": "sha256-O2tBn84NNuHrnqNVxx/XqsXwfYvS1YwBh+7CBnbCYsk=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "809414f0cdadf82cf11b06c2b29ba9b3168b3297", "type": "github" }, "original": { - "owner": "ghostty-org", - "repo": "ghostty", + "owner": "cachix", + "repo": "git-hooks.nix", "type": "github" } }, "gitignore": { "inputs": { "nixpkgs": [ - "hyprland", - "pre-commit-hooks", + "lanzaboote", + "pre-commit", "nixpkgs" ] }, @@ -478,19 +549,43 @@ "type": "github" } }, + "hermes-agent": { + "inputs": { + "flake-parts": "flake-parts_2", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs_6", + "npm-lockfile-fix": "npm-lockfile-fix", + "pyproject-build-systems": "pyproject-build-systems", + "pyproject-nix": "pyproject-nix", + "uv2nix": "uv2nix" + }, + "locked": { + "lastModified": 1788438011, + "narHash": "sha256-3qXLnmqe4wU8eMDPcS0JKMVYJ+rfAE57gJIwE/arW08=", + "owner": "NousResearch", + "repo": "hermes-agent", + "rev": "63279301bcbdc185c1b07b98a9312eb0c862f26d", + "type": "github" + }, + "original": { + "owner": "NousResearch", + "repo": "hermes-agent", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ - "ghostty", + "hermes-agent", "nixpkgs" ] }, "locked": { - "lastModified": 1770586272, - "narHash": "sha256-Ucci8mu8QfxwzyfER2DQDbvW9t1BnTUJhBmY7ybralo=", + "lastModified": 1786487128, + "narHash": "sha256-ad60hrRVhH/bo3Jl1YLzO+QcS3mUNZr9LNJdzhMO2P4=", "owner": "nix-community", "repo": "home-manager", - "rev": "b1f916ba052341edc1f80d4b2399f1092a4873ca", + "rev": "f404edbfa4117810c96b97048299242fc50e5362", "type": "github" }, "original": { @@ -506,11 +601,11 @@ ] }, "locked": { - "lastModified": 1777218285, - "narHash": "sha256-d2FY71SBVKVbT1PsfXA71jz0vD520NijS4lrcvUMeGk=", + "lastModified": 1788487777, + "narHash": "sha256-Ro/e1N4ZR8/XaFF+sF9SgfPK79HM5YNEppzFj8p+0Ak=", "owner": "nix-community", "repo": "home-manager", - "rev": "c55c498c9aa205b16cca78b57a7275625726d532", + "rev": "693e8ce0fb240a73c116a03cfd7b19269c87af88", "type": "github" }, "original": { @@ -556,11 +651,11 @@ ] }, "locked": { - "lastModified": 1776511930, - "narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=", + "lastModified": 1786464181, + "narHash": "sha256-2alOMkLjXANh7unkZnYnCF2K2rApZaOLMoQ3o+VX2CY=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "39435900785d0c560c6ae8777d29f28617d031ef", + "rev": "e4ed7c08123df5af460a0a70961380cbfb872f76", "type": "github" }, "original": { @@ -585,11 +680,11 @@ ] }, "locked": { - "lastModified": 1776426399, - "narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=", + "lastModified": 1786464367, + "narHash": "sha256-k58p4wbzIXWyRWrW84pP8tD+iaZSSYiiM+fr0Auk4oU=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84", + "rev": "7c895c44e3ca6d28ed68ddd80ec02b02b925e7fc", "type": "github" }, "original": { @@ -609,17 +704,17 @@ "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "hyprwire": "hyprwire", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_7", "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems_3", + "systems": "systems_2", "xdph": "xdph" }, "locked": { - "lastModified": 1777227673, - "narHash": "sha256-nORN5YGU0T2PnvgpMc7ukPWza27oVtTTquCGOhpEV+A=", + "lastModified": 1788467157, + "narHash": "sha256-bDcUf8uUQWmbXCJE5crKTt4Sz5d85Hxi+RW2vBeg6BA=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "84d45bd13acce0b16c8f86e83144f22b18d9398e", + "rev": "cb537a387e32dc8abe5e8f2a1cec4572427e5c37", "type": "github" }, "original": { @@ -661,11 +756,11 @@ ] }, "locked": { - "lastModified": 1776426575, - "narHash": "sha256-KI6nIfVihn/DPaeB5Et46Xg3dkNHrrEtUd5LBBVomB0=", + "lastModified": 1786464504, + "narHash": "sha256-7sHwM86KILQyHDHDuE2SDBlQ2jvZ0EW3hY7sW009/cg=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "a968d211048e3ed538e47b84cb3649299578f19d", + "rev": "4c30cf3097ea963c0e250749ee0c59f8b08816d6", "type": "github" }, "original": { @@ -674,36 +769,6 @@ "type": "github" } }, - "hyprland-plugins": { - "inputs": { - "hyprland": [ - "hyprland" - ], - "nixpkgs": [ - "hyprland-plugins", - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland-plugins", - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1777220105, - "narHash": "sha256-M9JZK+8GVKAIVdQpcCG/49zBF3ylxO8zxW+hVjM5QpE=", - "owner": "hyprwm", - "repo": "hyprland-plugins", - "rev": "dbe221941a5095e1b381ac460a152cf173b108b8", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-plugins", - "type": "github" - } - }, "hyprland-protocols": { "inputs": { "nixpkgs": [ @@ -745,11 +810,11 @@ ] }, "locked": { - "lastModified": 1776426736, - "narHash": "sha256-rl7i4aY+9p8LysJp7o8uRWahCkpFznCgGHXszlTw7b0=", + "lastModified": 1786464129, + "narHash": "sha256-339AkTlpMYSIvFuG0rnR+8Yg4/AZKeJalshJavlnKfg=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "7833ff33b2e82d3406337b5dcf0d1cec595d83e9", + "rev": "9508458be316a0d70d37ebed1ab725ccd10411ff", "type": "github" }, "original": { @@ -797,11 +862,11 @@ ] }, "locked": { - "lastModified": 1772462885, - "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=", + "lastModified": 1785930473, + "narHash": "sha256-DitTu625BhEYpZjtjxtGpjrEJwPwW+X/+jJvhSZNSJM=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998", + "rev": "af515b69dfbe366dc7873aa1475cb2f4db3ebad7", "type": "github" }, "original": { @@ -822,11 +887,11 @@ ] }, "locked": { - "lastModified": 1777148223, - "narHash": "sha256-PTf7kRFFzCW6rIYxLH2fWfVJmj86FSYe3k6L8B+IM9o=", + "lastModified": 1786903207, + "narHash": "sha256-QTwMqLLONRhv9iz6CVeuX6BqQNQCIqI8hL/cPYlR/24=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "fa3992be2dfebe4ab06d753c6ca59bea298e798f", + "rev": "6cf50415e06dc6bd9f1252f1b745eac6b4a1cc39", "type": "github" }, "original": { @@ -847,11 +912,11 @@ ] }, "locked": { - "lastModified": 1777148232, - "narHash": "sha256-Uv0WZLhu89SafuSOmYDA7akrPt4wBRmsa1ucasO5aXg=", + "lastModified": 1786464033, + "narHash": "sha256-QM8Qe4/L8lpdVN4bgwahmi+jyyc4fisseDMe4afcDxA=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "fec9cf1abcc1011e46f0a0986f46bf93c6bf8b92", + "rev": "62e62c1ca23da17612c6890d4ad2064f575643db", "type": "github" }, "original": { @@ -876,11 +941,11 @@ ] }, "locked": { - "lastModified": 1776728575, - "narHash": "sha256-z9eGphrArEBpl1O/GCH0wlY6z4K9vA6yWh2gAS6qytU=", + "lastModified": 1786464294, + "narHash": "sha256-ZQsZ2WvBdkboCIyh8LStDPdAIARmxzn0XMNxxoOhjPE=", "owner": "hyprwm", "repo": "hyprwire", - "rev": "f3a80888783702a39691b684d099e16b83ed4702", + "rev": "4ce7cd6b6128c1ac41caf23c58a30a26b327f9dd", "type": "github" }, "original": { @@ -892,7 +957,7 @@ "impermanence": { "inputs": { "home-manager": "home-manager_3", - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1769548169, @@ -908,33 +973,32 @@ "type": "github" } }, - "infuse": { - "flake": false, + "import-tree": { "locked": { - "lastModified": 1768766368, - "narHash": "sha256-GW7S5dsFiQChSbGESrkFyNSzDLKGNH3H0EMeY+NLefY=", - "ref": "refs/heads/trunk", - "rev": "e837ece1b9de6ebcb7abd261f54a09bad3a2f820", - "revCount": 49, - "type": "git", - "url": "https://codeberg.org/amjoseph/infuse.nix.git" + "lastModified": 1788467110, + "narHash": "sha256-ljEMTXP/rH0tOvDzc9gzwww6KcHRPRnEHzd9lK48V7s=", + "owner": "vic", + "repo": "import-tree", + "rev": "eb1b52eaecc57f7c136d07ae8a93e724dfecac46", + "type": "github" }, "original": { - "type": "git", - "url": "https://codeberg.org/amjoseph/infuse.nix.git" + "owner": "vic", + "repo": "import-tree", + "type": "github" } }, "lan-mouse": { "inputs": { - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_9", "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1775729061, - "narHash": "sha256-3MotJ2seD7IXvyGpvBhzgEbERBHrWxeCrtGtOcdjEGQ=", + "lastModified": 1788178270, + "narHash": "sha256-396Ghde4Ux1h/HUiqlaajbcGSgtYAFeP8Bg2He8QUBQ=", "owner": "feschber", "repo": "lan-mouse", - "rev": "a878c985f0633a12b00a363883fd56385c2368e7", + "rev": "6b1eddef7ab3ae0b06f2ed3d9b21165e03ea4cad", "type": "github" }, "original": { @@ -943,6 +1007,28 @@ "type": "github" } }, + "lanzaboote": { + "inputs": { + "crane": "crane", + "nixpkgs": "nixpkgs_10", + "pre-commit": "pre-commit", + "rust-overlay": "rust-overlay_3" + }, + "locked": { + "lastModified": 1782141370, + "narHash": "sha256-hqijVSEETttmo8Okql9/LG0Ua34hdciKW1a5zzlj8mU=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "7c9a54a7f87b4539ddbd8bda09a8a5f5f9361aa9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v1.1.0", + "repo": "lanzaboote", + "type": "github" + } + }, "libpng": { "flake": false, "locked": { @@ -962,18 +1048,18 @@ }, "mango": { "inputs": { - "flake-parts": "flake-parts", + "flake-parts": "flake-parts_3", "nixpkgs": [ "nixpkgs" ], "scenefx": "scenefx" }, "locked": { - "lastModified": 1776999768, - "narHash": "sha256-RP7eVqbnQ/uNCXh0HH8SXRIerMlkyHco+wpI9oxon0U=", + "lastModified": 1788490924, + "narHash": "sha256-tymTjjNKWohVzXycg2mN7cSApQ6NDmn9k4LklNq/WGo=", "owner": "DreamMaoMao", "repo": "mango", - "rev": "b9c6a2c1964cb59536c5d3e02d2ff981a7eb36d2", + "rev": "7b4266f1d8df09f83283574ba61dba51656d4791", "type": "github" }, "original": { @@ -988,7 +1074,10 @@ "nix-on-droid", "nixpkgs" ], - "nmd": "nmd", + "nmd": [ + "nix-on-droid", + "nmd" + ], "nmt": "nmt" }, "locked": { @@ -1012,11 +1101,11 @@ ] }, "locked": { - "lastModified": 1777181277, - "narHash": "sha256-yVJbd07ortDRAttDFmDV5p220aOLTHgVAx//0nW/xW8=", + "lastModified": 1788080100, + "narHash": "sha256-n14luQo3F/ZLfCEHk1QieiI1nGnW92ZQZeZ0UIb0UMQ=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "b8eb7acee0f7604fe1bf6a5b3dcf5254369180fa", + "rev": "dbb978fa87faf13398e90ccbc52c343d21c7dd6d", "type": "github" }, "original": { @@ -1036,77 +1125,36 @@ ], "nixpkgs-docs": "nixpkgs-docs", "nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap", - "nmd": "nmd_2" + "nmd": "nmd" }, "locked": { - "lastModified": 1720396533, - "narHash": "sha256-UFzk/hZWO1VkciIO5UPaSpJN8s765wsngUSvtJM6d5Q=", + "lastModified": 1787352026, + "narHash": "sha256-2MKUKRNV+5qs3nbQDmz7L6KRHSEHDy/lZjfIAYMZSOE=", "owner": "nix-community", "repo": "nix-on-droid", - "rev": "f3d3b8294039f2f9a8fb7ea82c320f29c6b0fe25", + "rev": "df611d5358360092b1d2e7e756f94b23843bd9d6", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.05", + "ref": "master", "repo": "nix-on-droid", "type": "github" } }, - "nix-secrets": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1741040419, - "narHash": "sha256-BqBIfzYFs8zGvMpxXYt1yWRIH3nVBvTrWkk2RXCA0To=", - "ref": "refs/heads/main", - "rev": "6f7627cee3da9490f2f29afae3c223b8ac2f565f", - "shallow": true, - "type": "git", - "url": "ssh://git@github.com/tuxdotrs/nix-secrets.git" - }, - "original": { - "shallow": true, - "type": "git", - "url": "ssh://git@github.com/tuxdotrs/nix-secrets.git" - } - }, - "nix-vscode-extensions": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1777226942, - "narHash": "sha256-R7spsiBBO++he+uhvKCTKwWtCJR02mOqTvU3EEBemb0=", - "owner": "nix-community", - "repo": "nix-vscode-extensions", - "rev": "ec41b109469c7061fab246ee94712f44fda8156f", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nix-vscode-extensions", - "type": "github" - } - }, "nixcord": { "inputs": { - "flake-compat": "flake-compat_5", - "flake-parts": "flake-parts_2", - "nixpkgs": "nixpkgs_7", - "nixpkgs-nixcord": "nixpkgs-nixcord" + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_11", + "nixpkgs-nixcord": "nixpkgs-nixcord", + "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1777125640, - "narHash": "sha256-jKmRu5PknoI0pk3WEqMhVReosUubUCq3M/izEQWzb+4=", + "lastModified": 1788512400, + "narHash": "sha256-pFiwb+c/lIvMvjSzJONZ+jPi36kbbljys7OFy+Kxt3U=", "owner": "kaylorben", "repo": "nixcord", - "rev": "0e738683dd7551a9cbfa343397b1592dfd785b7e", + "rev": "004e2c950c0b4a404fb3ea5ab01f5645265e4322", "type": "github" }, "original": { @@ -1116,38 +1164,21 @@ } }, "nixos-hardware": { - "locked": { - "lastModified": 1776983936, - "narHash": "sha256-ZOQyNqSvJ8UdrrqU1p7vaFcdL53idK+LOM8oRWEWh6o=", - "owner": "nixos", - "repo": "nixos-hardware", - "rev": "2096f3f411ce46e88a79ae4eafcfc9df8ed41c61", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixos-hardware", - "type": "github" - } - }, - "nixos-wsl": { "inputs": { - "flake-compat": "flake-compat_6", - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_12" }, "locked": { - "lastModified": 1776910211, - "narHash": "sha256-0ku3gW8bZ9TTpEU2fQw86oU6ZLT2vF6pacF+cLaf7VY=", - "owner": "nix-community", - "repo": "nixos-wsl", - "rev": "4e6cad241baa0115a7aae8c55b04c166da4997c9", + "lastModified": 1788335262, + "narHash": "sha256-3jBEq8avfzlrsY4UpW4d5TOmm7ocseZfnitEJhqauyc=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "44d95795ee2d475b3d687325e26dcf4ca9104557", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "nixos-wsl", + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", "type": "github" } }, @@ -1183,51 +1214,6 @@ "type": "github" } }, - "nixpkgs-f2k": { - "inputs": { - "emacs": "emacs", - "infuse": "infuse", - "nixpkgs": "nixpkgs_10", - "nixpkgs-fmt": "nixpkgs-fmt", - "parts": "parts" - }, - "locked": { - "lastModified": 1777180539, - "narHash": "sha256-y6gBux0av65/ydC8iM6s/DFPs1wm2d4+26MvGZTJT1I=", - "owner": "moni-dz", - "repo": "nixpkgs-f2k", - "rev": "2e1d7fc8f7f9405d926b54df3503f114e6b5daed", - "type": "github" - }, - "original": { - "owner": "moni-dz", - "repo": "nixpkgs-f2k", - "type": "github" - } - }, - "nixpkgs-fmt": { - "inputs": { - "fenix": "fenix", - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs-f2k", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1721822211, - "narHash": "sha256-zacOgNv3qM3AbSG3p5PT/Bfc4c7NoIqoLII8/jIUsOQ=", - "owner": "nix-community", - "repo": "nixpkgs-fmt", - "rev": "bdb15b4c7e0cb49ae091dd43113d0a938afae02c", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs-fmt", - "type": "github" - } - }, "nixpkgs-for-bootstrap": { "locked": { "lastModified": 1720244366, @@ -1246,11 +1232,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1748740939, - "narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=", + "lastModified": 1782614948, + "narHash": "sha256-ePjCwr1sNm9NYUqywL7QfK3JnlS015msC+eBu2zKlp8=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "656a64127e9d791a334452c6b6606d17539476e2", + "rev": "db3f255737b94216eb71cce308e2912cf6bc2d7c", "type": "github" }, "original": { @@ -1261,11 +1247,11 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1774748309, - "narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=", + "lastModified": 1785031560, + "narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "333c4e0545a6da976206c74db8773a1645b5870a", + "rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c", "type": "github" }, "original": { @@ -1276,11 +1262,11 @@ }, "nixpkgs-lib_3": { "locked": { - "lastModified": 1774748309, - "narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=", + "lastModified": 1788057806, + "narHash": "sha256-DTQSMxzDWmT0zhguthvegnVkn7CFqGCv4IHCzk5ZUpM=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "333c4e0545a6da976206c74db8773a1645b5870a", + "rev": "596e2e3940e09b2abbeb03f75fa1828c57fcd72c", "type": "github" }, "original": { @@ -1291,75 +1277,104 @@ }, "nixpkgs-nixcord": { "locked": { - "lastModified": 1776734388, - "narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=", + "lastModified": 1786711500, + "narHash": "sha256-QvnceIGTBeDvDd9oCn+GvdsnkquliuwbVgpiRH68qaQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac", + "rev": "02e08985a27c65ffd33d434eeb2e660a2e4dc84d", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.11", + "ref": "nixos-26.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1776734388, - "narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=", + "lastModified": 1782841183, + "narHash": "sha256-Ndt/5R7UN4rBdhFR1lxHZZZ42cD6vGlnuxC2VvvsKE4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac", + "rev": "c9bfd86ed684d27e63b0ff9ebb18699f84f27a3b", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-stable_2": { - "locked": { - "lastModified": 1751290243, - "narHash": "sha256-kNf+obkpJZWar7HZymXZbW+Rlk3HTEIMlpc6FCNz0Ds=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "5ab036a8d97cb9476fbe81b09076e6e91d15e1b6", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "release-24.11", + "ref": "nixos-25.11-small", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_10": { "locked": { - "lastModified": 1777179511, - "narHash": "sha256-GCqyVuDsIavHaoFa1dGHAPGKkMbjMhexYN9wBZQNH8U=", + "lastModified": 1781577229, + "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e56e56311fc951877e3fda0dac432554ce2d21c5", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", "type": "github" }, "original": { "owner": "NixOS", - "ref": "master", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_11": { "locked": { - "lastModified": 1776877367, - "narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=", + "lastModified": 1786711500, + "narHash": "sha256-QvnceIGTBeDvDd9oCn+GvdsnkquliuwbVgpiRH68qaQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "02e08985a27c65ffd33d434eeb2e660a2e4dc84d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-26.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "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_13": { + "locked": { + "lastModified": 1788316716, + "narHash": "sha256-bc7rSpXIdn9QWGNqfWcPZWOhEVF8NoeAZkWq0XWnf/k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3ed67ec0a4d3c7ab4ae1f04f8ee8df07bfa506a2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1788316716, + "narHash": "sha256-bc7rSpXIdn9QWGNqfWcPZWOhEVF8NoeAZkWq0XWnf/k=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57", + "rev": "3ed67ec0a4d3c7ab4ae1f04f8ee8df07bfa506a2", "type": "github" }, "original": { @@ -1369,13 +1384,13 @@ "type": "github" } }, - "nixpkgs_12": { + "nixpkgs_15": { "locked": { - "lastModified": 1775888245, - "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=", + "lastModified": 1776683584, + "narHash": "sha256-NuTLMrr10Tng72hurYG8jYQ4XKK8wnpJmOGcPiis96g=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "13043924aaa7375ce482ebe2494338e058282925", + "rev": "9dd5558b06dbdacbf635a3dd36dce1b1a7ee3a89", "type": "github" }, "original": { @@ -1385,7 +1400,150 @@ "type": "github" } }, + "nixpkgs_16": { + "locked": { + "lastModified": 1788404924, + "narHash": "sha256-lhEhY8X5EgkQ/eg6IFz4cc8jRuSYSvnxx1al7d1dvZ0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0968519e14f7aa7d3e9b389682bd74d2b51c8ce8", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_17": { + "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_18": { + "locked": { + "lastModified": 1788775869, + "narHash": "sha256-JRf1lSypbvKj6AzUZHpUA6YC1DirVuitZWOnRwcm+Ww=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "58973d74f1893afe13f5902919803a0e99da0ca4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1770107345, + "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { + "locked": { + "lastModified": 1785454630, + "narHash": "sha256-LQy14TZp77TwbQf40gg1V3jo8FwJG0jGDkAH+zRHqg8=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "1559d3daa3ecc813a650b79375ea61b6741b8746", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "locked": { + "lastModified": 1740547748, + "narHash": "sha256-Ly2fBL1LscV+KyCqPRufUBuiw+zmWrlJzpWOWbahplg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3a05eebede89661660945da1f151959900903b6a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1774386573, + "narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1782918843, + "narHash": "sha256-ETYnV9U7Sr+A45dohzZdfCZKOss4qrTkO+wgNZNvEc0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e8273b29fe1390ec8d4603f2477357555291432e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1748162331, + "narHash": "sha256-rqc2RKYTxP3tbjA+PB3VMRQNnjesrT0pEofXQTrMsS8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-25.05", + "type": "indirect" + } + }, + "nixpkgs_5": { "locked": { "lastModified": 1743014863, "narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=", @@ -1401,26 +1559,13 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_6": { "locked": { - "lastModified": 1770537093, - "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", - "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", - "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" - }, - "original": { - "type": "tarball", - "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1776877367, - "narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=", + "lastModified": 1785318670, + "narHash": "sha256-dN6Ou5x/+23FZLEpYP3IffO+NyJFzUlGumt1uu3MMaY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57", + "rev": "0954f7ee2f6bb3dc7d4e3d0d8bcb8fd4bde4cfc5", "type": "github" }, "original": { @@ -1430,7 +1575,23 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_7": { + "locked": { + "lastModified": 1787736819, + "narHash": "sha256-cV5xEJJK3BvhU8rEd4mC9UsmDi5qscv/kzGPhBRC5WA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9fbb54b33e91ee4ca368e35a78e0613c720600b3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { "locked": { "lastModified": 1768564909, "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", @@ -1446,7 +1607,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_9": { "locked": { "lastModified": 1772963539, "narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=", @@ -1462,71 +1623,7 @@ "type": "github" } }, - "nixpkgs_7": { - "locked": { - "lastModified": 1776734388, - "narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_8": { - "locked": { - "lastModified": 1776877367, - "narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_9": { - "locked": { - "lastModified": 1776877367, - "narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nmd": { - "flake": false, - "locked": { - "lastModified": 1666190571, - "narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=", - "owner": "rycee", - "repo": "nmd", - "rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169", - "type": "gitlab" - }, - "original": { - "owner": "rycee", - "repo": "nmd", - "type": "gitlab" - } - }, - "nmd_2": { "inputs": { "nixpkgs": [ "nix-on-droid", @@ -1564,17 +1661,38 @@ "type": "gitlab" } }, - "nur": { + "npm-lockfile-fix": { "inputs": { - "flake-parts": "flake-parts_3", - "nixpkgs": "nixpkgs_11" + "nixpkgs": [ + "hermes-agent", + "nixpkgs" + ] }, "locked": { - "lastModified": 1777233693, - "narHash": "sha256-ZqKJHMCQb6VHg8m/BMMgckuVwA7DEpD7o9cNB8XtciA=", + "lastModified": 1775903712, + "narHash": "sha256-2GV79U6iVH4gKAPWYrxUReB0S41ty/Y3dBLquU8AlaA=", + "owner": "jeslie0", + "repo": "npm-lockfile-fix", + "rev": "c6093acb0c0548e0f9b8b3d82918823721930fe8", + "type": "github" + }, + "original": { + "owner": "jeslie0", + "repo": "npm-lockfile-fix", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1788512036, + "narHash": "sha256-7snKGlOrcV8bqetPTnc9WPjg8b/nGvaDWxWoNxSVBVI=", "owner": "nix-community", "repo": "nur", - "rev": "36560e47f05a6413371627ee954523886fd2a87b", + "rev": "7cae767fcd8d1f3a61731a43b93a3cb37f0beabb", "type": "github" }, "original": { @@ -1583,39 +1701,61 @@ "type": "github" } }, - "parts": { + "opencode": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_3" + "nixpkgs": "nixpkgs_15" }, "locked": { - "lastModified": 1775087534, - "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", + "lastModified": 1788510168, + "narHash": "sha256-wFLy+8XzIm1cKmlunsIJbU5P5jzoJh7JXB1FvYoDn60=", + "owner": "anomalyco", + "repo": "opencode", + "rev": "70f74112e3f4a33ea1af8209c979a5060d7d2a36", "type": "github" }, "original": { - "owner": "hercules-ci", - "repo": "flake-parts", + "owner": "anomalyco", + "repo": "opencode", + "type": "github" + } + }, + "pre-commit": { + "inputs": { + "flake-compat": "flake-compat_5", + "gitignore": "gitignore", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781733627, + "narHash": "sha256-U3yTuGBnmXvXoQI3qkpfEDsn9RovQPAjN7ndRco+3u0=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "3bbec39bc90eadfa031e6f3b77272f3f60803e39", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", "type": "github" } }, "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat_4", - "gitignore": "gitignore", "nixpkgs": [ "hyprland", "nixpkgs" ] }, "locked": { - "lastModified": 1776796298, - "narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=", + "lastModified": 1787424939, + "narHash": "sha256-O2tBn84NNuHrnqNVxx/XqsXwfYvS1YwBh+7CBnbCYsk=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad", + "rev": "809414f0cdadf82cf11b06c2b29ba9b3168b3297", "type": "github" }, "original": { @@ -1624,52 +1764,126 @@ "type": "github" } }, + "pyproject-build-systems": { + "inputs": { + "nixpkgs": [ + "hermes-agent", + "nixpkgs" + ], + "pyproject-nix": [ + "hermes-agent", + "pyproject-nix" + ], + "uv2nix": [ + "hermes-agent", + "uv2nix" + ] + }, + "locked": { + "lastModified": 1785115949, + "narHash": "sha256-8AM37BfyGaL2v/SZyg4PupRxJ01Y4htvM+WrTjWrPpo=", + "owner": "pyproject-nix", + "repo": "build-system-pkgs", + "rev": "62c0d86027edb1c4f39a5facc09876348144f7c9", + "type": "github" + }, + "original": { + "owner": "pyproject-nix", + "repo": "build-system-pkgs", + "type": "github" + } + }, + "pyproject-nix": { + "inputs": { + "nixpkgs": [ + "hermes-agent", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784591072, + "narHash": "sha256-zP/WaDxrRu8GANZM61+V2LT/7ycEEdoyLWn7M6WzU7M=", + "owner": "pyproject-nix", + "repo": "pyproject.nix", + "rev": "e3b599ca2e7fcf93d4edf65d7f19bbf6491724f3", + "type": "github" + }, + "original": { + "owner": "pyproject-nix", + "repo": "pyproject.nix", + "type": "github" + } + }, + "quickshell": { + "inputs": { + "nixpkgs": [ + "tshell", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1787279335, + "narHash": "sha256-CLX2Zp5i5BuLbOxNOkwRd9YY84IOrACNxBV79o9/F9Y=", + "ref": "refs/heads/master", + "rev": "1a4716cde794a59928d9d9fc15f2afc7a95de360", + "revCount": 846, + "type": "git", + "url": "https://git.outfoxxed.me/outfoxxed/quickshell" + }, + "original": { + "type": "git", + "url": "https://git.outfoxxed.me/outfoxxed/quickshell" + } + }, "root": { "inputs": { "awww": "awww", + "cardwire": "cardwire", + "copyparty": "copyparty", "cyber-tux": "cyber-tux", "deploy-rs": "deploy-rs", "disko": "disko", - "ghostty": "ghostty", + "flake-parts": "flake-parts", + "hermes-agent": "hermes-agent", "home-manager": "home-manager_2", "hyprland": "hyprland", - "hyprland-plugins": "hyprland-plugins", "impermanence": "impermanence", + "import-tree": "import-tree", "lan-mouse": "lan-mouse", + "lanzaboote": "lanzaboote", "mango": "mango", "nix-index-database": "nix-index-database", "nix-on-droid": "nix-on-droid", - "nix-secrets": "nix-secrets", - "nix-vscode-extensions": "nix-vscode-extensions", "nixcord": "nixcord", "nixos-hardware": "nixos-hardware", - "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_8", - "nixpkgs-f2k": "nixpkgs-f2k", - "nixpkgs-stable": "nixpkgs-stable_2", + "nixpkgs": "nixpkgs_13", + "nixpkgs-stable": "nixpkgs-stable", "nur": "nur", + "opencode": "opencode", + "serpantinum": "serpantinum", "sops-nix": "sops-nix", - "tawm": "tawm", "tfolio": "tfolio", "tnvim": "tnvim", - "tpanel": "tpanel", + "treefmt-nix": "treefmt-nix_3", "trok": "trok", + "tshell": "tshell", "vicinae-extensions": "vicinae-extensions", + "voxtype": "voxtype", "wezterm-flake": "wezterm-flake" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1637439871, - "narHash": "sha256-2awQ/obzl7zqYgLwbQL0zT58gN8Xq7n+81GcMiS595I=", - "owner": "rust-analyzer", + "lastModified": 1785509417, + "narHash": "sha256-KO1aylbnpZTW1l/8c1MoUPIbwPh5eSM0+VOsksXiXU4=", + "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "4566414789310acb2617543f4b50beab4bb48e06", + "rev": "e4e67338eaf4724e4e6e1525711e00b85d174cf9", "type": "github" }, "original": { - "owner": "rust-analyzer", + "owner": "rust-lang", "ref": "nightly", "repo": "rust-analyzer", "type": "github" @@ -1718,6 +1932,27 @@ } }, "rust-overlay_3": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1782012058, + "narHash": "sha256-9mWUnReOUXfKjZuJAL/bAFH3LUyECTRtXgSNVjRw3UY=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "8534567325bd8a8d2928e6afd81e0a87d19efd3c", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_4": { "inputs": { "nixpkgs": [ "wezterm-flake", @@ -1725,11 +1960,11 @@ ] }, "locked": { - "lastModified": 1764470739, - "narHash": "sha256-sa9f81B1dWO16QtgDTWHX8DQbiHKzHndpaunY5EQtwE=", + "lastModified": 1780715792, + "narHash": "sha256-4+8gPeiPeud89mjo865RwpqmKwa1MThRsq2SvRxo7mg=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "3bfa664055e1a09c6aedab5533c5fc8d6ca5741a", + "rev": "27b7e78c6935293ee868469cc4172e9b8b17823b", "type": "github" }, "original": { @@ -1740,17 +1975,19 @@ }, "scenefx": { "inputs": { + "flake-utils": "flake-utils_2", "nixpkgs": [ "mango", "nixpkgs" - ] + ], + "systems": "systems_3" }, "locked": { - "lastModified": 1750785057, - "narHash": "sha256-tGX6j4W91rcb+glXJo43sjPI9zQvPotonknG1BdihR4=", + "lastModified": 1782624992, + "narHash": "sha256-vUjLG6eubEhJJVa9LPygIcVmNoHwYbSUTJcWEcbxnU4=", "owner": "wlrfx", "repo": "scenefx", - "rev": "3a6cfb12e4ba97b43326357d14f7b3e40897adfc", + "rev": "37ccd723bef49e6891156ffafce8f549f01446cc", "type": "github" }, "original": { @@ -1775,16 +2012,51 @@ "type": "github" } }, - "sops-nix": { + "serpantinum": { "inputs": { - "nixpkgs": "nixpkgs_12" + "nixpkgs": "nixpkgs_16", + "serpantinum-wallpapers": "serpantinum-wallpapers" }, "locked": { - "lastModified": 1776771786, - "narHash": "sha256-DRFGPfFV6hbrfO9a1PH1FkCi7qR5FgjSqsQGGvk1rdI=", + "lastModified": 1788698642, + "narHash": "sha256-fiPiQ/FIV0CxUbPwXdRG9YHQ6UGiNcOhG/+29kP+UZI=", + "owner": "ilyamiro", + "repo": "serpantinum", + "rev": "e2754d28bda0e06270b870e2e671ff518e739fd9", + "type": "github" + }, + "original": { + "owner": "ilyamiro", + "repo": "serpantinum", + "type": "github" + } + }, + "serpantinum-wallpapers": { + "flake": false, + "locked": { + "lastModified": 1787675697, + "narHash": "sha256-ADvKHmQDsX50opqeiyEAB3uxUTjuCyDym0pGQCy7Sws=", + "owner": "ilyamiro", + "repo": "shell-wallpapers", + "rev": "1cb526443872fbf283a3f8305c3aa647545c02e4", + "type": "github" + }, + "original": { + "owner": "ilyamiro", + "repo": "shell-wallpapers", + "type": "github" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": "nixpkgs_17" + }, + "locked": { + "lastModified": 1788337237, + "narHash": "sha256-gkSH8VUtCo6hnysNmb9DbTuDepH2t5pv+QWjP75xKAk=", "owner": "Mic92", "repo": "sops-nix", - "rev": "bef289e2248991f7afeb95965c82fbcd8ff72598", + "rev": "fbf759290e0cb0a98dfc813a4eb7d53ad1dacb57", "type": "github" }, "original": { @@ -1809,18 +2081,17 @@ } }, "systems_2": { - "flake": false, "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "default-linux", "type": "github" } }, @@ -1869,38 +2140,33 @@ "type": "github" } }, - "tawm": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, + "systems_6": { "locked": { - "lastModified": 1756904097, - "narHash": "sha256-niQjPQi2tdbKHtWuEe5dRiB+wXcXu/qlEbRzgsBbxtE=", - "owner": "tuxdotrs", - "repo": "tawm", - "rev": "1424e3718d9298addb30664dbc23dbd932fa44d6", + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { - "owner": "tuxdotrs", - "repo": "tawm", + "owner": "nix-systems", + "repo": "default", "type": "github" } }, "tfolio": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_18", + "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1740818426, - "narHash": "sha256-Ew6I/vG06yekJoVqB6RmXjgJj+9OIQhTCaawX5q/mu0=", + "lastModified": 1788861166, + "narHash": "sha256-uY+BKFyGGEyMvSCZBbViVh6Qa6gbFijkuXWbcIvTrHM=", "ref": "refs/heads/main", - "rev": "b4037d1b1fd36e0d81845bb0744b1a9a390fd66e", - "revCount": 15, + "rev": "f4161eb5331c5ac7348f6a81a86461dd964a21a1", + "revCount": 21, "type": "git", "url": "ssh://git@github.com/tuxdotrs/tfolio.git" }, @@ -1929,39 +2195,97 @@ "type": "github" } }, - "tpanel": { + "treefmt-nix": { "inputs": { - "ags": "ags", "nixpkgs": [ + "nixcord", "nixpkgs" ] }, "locked": { - "lastModified": 1771924703, - "narHash": "sha256-FdXguczx6AcfEnEPhKm76CdjsvAKQ88H4CHt43bhO6s=", - "owner": "tuxdotrs", - "repo": "tpanel", - "rev": "9b8c4df5961eb541fd60e8ea424266790c3969a1", + "lastModified": 1785945821, + "narHash": "sha256-NLSyTCW4K4ofhNBllt3omPasm6QpralXH1DBZOc91Dw=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "ae7910970dddc408fe6ab1c8e4b277bb21d72dc0", "type": "github" }, "original": { - "owner": "tuxdotrs", - "repo": "tpanel", + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "tfolio", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1786901030, + "narHash": "sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "27b3b12a8e6375f28ebe122f07d230ca5459bbfa", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": "nixpkgs_19" + }, + "locked": { + "lastModified": 1786901030, + "narHash": "sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "27b3b12a8e6375f28ebe122f07d230ca5459bbfa", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_4": { + "inputs": { + "nixpkgs": [ + "tshell", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1786901030, + "narHash": "sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "27b3b12a8e6375f28ebe122f07d230ca5459bbfa", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } }, "trok": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_20" }, "locked": { - "lastModified": 1771501010, - "narHash": "sha256-AvEVcS9/3/9zFGJqCjdnDGqyJSXTEAEGyR8q3Wfq1gU=", + "lastModified": 1788796165, + "narHash": "sha256-F07seSdocIHeW79bbfQD+4x5TlSC6FRKGmMir8V8Kzw=", "owner": "tuxdotrs", "repo": "trok", - "rev": "e451f17df0356a8ff25eaf97f5c4503205d2750f", + "rev": "6c13858d46850d4a0fdfe198ccfd27d631d6ff65", "type": "github" }, "original": { @@ -1970,6 +2294,28 @@ "type": "github" } }, + "tshell": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "quickshell": "quickshell", + "treefmt-nix": "treefmt-nix_4" + }, + "locked": { + "lastModified": 1788466010, + "narHash": "sha256-Ru1/dQxMKp9X9E186j4BsRrJz3U9DCmSefgmaAuj9tg=", + "owner": "tuxdotrs", + "repo": "tshell", + "rev": "77c56f9945ba1f279f48020a157cb0e10a1cf69d", + "type": "github" + }, + "original": { + "owner": "tuxdotrs", + "repo": "tshell", + "type": "github" + } + }, "utils": { "inputs": { "systems": "systems" @@ -1988,6 +2334,31 @@ "type": "github" } }, + "uv2nix": { + "inputs": { + "nixpkgs": [ + "hermes-agent", + "nixpkgs" + ], + "pyproject-nix": [ + "hermes-agent", + "pyproject-nix" + ] + }, + "locked": { + "lastModified": 1785277507, + "narHash": "sha256-9Tq3UDX2hD/aveW/HvkBlAmEwJTOlY5HQXJM+L5BGmE=", + "owner": "pyproject-nix", + "repo": "uv2nix", + "rev": "5a836d395cbf5fc22670eb98dd4aa4fc4d406977", + "type": "github" + }, + "original": { + "owner": "pyproject-nix", + "repo": "uv2nix", + "type": "github" + } + }, "vicinae": { "inputs": { "nixpkgs": [ @@ -2000,11 +2371,11 @@ ] }, "locked": { - "lastModified": 1768856963, - "narHash": "sha256-u5bWDuwk6oieTnvm1YjNotcYK8iJSddH5+S68+X4TSc=", + "lastModified": 1780277152, + "narHash": "sha256-P3YrDLnggsMsSoiX/ox3CS6GkZtY37XQVon/QR6Agw8=", "owner": "vicinaehq", "repo": "vicinae", - "rev": "934bc0ad47be6dbd6498a0dac655c4613fd0ab27", + "rev": "67290dff5b2191a6cb6dd78b31d623eeef3acdec", "type": "github" }, "original": { @@ -2015,7 +2386,7 @@ }, "vicinae-extensions": { "inputs": { - "flake-compat": "flake-compat_7", + "flake-compat": "flake-compat_6", "nixpkgs": [ "nixpkgs" ], @@ -2023,11 +2394,11 @@ "vicinae": "vicinae" }, "locked": { - "lastModified": 1777139402, - "narHash": "sha256-NfO+rYviCA6Nr3B/qEHpjM+9KRal61PmLKyOtrJPP2g=", + "lastModified": 1788128057, + "narHash": "sha256-hWweiuJ0Ybq5ZNostG2Ky0/J4yGeDOHg/kSLNPyMiQI=", "owner": "vicinaehq", "repo": "extensions", - "rev": "bedd4c9f180ca2c83bb73a4474fb41194bc23873", + "rev": "9558aec33311c6759a14ffe8ef65dd1be669aebb", "type": "github" }, "original": { @@ -2036,25 +2407,45 @@ "type": "github" } }, + "voxtype": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1780004034, + "narHash": "sha256-zsOG1mBTXN4gdsTb1pUPKXATfhV5ZjgEsIUk07asaGo=", + "owner": "peteonrails", + "repo": "voxtype", + "rev": "8d49248baa53f29cb33007c9625a37281c72e799", + "type": "github" + }, + "original": { + "owner": "peteonrails", + "ref": "v0.7.5", + "repo": "voxtype", + "type": "github" + } + }, "wezterm-flake": { "inputs": { - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils_4", "freetype2": "freetype2", "harfbuzz": "harfbuzz", "libpng": "libpng", "nixpkgs": [ "nixpkgs" ], - "rust-overlay": "rust-overlay_3", + "rust-overlay": "rust-overlay_4", "zlib": "zlib" }, "locked": { "dir": "nix", - "lastModified": 1774954828, - "narHash": "sha256-F6qDnwdVlX/JJhM7XYkgU2QtBfN1EQ9UysP2xVKAA6I=", + "lastModified": 1788215300, + "narHash": "sha256-QO6fsVwrun93p1KTa8Pu00b2MZt7dcXA2johE3sf/4k=", "owner": "wez", "repo": "wezterm", - "rev": "577474d89ee61aef4a48145cdec82a638d874751", + "rev": "4fbd6b8e90e2326b8e25c589768f98bd71ddd047", "type": "github" }, "original": { @@ -2093,11 +2484,11 @@ ] }, "locked": { - "lastModified": 1777035886, - "narHash": "sha256-m1TNuBoSXUBSKhD9UVMkU90M0wFTPTfvIOOltO8IM8A=", + "lastModified": 1786988229, + "narHash": "sha256-frEFLVRj8xXvBBDs44IRiqHo6R2PxsRpluygL7abjjI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "ecfcdcc781f48821d83e1e2a0e30d7beca0eeb5e", + "rev": "59d429bf45aed4e2209043c0c36565ad8e2859a5", "type": "github" }, "original": { @@ -2106,57 +2497,6 @@ "type": "github" } }, - "zig": { - "inputs": { - "flake-compat": [ - "ghostty", - "flake-compat" - ], - "nixpkgs": [ - "ghostty", - "nixpkgs" - ], - "systems": [ - "ghostty", - "systems" - ] - }, - "locked": { - "lastModified": 1776789209, - "narHash": "sha256-G6B7Q4TXn7MZ1mB+f9rymjsYF5PLWoSvmbxijb/99bw=", - "owner": "mitchellh", - "repo": "zig-overlay", - "rev": "14fe971844e841297ddd2ce9783d6892b467af39", - "type": "github" - }, - "original": { - "owner": "mitchellh", - "repo": "zig-overlay", - "type": "github" - } - }, - "zig_2": { - "inputs": { - "nixpkgs": [ - "ghostty", - "zon2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1776888758, - "narHash": "sha256-OlQexlc8pMXAPhGrT89MtDcPCJv8MsFJcxFPMibRBho=", - "ref": "refs/heads/main", - "rev": "a380ec6969faf5fae32f08b96f8529a3bca55d42", - "revCount": 1672, - "type": "git", - "url": "https://codeberg.org/jcollie/zig-overlay.git" - }, - "original": { - "type": "git", - "url": "https://codeberg.org/jcollie/zig-overlay.git" - } - }, "zlib": { "flake": false, "locked": { @@ -2173,29 +2513,6 @@ "repo": "zlib", "type": "github" } - }, - "zon2nix": { - "inputs": { - "nixpkgs": [ - "ghostty", - "nixpkgs" - ], - "zig": "zig_2" - }, - "locked": { - "lastModified": 1776999674, - "narHash": "sha256-dEuWd2li80+H7f0k7RA25/Od49G91Pn3El3TcbEpONw=", - "owner": "jcollie", - "repo": "zon2nix", - "rev": "fe860f11b076bba30708d1efb4830459ecf85f0d", - "type": "github" - }, - "original": { - "owner": "jcollie", - "ref": "main", - "repo": "zon2nix", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix old mode 100755 new mode 100644 index 70cab36..002c0cc --- a/flake.nix +++ b/flake.nix @@ -1,183 +1,90 @@ { - description = "tux's Nix Flake"; + description = "tux's nix configurations"; - outputs = { - self, - nixpkgs, - deploy-rs, - ... - } @ inputs: let - inherit (self) outputs; - inherit (inputs.nixpkgs.lib) nixosSystem; - inherit (inputs.nix-on-droid.lib) nixOnDroidConfiguration; - forAllSystems = nixpkgs.lib.genAttrs [ - "x86_64-linux" - "aarch64-linux" - ]; - username = "tux"; - email = "t@tux.rs"; - - mkNixOSConfig = host: { - specialArgs = {inherit inputs outputs username email;}; - modules = [./hosts/${host}]; - }; - - mkDroidConfig = host: { - pkgs = import nixpkgs {system = "aarch64-linux";}; - extraSpecialArgs = {inherit inputs outputs username email;}; - modules = [./hosts/${host}]; - }; - - mkNixOSNode = hostname: { - inherit hostname; - profiles.system = { - user = "root"; - path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.${hostname}; - }; - }; - - activateNixOnDroid = configuration: - deploy-rs.lib.aarch64-linux.activate.custom - configuration.activationPackage - "${configuration.activationPackage}/activate"; - - mkDroidNode = hostname: { - inherit hostname; - profiles.system = { - sshUser = "nix-on-droid"; - user = "nix-on-droid"; - magicRollback = true; - sshOpts = ["-p" "8033"]; - path = activateNixOnDroid self.nixOnDroidConfigurations.${hostname}; - }; - }; - in { - packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); - formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); - - # Custom packages and modifications, exported as overlays - overlays = import ./overlays {inherit inputs;}; - - # NixOS configuration entrypoint - # 'nixos-rebuild switch --flake .#your-hostname' - nixosConfigurations = { - arcturus = nixosSystem (mkNixOSConfig "arcturus"); - canopus = nixosSystem (mkNixOSConfig "canopus"); - alpha = nixosSystem (mkNixOSConfig "alpha"); - sirius = nixosSystem (mkNixOSConfig "sirius"); - vega = nixosSystem (mkNixOSConfig "vega"); - node = nixosSystem (mkNixOSConfig "node"); - vps = nixosSystem (mkNixOSConfig "vps"); - isoImage = nixosSystem (mkNixOSConfig "isoImage"); - homelab = nixosSystem (mkNixOSConfig "homelab"); - }; - - # NixOnDroid configuration entrypoint - # 'nix-on-droid switch --flake .#your-hostname' - nixOnDroidConfigurations = { - capella = nixOnDroidConfiguration (mkDroidConfig "capella"); - rigel = nixOnDroidConfiguration (mkDroidConfig "rigel"); - }; - - deploy = { - nodes = { - arcturus = mkNixOSNode "arcturus"; - canopus = mkNixOSNode "canopus"; - alpha = mkNixOSNode "alpha"; - sirius = mkNixOSNode "sirius"; - vega = mkNixOSNode "vega"; - node = mkNixOSNode "node"; - homelab = mkNixOSNode "homelab"; - capella = mkDroidNode "capella"; - rigel = mkDroidNode "rigel"; - }; - }; - checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; - }; + outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules); inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - nixpkgs-stable.url = "github:nixos/nixpkgs/release-24.11"; - nixos-wsl = { - url = "github:nix-community/nixos-wsl"; - inputs.nixpkgs.follows = "nixpkgs"; + flake-parts = { + url = "github:hercules-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; }; + home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - nix-vscode-extensions = { - url = "github:nix-community/nix-vscode-extensions"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - wezterm-flake = { - url = "github:wez/wezterm/main?dir=nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; - nix-secrets = { - url = "git+ssh://git@github.com/tuxdotrs/nix-secrets.git?shallow=1"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - nix-on-droid = { - url = "github:nix-community/nix-on-droid/release-24.05"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.home-manager.follows = "home-manager"; - }; - tawm = { - url = "github:tuxdotrs/tawm"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + tnvim = { url = "github:tuxdotrs/tnvim"; inputs.nixpkgs.follows = "nixpkgs"; }; - trok = { - url = "github:tuxdotrs/trok"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - tpanel = { - url = "github:tuxdotrs/tpanel"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - tfolio = { - url = "git+ssh://git@github.com/tuxdotrs/tfolio.git"; + + tshell = { + url = "github:tuxdotrs/tshell"; inputs.nixpkgs.follows = "nixpkgs"; }; + cyber-tux = { url = "git+ssh://git@github.com/tuxdotrs/cyber-tux.git"; inputs.nixpkgs.follows = "nixpkgs"; }; - nix-index-database = { - url = "github:nix-community/nix-index-database"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - hyprland.url = "github:hyprwm/Hyprland"; - hyprland-plugins = { - url = "github:hyprwm/hyprland-plugins"; - inputs.hyprland.follows = "hyprland"; - }; - mango = { - url = "github:DreamMaoMao/mango"; + + wezterm-flake = { + url = "github:wez/wezterm/main?dir=nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + vicinae-extensions = { url = "github:vicinaehq/extensions"; inputs.nixpkgs.follows = "nixpkgs"; }; - awww.url = "git+https://codeberg.org/LGFae/awww"; - ghostty.url = "github:ghostty-org/ghostty"; - nixos-hardware.url = "github:nixos/nixos-hardware"; - nixpkgs-f2k.url = "github:moni-dz/nixpkgs-f2k"; - nur.url = "github:nix-community/nur"; - sops-nix.url = "github:Mic92/sops-nix"; + mango = { + url = "github:DreamMaoMao/mango"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nix-index-database = { + url = "github:nix-community/nix-index-database"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + cardwire = { + url = "github:opengamingcollective/cardwire"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nix-on-droid = { + url = "github:nix-community/nix-on-droid/master"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + + import-tree.url = "github:vic/import-tree"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11-small"; impermanence.url = "github:nix-community/impermanence"; deploy-rs.url = "github:serokell/deploy-rs"; - nixcord.url = "github:kaylorben/nixcord"; + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + sops-nix.url = "github:Mic92/sops-nix"; + treefmt-nix.url = "github:numtide/treefmt-nix"; lan-mouse.url = "github:feschber/lan-mouse"; + hyprland.url = "github:hyprwm/Hyprland"; + awww.url = "git+https://codeberg.org/LGFae/awww"; + nixcord.url = "github:kaylorben/nixcord"; + nur.url = "github:nix-community/nur"; + lanzaboote.url = "github:nix-community/lanzaboote/v1.1.0"; + copyparty.url = "github:9001/copyparty"; + hermes-agent.url = "github:NousResearch/hermes-agent"; + voxtype.url = "github:peteonrails/voxtype/v0.7.5"; + opencode.url = "github:anomalyco/opencode"; + serpantinum.url = "github:ilyamiro/serpantinum"; + trok.url = "github:tuxdotrs/trok"; + tfolio.url = "git+ssh://git@github.com/tuxdotrs/tfolio.git"; }; } diff --git a/hosts/alpha/default.nix b/hosts/alpha/default.nix deleted file mode 100644 index b1771d4..0000000 --- a/hosts/alpha/default.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ - modulesPath, - inputs, - username, - lib, - email, - config, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - (modulesPath + "/profiles/qemu-guest.nix") - inputs.disko.nixosModules.default - (import ./disko.nix {device = "/dev/vda";}) - - ../common - ../../modules/nixos/selfhosted/uptime-kuma.nix - ]; - - tux.services.openssh.enable = true; - tux.services.openssh.ports = [23]; - - tux.services.tfolio.enable = true; - - tux.services.nginxStreamProxy = { - enable = true; - upstreamServers = inputs.nix-secrets.proxy-servers; - }; - - sops.secrets = { - borg_encryption_key = { - sopsFile = ./secrets.yaml; - }; - - "cloudflare_credentials/email" = { - sopsFile = ./secrets.yaml; - }; - - "cloudflare_credentials/dns_api_token" = { - sopsFile = ./secrets.yaml; - }; - }; - - nixpkgs = { - hostPlatform = "x86_64-linux"; - }; - - boot = { - initrd.systemd = { - enable = lib.mkForce true; - - services.wipe-my-fs = { - wantedBy = ["initrd.target"]; - after = ["initrd-root-device.target"]; - before = ["sysroot.mount"]; - unitConfig.DefaultDependencies = "no"; - serviceConfig.Type = "oneshot"; - script = '' - mkdir /btrfs_tmp - mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp - - if [[ -e /btrfs_tmp/root ]]; then - mkdir -p /btrfs_tmp/old_roots - timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") - mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" - fi - - delete_subvolume_recursively() { - IFS=$'\n' - for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do - delete_subvolume_recursively "/btrfs_tmp/$i" - done - btrfs subvolume delete "$1" - } - - for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do - delete_subvolume_recursively "$i" - done - - btrfs subvolume create /btrfs_tmp/root - umount /btrfs_tmp - ''; - }; - }; - - loader = { - grub = { - efiSupport = true; - efiInstallAsRemovable = true; - }; - }; - }; - - networking = { - hostName = "alpha"; - - firewall = { - enable = true; - allowedTCPPorts = [80 443 22 23]; - }; - }; - - security = { - acme = { - acceptTerms = true; - defaults.email = "${email}"; - certs = { - "tux.rs" = { - group = "nginx"; - domain = "*.tux.rs"; - extraDomainNames = ["tux.rs"]; - dnsProvider = "cloudflare"; - credentialFiles = { - CLOUDFLARE_EMAIL_FILE = config.sops.secrets."cloudflare_credentials/email".path; - CLOUDFLARE_DNS_API_TOKEN_FILE = config.sops.secrets."cloudflare_credentials/dns_api_token".path; - }; - }; - }; - }; - }; - - users.users.nginx.extraGroups = ["acme"]; - - services = { - nginx = { - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - recommendedTlsSettings = true; - }; - }; - - programs = { - zsh.enable = true; - dconf.enable = true; - }; - - programs.fuse.userAllowOther = true; - fileSystems."/persist".neededForBoot = true; - environment.persistence."/persist" = { - hideMounts = true; - directories = [ - "/var/log" - "/var/lib/acme" - "/var/lib/nixos" - "/var/lib/private" - ]; - files = [ - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - - users.users.${username} = {linger = true;}; - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "24.11"; -} diff --git a/hosts/alpha/disko.nix b/hosts/alpha/disko.nix deleted file mode 100644 index 4a0c700..0000000 --- a/hosts/alpha/disko.nix +++ /dev/null @@ -1,53 +0,0 @@ -{device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", ...}: { - disko.devices.disk.primary = { - inherit device; - type = "disk"; - content = { - type = "gpt"; # GPT partitioning scheme - partitions = { - boot = { - name = "boot"; - size = "1M"; - type = "EF02"; - }; - # EFI Partition - ESP = { - size = "512M"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = ["defaults" "umask=0077"]; - }; - }; - # Btrfs Root Partition - root = { - size = "100%"; # Use remaining space - type = "8300"; # Linux filesystem type - content = { - type = "btrfs"; - subvolumes = { - "/root" = { - mountOptions = ["compress=zstd"]; # Compression for better performance - mountpoint = "/"; # Root subvolume - }; - "/persist" = { - mountOptions = ["compress=zstd"]; # Compression for persistent data - mountpoint = "/persist"; # Persistent subvolume - }; - "/nix" = { - mountOptions = [ - "compress=zstd" - "noatime" - "noacl" - ]; # Optimize for Nix store - mountpoint = "/nix"; # Nix subvolume - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/alpha/home.nix b/hosts/alpha/home.nix deleted file mode 100644 index 4fd1caf..0000000 --- a/hosts/alpha/home.nix +++ /dev/null @@ -1,11 +0,0 @@ -{...}: { - home.persistence."/persist" = { - directories = [ - "Projects" - ".ssh" - ".local/share/zsh" - ]; - }; - - home.stateVersion = "24.11"; -} diff --git a/hosts/alpha/secrets.yaml b/hosts/alpha/secrets.yaml deleted file mode 100644 index 82ac079..0000000 --- a/hosts/alpha/secrets.yaml +++ /dev/null @@ -1,28 +0,0 @@ -borg_encryption_key: ENC[AES256_GCM,data:EK1f7J4ea80K7LO16pPmkh246xmXoJEiCKzPbiRCmjQ=,iv:3vae+IAAgDx+0NPgml07kbT9kc4RpzDd1oj2Qb6ZqdM=,tag:aXj3IwzfeQ8+tGjSpq76bw==,type:str] -cloudflare_credentials: - email: ENC[AES256_GCM,data:w9ghChGxgV7OVeM=,iv:Qtl/pMmXGjhZ9dMRkxeyEDncGfY/YPy51eJrZ6mOgGg=,tag:oi7OoTf4TnUknblZ3lPDzQ==,type:str] - dns_api_token: ENC[AES256_GCM,data:lMoqQs9MZ646ESJUxN2dtIopNS8P55JARk6wyfaJ8ad9ABvk268oWQ==,iv:Ez4y/kKPsRuIH9mEcpS3IU4j3kK8F6iBBFOnIf9Ck60=,tag:7I0eE8PoohH9KtiHziagrg==,type:str] -sops: - age: - - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3NjIrVVlPVW9qTU9vMlMw - K3BtRHZaS0h0WmlmMjF3YjhHSFZtNmFzdjNZCjRKQ0UwWTc2L3NOY1AyZnR2K2hF - QkQ4blQvd0paRHd6c3dWaU5XbmV4S28KLS0tIExtWnR0djB5WU9lajVJeU5udlBQ - eDlMemQ1c1FkazlRaDhPUzNBcVh2bWsK544MNSGooJPKL7hxQ+yvPRROw3RER7p8 - jbUVxMp4ZD/0ut/qFrKdyvfSPDcDkUR5eBoeaeUBkMAAPL+YeIxKhQ== - -----END AGE ENCRYPTED FILE----- - - recipient: age1zujp5gxy7suv8ysnygv43cmzuvv36nxfg0ch7r3xg2emc6fz3vmqqujheq - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvWlN0bWNMZTlMM3Mvdmdn - M2M1RzBaNUl3Qkc4Sm5QbmE3cFpuODBNakZzCk9SbjBvM25pK2pGdmRqMXd4eTJu - ZU8vTmtSN1RYK2RmQ01QempKUG43eHMKLS0tIHVINVgvNTluS1grSm1YSHkzalMx - SGM4ditJZFducVNEaDlJSkhuUnpxQzAKvvHbDuTQUpW+O/qtgjAFZlYc4iRRj4G1 - BP/QyzuTnpP6PuAG9pJYHx164+uS2Ftog/QnCFD0YAJdJtxaoUHzOw== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-07-09T19:44:56Z" - mac: ENC[AES256_GCM,data:1sXY3aEfbsit5hGBdE7x0pbdSLnW67NRNNDTEjS1fI85TaPpMmcgrxxvEDsg1A6psRMdBwFMUIVHH/rf4rkZ9tXSmHZBFTZrTQGn09bPF9yNC0MnJXKkcNcQiQJveg986LMWFwT/WE8PWbeDh7o+ASJF+IgT+5ikq8DMBgoyK/E=,iv:Ssy66et65Oq2WwbF12ubLGk87bSv/KSruf49T7v04NY=,tag:Y89PxwRFlJUBZniS2clybw==,type:str] - unencrypted_suffix: _unencrypted - version: 3.10.2 diff --git a/hosts/arcturus/default.nix b/hosts/arcturus/default.nix deleted file mode 100644 index b0e5d80..0000000 --- a/hosts/arcturus/default.nix +++ /dev/null @@ -1,240 +0,0 @@ -{ - modulesPath, - inputs, - username, - lib, - email, - config, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - (modulesPath + "/profiles/qemu-guest.nix") - inputs.disko.nixosModules.default - (import ./disko.nix {device = "/dev/vda";}) - - ../common - ../../modules/nixos/virtualisation/docker.nix - ../../modules/nixos/selfhosted/postgresql.nix - ../../modules/nixos/selfhosted/headscale.nix - ../../modules/nixos/selfhosted/vaultwarden.nix - ../../modules/nixos/selfhosted/gitea.nix - ../../modules/nixos/selfhosted/umami.nix - ../../modules/nixos/selfhosted/monitoring/grafana.nix - ../../modules/nixos/selfhosted/monitoring/loki.nix - ../../modules/nixos/selfhosted/monitoring/promtail.nix - ../../modules/nixos/selfhosted/ntfy-sh.nix - ../../modules/nixos/selfhosted/searx.nix - ../../modules/nixos/selfhosted/wakapi.nix - ../../modules/nixos/selfhosted/silver-bullet.nix - ../../modules/nixos/selfhosted/rustdesk-server.nix - ../../modules/nixos/selfhosted/open-webui.nix - ../../modules/nixos/selfhosted/glance - ]; - - tux.services.openssh.enable = true; - tux.containers.aiostreams = { - enable = true; - port = 4567; - environment = { - ADDON_ID = "aiostreams.tux.rs"; - BASE_URL = "https://aiostreams.tux.rs"; - }; - - environmentFiles = [ - config.sops.secrets."aiostreams".path - ]; - }; - - sops.secrets = { - borg_encryption_key = { - sopsFile = ./secrets.yaml; - }; - - searx_secret_key = { - sopsFile = ./secrets.yaml; - }; - - "cloudflare_credentials/email" = { - sopsFile = ./secrets.yaml; - }; - - "cloudflare_credentials/dns_api_token" = { - sopsFile = ./secrets.yaml; - }; - - plausible_key = { - sopsFile = ./secrets.yaml; - }; - - wakapi_salt = { - sopsFile = ./secrets.yaml; - }; - - silver_bullet = { - sopsFile = ./secrets.yaml; - }; - - "cs2_secrets/SRCDS_TOKEN" = { - sopsFile = ./secrets.yaml; - }; - - "cs2_secrets/CS2_RCONPW" = { - sopsFile = ./secrets.yaml; - }; - - "cs2_secrets/CS2_PW" = { - sopsFile = ./secrets.yaml; - }; - - aiostreams = { - sopsFile = ./secrets.yaml; - }; - - umami = { - sopsFile = ./secrets.yaml; - }; - }; - - nixpkgs = { - hostPlatform = "x86_64-linux"; - }; - - boot = { - kernel.sysctl = { - "vm.swappiness" = 10; - }; - - initrd.systemd = { - enable = lib.mkForce true; - - services.wipe-my-fs = { - wantedBy = ["initrd.target"]; - after = ["initrd-root-device.target"]; - before = ["sysroot.mount"]; - unitConfig.DefaultDependencies = "no"; - serviceConfig.Type = "oneshot"; - script = '' - mkdir /btrfs_tmp - mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp - - if [[ -e /btrfs_tmp/root ]]; then - mkdir -p /btrfs_tmp/old_roots - timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") - mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" - fi - - delete_subvolume_recursively() { - IFS=$'\n' - for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do - delete_subvolume_recursively "/btrfs_tmp/$i" - done - btrfs subvolume delete "$1" - } - - for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do - delete_subvolume_recursively "$i" - done - - btrfs subvolume create /btrfs_tmp/root - umount /btrfs_tmp - ''; - }; - }; - - loader = { - grub = { - efiSupport = true; - efiInstallAsRemovable = true; - configurationLimit = 10; - }; - timeout = 1; - }; - }; - - networking = { - hostName = "arcturus"; - - firewall = { - enable = true; - allowedTCPPorts = [ - 80 - 443 - 22 - 3333 - 8081 - ]; - }; - }; - - security = { - acme = { - acceptTerms = true; - defaults.email = "${email}"; - certs = { - "tux.rs" = { - group = "nginx"; - domain = "*.tux.rs"; - extraDomainNames = ["tux.rs"]; - dnsProvider = "cloudflare"; - credentialFiles = { - CLOUDFLARE_EMAIL_FILE = config.sops.secrets."cloudflare_credentials/email".path; - CLOUDFLARE_DNS_API_TOKEN_FILE = config.sops.secrets."cloudflare_credentials/dns_api_token".path; - }; - }; - }; - }; - }; - - users.users.nginx.extraGroups = ["acme"]; - - services = { - nginx = { - recommendedTlsSettings = true; - recommendedBrotliSettings = true; - recommendedOptimisation = true; - recommendedGzipSettings = true; - recommendedProxySettings = true; - }; - }; - - programs.fuse.userAllowOther = true; - fileSystems."/persist".neededForBoot = true; - environment.persistence."/persist" = { - hideMounts = true; - directories = [ - "/var/log" - "/var/lib/nixos" - "/var/lib/acme" - "/var/lib/postgresql" - "/var/lib/headscale" - "/var/lib/vaultwarden" - "/var/lib/gitea" - "/var/lib/clickhouse" - "/var/lib/grafana" - "/var/lib/promtail" - "/var/lib/private" - "/var/lib/nextcloud" - "/var/lib/silverbullet" - "/var/lib/kasmweb" - "/var/lib/aiostreams" - ]; - files = [ - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - - users.users.${username} = { - linger = true; - }; - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "24.11"; -} diff --git a/hosts/arcturus/disko.nix b/hosts/arcturus/disko.nix deleted file mode 100644 index 4a0c700..0000000 --- a/hosts/arcturus/disko.nix +++ /dev/null @@ -1,53 +0,0 @@ -{device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", ...}: { - disko.devices.disk.primary = { - inherit device; - type = "disk"; - content = { - type = "gpt"; # GPT partitioning scheme - partitions = { - boot = { - name = "boot"; - size = "1M"; - type = "EF02"; - }; - # EFI Partition - ESP = { - size = "512M"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = ["defaults" "umask=0077"]; - }; - }; - # Btrfs Root Partition - root = { - size = "100%"; # Use remaining space - type = "8300"; # Linux filesystem type - content = { - type = "btrfs"; - subvolumes = { - "/root" = { - mountOptions = ["compress=zstd"]; # Compression for better performance - mountpoint = "/"; # Root subvolume - }; - "/persist" = { - mountOptions = ["compress=zstd"]; # Compression for persistent data - mountpoint = "/persist"; # Persistent subvolume - }; - "/nix" = { - mountOptions = [ - "compress=zstd" - "noatime" - "noacl" - ]; # Optimize for Nix store - mountpoint = "/nix"; # Nix subvolume - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/arcturus/home.nix b/hosts/arcturus/home.nix deleted file mode 100644 index 0ea57f5..0000000 --- a/hosts/arcturus/home.nix +++ /dev/null @@ -1,12 +0,0 @@ -{...}: { - home.persistence."/persist" = { - directories = [ - "Projects" - "Stuff" - ".ssh" - ".local/share/zsh" - ]; - }; - - home.stateVersion = "24.11"; -} diff --git a/hosts/arcturus/secrets.yaml b/hosts/arcturus/secrets.yaml deleted file mode 100644 index c77b130..0000000 --- a/hosts/arcturus/secrets.yaml +++ /dev/null @@ -1,39 +0,0 @@ -borg_encryption_key: ENC[AES256_GCM,data:7DZQaoS2a5mPjTej25vr1aO1yAAPyXT2tf/VxKrLxF0=,iv:it8JlyEj4r4Z+qDvoEWMQlGkbVh08M/BCkGLVzRCVKQ=,tag:81gRhru8J3hkQhIbgUOgBg==,type:str] -searx_secret_key: ENC[AES256_GCM,data:Z49PJ2gNI5CI0IfzOta+r67VNUvjoPpMVv5lajGhUMPzSy1KWZC5wIM3d02jWwCOsNjXdU5hE3j9W0rkoy5ZhFPXBJRUEv5b6IcaLA==,iv:364zGZkD2LO189nkvizl8yjedi1IgYEEQMA67SexSSI=,tag:qPqefG6jUaBOpUy6d7E++w==,type:str] -plausible_key: ENC[AES256_GCM,data:Ynf2aJ6RLRdAkT9ltLpCXTl8zg/VESDchlf67PmKjc93rSfDgq9tFqv1q55Km2lDo7y9iLu5WyLLg24CSSwy8Q==,iv:yW5hgP4dhfkvunv3iYmXGEH9w29OOmrG4ourPagslVg=,tag:C5PVfEseP5gJdoQQL4gERQ==,type:str] -wakapi_salt: ENC[AES256_GCM,data:Vk5Lezv0f/0ehHqXXBCsQxWFYE2KFujTfII0r7Gd1BXFrwiPEdX62aZ+9LQx7s1RTHh0n+LP/5t0cmHO/fJhGw==,iv:ZUlRwNXUCQ53Lymi9fO4qoBWjLpHVWfTnYM0Z1I6F5o=,tag:dadkEKV7paH4+qAz7Bxxqg==,type:str] -cloudflare_credentials: - email: ENC[AES256_GCM,data:qesgxkzUglKdYPI=,iv:2XDEoQzmtagSiILWZzJPswdhkQ+qjdZfNd+LL1nHPx8=,tag:K1F23Za2Zq78tzf0fl5zEw==,type:str] - dns_api_token: ENC[AES256_GCM,data:ibSL4KWYhqgHjo27fiSqB1iN9NWU3/qGGuLpmiMpBf+qCuh8uxR7Yw==,iv:NapMvfUSm5rgeROK7KuxGyog8s2PW9CCKtjRG87FoCQ=,tag:/Oah7PRCe4XPts0IYt83zw==,type:str] -nextcloud_password: ENC[AES256_GCM,data:o37mq4YHQT5pbi+cXrk=,iv:8HiDwdHTozNM2lHpgqVhdsspuifppsL2I6Z31xEnYFI=,tag:xTnfn8HcubfiQwLYIkpxjw==,type:str] -silver_bullet: ENC[AES256_GCM,data:tI3Anq2V0Bttw/kN0DYtjdLUB24Q+JiymJt001ie3HfhEVcV3aQhQACTKJ2DbikCZWiet3ve9yqqktudlNTkXk2tk7D1/HQ30ToPzFLSPq6ZY0cxRCMFha9a,iv:gdG59nXnCA7x24vh1xqxocLfAi2/wpFGodCZTJb6Uvg=,tag:Ib1QpryROo6PKWohvLiMVQ==,type:str] -cs2_secrets: - SRCDS_TOKEN: ENC[AES256_GCM,data:SzPz4sHDgEoioX8ylLFM6AUUS60gWYpR3ifxUD8A8IQga24t6GM0dyGDryc=,iv:XefIn9yCLPLKVRA+rZiSGUH3l6ZANIJoGRuM/3vFLIw=,tag:flEjl9c7i3XBlHJaq41QYQ==,type:str] - CS2_RCONPW: ENC[AES256_GCM,data:ZyVeoOngZjxKR/ObYo5yJC1ViCNufuA=,iv:+fJK0sY39V/iH7OjT0AzQq6RefVzLZCDETYcAMFnZNU=,tag:IOhRUQRdffNMXa2cKZvi/w==,type:str] - CS2_PW: ENC[AES256_GCM,data:W1Cur7YT1F/+45vmqif2JbpjVURfnfo=,iv:sBNDM2N+QWDAMculBBZtYZcM7ILEfpwkwOd7ErORQhI=,tag:XFsxTUjctZKU38RQUfJ8HQ==,type:str] -aiostreams: ENC[AES256_GCM,data:2U2EoRUsKr4OIkqrudmIUEp2bABNlSlNUTzR3vtvTfSJVemIGK31iu0SG8aR4tLSQFEZyhIP9M22zZJVWY5hX1UcMEJ1rmtXnaRjTiurRSpTj76pT9plnrjp0NWDcSWY+uhDrAsEko4oPPJEECTT3qMYLXipnzqpPeWsTrNYiuxmfDPcZw==,iv:tHKbtnLMNfY7B2ssE8x0dri9XhA2M6jIj2KOxOsmG2o=,tag:8hjqmniL/P+PfwfYiAdAwA==,type:str] -umami: ENC[AES256_GCM,data:BJN9VpwknBaX+mz6xjq1GX9epM2bukplraPw67TttnLhM9JTmZiela5oFWZiaGjG3Oss3n4WPsPvhC4m28Ah+TQLCoiDFCFqervk228=,iv:YwbJ2/1hXs5Jbqx1dNj1t4ExFS27PWbA4NT9h8/tyU8=,tag:+R1aRF/TaMSGbLDi9GnYwA==,type:str] -sops: - age: - - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6TGpVMzNDZjNQSkNDQmM3 - eXpvZDRPZW9Kbm81Z2VVUVZIckFNUC9zTEZzCmliUkNWS01YMHVRaUoxTS84VmxQ - UDZtbkhmZmdZVWVsaHN3djkwSERGQ1kKLS0tIEh0ckhDTkQvcEM0UFI2MUVXVHI5 - WnhEdnRqazdZWmczYXYxNy9BMHdwdEUKYgB34OOezF3iF706pIfDmQ0FJEHXBbGF - EJRNmA4Zl1AwyzkN3NSlctzvxx201T1GWL4qZeyVafRv5jQ9oSfK7g== - -----END AGE ENCRYPTED FILE----- - - recipient: age1zsl5d4vj6gl3h96y5p53sq5y4vr4vtlwp727h7rp9a4xfkxm53lqrh6r50 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHeXNrT3c1bENOK0lNZWNT - eFBqYm1BRHBhakFQMVVIKzR0SDRDOW9jUXdBCmFIQWZRSnBlOFBralVFakQ2clNY - Q1Nma0pRVHh4L3IwQm1GbTdqb1BUcWsKLS0tIFRQOVIxb1FRc29WSVVERWsxSDhq - NGprRGVyZ2plWVNrM3drM3JSUjM2L0UKuNk5DqYn2DIfRpY72zDRP5BKoVAXtNv9 - uLI//8wc7f4I3uBdARQdpRE1fapY1UOJOn3i0yndrZARPEbdohRK1Q== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-02-17T13:21:46Z" - mac: ENC[AES256_GCM,data:7OcwTCe7MMFPUlqOIs0PxiJndtcWR1LbgSQ+69VXCCkewiee8suDuSMxn6sF+zb402uqSUitKWWySMEyL42ym0uyKB7+fi46sBj8O7T9uYM6F/wiH7S9Q7nuNaGP6zxj5TlvB//Dkp4n31Oqtg8xCTK+xGsV9mR17Ai0fjCxUBI=,iv:WvnNPF76Oi9vE2fgocvnOJmhuAdKjsoQeVZuFa0KU6Q=,tag:UHA+FhQr+BASkSyPTWHpaQ==,type:str] - unencrypted_suffix: _unencrypted - version: 3.11.0 diff --git a/hosts/canopus/default.nix b/hosts/canopus/default.nix deleted file mode 100755 index 180cbaa..0000000 --- a/hosts/canopus/default.nix +++ /dev/null @@ -1,432 +0,0 @@ -{ - inputs, - username, - pkgs, - lib, - config, - ... -}: { - imports = [ - inputs.nixos-hardware.nixosModules.asus-zephyrus-ga503 - inputs.disko.nixosModules.default - - (import ./disko.nix {device = "/dev/nvme0n1";}) - ./hardware.nix - - ../common - ../../modules/nixos/desktop - ../../modules/nixos/desktop/hyprland - ../../modules/nixos/desktop/mango - ../../modules/nixos/virtualisation - ../../modules/nixos/steam.nix - ../../modules/nixos/obs-studio.nix - ]; - - hardware.nvidia-container-toolkit.enable = true; - tux.services.openssh.enable = true; - tux.packages.distrobox.enable = true; - nixpkgs.config.cudaSupport = true; - - sops.secrets = { - hyperbolic_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - gemini_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - open_router_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - "vicinae.json" = { - sopsFile = ./secrets.yaml; - owner = username; - }; - }; - - networking = { - hostName = "canopus"; - networkmanager = { - enable = true; - wifi.powersave = false; - }; - firewall = { - enable = true; - allowedTCPPorts = [ - 80 - 443 - 22 - 3000 - 6666 - 8081 - ]; - - # Facilitate firewall punching - allowedUDPPorts = [ - 41641 - 4242 - ]; - - allowedTCPPortRanges = [ - { - from = 1714; - to = 1764; - } - ]; - allowedUDPPortRanges = [ - { - from = 1714; - to = 1764; - } - ]; - }; - }; - - boot = { - binfmt.emulatedSystems = ["aarch64-linux"]; - - plymouth = { - enable = true; - theme = "spinner-monochrome"; - themePackages = [ - (pkgs.plymouth-spinner-monochrome.override {inherit (config.boot.plymouth) logo;}) - ]; - }; - - kernelParams = [ - "quiet" - "loglevel=3" - "systemd.show_status=auto" - "udev.log_level=3" - "rd.udev.log_level=3" - "vt.global_cursor_default=0" - ]; - consoleLogLevel = 0; - initrd.verbose = false; - - kernelPackages = pkgs.linuxPackages_zen; - supportedFilesystems = ["ntfs"]; - - initrd = { - kernelModules = [ - "vfio_pci" - "vfio" - "vfio_iommu_type1" - ]; - - systemd = { - enable = lib.mkForce true; - - services.wipe-my-fs = { - wantedBy = ["initrd.target"]; - after = ["initrd-root-device.target"]; - before = ["sysroot.mount"]; - unitConfig.DefaultDependencies = "no"; - serviceConfig.Type = "oneshot"; - script = '' - mkdir /btrfs_tmp - mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp - - if [[ -e /btrfs_tmp/root ]]; then - mkdir -p /btrfs_tmp/old_roots - timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") - mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" - fi - - delete_subvolume_recursively() { - IFS=$'\n' - for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do - delete_subvolume_recursively "/btrfs_tmp/$i" - done - btrfs subvolume delete "$1" - } - - for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do - delete_subvolume_recursively "$i" - done - - btrfs subvolume create /btrfs_tmp/root - umount /btrfs_tmp - ''; - }; - }; - }; - - loader = { - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - efi.canTouchEfiVariables = true; - timeout = 1; - }; - }; - - hardware = { - bluetooth.enable = true; - bluetooth.powerOnBoot = true; - graphics.enable32Bit = true; - }; - - security = { - polkit.enable = true; - rtkit.enable = true; - }; - - systemd = { - enableEmergencyMode = false; - - user = { - services.polkit-gnome-authentication-agent-1 = { - description = "polkit-gnome-authentication-agent-1"; - wantedBy = ["graphical-session.target"]; - wants = ["graphical-session.target"]; - after = ["graphical-session.target"]; - serviceConfig = { - Type = "simple"; - ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; - Restart = "on-failure"; - RestartSec = 1; - TimeoutStopSec = 10; - }; - }; - }; - }; - - programs = { - ssh.startAgent = true; - xfconf.enable = true; - thunar = { - enable = true; - plugins = with pkgs; [ - thunar-archive-plugin - thunar-volman - ]; - }; - nix-ld = { - enable = true; - package = pkgs.nix-ld; - }; - nm-applet.enable = true; - noisetorch.enable = true; - }; - - services = { - fwupd.enable = true; - fstrim.enable = true; - resolved.enable = true; - flatpak.enable = true; - - pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - wireplumber.enable = true; - }; - - logind = { - settings.Login = { - HandlePowerKey = "suspend"; - HanldeLidSwitch = "suspend"; - HandleLidSwitchExternalPower = "suspend"; - }; - }; - - xrdp = { - enable = true; - openFirewall = true; - defaultWindowManager = "awesome"; - audio.enable = true; - }; - - syncthing = { - enable = true; - user = "tux"; - dataDir = "/home/tux/"; - openDefaultPorts = true; - }; - - libinput.touchpad.naturalScrolling = true; - libinput.mouse.accelProfile = "flat"; - - # To use Auto-cpufreq we need to - # disable TLP because it's enabled by nixos-hardware - tlp.enable = false; - auto-cpufreq = { - enable = true; - settings = { - battery = { - platform_profile = "balanced"; - governor = "powersave"; - energy_performance_preference = "performance"; - turbo = "never"; - scaling_min_freq = 400000; - scaling_max_freq = 3800000; - }; - charger = { - platform_profile = "performance"; - governor = "performance"; - energy_performance_preference = "performance"; - turbo = "auto"; - scaling_min_freq = 400000; - scaling_max_freq = 4600000; - }; - }; - }; - - blueman.enable = true; - - supergfxd = { - enable = true; - settings = { - mode = "Integrated"; - vfio_enable = false; - vfio_save = false; - always_reboot = false; - no_logind = false; - logout_timeout_s = 180; - hotplug_type = "None"; - }; - }; - - asusd = { - enable = true; - asusdConfig.text = '' - ( - charge_control_end_threshold: 80, - disable_nvidia_powerd_on_battery: true, - ac_command: "", - bat_command: "", - - platform_profile_linked_epp: true, - platform_profile_on_battery: Quiet, - platform_profile_on_ac: Performance, - - change_platform_profile_on_battery: true, - change_platform_profile_on_ac: true, - - profile_quiet_epp: Power, - profile_balanced_epp: BalancePower, - profile_custom_epp: Performance, - profile_performance_epp: Performance, - - ac_profile_tunings: {}, - dc_profile_tunings: {}, - armoury_settings: {}, - ) - ''; - profileConfig.text = '' - ( - active_profile: Quiet, - ) - ''; - fanCurvesConfig.text = '' - ( - profiles: ( - balanced: [ - ( - fan: CPU, - pwm: (2, 22, 45, 68, 91, 153, 153, 153), - temp: (55, 62, 66, 70, 74, 78, 78, 78), - enabled: false, - ), - ( - fan: GPU, - pwm: (2, 25, 48, 71, 94, 165, 165, 165), - temp: (55, 62, 66, 70, 74, 78, 78, 78), - enabled: false, - ), - ], - performance: [ - ( - fan: CPU, - pwm: (35, 68, 79, 91, 114, 175, 175, 175), - temp: (58, 62, 66, 70, 74, 78, 78, 78), - enabled: false, - ), - ( - fan: GPU, - pwm: (35, 71, 84, 94, 119, 188, 188, 188), - temp: (58, 62, 66, 70, 74, 78, 78, 78), - enabled: false, - ), - ], - quiet: [ - ( - fan: CPU, - pwm: (2, 12, 22, 35, 45, 58, 79, 79), - temp: (55, 62, 66, 70, 74, 78, 82, 82), - enabled: true, - ), - ( - fan: GPU, - pwm: (2, 12, 25, 35, 48, 61, 84, 84), - temp: (55, 62, 66, 70, 74, 78, 82, 82), - enabled: true, - ), - ], - custom: [], - ), - ) - ''; - }; - - gvfs.enable = true; - tumbler.enable = true; - # @FIX gnome gcr agent conflicts with programs.ssh.startAgent; - # gnome.gnome-keyring.enable = true; - tailscale = { - enable = true; - extraUpFlags = ["--login-server https://hs.tux.rs"]; - }; - mullvad-vpn = { - enable = true; - package = pkgs.mullvad-vpn; - }; - }; - - fonts.packages = with pkgs.nerd-fonts; [ - fira-code - jetbrains-mono - bigblue-terminal - ]; - - programs.fuse.userAllowOther = true; - fileSystems."/persist".neededForBoot = true; - environment.persistence."/persist" = { - hideMounts = true; - directories = [ - "/var/log" - "/var/lib/bluetooth" - "/var/lib/tailscale" - "/var/lib/nixos" - "/var/lib/docker" - "/var/lib/waydroid" - "/var/lib/iwd" - "/var/lib/libvirt" - "/etc/NetworkManager/system-connections" - ]; - files = [ - # "/etc/machine-id" - "/etc/ly/save.ini" - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "24.11"; -} diff --git a/hosts/canopus/disko.nix b/hosts/canopus/disko.nix deleted file mode 100644 index 24c9cd2..0000000 --- a/hosts/canopus/disko.nix +++ /dev/null @@ -1,69 +0,0 @@ -{device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", ...}: { - disko.devices.disk.primary = { - inherit device; - type = "disk"; - content = { - type = "gpt"; # GPT partitioning scheme - partitions = { - # EFI Partition - ESP = { - size = "1G"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = [ - "defaults" - "umask=0077" - ]; - }; - }; - # Swap Partition - swap = { - size = "32G"; - content = { - type = "swap"; - discardPolicy = "both"; - resumeDevice = true; # Enable hibernation - }; - }; - # Btrfs Root Partition - root = { - size = "100%"; # Use remaining space - type = "8300"; # Linux filesystem type - content = { - type = "btrfs"; - subvolumes = { - "/root" = { - mountOptions = [ - "compress=zstd" - "noatime" - "space_cache=v2" - ]; # Compression for better performance - mountpoint = "/"; # Root subvolume - }; - "/persist" = { - mountOptions = [ - "compress=zstd" - "noatime" - "space_cache=v2" - ]; # Compression for persistent data - mountpoint = "/persist"; # Persistent subvolume - }; - "/nix" = { - mountOptions = [ - "compress=zstd" - "noatime" - "noacl" - "space_cache=v2" - ]; # Optimize for Nix store - mountpoint = "/nix"; # Nix subvolume - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/canopus/hardware.nix b/hosts/canopus/hardware.nix deleted file mode 100755 index 89fe563..0000000 --- a/hosts/canopus/hardware.nix +++ /dev/null @@ -1,30 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/canopus/home.nix b/hosts/canopus/home.nix deleted file mode 100644 index b9995c9..0000000 --- a/hosts/canopus/home.nix +++ /dev/null @@ -1,138 +0,0 @@ -{pkgs, ...}: { - imports = [ - ../../modules/home/desktop/hyprland - ../../modules/home/desktop/mango - ../../modules/home/desktop/vicinae - ../../modules/home/desktop/utils - ../../modules/home/alacritty - ../../modules/home/wezterm - ../../modules/home/ghostty - ../../modules/home/desktop/rofi - ../../modules/home/lan-mouse - ../../modules/home/firefox - ../../modules/home/brave - ../../modules/home/vs-code - ../../modules/home/zed - ../../modules/home/mopidy - ../../modules/home/thunderbird - ../../modules/home/easyeffects - ../../modules/home/discord - ../../modules/home/kdeconnect - ../../modules/home/spotify - ]; - - home.pointerCursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Ice"; - size = 28; - }; - - qt = { - enable = true; - platformTheme.name = "gtk"; - style = { - name = "adwaita-dark"; - package = pkgs.adwaita-qt; - }; - }; - - gtk = { - enable = true; - theme = { - name = "Materia-dark"; - package = pkgs.materia-theme; - }; - iconTheme = { - package = pkgs.tela-icon-theme; - name = "Tela-black"; - }; - }; - - services.flameshot = { - enable = true; - package = pkgs.flameshot.override {enableWlrSupport = true;}; - settings = { - General = { - useGrimAdapter = true; - }; - }; - }; - - home.packages = with pkgs; [ - antigravity - davinci-resolve - telegram-desktop - anydesk - rustdesk-flutter - moonlight-qt - rawtherapee - stable.beekeeper-studio - libreoffice-qt - spotify - # @TODO Enable when qt5 webengine patched - # https://github.com/NixOS/nixpkgs/blob/b599843bad24621dcaa5ab60dac98f9b0eb1cabe/pkgs/development/libraries/qt-5/modules/qtwebengine.nix#L466 - # stremio - galaxy-buds-client - copyq - vlc - tor-browser - vivaldi - bluetui - impala - pulseaudio - ]; - - home.persistence."/persist" = { - directories = [ - "Downloads" - "Music" - "Wallpapers" - "Documents" - "Videos" - "Projects" - "Stuff" - "Distrobox" - "go" - ".ssh" - ".wakatime" - ".rustup" - ".cargo" - ".steam" - ".mozilla" - ".cache/awww" - ".cache/spotifyd" - ".cache/spotify-player" - ".config/BraveSoftware" - ".config/vivaldi" - ".config/Antigravity" - ".config/zed" - ".config/copyq" - ".config/discord" - ".config/Vencord" - ".config/vesktop" - ".config/sops" - ".config/obs-studio" - ".config/easyeffects" - ".config/rustdesk" - ".config/kdeconnect" - ".config/Moonlight\ Game\ Streaming\ Project" - ".local/lib/vivaldi" - ".local/share/nvim" - ".local/share/opencode" - ".local/share/zsh" - ".local/share/zoxide" - ".local/share/Smart\ Code\ ltd" - ".local/share/GalaxyBudsClient" - ".local/share/TelegramDesktop" - ".local/state/lazygit" - ".local/share/Steam" - ".local/share/vicinae" - ]; - files = [ - ".wakatime.cfg" - ".config/aichat/.env" - ]; - }; - - home.stateVersion = "24.11"; -} diff --git a/hosts/canopus/secrets.yaml b/hosts/canopus/secrets.yaml deleted file mode 100644 index 4b7dc73..0000000 --- a/hosts/canopus/secrets.yaml +++ /dev/null @@ -1,28 +0,0 @@ -hyperbolic_api_key: ENC[AES256_GCM,data:WGvF0PPbMd7zWiO8GfmgluV7dW+ZpzLMO31uI5xo+nekvTBkXiAuHFDK/SXKEUFDMEboNkA/a6JUNsCRhuA4N7qhIZgyQ2bc1iafsj7c4F4X/py63Z4bMx8+byScOSoW+RKAvSFOLDGXQ4s9dKc3XNW7G15QyzTRYUFDbXxsSQ6n6DMJk4jr,iv:o+Shbpl3tXmefpdQB5sod3bNQHHsBnEEP0Bk3C1H5Yo=,tag:fi+7K3nAjVoavqy2Mt8W3Q==,type:str] -gemini_api_key: ENC[AES256_GCM,data:ToQn6NiBpebcSPIHbnAyTJm092Xv24pb7Q09hW/Qb0qZC0ORJGG5,iv:/VIw5hTKlZLaWYdEyaEvIv/ZPTBhq5OkguPL6wFs8A8=,tag:44tNJTBeHYW1ug+z+yKTrw==,type:str] -open_router_api_key: ENC[AES256_GCM,data:QLXIEqsUe8HQobJMvqh8fZi7azXjnz7B524kDPWB8Dk5tAv6EVvM0KHAa6aTGmeMB8LJiUPcLmPU0ifU07s2OyB3Q9w+IFvlfQ==,iv:pBr8SJG8FHP1oYrXrHG0gRMPfdXXoBNPGcYEXF3IJGg=,tag:Yf2FuncT3/9pcBIEN+irGQ==,type:str] -vicinae.json: ENC[AES256_GCM,data:VZ3Z3Q3/KSmqE20Jt91y7XnO8LjKKFg8PUFiFuj2aW3kf/dl40lNWATQxa5AmggGViOf2R+1Q2r4cyGQFUWiOww5gcUT3Op+Z+zqPTE+Heu8/Sst0Vi7ZjL8vvmc6HYpT4t6JvYCEr4jjnBwLIvaxNwxCArEfga5lMgOzDQqhnZeOkBCTGdCp4nN7eBaWBFK4Jsm905mm+N2yMD4/rlkFNA6EBEJ4j5A5DnFF3ooZKSqi0VUhvagZ0JsaGdHpn124hnKkVwLejcWlKYpmXu+5gYRh1F5sADR8BpubMeCoEnGB5zUuxd7v/8m8siYbYzJEMtoBLNVlFcfgdI7/tGfd5aj5S+/ZEHbL9UrSLpKiw==,iv:xayL9aZgak0y3hxwcijMSMslaLCMsVvkXm1Fefs652k=,tag:BE804jVdu1poJmoGPjwsqA==,type:str] -sops: - age: - - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwZ1V0UE0vT3FoZDhKYXBi - ODRvNGRmZzZQY2t0VDNYTzgzUW5TMlFRQzBnCm9sZEJ1WmY0QU1KR1AwS3R0NXlh - cHhYNjA2TWM3Z1JZM2E1UHluNzdBYXcKLS0tIFRwQm10VlJEUVFyemRGYXpUNHhq - eWNJdzc2dlNlR1N1THAzSVlDNEZZMUUK7kacPvAuwbl0hggMuKJS/hjy0j+i1Oeh - tw7bdZ6do30sf9uY8TWDCeOiK1uOJGATLcDd14VhHl968By8n/5pDw== - -----END AGE ENCRYPTED FILE----- - - recipient: age1x36yr8h993srfj29sfpzt4wyz52nztvncpmhgmfs0j26qvfecq3qvcm0an - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByZk42NzVUMXV0ZDVWR3Q2 - N3NUN1B3blNZS1lKbEU1VmhaTDVOMmFESm1FCi9VeEFXVkRjUnFxYUxERUg0ODY4 - eFhFMXhOek1wWTRwOEd6Zk82Sm9VM0UKLS0tIGVBMHpQSWJzMVUxU09XeS8yVXFW - UVM3a1VIMWZGRGNxaUNwbStKekd4N28KvouH73cSd9xMUzDX3ib5tsR8deXGaGTB - N36MxnZcv9AhX7YErc18OkUv+lHZf2MoJ+x5+XOMCjhlUOlvqcBrAg== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-02-17T13:38:15Z" - mac: ENC[AES256_GCM,data:KYa/c921oDF2JKEEO0Fdvh8J1qkuQDH2biaS79v1qRr4AUd1yRpyZ75NvHmeIrYNsXgcgzqCi7vtaCF7v/ucirruf20ZeNmCpVb0BfesNko+0PrjWpwnNbabVCVIJFZiGbe35ENcM0DPECvb7vBJ2QKvqMCot6Zys9TgeXRcmGk=,iv:BPEE3KEg7y0BvVkd+aNMRK8xk4JNKgk8R+AR94rCFiM=,tag:y7rrugvI7XmjDP0Dj7GwBQ==,type:str] - unencrypted_suffix: _unencrypted - version: 3.11.0 diff --git a/hosts/capella/default.nix b/hosts/capella/default.nix deleted file mode 100644 index 3d8f235..0000000 --- a/hosts/capella/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ - pkgs, - username, - outputs, - inputs, - email, - ... -}: { - imports = [ - ../../modules/droid/sshd.nix - ]; - - android-integration.am.enable = true; - android-integration.termux-open-url.enable = true; - android-integration.xdg-open.enable = true; - android-integration.termux-setup-storage.enable = true; - android-integration.termux-reload-settings.enable = true; - - terminal.font = let - firacode = pkgs.nerd-fonts.fira-code; - fontPath = "share/fonts/truetype/NerdFonts/FiraCode/FiraCodeNerdFont-Regular.ttf"; - in "${firacode}/${fontPath}"; - - time.timeZone = "Asia/Kolkata"; - - tux.services.openssh = { - enable = true; - ports = [8033]; - authorizedKeys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${email}" - ]; - }; - - user = { - uid = 10479; - gid = 10479; - shell = "${pkgs.zsh}/bin/zsh"; - }; - - environment.etcBackupExtension = ".backup"; - environment.motd = ''''; - environment.packages = with pkgs; [ - nano - git - neovim - openssh - inputs.trok.packages."aarch64-linux".default - ]; - - home-manager = { - config = ./home.nix; - backupFileExtension = "backup"; - extraSpecialArgs = {inherit inputs outputs username email;}; - useGlobalPkgs = true; - }; - - # Set up nix for flakes - nix.extraOptions = '' - experimental-features = nix-command flakes - ''; - - system.stateVersion = "24.05"; -} diff --git a/hosts/capella/home.nix b/hosts/capella/home.nix deleted file mode 100644 index a952cec..0000000 --- a/hosts/capella/home.nix +++ /dev/null @@ -1,35 +0,0 @@ -{pkgs, ...}: { - imports = [ - ../../modules/home/git - ../../modules/home/starship - ../../modules/home/fastfetch - ]; - - programs = { - bat.enable = true; - zoxide = { - enable = true; - options = ["--cmd cd"]; - }; - zsh = { - enable = true; - shellAliases = { - ls = "lsd"; - }; - syntaxHighlighting.enable = true; - autosuggestion.enable = true; - initContent = '' - fastfetch - ''; - }; - }; - - home.packages = with pkgs; [ - neovim - busybox - lsd - fastfetch - ]; - - home.stateVersion = "24.05"; -} diff --git a/hosts/common/default.nix b/hosts/common/default.nix deleted file mode 100644 index 1c02596..0000000 --- a/hosts/common/default.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - username, - outputs, - inputs, - email, - ... -}: { - imports = [ - inputs.impermanence.nixosModules.impermanence - inputs.home-manager.nixosModules.home-manager - inputs.nix-index-database.nixosModules.nix-index - - ../../modules/base - ../../modules/nixos/fail2ban.nix - ../../modules/nixos/selfhosted/upstream-proxy.nix - ../../modules/nixos/selfhosted/tfolio.nix - ../../modules/nixos/selfhosted/cyber-tux.nix - ../../modules/nixos/selfhosted/containers/aiostreams.nix - ../../modules/nixos/networking/ssh.nix - ../../modules/nixos/distrobox.nix - ]; - - sops.secrets.tux-password = { - sopsFile = ./secrets.yaml; - neededForUsers = true; - }; - - time.timeZone = "Asia/Kolkata"; - i18n = { - defaultLocale = "en_US.UTF-8"; - extraLocaleSettings = { - LC_ADDRESS = "en_IN"; - LC_IDENTIFICATION = "en_IN"; - LC_MEASUREMENT = "en_IN"; - LC_MONETARY = "en_IN"; - LC_NAME = "en_IN"; - LC_NUMERIC = "en_IN"; - LC_PAPER = "en_IN"; - LC_TELEPHONE = "en_IN"; - LC_TIME = "en_IN"; - }; - }; - - security.sudo.wheelNeedsPassword = false; - - programs = { - zsh.enable = true; - }; - - home-manager = { - backupFileExtension = "hm-backup"; - useUserPackages = true; - extraSpecialArgs = { - inherit - inputs - outputs - username - email - ; - }; - users.${username} = { - imports = [ - ./home.nix - ]; - }; - }; -} diff --git a/hosts/common/home.nix b/hosts/common/home.nix deleted file mode 100644 index b129d48..0000000 --- a/hosts/common/home.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - outputs, - username, - inputs, - ... -}: { - imports = [ - inputs.nix-index-database.homeModules.nix-index - - ../../modules/home/shell - ../../modules/home/git - ../../modules/home/starship - ../../modules/home/fastfetch - ../../modules/home/nvim - ../../modules/home/tmux - ../../modules/home/helix - ../../modules/home/aria2 - ]; - - nixpkgs = { - overlays = [ - outputs.overlays.additions - outputs.overlays.modifications - outputs.overlays.stable-packages - outputs.overlays.nur - outputs.overlays.nix-vscode-extensions - ]; - - config = { - allowUnfree = true; - allowUnfreePredicate = _: true; - joypixels.acceptLicense = true; - }; - }; - - home = { - username = "${username}"; - homeDirectory = "/home/${username}"; - }; - - programs.home-manager.enable = true; - - systemd.user.startServices = "sd-switch"; -} diff --git a/hosts/common/secrets.yaml b/hosts/common/secrets.yaml deleted file mode 100644 index 5c14937..0000000 --- a/hosts/common/secrets.yaml +++ /dev/null @@ -1,88 +0,0 @@ -tux-password: ENC[AES256_GCM,data:yAqMKsk7uz0F0k32PdYnqAmn+tdLyXl2krvMstdgFCvIUZH8TlATWCUMPUtnxQiTQqCUY+Q8LE+yYcFFGC3r5TskbF98igZTDA==,iv:hkE/21gdD2bCEdIITrhm9lhKRTHhCPeo8YaYS61/dEM=,tag:/tz2Xvy2ro9gGwKHrJuuzw==,type:str] -sops: - age: - - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXaTFZSENQZDcvczUrVFF6 - Mm1GV3pqSzVPd2pQaUp3ZGRJS0kzMExXSmtJCkVwR1VxbUhCTTlKVHlLR0kvWkFO - R2VmQWhzSEsya3I4b1JRWnFSbXdUanMKLS0tIFR5bkU3cEVHL3BlUFRjL2l2ZDBK - WUVaZzFCQkc0KzRNQlRRdGNvWFdQNkUKhxAV3VavBzjSQHJPNn+Ghspi1scCq7dS - Qu81Q24kMK9sL7ddTjB7UqCgZ3LHq+Izzw5cSYVy+nq150oCBURnoA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1f860dfewlx5jtt9ejr47gywx70p3dmyc8mat29gpr75psljwjv8q5xyxkq - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNVGdJQTdBVHAxTmFoeThj - RWE0QjBiQUt5UkdDZzBRQm5vTUtGZmRxQ2xvCkRiUDIxUkV3ZW5Jd1ZoZWRzeE03 - T0VPZE9pYXJGclVZSTJRM1JaVjM3VU0KLS0tIGFXQ3pRWXFYYWkrYngyZDJST2Jr - UlAzTFdxMENxckVpL05ReENjZHk3b1UK1NEgbZ5AMf9h6zlfIHL7ugNSyQ156T5r - x3l7nFrvxAWE9aTzn03hFjgRP72If6k/3pHJmT8h2494+K20qAmx6g== - -----END AGE ENCRYPTED FILE----- - - recipient: age1x36yr8h993srfj29sfpzt4wyz52nztvncpmhgmfs0j26qvfecq3qvcm0an - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwZE16cm5vNzhVSkY5K2hV - MWRaMHNIL1Q2cDZ0eHozbTJJWklKb09BK213CkFSazJGdnBWQnRvQ2Zlc1JQazZV - VWVMb1FpcUZMeURQSXJBTkJGeVdCeUkKLS0tIG1uRDJ4T2pRaVY1aERQOWhZdGl0 - b3JVbHNpY1B5ekpodHp3ZXlrZFplNFEKiRPqPKh3g33a2/fQVrj8qGOcXheVaLgA - CAShzomubIQNFZUnl12hjH+ZcKlAwYFXzCrHUNdkEUWRIASqGa5oMA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1jg642q775gmnmxeu29gcf3lph8vem4xr8t84cxe809dpd0myrussh49h60 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvQ3UybGxJaUU5ckdDak5F - d3RJdlR3VHNHZTJ0UXhXc08wSVVXZVFZb2lvClZGSzV6QmhqL01rYjhjdjNKT2RT - V3k1QUF4VXBNb2d6dnA0N2lNNnpXS00KLS0tICs3bWRHMGZiMmM4S3YyY0ttRWZ1 - Snd1QTlRUndzK0RSUld1TlRkNU13cHMKTZsBN/4nBfEndip/vCUNtFZF89MKT8uA - C/hKD33ycaLNzmgxz3VRSCxeALMspeobeOLfRHJLflusD9xGgXn73A== - -----END AGE ENCRYPTED FILE----- - - recipient: age1zsl5d4vj6gl3h96y5p53sq5y4vr4vtlwp727h7rp9a4xfkxm53lqrh6r50 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQWmkrNXJvUjR5anlUcFVE - NExQTnAwZDVmWEl3c3B2bis1N00wQzF6MFFvCnpENVNJU1JWLyswNnZoUTBZNE16 - V2ZtLzIzanZEOWhkYXFxaWVLaDZoUDAKLS0tIEs3SXRZU283dERkZEFabmtFZTEx - aUIwRTgzQklUZmlnS05MQ2o5QmJSQk0KVrx1ZHqnS3KQ9jB7yqVIWbrQAdqDt/c4 - i3mst4a/rKjgZGUYugHMctJppPIpqqVZTpBHPgY5OiAGESMrUZE+Ig== - -----END AGE ENCRYPTED FILE----- - - recipient: age1zujp5gxy7suv8ysnygv43cmzuvv36nxfg0ch7r3xg2emc6fz3vmqqujheq - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvdUhKNU5BYmNEdllkWU1R - QVIxMExuYit6ekNwVHFmd2dGNEJtTTlHd0IwCkxiZnAvSURQY2RyWnRVVGxtdlUv - bmNpNFB6OENqOFJSakQ2NGJ0cVJTQlkKLS0tIEt5QXBXNC9WaDdIdklTeTA3ZEp6 - Y212bDZSRkttWjBqTEdkbjY4WHd5RTgK1Y779ogFUcr89gosqh7rra7Wg6G/Ez1o - /+48kxF2DTKZLJYX2AFEP5H0JjBDtt+isiO7H1644LjdAwO/sgFMSQ== - -----END AGE ENCRYPTED FILE----- - - recipient: age1ydkclhk9kwqdq74utesqdfupt43lz64d5k65gz2z9uyljcqq9fcq3hv28l - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwQXFScVBqUDZHc3BDK3N4 - T3BnSWk5SElzZllYRHdlMStPS2ZyMDZoZ3pnCm5KVnBYb1R6anRWd04rNllPSW1G - ZVMwMTQ5NjQvaEYwZUhOOE56ckJHb00KLS0tIEpCWmNQZzFlK3ZrRGFPMFVwZndG - ZStueWovUmtKdTk2enRJa3NSbFpJL1UKtzKYPJ6vy6+VjPkrsRvNTwUtV198oglr - cMqBSuwkqzgjDC09sRMnW5PRfJo8hG+5gkd6EPZ8uAbUhGC+kAyLrg== - -----END AGE ENCRYPTED FILE----- - - recipient: age1put942dyhly8nk9c8n0h8tq0x6xplrg3uw5q0d2jmvwez3zq79qsapl7he - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0ZU93NCtxODQ2YjA4TUcr - aWEyaW4zREZtVUpuZWhZSUw3TWhpMXBYWEVVCitDNGx1eWZQZGsvUDl0UzNCd0Zp - QndpMys5OVg1WXMrdXRDUkFZWDErcjAKLS0tIDBOZTBxM09INTIxZm9tQk10ZUc2 - emExUmJZZk00WmxYK2Y3WCtmQXhSUmsKwMxI9I6kQYkvZ4TzJtv/MdGLwTbQdePx - XB+oFbc9Rp3IAEZfH1+VEtJRjyKk5hE7HQoIh92XxJvmbDIswOe/Rg== - -----END AGE ENCRYPTED FILE----- - - recipient: age1y4luzn2jls7rvgphej23srvdlx563lxq29tvf66vhwwzaf7c3f3qzvresh - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwNUhPQThmWjJROW95SWsw - aFk4dGR3c0RJZTkwSHFXaWp2UCtQWS9xYjFnCnAxa0RMV0xsNnZ2cnVMbmRzRFYv - QmRZQVY1ME9zTmZtT1RxUmFQc2JYc2cKLS0tIGxUTjYwYXZUMU9FY3BFS04zQk1G - bFJwRno1a0pwVHpaV0haZjlZazNtZDAKxTvzsmLtx50sI2bZ3fFcB6j9ZLas4KmL - 5bu9Z75hFi+N1sjvMpcK7oIFypGLIWU3xpTP//jv6RuiyjGuR2Dq2w== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-11-04T09:28:17Z" - mac: ENC[AES256_GCM,data:A+xfYhnoq/JWYGZOleieF5vjrsPOtkKnXPbd94iBAbnuuBKx8Vgkpuum+hJzVIBdDSCVm8hl2Tpcw7NqWLSkXtBR/NKixzk6eIwFvOZz4h7Qe1Zue10pB25IkIzR34sLnWSHtsxuRRG6fZnf0CNtp7baf4XU3doyDwy5A384Jf0=,iv:i0y0UEY7SSCOBIBc+97qIiq4obpUJYb3gFo1yEc5eUI=,tag:c5zONd6zTv3sq4bPqT73OQ==,type:str] - unencrypted_suffix: _unencrypted - version: 3.11.0 diff --git a/hosts/homelab/default.nix b/hosts/homelab/default.nix deleted file mode 100755 index afde133..0000000 --- a/hosts/homelab/default.nix +++ /dev/null @@ -1,169 +0,0 @@ -{ - inputs, - username, - pkgs, - lib, - config, - ... -}: { - imports = [ - inputs.disko.nixosModules.default - - (import ./disko.nix {device = "/dev/nvme0n1";}) - ./hardware.nix - - ../common - ../../modules/nixos/desktop - ../../modules/nixos/virtualisation/docker.nix - ]; - - tux.services.openssh.enable = true; - - sops.secrets = { - discord_token = { - sopsFile = ./secrets.yaml; - }; - - hyperbolic_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - gemini_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - open_router_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - }; - - tux.services.cyber-tux = { - enable = true; - environmentFile = config.sops.secrets.discord_token.path; - }; - - networking = { - hostName = "homelab"; - networkmanager = { - enable = true; - wifi.powersave = false; - }; - firewall = { - enable = true; - allowedTCPPorts = [22]; - - # Facilitate firewall punching - allowedUDPPorts = [41641]; - }; - }; - - boot = { - consoleLogLevel = 0; - initrd.verbose = false; - - kernelPackages = pkgs.linuxPackages_zen; - - initrd.systemd = { - enable = lib.mkForce true; - - services.wipe-my-fs = { - wantedBy = ["initrd.target"]; - after = ["initrd-root-device.target"]; - before = ["sysroot.mount"]; - unitConfig.DefaultDependencies = "no"; - serviceConfig.Type = "oneshot"; - script = '' - mkdir /btrfs_tmp - mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp - - if [[ -e /btrfs_tmp/root ]]; then - mkdir -p /btrfs_tmp/old_roots - timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") - mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" - fi - - delete_subvolume_recursively() { - IFS=$'\n' - for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do - delete_subvolume_recursively "/btrfs_tmp/$i" - done - btrfs subvolume delete "$1" - } - - for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do - delete_subvolume_recursively "$i" - done - - btrfs subvolume create /btrfs_tmp/root - umount /btrfs_tmp - ''; - }; - }; - - loader = { - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - efi.canTouchEfiVariables = true; - timeout = 1; - }; - }; - - hardware = { - graphics.enable32Bit = true; - }; - - security = { - rtkit.enable = true; - }; - - programs = { - nix-ld = { - enable = true; - package = pkgs.nix-ld; - }; - }; - - services = { - fwupd.enable = true; - fstrim.enable = true; - - tailscale = { - enable = true; - extraUpFlags = ["--login-server https://hs.tux.rs"]; - }; - }; - - programs.fuse.userAllowOther = true; - fileSystems."/persist".neededForBoot = true; - environment.persistence."/persist" = { - hideMounts = true; - directories = [ - "/var/log" - "/var/lib/tailscale" - "/var/lib/nixos" - "/etc/NetworkManager/system-connections" - ]; - files = [ - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - - users.users.${username} = {linger = true;}; - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - environment.systemPackages = with pkgs; [go-wol]; - - system.stateVersion = "24.11"; -} diff --git a/hosts/homelab/disko.nix b/hosts/homelab/disko.nix deleted file mode 100644 index cb6eb32..0000000 --- a/hosts/homelab/disko.nix +++ /dev/null @@ -1,48 +0,0 @@ -{device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", ...}: { - disko.devices.disk.primary = { - inherit device; - type = "disk"; - content = { - type = "gpt"; # GPT partitioning scheme - partitions = { - # EFI Partition - ESP = { - size = "512M"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = ["defaults" "umask=0077"]; - }; - }; - # Btrfs Root Partition - root = { - size = "100%"; # Use remaining space - type = "8300"; # Linux filesystem type - content = { - type = "btrfs"; - subvolumes = { - "/root" = { - mountOptions = ["compress=zstd"]; # Compression for better performance - mountpoint = "/"; # Root subvolume - }; - "/persist" = { - mountOptions = ["compress=zstd"]; # Compression for persistent data - mountpoint = "/persist"; # Persistent subvolume - }; - "/nix" = { - mountOptions = [ - "compress=zstd" - "noatime" - "noacl" - ]; # Optimize for Nix store - mountpoint = "/nix"; # Nix subvolume - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/homelab/hardware.nix b/hosts/homelab/hardware.nix deleted file mode 100755 index 89fe563..0000000 --- a/hosts/homelab/hardware.nix +++ /dev/null @@ -1,30 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/homelab/home.nix b/hosts/homelab/home.nix deleted file mode 100644 index 69d3e89..0000000 --- a/hosts/homelab/home.nix +++ /dev/null @@ -1,21 +0,0 @@ -{...}: { - home.persistence."/persist" = { - directories = [ - "Projects" - "Stuff" - ".ssh" - ".wakatime" - ".config/sops" - ".config/go-wol" - ".local/share/nvim" - ".local/share/zsh" - ".local/share/zoxide" - ".local/state/lazygit" - ]; - files = [ - ".wakatime.cfg" - ]; - }; - - home.stateVersion = "24.11"; -} diff --git a/hosts/homelab/secrets.yaml b/hosts/homelab/secrets.yaml deleted file mode 100644 index ce9e143..0000000 --- a/hosts/homelab/secrets.yaml +++ /dev/null @@ -1,28 +0,0 @@ -discord_token: ENC[AES256_GCM,data:fZqz6LD3+Svtton5gNCXO5ddWAqW1IyxP3M2DAIXZEIYRHUfAq8h9LES2IHWepjl5qKimxB35zacE/TYK2fitngWtRGVoMDBzzU6VTKNulNV3yFWrPA=,iv:YOplYld+c9vHVC0Srfm89qrh4yUygDiW67X2TdwHKMc=,tag:Ioc2wNLX818fRQ/2PSO7Sw==,type:str] -hyperbolic_api_key: ENC[AES256_GCM,data:t8xjjzhgvM9BXiB5jDc2RR384d+mL5zXr+/obDLMm2J+IN+Xw9fr4iz50CTQ5ZMWWMoPjxzY5vgiJ+h71BsDRM0TvBMWuXd2ihKOIZOVo6OQmCX/SeKUgkjunFqz+YKcxsLsF7ZG/tOgWGqMmxom8iGV7LELKG/8MLDCF50YgJNO568MJMUU,iv:Cf+mSG2dxsRclDy8k7gK+hi+Qd5J7wqfS9SQztRob80=,tag:Io4aAFa29SUsfuPFI2/+DA==,type:str] -gemini_api_key: ENC[AES256_GCM,data:GJWo7dXSaUbl2Q9h+Sc1sRF0g+82LyHk3mKFqDaBmRdalvyGwMvp,iv:odLpACXHVqxWIj7e/u6AY1pxjYX+e10Lezne1BlHl60=,tag:qO3zcz/93eHuEzG66zwwdA==,type:str] -open_router_api_key: ENC[AES256_GCM,data:ETiZEngQRnOrJtDXSDfBanzbUyThTAu9BSQCL1tuVv07CCWJaXUui9Y0kS9oIO5to655FON3C0RxovTGx6rWQwOMKeEn5bHUHA==,iv:ePJzHKFWddkLGfydPi6uEzvksm7Djln/DBV88Jc1ugA=,tag:Eb7eYPMC0DlqtT7OFK4UuA==,type:str] -sops: - age: - - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2YktFRE9KS0h0T0hDTlpF - ZEk0VzNTcVE0ampsWVRtSzJ3UHBXL2NlUUh3Cjk5ZnFKVENmTTJHQjgrVWlyOUE1 - THUrTUFzdWhKejNUNXpsNVpvZVdJWm8KLS0tIDZ5bmYzSVBUVlVORHAzSGtCQmVo - a2JuSWVtMi9FMkova3BCd2F0U2VCRzQKonG/AkEn2X2l3vyr0UlJprGW2ZSwrczq - xHafyGiU/I1AO/HoB3BXyP8t/Sgn/dy42lspqZ3MoLLlmx7dQeTd+g== - -----END AGE ENCRYPTED FILE----- - - recipient: age1jg642q775gmnmxeu29gcf3lph8vem4xr8t84cxe809dpd0myrussh49h60 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxWUowUlB2cWVOclpRMENn - TU5za0Y2UHZ5eFNZMEdQWm9xdTZFYkVwS2hNCnRBUU1ndFdiQ09sQjBDb1greC93 - ejl2OVZTTEtIcWpxUk5RRngrbjRWREEKLS0tIDVrSHhxbmJFdWwyQS9xeWlFZitJ - Y1RHaFdXaE9DODJtSTFCSVZWb0xVeUEK4qeBKg3u+vhBIM1dQ7BaOWi/C7Q8hk60 - vu9Zr075n0+kb5Ab+RH24ZmEoP5PJXjwEfbAnmRTjn0reYn1nfcNYA== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-14T06:52:16Z" - mac: ENC[AES256_GCM,data:/p5Mbonr1YcrDgBIi+wFFPnNKsn74kuWf/EloNDnVWg59LuBy3nhrfXHUvbwlX7vLbSLozbuAHKTDcQ0+OUXJTYvMRApAGVh9HrvQFEQuOPOkwN8/qtdvwduInetX3t7PLWu4vbCVhl1v2BzJyEVQ9tzn7+8zEJhDDS7cPsZ9Is=,iv:GPJxjmOQPAqh0TulLhhX4UX+5FrZizCtDOkQa9xxaXY=,tag:Vv33D3wubWBDVOxdKOMENQ==,type:str] - unencrypted_suffix: _unencrypted - version: 3.10.2 diff --git a/hosts/isoImage/default.nix b/hosts/isoImage/default.nix deleted file mode 100644 index f1a01a1..0000000 --- a/hosts/isoImage/default.nix +++ /dev/null @@ -1,91 +0,0 @@ -{ - pkgs, - modulesPath, - inputs, - username, - lib, - ... -}: { - imports = [ - "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" - inputs.home-manager.nixosModules.home-manager - - ../common - ../../modules/nixos/desktop - ../../modules/nixos/desktop/awesome - ../../modules/nixos/desktop/hyprland - ]; - - nixpkgs.hostPlatform = "x86_64-linux"; - - networking = { - hostName = "iso"; - }; - - hardware = { - bluetooth.enable = true; - bluetooth.powerOnBoot = true; - }; - - security = { - rtkit.enable = true; - }; - - programs = { - ssh.startAgent = true; - thunar = { - enable = true; - plugins = with pkgs; [ - thunar-archive-plugin - thunar-volman - ]; - }; - nm-applet.enable = true; - }; - - services = { - resolved.enable = true; - - pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - - logind = { - settings.Login = { - HandlePowerKey = "suspend"; - HanldeLidSwitch = "suspend"; - HandleLidSwitchExternalPower = "suspend"; - }; - }; - - libinput.touchpad.naturalScrolling = true; - libinput.mouse.accelProfile = "flat"; - - blueman.enable = true; - - gvfs.enable = true; - tumbler.enable = true; - }; - - fonts.packages = with pkgs.nerd-fonts; [ - fira-code - jetbrains-mono - bigblue-terminal - ]; - - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - users.users.${username} = { - hashedPasswordFile = lib.mkForce null; - initialPassword = username; - }; - - system.stateVersion = "23.11"; -} diff --git a/hosts/isoImage/home.nix b/hosts/isoImage/home.nix deleted file mode 100644 index 9d7c6fa..0000000 --- a/hosts/isoImage/home.nix +++ /dev/null @@ -1,19 +0,0 @@ -{pkgs, ...}: { - imports = [ - ../../modules/home/desktop/awesome - ../../modules/home/desktop/hyprland - ../../modules/home/picom - ../../modules/home/wezterm - ../../modules/home/desktop/rofi - ../../modules/home/firefox - ../../modules/home/brave - ]; - - home.pointerCursor = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Ice"; - size = 28; - }; - - home.stateVersion = "24.11"; -} diff --git a/hosts/node/default.nix b/hosts/node/default.nix deleted file mode 100755 index 8cf5bb2..0000000 --- a/hosts/node/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - inputs, - username, - ... -}: { - imports = [ - inputs.disko.nixosModules.default - - (import ./disko.nix { - device = "/dev/nvme0n1"; - device2 = "/dev/nvme1n1"; - device3 = "/dev/sda"; - }) - ./hardware.nix - - ../common - ]; - - tux.services.openssh.enable = true; - - boot.loader.grub.enable = true; - - networking = { - hostName = "node"; - networkmanager = { - enable = true; - wifi.powersave = false; - }; - firewall = { - enable = true; - allowedTCPPorts = [ - 22 - 8545 - 8546 - 9545 - 9546 - ]; - }; - }; - - security.rtkit.enable = true; - - environment.persistence."/persist" = { - enable = false; - }; - - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "25.05"; -} diff --git a/hosts/node/disko.nix b/hosts/node/disko.nix deleted file mode 100644 index ee51714..0000000 --- a/hosts/node/disko.nix +++ /dev/null @@ -1,87 +0,0 @@ -{ - device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", - device2 ? throw "Set this to the disk device2, e.g. /dev/nvme1n1", - device3 ? throw "Set this to the disk device3, e.g. /dev/nvme1n1", - ... -}: { - disko.devices = { - disk = { - disk1 = { - type = "disk"; - device = "${device}"; - content = { - type = "gpt"; - partitions = { - boot = { - size = "1M"; - type = "EF02"; # for grub MBR - }; - mdadm = { - size = "100%"; - content = { - type = "mdraid"; - name = "raid0"; - }; - }; - }; - }; - }; - disk2 = { - type = "disk"; - device = "${device2}"; - content = { - type = "gpt"; - partitions = { - boot = { - size = "1M"; - type = "EF02"; # for grub MBR - }; - mdadm = { - size = "100%"; - content = { - type = "mdraid"; - name = "raid0"; - }; - }; - }; - }; - }; - hdd = { - type = "disk"; - device = "${device3}"; - content = { - type = "gpt"; - partitions = { - data = { - size = "100%"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/mnt/hdd"; - }; - }; - }; - }; - }; - }; - mdadm = { - raid0 = { - type = "mdadm"; - level = 0; - content = { - type = "gpt"; - partitions = { - primary = { - size = "100%"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/"; - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/node/hardware.nix b/hosts/node/hardware.nix deleted file mode 100644 index 3a5dbf1..0000000 --- a/hosts/node/hardware.nix +++ /dev/null @@ -1,29 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp41s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/node/home.nix b/hosts/node/home.nix deleted file mode 100644 index 3443cad..0000000 --- a/hosts/node/home.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - home.stateVersion = "25.05"; -} diff --git a/hosts/rigel/default.nix b/hosts/rigel/default.nix deleted file mode 100644 index 1591f04..0000000 --- a/hosts/rigel/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ - pkgs, - username, - outputs, - inputs, - email, - ... -}: { - imports = [ - ../../modules/droid/sshd.nix - ]; - - android-integration.am.enable = true; - android-integration.termux-open-url.enable = true; - android-integration.xdg-open.enable = true; - android-integration.termux-setup-storage.enable = true; - android-integration.termux-reload-settings.enable = true; - - terminal.font = let - firacode = pkgs.nerd-fonts.fira-code; - fontPath = "share/fonts/truetype/NerdFonts/FiraCode/FiraCodeNerdFont-Regular.ttf"; - in "${firacode}/${fontPath}"; - - time.timeZone = "Asia/Kolkata"; - - tux.services.openssh = { - enable = true; - ports = [8033]; - authorizedKeys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${email}" - ]; - }; - - user = { - uid = 10225; - gid = 10225; - shell = "${pkgs.zsh}/bin/zsh"; - }; - - environment.etcBackupExtension = ".backup"; - environment.motd = ''''; - environment.packages = with pkgs; [ - nano - git - neovim - openssh - inputs.trok.packages."aarch64-linux".default - ]; - - home-manager = { - config = ./home.nix; - backupFileExtension = "backup"; - extraSpecialArgs = {inherit inputs outputs username email;}; - useGlobalPkgs = true; - }; - - # Set up nix for flakes - nix.extraOptions = '' - experimental-features = nix-command flakes - ''; - - system.stateVersion = "24.05"; -} diff --git a/hosts/rigel/home.nix b/hosts/rigel/home.nix deleted file mode 100644 index a952cec..0000000 --- a/hosts/rigel/home.nix +++ /dev/null @@ -1,35 +0,0 @@ -{pkgs, ...}: { - imports = [ - ../../modules/home/git - ../../modules/home/starship - ../../modules/home/fastfetch - ]; - - programs = { - bat.enable = true; - zoxide = { - enable = true; - options = ["--cmd cd"]; - }; - zsh = { - enable = true; - shellAliases = { - ls = "lsd"; - }; - syntaxHighlighting.enable = true; - autosuggestion.enable = true; - initContent = '' - fastfetch - ''; - }; - }; - - home.packages = with pkgs; [ - neovim - busybox - lsd - fastfetch - ]; - - home.stateVersion = "24.05"; -} diff --git a/hosts/sirius/default.nix b/hosts/sirius/default.nix deleted file mode 100644 index 5433902..0000000 --- a/hosts/sirius/default.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - pkgs, - inputs, - username, - config, - ... -}: { - imports = [ - inputs.nixos-wsl.nixosModules.wsl - - ../common - ../../modules/nixos/virtualisation/docker.nix - ]; - - hardware.nvidia-container-toolkit = { - enable = true; - suppressNvidiaDriverAssertion = true; - }; - - tux.services.openssh.enable = true; - - sops.secrets = { - hyperbolic_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - gemini_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - - open_router_api_key = { - sopsFile = ./secrets.yaml; - owner = "${username}"; - }; - }; - - boot.binfmt.emulatedSystems = ["aarch64-linux"]; - - nixpkgs = { - config.cudaSupport = true; - hostPlatform = "x86_64-linux"; - }; - - wsl = { - enable = true; - defaultUser = "${username}"; - useWindowsDriver = true; - interop.register = true; - }; - - networking.hostName = "sirius"; - - programs = { - ssh.startAgent = true; - zsh.enable = true; - - nix-ld = { - enable = true; - libraries = config.hardware.graphics.extraPackages; - package = pkgs.nix-ld; - }; - - dconf.enable = true; - }; - - environment.persistence."/persist" = { - enable = false; - }; - - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "23.11"; -} diff --git a/hosts/sirius/home.nix b/hosts/sirius/home.nix deleted file mode 100644 index 86ea8a7..0000000 --- a/hosts/sirius/home.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - home.stateVersion = "23.11"; -} diff --git a/hosts/sirius/secrets.yaml b/hosts/sirius/secrets.yaml deleted file mode 100644 index 32ff925..0000000 --- a/hosts/sirius/secrets.yaml +++ /dev/null @@ -1,27 +0,0 @@ -hyperbolic_api_key: ENC[AES256_GCM,data:3E4oWt65AU3anVUEU52r7vpRddDgXdqKgvc/URQmJGbA0nu6sbRmw3lD44SG0L5tMubi20+gkKlyFV3i8q2U148eo582Sxh8eXshvvjZ+gr9W9Eg0Tk9kQWycrE+N3r3g1AC+CWtbkRFDxQLuVAYf9W4mTw2Yg1VLV7H3BUCSYv3Rg5EPb9c,iv:Z+72Bk+5ZnHVR+SHXgM5mwfsIp4zZf9Iv8cAaZQB3Mg=,tag:phqWkpOCKnfiCBvR/f3flw==,type:str] -gemini_api_key: ENC[AES256_GCM,data:S9DEgF4xIDXaOqs+3vdRbFb4Z8eAV1hVg8PwEfasWu9XGH3CTXV8,iv:LvUFg6dzlzC3feGh//d2rmxvVq5TJQDEBQWfxNa259Y=,tag:juLXnsiXz7OmYvyKfAv66Q==,type:str] -open_router_api_key: ENC[AES256_GCM,data:tUtkVER9ZlhSeb0bDbA1nRi1lkRX/ofosV+mcHnaNQmAZXWXiyn8WDfemxxNuvU86YctURxL4TckfsQv7RmMjY7esB1Pmmwf9Q==,iv:elT8JJu48cgu4Q1YWxiL4ePNkP+EGhI8blqfUB/nmz8=,tag:bMvUXUegE+GJ6WdypTxLyw==,type:str] -sops: - age: - - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtVUx5VWlHekQ1ZlBWb1cv - aWpXQ0NUaDVudENNRWhPdXlhekhwZW9zbjNNCkRzTlVOZm53MnJmckp6d3FsTU9D - M2pZYUs2aHJzWjQzM01BMUVaZHlsdm8KLS0tIG04Rjc3VXM1eFhvTGhpMVlJdE9K - dkYwdGZMRmZ1MFFTVlI4T0MrNytsV00KmdCXJ/EBZhLN/NXuOf36LjwmGTze46Ou - kQtKSpdzLdo/bdS6sbUGVHqDLeS7GwGtVciMh9zBHCsGBCAAkQHxIA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1f860dfewlx5jtt9ejr47gywx70p3dmyc8mat29gpr75psljwjv8q5xyxkq - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiSXhQdEpJZHBGbjlZTnhD - U0Zwc1pwbGtHdkRFbWJRVzRNWUdqakhzM2pJCmYyYlMwQVZEbzkxcnRKVERyeExB - Z0hXcTdyMHMwREExdlJmR3JHTldvRnMKLS0tIFNMczN6QmI3cUR6clBDU2dKQTVF - U1dpRkttaURwSkgySVdiR25iZk50b2cKrrNfeAV73W3+kWM0diIFj08+koBVySVx - U3tYYrePi7qQxDSrNo4a14yOopjktj/ABKpxI5cfza6aS5NQxErq2Q== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-10T21:30:12Z" - mac: ENC[AES256_GCM,data:IxGSaYj3PLV+RA4G+A3yep0RkcPr9xd6X7yKJP3QVthzGinm0KRNs8wyMdDgdSrK/e0AlzN594VOMTRRgxLV9oPqEPqufWDGGCpiKuW+q2mJSv3i3f1dUbO/l+OSTEFqeeKb8rWEhbJ3qcjEhI/eFB+RNkDtJvSzDlJsS4uDB9A=,iv:VlvTI3AHyBKpwr9b29YqN8V1Tjq2E8oAOAPA7LuAKps=,tag:+BFt/T4ep66WFz9Y2a7a9w==,type:str] - unencrypted_suffix: _unencrypted - version: 3.10.2 diff --git a/hosts/vega/default.nix b/hosts/vega/default.nix deleted file mode 100644 index 07bae60..0000000 --- a/hosts/vega/default.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - pkgs, - username, - ... -}: { - imports = [ - ./hardware.nix - ../common - - ../../modules/nixos/selfhosted/adguard.nix - ]; - - tux.services.openssh.enable = true; - - boot.initrd.availableKernelModules = [ - "usbhid" - "usb_storage" - "vc4" - "pcie_brcmstb" # required for the pcie bus to work - "reset-raspberrypi" # required for vl805 firmware to load - ]; - - # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) - boot.loader.grub.enable = false; - # Enables the generation of /boot/extlinux/extlinux.conf - boot.loader.generic-extlinux-compatible.enable = true; - - hardware.enableRedistributableFirmware = true; - powerManagement.cpuFreqGovernor = "ondemand"; - - networking = { - hostName = "vega"; - networkmanager = { - enable = true; - wifi.powersave = false; - }; - firewall = { - enable = true; - allowedTCPPorts = [22]; - - # Facilitate firewall punching - allowedUDPPorts = [41641]; - }; - }; - - services = { - tailscale = { - enable = true; - extraUpFlags = ["--login-server https://hs.tux.rs"]; - }; - }; - - environment.systemPackages = with pkgs; [go-wol]; - - environment.persistence."/persist" = { - enable = false; - }; - - users.users.${username} = {linger = true;}; - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "24.11"; -} diff --git a/hosts/vega/hardware.nix b/hosts/vega/hardware.nix deleted file mode 100644 index 9f89204..0000000 --- a/hosts/vega/hardware.nix +++ /dev/null @@ -1,36 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = []; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888"; - fsType = "ext4"; - }; - - swapDevices = []; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enu1u1.useDHCP = lib.mkDefault true; - # networking.interfaces.wlan0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; -} diff --git a/hosts/vega/home.nix b/hosts/vega/home.nix deleted file mode 100644 index 06e725e..0000000 --- a/hosts/vega/home.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - home.stateVersion = "24.11"; -} diff --git a/hosts/vps/default.nix b/hosts/vps/default.nix deleted file mode 100644 index 353c09e..0000000 --- a/hosts/vps/default.nix +++ /dev/null @@ -1,102 +0,0 @@ -{ - modulesPath, - inputs, - username, - lib, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - (modulesPath + "/profiles/qemu-guest.nix") - inputs.disko.nixosModules.default - (import ./disko.nix {device = "/dev/sda";}) - - ../common - ]; - - tux.services.openssh.enable = true; - - nixpkgs = { - hostPlatform = "x86_64-linux"; - }; - - boot = { - initrd.systemd = { - enable = lib.mkForce true; - - services.wipe-my-fs = { - wantedBy = ["initrd.target"]; - after = ["initrd-root-device.target"]; - before = ["sysroot.mount"]; - unitConfig.DefaultDependencies = "no"; - serviceConfig.Type = "oneshot"; - script = '' - mkdir /btrfs_tmp - mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp - - if [[ -e /btrfs_tmp/root ]]; then - mkdir -p /btrfs_tmp/old_roots - timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") - mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" - fi - - delete_subvolume_recursively() { - IFS=$'\n' - for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do - delete_subvolume_recursively "/btrfs_tmp/$i" - done - btrfs subvolume delete "$1" - } - - for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do - delete_subvolume_recursively "$i" - done - - btrfs subvolume create /btrfs_tmp/root - umount /btrfs_tmp - ''; - }; - }; - - loader = { - grub = { - efiSupport = true; - efiInstallAsRemovable = true; - }; - }; - }; - - networking.hostName = "vps"; - - users = { - users.${username} = { - password = "${username}"; - hashedPasswordFile = lib.mkForce null; - }; - }; - - programs.fuse.userAllowOther = true; - fileSystems."/persist".neededForBoot = true; - environment.persistence."/persist" = { - hideMounts = true; - directories = [ - "/var/log" - "/var/lib/nixos" - ]; - files = [ - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - - users.users.${username} = {linger = true;}; - home-manager.users.${username} = { - imports = [ - ./home.nix - ]; - }; - - system.stateVersion = "24.11"; -} diff --git a/hosts/vps/disko.nix b/hosts/vps/disko.nix deleted file mode 100644 index 4a0c700..0000000 --- a/hosts/vps/disko.nix +++ /dev/null @@ -1,53 +0,0 @@ -{device ? throw "Set this to the disk device, e.g. /dev/nvme0n1", ...}: { - disko.devices.disk.primary = { - inherit device; - type = "disk"; - content = { - type = "gpt"; # GPT partitioning scheme - partitions = { - boot = { - name = "boot"; - size = "1M"; - type = "EF02"; - }; - # EFI Partition - ESP = { - size = "512M"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = ["defaults" "umask=0077"]; - }; - }; - # Btrfs Root Partition - root = { - size = "100%"; # Use remaining space - type = "8300"; # Linux filesystem type - content = { - type = "btrfs"; - subvolumes = { - "/root" = { - mountOptions = ["compress=zstd"]; # Compression for better performance - mountpoint = "/"; # Root subvolume - }; - "/persist" = { - mountOptions = ["compress=zstd"]; # Compression for persistent data - mountpoint = "/persist"; # Persistent subvolume - }; - "/nix" = { - mountOptions = [ - "compress=zstd" - "noatime" - "noacl" - ]; # Optimize for Nix store - mountpoint = "/nix"; # Nix subvolume - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/vps/home.nix b/hosts/vps/home.nix deleted file mode 100644 index 4fd1caf..0000000 --- a/hosts/vps/home.nix +++ /dev/null @@ -1,11 +0,0 @@ -{...}: { - home.persistence."/persist" = { - directories = [ - "Projects" - ".ssh" - ".local/share/zsh" - ]; - }; - - home.stateVersion = "24.11"; -} diff --git a/modules/base/default.nix b/modules/base/default.nix deleted file mode 100644 index e5d0cf6..0000000 --- a/modules/base/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - imports = [ - ./nix.nix - ./nixpkgs.nix - ./nh.nix - ./overlays.nix - ./sops.nix - ./substituters.nix - ./user.nix - ]; -} diff --git a/modules/base/nh.nix b/modules/base/nh.nix deleted file mode 100644 index 1f099a0..0000000 --- a/modules/base/nh.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - username, - ... -}: { - programs.nh = { - enable = true; - - clean = { - enable = !config.nix.gc.automatic; - dates = "weekly"; - }; - - flake = "/home/${username}/Projects/nixos-config"; - }; -} diff --git a/modules/base/nix.nix b/modules/base/nix.nix deleted file mode 100644 index 7c096fc..0000000 --- a/modules/base/nix.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - pkgs, - username, - ... -}: { - nix = { - # @TODO enable when lix is patched - # package = pkgs.lix; - - gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; - - optimise = { - automatic = true; - dates = ["weekly"]; - }; - - channel.enable = false; - - settings = { - extra-platforms = [ - "aarch64-linux" - "arm-linux" - ]; - auto-optimise-store = true; - allowed-users = ["${username}"]; - trusted-users = ["${username}"]; - experimental-features = "nix-command flakes"; - keep-going = true; - warn-dirty = false; - http-connections = 50; - }; - }; -} diff --git a/modules/base/nixpkgs.nix b/modules/base/nixpkgs.nix deleted file mode 100644 index 9915423..0000000 --- a/modules/base/nixpkgs.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - nixpkgs = { - config = { - allowUnfree = true; - joypixels.acceptLicense = true; - }; - }; -} diff --git a/modules/base/overlays.nix b/modules/base/overlays.nix deleted file mode 100644 index 7ff88b8..0000000 --- a/modules/base/overlays.nix +++ /dev/null @@ -1,9 +0,0 @@ -{outputs, ...}: { - nixpkgs.overlays = [ - outputs.overlays.additions - outputs.overlays.modifications - outputs.overlays.stable-packages - outputs.overlays.nur - outputs.overlays.nix-vscode-extensions - ]; -} diff --git a/modules/base/sops.nix b/modules/base/sops.nix deleted file mode 100644 index 6dd1e38..0000000 --- a/modules/base/sops.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - inputs, - config, - pkgs, - ... -}: let - isEd25519 = k: k.type == "ed25519"; - getKeyPath = k: k.path; - keys = builtins.filter isEd25519 config.services.openssh.hostKeys; -in { - imports = [inputs.sops-nix.nixosModules.sops]; - - sops.age = { - sshKeyPaths = map getKeyPath keys; - keyFile = "/var/lib/sops-nix/key.txt"; - generateKey = true; - }; - - environment.systemPackages = with pkgs; [sops]; -} diff --git a/modules/base/substituters.nix b/modules/base/substituters.nix deleted file mode 100644 index 4e8a664..0000000 --- a/modules/base/substituters.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - nix.settings = { - substituters = [ - "https://cache.nixos.org?priority=10" - "https://anyrun.cachix.org" - "https://fufexan.cachix.org" - "https://helix.cachix.org" - "https://hyprland.cachix.org" - "https://nix-community.cachix.org" - "https://nix-gaming.cachix.org" - "https://yazi.cachix.org" - "https://nix-on-droid.cachix.org" - ]; - trusted-substituters = ["https://nix-on-droid.cachix.org"]; - trusted-public-keys = [ - "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" - "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" - "fufexan.cachix.org-1:LwCDjCJNJQf5XD2BV+yamQIMZfcKWR9ISIFy5curUsY=" - "helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs=" - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" - "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" - "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" - "nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU=" - ]; - }; -} diff --git a/modules/base/user.nix b/modules/base/user.nix deleted file mode 100644 index c63052e..0000000 --- a/modules/base/user.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - config, - pkgs, - username, - email, - ... -}: { - users = { - mutableUsers = false; - defaultUserShell = pkgs.zsh; - users.${username} = { - hashedPasswordFile = config.sops.secrets.tux-password.path; - isNormalUser = true; - extraGroups = ["networkmanager" "wheel" "storage"]; - openssh.authorizedKeys.keys = [ - ''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${email}'' - ]; - }; - }; -} diff --git a/modules/droid/core/hm.nix b/modules/droid/core/hm.nix new file mode 100644 index 0000000..694b152 --- /dev/null +++ b/modules/droid/core/hm.nix @@ -0,0 +1,32 @@ +{ inputs, config, ... }: +{ + flake.modules.nixOnDroid.core = + { + hostName, + userName, + userEmail, + ... + }: + { + home-manager = { + backupFileExtension = "bak"; + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { + inherit + inputs + hostName + userName + userEmail + ; + }; + + config = { + imports = [ + config.flake.modules.homeManager.shell + config.flake.modules.homeManager.${hostName} + ]; + }; + }; + }; +} diff --git a/modules/droid/core/nix.nix b/modules/droid/core/nix.nix new file mode 100644 index 0000000..e74862c --- /dev/null +++ b/modules/droid/core/nix.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixOnDroid.core = { + nix.extraOptions = '' + experimental-features = nix-command flakes + ''; + }; +} diff --git a/modules/droid/networking/ssh.nix b/modules/droid/networking/ssh.nix new file mode 100644 index 0000000..5c399be --- /dev/null +++ b/modules/droid/networking/ssh.nix @@ -0,0 +1,109 @@ +{ + flake.modules.nixOnDroid.networking = + { + config, + lib, + pkgs, + ... + }: + let + # utility functions + concatLines = list: builtins.concatStringsSep "\n" list; + + prefixLines = mapper: list: concatLines (map mapper list); + + # could be put in the config + configPath = "ssh/sshd_config"; + + keysFolder = "/etc/ssh"; + + authorizedKeysFolder = "/etc/ssh/authorized_keys.d"; + + supportedKeysTypes = [ + "rsa" + "ed25519" + ]; + + sshd-start-bin = "sshd-start"; + + # real config + cfg = config.tnix.networking.openssh; + + pathOfKeyOf = type: "${keysFolder}/ssh_host_${type}_key"; + + generateKeyOf = type: '' + ${lib.getExe' pkgs.openssh "ssh-keygen"} \ + -t "${type}" \ + -f "${pathOfKeyOf type}" \ + -N "" + ''; + + generateKeyWhenNeededOf = type: '' + if [ ! -f ${pathOfKeyOf type} ]; then + mkdir --parents ${keysFolder} + ${generateKeyOf type} + fi + ''; + + sshd-start = pkgs.writeScriptBin sshd-start-bin '' + #!${pkgs.runtimeShell} + ${prefixLines generateKeyWhenNeededOf supportedKeysTypes} + + mkdir --parents "${authorizedKeysFolder}" + echo "${lib.concatStringsSep "\n" cfg.authorizedKeys}" > ${authorizedKeysFolder}/${config.user.userName} + + echo "Starting sshd in non-daemonized way on port ${lib.concatMapStrings toString cfg.ports}" + ${lib.getExe' pkgs.openssh "sshd"} \ + -f "/etc/${configPath}" \ + -D # don't detach into a daemon process + ''; + in + { + options.tnix.networking.openssh = { + enable = lib.mkEnableOption '' + Whether to enable the OpenSSH secure shell daemon, which + allows secure remote logins. + ''; + + ports = lib.mkOption { + type = lib.types.listOf lib.types.port; + default = [ 22 ]; + description = '' + Specifies on which ports the SSH daemon listens. + ''; + }; + + authorizedKeys = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = '' + Specify a list of public keys to be added to the authorized_keys file. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + environment.etc = { + "${configPath}".text = '' + ${prefixLines (port: "Port ${toString port}") cfg.ports} + + AuthorizedKeysFile ${authorizedKeysFolder}/%u + + LogLevel VERBOSE + ''; + }; + + environment.packages = [ + sshd-start + pkgs.openssh + ]; + + build.activationAfter.sshd = '' + SERVER_PID=$(${lib.getExe' pkgs.procps "ps"} -a | ${lib.getExe' pkgs.toybox "grep"} sshd || true) + if [ -z "$SERVER_PID" ]; then + $DRY_RUN_CMD ${lib.getExe sshd-start} + fi + ''; + }; + }; +} diff --git a/modules/droid/sshd.nix b/modules/droid/sshd.nix deleted file mode 100644 index 43a7dba..0000000 --- a/modules/droid/sshd.nix +++ /dev/null @@ -1,106 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - # utility functions - concatLines = list: builtins.concatStringsSep "\n" list; - - prefixLines = mapper: list: concatLines (map mapper list); - - # could be put in the config - configPath = "ssh/sshd_config"; - - keysFolder = "/etc/ssh"; - - authorizedKeysFolder = "/etc/ssh/authorized_keys.d"; - - supportedKeysTypes = [ - "rsa" - "ed25519" - ]; - - sshd-start-bin = "sshd-start"; - - # real config - cfg = config.tux.services.openssh; - - pathOfKeyOf = type: "${keysFolder}/ssh_host_${type}_key"; - - generateKeyOf = type: '' - ${lib.getExe' pkgs.openssh "ssh-keygen"} \ - -t "${type}" \ - -f "${pathOfKeyOf type}" \ - -N "" - ''; - - generateKeyWhenNeededOf = type: '' - if [ ! -f ${pathOfKeyOf type} ]; then - mkdir --parents ${keysFolder} - ${generateKeyOf type} - fi - ''; - - sshd-start = pkgs.writeScriptBin sshd-start-bin '' - #!${pkgs.runtimeShell} - ${prefixLines generateKeyWhenNeededOf supportedKeysTypes} - - mkdir --parents "${authorizedKeysFolder}" - echo "${lib.concatStringsSep "\n" cfg.authorizedKeys}" > ${authorizedKeysFolder}/${config.user.userName} - - echo "Starting sshd in non-daemonized way on port ${lib.concatMapStrings toString cfg.ports}" - ${lib.getExe' pkgs.openssh "sshd"} \ - -f "/etc/${configPath}" \ - -D # don't detach into a daemon process - ''; -in { - options = { - tux.services.openssh = { - enable = lib.mkEnableOption '' - Whether to enable the OpenSSH secure shell daemon, which - allows secure remote logins. - ''; - - ports = lib.mkOption { - type = lib.types.listOf lib.types.port; - default = [22]; - description = '' - Specifies on which ports the SSH daemon listens. - ''; - }; - - authorizedKeys = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = []; - description = '' - Specify a list of public keys to be added to the authorized_keys file. - ''; - }; - }; - }; - - config = lib.mkIf cfg.enable { - environment.etc = { - "${configPath}".text = '' - ${prefixLines (port: "Port ${toString port}") cfg.ports} - - AuthorizedKeysFile ${authorizedKeysFolder}/%u - - LogLevel VERBOSE - ''; - }; - - environment.packages = [ - sshd-start - pkgs.openssh - ]; - - build.activationAfter.sshd = '' - SERVER_PID=$(${lib.getExe' pkgs.procps "ps"} -a | ${lib.getExe' pkgs.toybox "grep"} sshd || true) - if [ -z "$SERVER_PID" ]; then - $DRY_RUN_CMD ${lib.getExe sshd-start} - fi - ''; - }; -} diff --git a/modules/flake/flake-parts.nix b/modules/flake/flake-parts.nix new file mode 100644 index 0000000..1c75663 --- /dev/null +++ b/modules/flake/flake-parts.nix @@ -0,0 +1,4 @@ +{ inputs, ... }: +{ + imports = [ inputs.flake-parts.flakeModules.modules ]; +} diff --git a/modules/flake/hosts.nix b/modules/flake/hosts.nix new file mode 100644 index 0000000..3dbe199 --- /dev/null +++ b/modules/flake/hosts.nix @@ -0,0 +1,130 @@ +{ + self, + inputs, + config, + ... +}: +let + mkNixOSHost = + hostName: + { + userName ? "tux", + userEmail ? "t@tux.rs", + system ? "x86_64-linux", + unstable ? true, + }: + let + nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable; + in + nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { + inherit + hostName + userName + userEmail + system + ; + }; + modules = [ + config.flake.modules.nixos.core + config.flake.modules.nixos.${hostName} + ]; + }; + + mkDroidHost = + hostName: + { + userName ? "nix-on-droid", + userEmail ? "t@tux.rs", + system ? "aarch64-linux", + unstable ? true, + }: + let + nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable; + in + inputs.nix-on-droid.lib.nixOnDroidConfiguration { + pkgs = import nixpkgs { + inherit system; + config = { + allowUnfree = true; + joypixels.acceptLicense = true; + }; + overlays = builtins.attrValues inputs.self.overlays; + }; + extraSpecialArgs = { + inherit + hostName + userName + userEmail + ; + }; + modules = [ + config.flake.modules.nixOnDroid.core + config.flake.modules.nixOnDroid.${hostName} + ]; + }; + + mkNixOSNode = + hostName: + { + system ? "x86_64-linux", + }: + { + hostname = hostName; + profiles.system = { + user = "root"; + path = inputs.deploy-rs.lib.${system}.activate.nixos self.nixosConfigurations.${hostName}; + }; + }; + + activateNixOnDroid = + system: configuration: + inputs.deploy-rs.lib.${system}.activate.custom configuration.activationPackage + "${configuration.activationPackage}/activate"; + + mkDroidNode = + hostName: + { + system ? "aarch64-linux", + }: + { + hostname = hostName; + profiles.system = { + sshUser = "nix-on-droid"; + user = "nix-on-droid"; + magicRollback = true; + sshOpts = [ + "-p" + "8033" + ]; + path = activateNixOnDroid system self.nixOnDroidConfigurations.${hostName}; + }; + }; + +in +{ + flake = { + nixosConfigurations = builtins.mapAttrs mkNixOSHost { + sirius = { }; + canopus = { }; + arcturus = { }; + alpha = { }; + vps = { }; + }; + + nixOnDroidConfigurations = builtins.mapAttrs mkDroidHost { + vega = { }; + }; + + deploy.nodes = + builtins.mapAttrs (hostName: _: mkNixOSNode hostName { }) self.nixosConfigurations + // builtins.mapAttrs (hostName: _: mkDroidNode hostName { }) self.nixOnDroidConfigurations; + }; + + perSystem = { + checks = builtins.mapAttrs ( + _: hostConfig: hostConfig.config.system.build.toplevel + ) self.nixosConfigurations; + }; +} diff --git a/modules/flake/overlays.nix b/modules/flake/overlays.nix new file mode 100644 index 0000000..184a81f --- /dev/null +++ b/modules/flake/overlays.nix @@ -0,0 +1,42 @@ +{ + inputs, + ... +}: +{ + flake.overlays = { + modifications = final: prev: { + tnvim = inputs.tnvim.packages.${prev.stdenv.hostPlatform.system}.default; + tshell = inputs.tshell.packages.${prev.stdenv.hostPlatform.system}.default; + trok = inputs.trok.packages.${prev.stdenv.hostPlatform.system}.default; + tfolio = inputs.tfolio.packages.${prev.stdenv.hostPlatform.system}.default; + cyber-tux = inputs.cyber-tux.packages.${prev.stdenv.hostPlatform.system}.default; + wezterm-git = inputs.wezterm-flake.packages.${prev.stdenv.hostPlatform.system}.default; + hyprland-git = inputs.hyprland.packages.${prev.stdenv.hostPlatform.system}; + awww = inputs.awww.packages.${prev.stdenv.hostPlatform.system}.awww; + vicinae-extensions = inputs.vicinae-extensions.packages.${prev.stdenv.hostPlatform.system}; + voxtype = inputs.voxtype.packages.${prev.stdenv.hostPlatform.system}; + opencode-git = inputs.opencode.packages.${prev.stdenv.hostPlatform.system}.default; + nix-index-small = + inputs.nix-index-database.packages.${prev.stdenv.hostPlatform.system}.nix-index-with-small-db; + }; + + stable-packages = final: _prev: { + stable = import inputs.nixpkgs-stable { + system = final.stdenv.hostPlatform.system; + config.allowUnfree = true; + }; + }; + + nur = inputs.nur.overlays.default; + copyparty = inputs.copyparty.overlays.default; + }; + + perSystem = + { system, ... }: + { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; + overlays = builtins.attrValues inputs.self.overlays; + }; + }; +} diff --git a/modules/flake/systems.nix b/modules/flake/systems.nix new file mode 100644 index 0000000..991fba3 --- /dev/null +++ b/modules/flake/systems.nix @@ -0,0 +1,6 @@ +{ + systems = [ + "x86_64-linux" + "aarch64-linux" + ]; +} diff --git a/modules/flake/treefmt.nix b/modules/flake/treefmt.nix new file mode 100644 index 0000000..6aadd98 --- /dev/null +++ b/modules/flake/treefmt.nix @@ -0,0 +1,16 @@ +{ inputs, ... }: +{ + imports = [ + inputs.treefmt-nix.flakeModule + ]; + + perSystem = { + treefmt.config = { + projectRootFile = "flake.nix"; + flakeCheck = true; + programs = { + nixfmt.enable = true; + }; + }; + }; +} diff --git a/modules/hm/core/hm.nix b/modules/hm/core/hm.nix new file mode 100644 index 0000000..5fced0c --- /dev/null +++ b/modules/hm/core/hm.nix @@ -0,0 +1,13 @@ +{ + flake.modules.homeManager.core = + { userName, ... }: + { + programs.home-manager.enable = true; + systemd.user.startServices = "sd-switch"; + + home = { + username = "${userName}"; + homeDirectory = "/home/${userName}"; + }; + }; +} diff --git a/modules/hm/core/nixpkgs.nix b/modules/hm/core/nixpkgs.nix new file mode 100644 index 0000000..b6ca2f5 --- /dev/null +++ b/modules/hm/core/nixpkgs.nix @@ -0,0 +1,18 @@ +{ inputs, ... }: +{ + flake.modules.homeManager.core = + { + lib, + osConfig ? { }, + ... + }: + { + nixpkgs = lib.mkIf (!(osConfig.home-manager.useGlobalPkgs or false)) { + config = { + allowUnfree = true; + joypixels.acceptLicense = true; + }; + overlays = builtins.attrValues inputs.self.overlays; + }; + }; +} diff --git a/modules/hm/desktop/brave.nix b/modules/hm/desktop/brave.nix new file mode 100644 index 0000000..9f68ad3 --- /dev/null +++ b/modules/hm/desktop/brave.nix @@ -0,0 +1,38 @@ +{ + flake.modules.homeManager.desktop = + { + pkgs, + config, + ... + }: + let + configDir = "${config.xdg.configHome}/BraveSoftware/Brave-Browser"; + + extensionJson = ext: { + name = "${configDir}/External Extensions/${ext.id}.json"; + value.text = builtins.toJSON { + external_update_url = "https://clients2.google.com/service/update2/crx"; + }; + }; + + extensions = [ + { id = "nkbihfbeogaeaoehlefnkodbefgpgknn"; } # Metamask + { id = "gppongmhjkpfnbhagpmjfkannfbllamg"; } # Wappalyzer + { id = "nngceckbapebfimnlniiiahkandclblb"; } # Bitwarden + { id = "bfnaelmomeimhlpmgjnjophhpkkoljpa"; } # Phantom + { id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; } # DarkReader + ]; + in + { + programs.chromium = { + enable = true; + package = pkgs.brave; + commandLineArgs = [ + "--disable-features=WebRtcAllowInputVolumeAdjustment" + "--force-device-scale-factor=1.0" + ]; + }; + + home.file = builtins.listToAttrs (map extensionJson extensions); + }; +} diff --git a/modules/hm/desktop/discord.nix b/modules/hm/desktop/discord.nix new file mode 100644 index 0000000..896436e --- /dev/null +++ b/modules/hm/desktop/discord.nix @@ -0,0 +1,45 @@ +{ + flake.modules.homeManager.desktop = + { inputs, userName, ... }: + { + imports = [ + inputs.nixcord.homeModules.nixcord + ]; + + programs.nixcord = { + enable = true; + user = userName; + discord.enable = false; + vesktop.enable = true; + config = { + themeLinks = [ + "https://raw.githubusercontent.com/refact0r/system24/refs/heads/main/archive/flavors/spotify-text.theme.css" + ]; + frameless = true; + plugins = { + hideMedia.enable = true; + ignoreActivities = { + enable = true; + ignorePlaying = true; + ignoreWatching = true; + }; + }; + }; + dorion = { + theme = "dark"; + zoom = "1.1"; + blur = "acrylic"; + sysTray = true; + openOnStartup = true; + autoClearCache = true; + disableHardwareAccel = false; + rpcServer = true; + rpcProcessScanner = true; + pushToTalk = true; + pushToTalkKeys = [ "RControl" ]; + desktopNotifications = true; + unreadBadge = true; + }; + }; + }; +} diff --git a/modules/hm/desktop/easyeffects.nix b/modules/hm/desktop/easyeffects.nix new file mode 100644 index 0000000..5d99671 --- /dev/null +++ b/modules/hm/desktop/easyeffects.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.desktop = { + services.easyeffects.enable = true; + }; +} diff --git a/modules/hm/desktop/firefox.nix b/modules/hm/desktop/firefox.nix new file mode 100644 index 0000000..56f3ade --- /dev/null +++ b/modules/hm/desktop/firefox.nix @@ -0,0 +1,75 @@ +{ + flake.modules.homeManager.desktop = + { + pkgs, + userName, + ... + }: + { + programs.firefox = { + enable = true; + + package = pkgs.firefox.override { + extraPolicies = { + CaptivePortal = false; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + DisableFirefoxAccounts = false; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + FirefoxHome = { + Search = true; + Pocket = false; + Snippets = false; + TopSites = false; + Highlights = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + }; + }; + + profiles = { + ${userName} = { + id = 0; + name = "tux"; + search = { + force = true; + default = "google"; + }; + settings = { + "general.smoothScroll" = true; + "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; + "layout.css.prefers-color-scheme.content-override" = 0; + "browser.compactmode.show" = true; + "browser.tabs.firefox-view" = false; + "browser.bookmarks.addedImportButton" = false; + "extensions.pocket.enabled" = false; + "browser.fullscreen.autohide" = false; + }; + extraConfig = '' + user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); + user_pref("full-screen-api.ignore-widgets", true); + user_pref("media.ffmpeg.vaapi.enabled", true); + user_pref("media.rdd-vpx.enabled", true); + ''; + + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + facebook-container + metamask + darkreader + bitwarden + wappalyzer + clearurls + ]; + }; + }; + }; + }; +} diff --git a/modules/hm/desktop/ghostty.nix b/modules/hm/desktop/ghostty.nix new file mode 100644 index 0000000..d74c8b6 --- /dev/null +++ b/modules/hm/desktop/ghostty.nix @@ -0,0 +1,49 @@ +{ + flake.modules.homeManager.desktop = { + programs.ghostty = { + enable = true; + enableZshIntegration = true; + systemd.enable = true; + + settings = { + confirm-close-surface = false; + gtk-titlebar = false; + window-padding-x = 10; + window-padding-y = 10; + font-size = 12; + font-family = "JetBrainsMono Nerd Font"; + theme = "poimandres"; + custom-shader = "shaders/cursor_warp.glsl"; + custom-shader-animation = "always"; + }; + + themes = { + poimandres = { + background = "#0f0f0f"; + foreground = "#a6accd"; + cursor-color = "#f2eacf"; + selection-background = "#1a1a1a"; + selection-foreground = "#f1f1f1"; + palette = [ + "0=#252b37" + "1=#d0679d" + "2=#5de4c7" + "3=#fffac2" + "4=#89ddff" + "5=#fae4fc" + "6=#add7ff" + "7=#ffffff" + "8=#a6accd" + "9=#d0679d" + "10=#5de4c7" + "11=#fffac2" + "12=#add7ff" + "13=#89ddff" + "14=#fcc5e9" + "15=#ffffff" + ]; + }; + }; + }; + }; +} diff --git a/modules/hm/desktop/hyprland.nix b/modules/hm/desktop/hyprland.nix new file mode 100644 index 0000000..a39dcf0 --- /dev/null +++ b/modules/hm/desktop/hyprland.nix @@ -0,0 +1,40 @@ +{ + flake.modules.homeManager.desktop = + { config, pkgs, ... }: + { + # TODO: Hyprland 0.55 switched to Lua-based configuration. + # HM module is updated but I'm too lazy at this point so we symlink our config instead. + wayland.windowManager.hyprland = { + enable = true; + package = null; + portalPackage = null; + xwayland.enable = true; + configType = "hyprlang"; + systemd.variables = [ "--all" ]; + }; + + home.file = { + ".config/hypr/config".source = + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/Projects/hypr/config"; + ".config/hypr/hyprland.lua".source = + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/Projects/hypr/hyprland.lua"; + }; + + home.packages = with pkgs; [ + ags + awww + grim + slurp + hyprshot + wl-clipboard + wl-screenrec + (writeShellScriptBin "hypr-screenshot" '' + hyprshot -m region -r ppm - | satty --filename - + '') + + (writeShellScriptBin "hypr-screenrecord" '' + wl-screenrec -g "$(slurp)" + '') + ]; + }; +} diff --git a/modules/hm/desktop/lan-mouse.nix b/modules/hm/desktop/lan-mouse.nix new file mode 100644 index 0000000..ab17ca9 --- /dev/null +++ b/modules/hm/desktop/lan-mouse.nix @@ -0,0 +1,39 @@ +{ inputs, ... }: +{ + flake.modules.homeManager.desktop = + { + config, + pkgs, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.lan-mouse; + in + { + imports = [ inputs.lan-mouse.homeManagerModules.default ]; + + options.tnix.services.lan-mouse = { + enable = mkEnableOption "Enable Lan-Mouse"; + + settings = mkOption { + type = (pkgs.formats.toml { }).type; + default = { }; + description = '' + TOML configuration for lan-mouse. + See for available options. + ''; + }; + }; + + config = mkIf cfg.enable { + + programs.lan-mouse = { + enable = true; + systemd = true; + settings = cfg.settings; + }; + }; + }; +} diff --git a/modules/hm/desktop/mango.nix b/modules/hm/desktop/mango.nix new file mode 100644 index 0000000..a5d2c87 --- /dev/null +++ b/modules/hm/desktop/mango.nix @@ -0,0 +1,256 @@ +{ inputs, ... }: +{ + flake.modules.homeManager.desktop = + { + config, + pkgs, + lib, + ... + }: + with lib; + let + cfg = config.tnix.desktop.mangowm; + in + { + imports = [ + inputs.mango.hmModules.mango + ]; + + options.tnix.desktop.mangowm = { + enable = mkEnableOption "Enable MangoWM"; + + monitorRule = mkOption { + type = with types; listOf str; + default = [ ]; + }; + + tagRule = mkOption { + type = with types; listOf str; + default = [ ]; + }; + }; + + config = mkIf cfg.enable { + wayland.windowManager.mango = { + enable = true; + settings = { + # Monitors + monitorrule = cfg.monitorRule; + + focus_cross_monitor = 1; + exchange_cross_monitor = 1; + drag_tile_to_tile = 1; + + # Keyboard + repeat_rate = 25; + repeat_delay = 600; + numlockon = 0; + xkb_rules_layout = "us"; + + # Trackpad + disable_trackpad = 0; + tap_to_click = 1; + tap_and_drag = 1; + drag_lock = 1; + trackpad_natural_scrolling = 1; + disable_while_typing = 1; + left_handed = 0; + middle_button_emulation = 0; + swipe_min_threshold = 1; + + # Mouse + mouse_natural_scrolling = 0; + mouse_accel_profile = 0; + + # Theme + border_radius = 8; + no_radius_when_single = 0; + focused_opacity = 0.9; + unfocused_opacity = 0.9; + + # Scroller Layout Setting + scroller_structs = 0; + scroller_default_proportion = 0.5; + scroller_ignore_proportion_single = 0; + scroller_default_proportion_single = 1.0; + + # Master-Stack Layout Setting + new_is_master = 0; + default_mfact = 0.5; + default_nmaster = 1; + smartgaps = 0; + + # Overview Setting + hotarea_size = 10; + enable_hotarea = 1; + ov_tab_mode = 0; + overviewgappi = 15; + overviewgappo = 15; + + # layouts + tagrule = cfg.tagRule; + + # Keybindings + mousebind = [ + "SUPER, btn_left, moveresize, curmove" + "SUPER, btn_right, moveresize, curresize" + ]; + + gesturebind = [ + "none, right, 3, viewtoleft_have_client" + "none, up, 3, toggleoverview" + "none, down, 3, toggleoverview" + ]; + + bind = [ + # apps + "SUPER, Return, spawn, wezterm" + "SUPER, Space, spawn, vicinae toggle" + "SUPER, D, spawn, vesktop" + "SUPER, T, spawn, Telegram" + "SUPER, B, spawn, brave" + "SUPER, V, spawn, vicinae vicinae://extensions/vicinae/clipboard/history" + "SUPER+SHIFT, W, spawn, vicinae vicinae://extensions/sovereign/awww-switcher/wpgrid" + + # WM + "SUPER, Q, killclient" + "SUPER+SHIFT, R, reload_config" + "SUPER+SHIFT, F, togglefullscreen" + "SUPER+SHIFT, Space, togglefloating" + "SUPER+SHIFT, Space, centerwin" + + "ALT, Tab, toggleoverview" + "ALT+SHIFT, minus, incgaps, -1" + "ALT+SHIFT, equal, incgaps, 1" + "ALT+SHIFT, R, togglegaps" + "SUPER+SHIFT, P, toggleglobal" + + # switch layout + "SUPER+SHIFT, H, setlayout, tile" + "SUPER+SHIFT, V, setlayout, vertical_tile" + "SUPER+SHIFT, S, setlayout, scroller" + + # resize client + "SUPER+CTRL, Up, resizewin, +0, -50" + "SUPER+CTRL, Down, resizewin, +0, +50" + "SUPER+CTRL, Left, resizewin, -50, +0" + "SUPER+CTRL, Right, resizewin, +50, +0" + "SUPER+CTRL, Equal, setoption, default_mfact, 0.5" + + # swap client + "SUPER+SHIFT, Up, exchange_client, up" + "SUPER+SHIFT, Down, exchange_client, down" + "SUPER+SHIFT, Left, exchange_client, left" + "SUPER+SHIFT, Right, exchange_client, right" + + # switch client focus + "SUPER, Tab, focusstack, next" + "SUPER, Left, focusdir, left" + "SUPER, Right, focusdir, right" + "SUPER, Up, focusdir, up" + "SUPER, Down, focusdir, down" + + # switch view + "SUPER, 1, view, 1, 1" + "SUPER, 2, view, 2, 1" + "SUPER, 3, view, 3, 1" + "SUPER, 4, view, 4, 1" + "SUPER, 5, view, 5, 1" + + # move client to the tag with focus + "SUPER+SHIFT, 1, tagsilent, 1, 1" + "SUPER+SHIFT, 2, tagsilent, 2, 1" + "SUPER+SHIFT, 3, tagsilent, 3, 1" + "SUPER+SHIFT, 4, tagsilent, 4, 1" + "SUPER+SHIFT, 5, tagsilent, 5, 1" + + # move client to the tag without focus + "SUPER+ALT, 1, tag, 1, 1" + "SUPER+ALT, 2, tag, 2, 1" + "SUPER+ALT, 3, tag, 3, 1" + "SUPER+ALT, 4, tag, 4, 1" + "SUPER+ALT, 5, tag, 5, 1" + ]; + + # Window effect + blur = 1; + blur_layer = 0; + blur_optimized = 1; + blur_params_num_passes = 2; + blur_params_radius = 5; + blur_params_noise = 0.02; + blur_params_brightness = 0.9; + blur_params_contrast = 0.9; + blur_params_saturation = 1.2; + + shadows = 1; + layer_shadows = 0; + shadow_only_floating = 1; + shadows_size = 10; + shadows_blur = 15; + shadows_position_x = 0; + shadows_position_y = 0; + shadowscolor = "0x000000ff"; + + # Animation + animations = 1; + layer_animations = 1; + animation_type_open = "slide"; + animation_type_close = "fade"; + animation_fade_in = 1; + animation_fade_out = 1; + tag_animation_direction = 0; + zoom_initial_ratio = 0.3; + zoom_end_ratio = 0.8; + fadein_begin_opacity = 0.5; + fadeout_begin_opacity = 0.8; + + animation_duration_move = 100; + animation_duration_open = 100; + animation_duration_close = 100; + animation_duration_tag = 200; + animation_duration_focus = 0; + + animation_curve_open = "0.46, 1.0, 0.29, 1"; + animation_curve_move = "0.46, 1.0, 0.29, 1"; + animation_curve_tag = "0.46, 1.0, 0.29, 1"; + animation_curve_close = "0.08, 0.92, 0, 1"; + animation_curve_focus = "0.46, 1.0, 0.29, 1"; + animation_curve_opafadeout = "0.5, 0.5, 0.5, 0.5"; + animation_curve_opafadein = "0.46, 1.0, 0.29, 1"; + + # Appearance + borderpx = 0; + gappih = 10; + gappiv = 10; + gappoh = 10; + gappov = 10; + + rootcolor = "0x201b14ff"; + bordercolor = "0x444444ff"; + focuscolor = "0xc9b890ff"; + maximizescreencolor = "0x89aa61ff"; + urgentcolor = "0xad401fff"; + scratchpadcolor = "0x516c93ff"; + globalcolor = "0xb153a7ff"; + overlaycolor = "0x14a57cff"; + + # Misc + syncobj_enable = 1; + + exec-once = [ + "dbus-update-activation-environment --systemd --all; systemctl --user reset-failed && systemctl --user start mango-session.target" + "awww-daemon" + "dms run" + ]; + }; + }; + + home.packages = with pkgs; [ + quickshell + dms-shell + dgop + ]; + }; + }; +} diff --git a/modules/hm/desktop/mpv.nix b/modules/hm/desktop/mpv.nix new file mode 100644 index 0000000..dd199e2 --- /dev/null +++ b/modules/hm/desktop/mpv.nix @@ -0,0 +1,24 @@ +{ + flake.modules.homeManager.desktop = + { pkgs, ... }: + { + programs.mpv = { + enable = true; + + scripts = ( + with pkgs.mpvScripts; + [ + modernz + thumbfast + mpris + mpv-image-viewer.image-positioning + ] + ); + + config = { + osc = "no"; + border = "no"; + }; + }; + }; +} diff --git a/modules/hm/desktop/satty.nix b/modules/hm/desktop/satty.nix new file mode 100644 index 0000000..3f7c05f --- /dev/null +++ b/modules/hm/desktop/satty.nix @@ -0,0 +1,19 @@ +{ + flake.modules.homeManager.desktop = { + programs.satty = { + enable = true; + settings = { + general = { + corner-roundness = 12; + initial-tool = "arrow"; + early-exit = true; + copy-command = "wl-copy"; + }; + + font = { + family = "JetBrainsMono NerdFont"; + }; + }; + }; + }; +} diff --git a/modules/hm/desktop/serpantinum.nix b/modules/hm/desktop/serpantinum.nix new file mode 100644 index 0000000..3ecd4ef --- /dev/null +++ b/modules/hm/desktop/serpantinum.nix @@ -0,0 +1,68 @@ +{ inputs, ... }: { + + flake.modules.nixos.desktop = { + imports = [ + inputs.serpantinum.nixosModules.default + ]; + + programs.serpantinum.enable = true; + }; + + flake.modules.homeManager.desktop = { pkgs, ... }: { + imports = [ + inputs.serpantinum.homeManagerModules.default + ]; + + home.packages = with pkgs; [ pulseaudioFull ]; + + programs.serpantinum = { + enable = true; + systemd.enable = true; + + settings = { + wallpaperDir = "/home/tux/Wallpapers"; + + general = { + language = "en"; + weatherUnit = "metric"; + weatherInterval = 30; + }; + + bar = { + position = "top"; + style = "modular"; + width = 5; + workspaceCount = 7; + modules = { + left = [ + "left" + "workspaces" + "sysmon" + "wifi" + ]; + center = [ "vis" ]; + right = [ + "media" + "vol" + "bat" + "tray" + "timedate" + ]; + }; + }; + + theme = { + fontFamily = "JetBrains Mono SemiBold"; + borderRadius = 12; + matugen = true; + }; + + notifications = { + dnd = false; + position = "top right"; + sound = true; + }; + }; + }; + }; +} diff --git a/modules/hm/desktop/theme.nix b/modules/hm/desktop/theme.nix new file mode 100644 index 0000000..edf4475 --- /dev/null +++ b/modules/hm/desktop/theme.nix @@ -0,0 +1,32 @@ +{ + flake.modules.homeManager.desktop = + { pkgs, ... }: + { + home.pointerCursor = { + enable = true; + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Ice"; + size = 28; + }; + + qt = { + enable = true; + style.name = "adwaita-dark"; + }; + + gtk = { + enable = true; + theme = { + name = "adw-gtk3-dark"; + package = pkgs.adw-gtk3; + }; + iconTheme = { + package = pkgs.tela-icon-theme; + name = "Tela-black"; + }; + }; + + # Make GTK4/libadwaita apps prefer dark too (they ignore gtk.theme). + dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; + }; +} diff --git a/modules/hm/desktop/vicinae.nix b/modules/hm/desktop/vicinae.nix new file mode 100644 index 0000000..82da2d3 --- /dev/null +++ b/modules/hm/desktop/vicinae.nix @@ -0,0 +1,69 @@ +{ + flake.modules.homeManager.desktop = + { + pkgs, + ... + }: + { + programs.vicinae = { + enable = true; + systemd = { + enable = true; + autoStart = true; + }; + useLayerShell = true; + + extensions = with pkgs.vicinae-extensions; [ + # @TODO broken in upstream repo + # bluetooth + nix + ssh + awww-switcher + process-manager + pulseaudio + wifi-commander + port-killer + silverbullet + ]; + + settings = { + close_on_focus_loss = true; + consider_preedit = true; + pop_to_root_on_close = true; + favicon_service = "twenty"; + search_files_in_root = true; + font = { + normal = { + size = 10; + family = "JetBrainsMono Nerd Font"; + }; + }; + theme = { + light = { + name = "vicinae-light"; + icon_theme = "default"; + }; + dark = { + name = "vicinae-dark"; + icon_theme = "default"; + }; + }; + launcher_window = { + opacity = 0.98; + }; + + imports = [ "/run/secrets/vicinae.json" ]; + + providers = { + "@sovereign/vicinae-extension-awww-switcher-0" = { + "preferences" = { + "transitionDuration" = "1"; + "transitionType" = "center"; + "wallpaperPath" = "/home/tux/Wallpapers/"; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/hm/desktop/voxtype.nix b/modules/hm/desktop/voxtype.nix new file mode 100644 index 0000000..df024a4 --- /dev/null +++ b/modules/hm/desktop/voxtype.nix @@ -0,0 +1,19 @@ +{ inputs, ... }: { + flake.modules.homeManager.desktop = { pkgs, ... }: { + imports = [ + inputs.voxtype.homeManagerModules.default + ]; + + programs.voxtype = { + enable = true; + package = pkgs.voxtype.onnx-cuda; + engine = "parakeet"; + model.path = "/home/tux/.local/share/voxtype/models/parakeet-tdt-0.6b-v3"; + service.enable = true; + settings = { + hotkey.enabled = false; + whisper.language = "en"; + }; + }; + }; +} diff --git a/modules/hm/desktop/wezterm.nix b/modules/hm/desktop/wezterm.nix new file mode 100644 index 0000000..4275b35 --- /dev/null +++ b/modules/hm/desktop/wezterm.nix @@ -0,0 +1,33 @@ +{ + flake.modules.homeManager.desktop = + { pkgs, ... }: + { + programs.wezterm = { + enable = true; + package = pkgs.wezterm-git; + enableZshIntegration = false; + + extraConfig = '' + local wezterm = require 'wezterm' + local config = {} + + config.check_for_updates = false + + config.window_close_confirmation = 'NeverPrompt' + config.color_scheme = 'Poimandres' + config.colors = { + background = "#0f0f0f" + } + config.enable_tab_bar = false + config.font = wezterm.font_with_fallback { + 'JetBrainsMono Nerd Font', + } + config.font_size = 12.0 + config.window_background_opacity = 1 + config.audible_bell = "Disabled" + + return config + ''; + }; + }; +} diff --git a/modules/hm/desktop/zed.nix b/modules/hm/desktop/zed.nix new file mode 100644 index 0000000..e555af5 --- /dev/null +++ b/modules/hm/desktop/zed.nix @@ -0,0 +1,35 @@ +{ + flake.modules.homeManager.desktop = { + programs.zed-editor = { + enable = true; + extensions = [ + "lua" + "nix" + "C#" + "solidity" + ]; + userKeymaps = [ + { + context = "Workspace"; + bindings = { + F7 = "workspace::NewTerminal"; + }; + } + ]; + userSettings = { + ui_font_size = 18; + buffer_font_size = 18; + theme = { + mode = "dark"; + light = "Ayu Light"; + dark = "Ayu Dark"; + }; + vim_mode = true; + telemetry = { + diagnostics = false; + metrics = false; + }; + }; + }; + }; +} diff --git a/modules/hm/gaming/lutris.nix b/modules/hm/gaming/lutris.nix new file mode 100644 index 0000000..ba36180 --- /dev/null +++ b/modules/hm/gaming/lutris.nix @@ -0,0 +1,8 @@ +{ + flake.modules.homeManager.desktop = { osConfig, ... }: { + programs.lutris = { + enable = true; + steamPackage = osConfig.programs.steam.package; + }; + }; +} diff --git a/modules/hm/shell/bat.nix b/modules/hm/shell/bat.nix new file mode 100644 index 0000000..68f1fc9 --- /dev/null +++ b/modules/hm/shell/bat.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.shell = { + programs.bat.enable = true; + }; +} diff --git a/modules/hm/shell/btop.nix b/modules/hm/shell/btop.nix new file mode 100644 index 0000000..8ab4ee1 --- /dev/null +++ b/modules/hm/shell/btop.nix @@ -0,0 +1,12 @@ +{ + flake.modules.homeManager.shell = { + programs.btop = { + enable = true; + settings = { + theme_background = false; + update_ms = 1000; + presets = "cpu:0:default mem:0:default net:0:default"; + }; + }; + }; +} diff --git a/modules/hm/shell/fastfetch.nix b/modules/hm/shell/fastfetch.nix new file mode 100644 index 0000000..20d6cdf --- /dev/null +++ b/modules/hm/shell/fastfetch.nix @@ -0,0 +1,69 @@ +{ + flake.modules.homeManager.shell = { + home.file.".config/fastfetch/config.jsonc".text = '' + { + "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", + "logo": { + "type": "none", + }, + "display": { + "separator": " ", + "key": { + "width": 18, + }, + }, + "modules": [ + { + "key": " ╭───────────╮", + "type": "custom", + }, + { + "key": " │ │\u001b[11D{#31} user", + "type": "title", + "format": "{1}", + }, + { + "key": " │ │\u001b[11D{#34} hname", + "type": "command", + "text": "hostname", + }, + { + "key": " │ │\u001b[11D{#34}󰻀 distro", + "type": "os", + }, + { + "key": " │ │\u001b[11D{#35}󰌢 kernel", + "type": "kernel", + }, + { + "key": " │ │\u001b[11D{#31} uptime", + "type": "uptime", + }, + { + "key": " │ │\u001b[11D{#32} shell", + "type": "shell", + }, + { + "key": " │ │\u001b[11D{#35} memory", + "type": "memory", + }, + { + "key": " ├───────────┤", + "type": "custom", + }, + { + "key": " │ │\u001b[11D{#39} colors", + "type": "colors", + "symbol": "circle", + }, + { + "key": " ╰───────────╯", + "type": "custom", + }, + ], + } + ''; + + programs.fastfetch.enable = true; + }; +} diff --git a/modules/hm/shell/fzf.nix b/modules/hm/shell/fzf.nix new file mode 100644 index 0000000..359d980 --- /dev/null +++ b/modules/hm/shell/fzf.nix @@ -0,0 +1,8 @@ +{ + flake.modules.homeManager.shell = { + programs.fzf = { + enable = true; + enableZshIntegration = true; + }; + }; +} diff --git a/modules/hm/shell/git.nix b/modules/hm/shell/git.nix new file mode 100644 index 0000000..20264f1 --- /dev/null +++ b/modules/hm/shell/git.nix @@ -0,0 +1,27 @@ +{ + flake.modules.homeManager.shell = + { + userName, + userEmail, + ... + }: + { + programs.git = { + enable = true; + signing = { + key = "~/.ssh/id_ed25519.pub"; + signByDefault = true; + }; + lfs.enable = true; + settings = { + user = { + name = "${userName}"; + email = "${userEmail}"; + }; + init.defaultBranch = "main"; + commit.gpgSign = true; + gpg.format = "ssh"; + }; + }; + }; +} diff --git a/modules/hm/shell/lazygit.nix b/modules/hm/shell/lazygit.nix new file mode 100644 index 0000000..9badc48 --- /dev/null +++ b/modules/hm/shell/lazygit.nix @@ -0,0 +1,160 @@ +{ + flake.modules.homeManager.shell = { + programs.lazygit = { + enable = true; + settings = { + gui = { + showIcons = true; + nerdFontsVersion = "3"; + }; + customCommands = [ + { + key = ""; + description = "AI-powered conventional commit"; + context = "global"; + command = "git commit -m \"{{.Form.CommitMsg}}\""; + loadingText = "Generating commit messages..."; + prompts = [ + { + type = "menu"; + key = "Type"; + title = "Type of change"; + options = [ + { + name = "AI defined"; + description = "Let AI analyze and determine the best commit type"; + value = "ai-defined"; + } + { + name = "build"; + description = "Changes that affect the build system or external dependencies"; + value = "build"; + } + { + name = "feat"; + description = "A new feature"; + value = "feat"; + } + { + name = "fix"; + description = "A bug fix"; + value = "fix"; + } + { + name = "chore"; + description = "Other changes that don't modify src or test files"; + value = "chore"; + } + { + name = "ci"; + description = "Changes to CI configuration files and scripts"; + value = "ci"; + } + { + name = "docs"; + description = "Documentation only changes"; + value = "docs"; + } + { + name = "perf"; + description = "A code change that improves performance"; + value = "perf"; + } + { + name = "refactor"; + description = "A code change that neither fixes a bug nor adds a feature"; + value = "refactor"; + } + { + name = "revert"; + description = "Reverts a previous commit"; + value = "revert"; + } + { + name = "style"; + description = "Changes that do not affect the meaning of the code"; + value = "style"; + } + { + name = "test"; + description = "Adding missing tests or correcting existing tests"; + value = "test"; + } + ]; + } + { + type = "menuFromCommand"; + title = "AI Generated Commit Messages"; + key = "CommitMsg"; + command = '' + bash -lc ' + diff=$(git diff --cached) + if [ -z "$diff" ]; then + echo "No changes in staging. Add changes first." + exit 1 + fi + + SELECTED_TYPE="{{.Form.Type}}" + COMMITS_TO_SUGGEST=4 + + opencode run --format json --model=google/gemini-3.5-flash-lite --variant=none " + You are an expert at writing Git commits. Your job is to write commit messages that follow the Conventional Commits format. + + The user has selected: $SELECTED_TYPE + + Your task is to: + 1. Analyze the code changes + 2. Determine the most appropriate commit type if user selected ai-defined + 3. Determine an appropriate scope, component, or area affected + 4. Decide if this is a breaking change + 5. Write clear, concise commit messages + + Available commit types: + - feat: A new feature + - fix: A bug fix + - docs: Documentation only changes + - style: Changes that do not affect the meaning of the code + - refactor: A code change that neither fixes a bug nor adds a feature + - perf: A code change that improves performance + - test: Adding missing tests or correcting existing tests + - build: Changes that affect the build system or external dependencies + - ci: Changes to CI configuration files and scripts + - chore: Other changes that do not modify src or test files + - revert: Reverts a previous commit + + Follow these guidelines: + - Structure: (): + - If user selected ai-defined, analyze the changes and pick the most suitable type + - If user selected a specific type, use that type: $SELECTED_TYPE + - Add scope in parentheses if applicable, for example auth, api, ui, config + - Use exclamation mark after type or scope for breaking changes: type(scope)!: description + - Use lowercase for description except proper nouns + - Use imperative mood: add, not added + - Keep description under 50 characters when possible + - No period at the end of subject line + + IMPORTANT: + - Generate exactly $COMMITS_TO_SUGGEST different commit message options + - If user selected ai-defined, you can use different types for different options + - If user selected a specific type, all messages must use that type + - Only return commit messages, no explanations + - Do not use markdown code blocks + - One message per line + + Previous commits for context: + $(git log --oneline -10) + + Changes to analyze: + $(git diff --cached --stat) + $diff + " | JQ_TEXT=text jq -r "select(.type == env.JQ_TEXT) | .part.text? // empty" + ' + ''; + } + ]; + } + ]; + }; + }; + }; +} diff --git a/modules/hm/shell/lsd.nix b/modules/hm/shell/lsd.nix new file mode 100644 index 0000000..6d26f74 --- /dev/null +++ b/modules/hm/shell/lsd.nix @@ -0,0 +1,8 @@ +{ + flake.modules.homeManager.shell = { + programs.lsd = { + enable = true; + enableZshIntegration = true; + }; + }; +} diff --git a/modules/hm/shell/misc.nix b/modules/hm/shell/misc.nix new file mode 100644 index 0000000..ca35bf1 --- /dev/null +++ b/modules/hm/shell/misc.nix @@ -0,0 +1,17 @@ +{ + flake.modules.homeManager.shell = + { pkgs, ... }: + { + home.packages = with pkgs; [ + systemctl-tui + zip + unzip + pciutils + usbutils + jq + dig + lsof + trok + ]; + }; +} diff --git a/modules/hm/shell/neovim.nix b/modules/hm/shell/neovim.nix new file mode 100644 index 0000000..48508bb --- /dev/null +++ b/modules/hm/shell/neovim.nix @@ -0,0 +1,40 @@ +{ + flake.modules.homeManager.shell = + { pkgs, ... }: + { + home.file = { + ".config/nvim" = { + recursive = true; + source = "${pkgs.tnvim}"; + }; + }; + + programs = { + neovim = { + enable = true; + defaultEditor = true; + }; + }; + + home = { + packages = with pkgs; [ + python3 + nodejs + bun + pnpm + go + rustup + typescript + neovide + nil + statix + deadnix + alejandra + luarocks + gdu + gcc + wakatime-cli + ]; + }; + }; +} diff --git a/modules/hm/shell/opencode.nix b/modules/hm/shell/opencode.nix new file mode 100644 index 0000000..3c6bf9b --- /dev/null +++ b/modules/hm/shell/opencode.nix @@ -0,0 +1,32 @@ +{ + flake.modules.homeManager.shell = { pkgs, ... }: { + programs.opencode = { + enable = true; + package = pkgs.opencode-git; + tui = { + theme = "system"; + }; + settings = { + model = "opencode-go/kimi-k3"; + provider = { + google = { + options = { + apiKey = "{file:/run/secrets/gemini-api-key}"; + }; + }; + openrouter = { + options = { + apiKey = "{file:/run/secrets/openrouter-api-key}"; + }; + }; + opencode-go = { + options = { + apiKey = "{file:/run/secrets/opencode-go-api-key}"; + }; + }; + }; + plugin = [ "@dietrichgebert/ponytail" ]; + }; + }; + }; +} diff --git a/modules/hm/shell/ripgrep.nix b/modules/hm/shell/ripgrep.nix new file mode 100644 index 0000000..89297d5 --- /dev/null +++ b/modules/hm/shell/ripgrep.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.shell = { + programs.ripgrep.enable = true; + }; +} diff --git a/modules/hm/shell/starship.nix b/modules/hm/shell/starship.nix new file mode 100644 index 0000000..71ee023 --- /dev/null +++ b/modules/hm/shell/starship.nix @@ -0,0 +1,52 @@ +{ + flake.modules.homeManager.shell = { + programs.starship = { + enable = true; + settings = { + format = "$os$hostname$directory$rust$golang$solidity$nodejs(bold blue)$git_branch$git_status[❯](bold yellow)[❯](bold purple)[❯](bold blue) "; + scan_timeout = 60; + add_newline = false; + line_break.disabled = true; + + os = { + format = "[$symbol  ]($style)"; + style = "bold green"; + disabled = false; + symbols.NixOS = "󰊠"; + symbols.Linux = "󰊠"; + symbols.Arch = "󰣇"; + symbols.Ubuntu = "󰕈"; + }; + directory = { + format = "[$path]($style)[$read_only ]($read_only_style)"; + read_only = " 󰌾"; + style = "bold blue"; + }; + git_branch.format = "[$symbol$branch]($style) "; + hostname = { + ssh_only = false; + format = "[$ssh_symbol$hostname]($style) "; + style = "bold green"; + ssh_symbol = "󰇧 "; + disabled = false; + }; + rust = { + format = "[$symbol]($style)"; + symbol = " "; + }; + golang = { + format = "[$symbol]($style)"; + symbol = " "; + }; + solidity = { + format = "[$symbol]($style)"; + symbol = "󰡪 "; + }; + nodejs = { + format = "[$symbol]($style)"; + symbol = "󰎙 "; + }; + }; + }; + }; +} diff --git a/modules/hm/shell/superfile.nix b/modules/hm/shell/superfile.nix new file mode 100644 index 0000000..bf55632 --- /dev/null +++ b/modules/hm/shell/superfile.nix @@ -0,0 +1,43 @@ +{ + flake.modules.homeManager.shell = { + programs.superfile = { + enable = true; + settings = { + theme = "poimandres"; + editor = ""; + dir_editor = ""; + auto_check_update = false; + cd_on_quit = false; + default_open_file_preview = true; + show_image_preview = true; + show_panel_footer_info = true; + default_directory = "~"; + file_size_use_si = false; + default_sort_type = 0; + sort_order_reversed = false; + case_sensitive_sort = false; + shell_close_on_success = false; + debug = false; + ignore_missing_fields = false; + nerdfont = true; + transparent_background = true; + file_preview_width = 0; + code_previewer = "bat"; + sidebar_width = 20; + border_top = "─"; + border_bottom = "─"; + border_left = "│"; + border_right = "│"; + border_top_left = "╭"; + border_top_right = "╮"; + border_bottom_left = "╰"; + border_bottom_right = "╯"; + border_middle_left = "├"; + border_middle_right = "┤"; + metadata = true; + zoxide_support = true; + enable_md5_checksum = false; + }; + }; + }; +} diff --git a/modules/hm/shell/tmux.nix b/modules/hm/shell/tmux.nix new file mode 100644 index 0000000..4593cdd --- /dev/null +++ b/modules/hm/shell/tmux.nix @@ -0,0 +1,155 @@ +{ + flake.modules.homeManager.shell = + { pkgs, ... }: + let + bg = "default"; + fg = "default"; + bg2 = "brightblack"; + fg2 = "white"; + color = c: "#{@${c}}"; + + indicator = + let + accent = color "indicator_color"; + content = "  "; + in + "#[reverse,fg=${accent}]#{?client_prefix,${content},}"; + + current_window = + let + accent = color "main_accent"; + index = "#[reverse,fg=${accent},bg=${fg}] #I "; + name = "#[fg=${bg2},bg=${fg2}] #W "; + # flags = "#{?window_flags,#{window_flags}, }"; + in + "${index}${name}"; + + window_status = + let + accent = color "window_color"; + index = "#[reverse,fg=${accent},bg=${fg}] #I "; + name = "#[fg=${bg2},bg=${fg2}] #W "; + # flags = "#{?window_flags,#{window_flags}, }"; + in + "${index}${name}"; + + battery = + let + percentage = pkgs.writeShellScript "percentage" ( + if pkgs.stdenv.isDarwin then + '' + echo $(pmset -g batt | grep -o "[0-9]\+%" | tr '%' ' ') + '' + else + '' + path="/org/freedesktop/UPower/devices/DisplayDevice" + echo $(${pkgs.upower}/bin/upower -i $path | grep -o "[0-9]\+%" | tr '%' ' ') + '' + ); + state = pkgs.writeShellScript "state" ( + if pkgs.stdenv.isDarwin then + '' + echo $(pmset -g batt | awk '{print $4}') + '' + else + '' + path="/org/freedesktop/UPower/devices/DisplayDevice" + echo $(${pkgs.upower}/bin/upower -i $path | grep state | awk '{print $2}') + '' + ); + icon = pkgs.writeShellScript "icon" '' + percentage=$(${percentage}) + state=$(${state}) + if [ "$state" == "charging" ] || [ "$state" == "fully-charged" ]; then echo "󰂄" + elif [ $percentage -ge 75 ]; then echo "󱊣" + elif [ $percentage -ge 50 ]; then echo "󱊢" + elif [ $percentage -ge 25 ]; then echo "󱊡" + elif [ $percentage -ge 0 ]; then echo "󰂎" + fi + ''; + color = pkgs.writeShellScript "color" '' + percentage=$(${percentage}) + state=$(${state}) + if [ "$state" == "charging" ] || [ "$state" == "fully-charged" ]; then echo "green" + elif [ $percentage -ge 75 ]; then echo "green" + elif [ $percentage -ge 50 ]; then echo "${fg2}" + elif [ $percentage -ge 30 ]; then echo "yellow" + elif [ $percentage -ge 0 ]; then echo "red" + fi + ''; + in + "#[fg=#(${color})]#(${icon}) #[fg=${fg}]#(${percentage})%"; + + pwd = + let + accent = color "main_accent"; + icon = "#[fg=${accent}] "; + format = "#[fg=${fg}]#{b:pane_current_path}"; + in + "${icon}${format}"; + + git = + let + icon = pkgs.writeShellScript "branch" '' + git -C "$1" branch && echo " " + ''; + branch = pkgs.writeShellScript "branch" '' + git -C "$1" rev-parse --abbrev-ref HEAD + ''; + in + "#[fg=magenta]#(${icon} #{pane_current_path})#(${branch} #{pane_current_path})"; + + separator = "#[fg=${fg}]|"; + in + { + programs.tmux = { + enable = true; + baseIndex = 1; + escapeTime = 0; + mouse = true; + extraConfig = '' + set-option -sa terminal-overrides ",xterm*:Tc" + set-option -g status-position top + unbind r + bind r source-file ~/.config/tmux/tmux.conf + + # remap prefix from C-b to C-Space + # unbind C-b + # set -g prefix C-Space + # bind C-Space send-prefix + + # split panes using | and - + unbind '"' + unbind % + bind | split-window -h + bind - split-window -v + + # Start windows and panes at 1, not 0 + set -g base-index 1 + set -g pane-base-index 1 + set-window-option -g pane-base-index 1 + set-option -g renumber-windows on + + # switch panes using Alt-arrow without prefix + bind -n M-Left select-pane -L + bind -n M-Right select-pane -R + bind -n M-Up select-pane -U + bind -n M-Down select-pane -D + + set-option -g default-terminal "screen-256color" + set-option -g status-right-length 100 + set-option -g @indicator_color "yellow" + set-option -g @window_color "magenta" + set-option -g @main_accent "blue" + set-option -g pane-active-border fg=black + set-option -g pane-border-style fg=black + set-option -g status-style "bg=${bg} fg=${fg}" + set-option -g status-left "${indicator}" + set-option -g status-right "${git} ${pwd} ${separator} ${battery}" + set-option -g window-status-current-format "${current_window}" + set-option -g window-status-format "${window_status}" + set-option -g window-status-separator "" + ''; + }; + }; +} diff --git a/modules/hm/shell/zoxide.nix b/modules/hm/shell/zoxide.nix new file mode 100644 index 0000000..42df138 --- /dev/null +++ b/modules/hm/shell/zoxide.nix @@ -0,0 +1,9 @@ +{ + flake.modules.homeManager.shell = { + programs.zoxide = { + enable = true; + options = [ "--cmd cd" ]; + enableZshIntegration = true; + }; + }; +} diff --git a/modules/hm/shell/zsh.nix b/modules/hm/shell/zsh.nix new file mode 100644 index 0000000..56172e9 --- /dev/null +++ b/modules/hm/shell/zsh.nix @@ -0,0 +1,31 @@ +{ lib, ... }: +{ + flake.modules.homeManager.shell = + { pkgs, ... }: + { + programs.zsh = { + enable = true; + history = { + append = true; + share = true; + expireDuplicatesFirst = true; + ignoreDups = true; + size = 1000000; + save = 1000000; + path = "$HOME/.local/share/zsh/.zsh_history"; + }; + fastSyntaxHighlighting.enable = true; + autosuggestion.enable = true; + initContent = '' + ${lib.getExe pkgs.fastfetch} + bindkey "^A" vi-beginning-of-line + bindkey "^E" vi-end-of-line + bindkey '^R' fzf-history-widget + + PATH=$PATH:~/.cargo/bin:~/.local/bin + alias stui='systemctl-tui' + alias vim='nvim --clean' + ''; + }; + }; +} diff --git a/modules/home/alacritty/default.nix b/modules/home/alacritty/default.nix deleted file mode 100755 index e5986b1..0000000 --- a/modules/home/alacritty/default.nix +++ /dev/null @@ -1,69 +0,0 @@ -{...}: { - programs.alacritty = { - enable = true; - - settings = { - font = { - normal.family = "JetBrainsMono Nerd Font"; - bold.family = "JetBrainsMono Nerd Font"; - italic.family = "JetBrainsMono Nerd Font"; - bold_italic.family = "JetBrainsMono Nerd Font"; - size = 12; - }; - - window = { - padding = { - x = 15; - y = 15; - }; - - decorations = "none"; - opacity = 1.0; - dynamic_title = true; - }; - - selection.save_to_clipboard = false; - - general.live_config_reload = true; - - colors = { - primary = { - background = "#0f0f0f"; - foreground = "#a5b6cf"; - }; - normal = { - black = "#1c1e27"; - blue = "#8baff1"; - cyan = "#98d3ee"; - green = "#95d3af"; - magenta = "#c79bf0"; - red = "#e26c7c"; - white = "#d0d3d8"; - yellow = "#f1d8a5"; - }; - bright = { - black = "#151720"; - blue = "#86aaec"; - cyan = "#93cee9"; - green = "#90ceaa"; - magenta = "#c296eb"; - red = "#dd6777"; - white = "#cbced3"; - yellow = "#ecd3a0"; - }; - cursor = { - cursor = "#a5b6cf"; - text = "CellForeground"; - }; - selection = { - text = "CellForeground"; - background = "0x303340"; - }; - vi_mode_cursor = { - text = "CellBackground"; - cursor = "CellForeground"; - }; - }; - }; - }; -} diff --git a/modules/home/aria2/default.nix b/modules/home/aria2/default.nix deleted file mode 100644 index 752dd96..0000000 --- a/modules/home/aria2/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{...}: { - programs.aria2 = { - enable = true; - settings = { - file-allocation = "none"; - log-level = "warn"; - max-connection-per-server = 16; - min-split-size = "1M"; - human-readable = true; - reuse-uri = true; - rpc-save-upload-metadata = true; - max-file-not-found = 0; - remote-time = true; - async-dns = true; - stop = 0; - allow-piece-length-change = true; - optimize-concurrent-downloads = true; - deferred-input = true; - continue = true; - check-integrity = true; - realtime-chunk-checksum = true; - piece-length = "1M"; - split = 16; - # Seconds: - save-session-interval = 60; - # Caches in memory - disk-cache = "32M"; - save-not-found = true; - download-result = "full"; - truncate-console-readout = true; - retry-wait = 30; - max-tries = 15; - enable-color = true; - enable-http-keep-alive = true; - enable-http-pipelining = true; - http-accept-gzip = true; - follow-torrent = true; - bt-save-metadata = true; - seed-time = 0; - bt-load-saved-metadata = true; - metalink-preferred-protocol = "https"; - }; - }; -} diff --git a/modules/home/bitwarden/default.nix b/modules/home/bitwarden/default.nix deleted file mode 100644 index ba0f39b..0000000 --- a/modules/home/bitwarden/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - pkgs, - email, - ... -}: { - programs.rbw = { - enable = true; - settings = { - base_url = "https://bw.tux.rs"; - email = "${email}"; - }; - }; - - home.packages = with pkgs; [ - bitwarden - ]; -} diff --git a/modules/home/brave/default.nix b/modules/home/brave/default.nix deleted file mode 100644 index d1127d0..0000000 --- a/modules/home/brave/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - pkgs, - config, - ... -}: let - configDir = "${config.xdg.configHome}/BraveSoftware/Brave-Browser"; - - extensionJson = ext: { - name = "${configDir}/External Extensions/${ext.id}.json"; - value.text = builtins.toJSON { - external_update_url = "https://clients2.google.com/service/update2/crx"; - }; - }; - - extensions = [ - {id = "nkbihfbeogaeaoehlefnkodbefgpgknn";} # Metamask - {id = "gppongmhjkpfnbhagpmjfkannfbllamg";} # Wappalyzer - {id = "nngceckbapebfimnlniiiahkandclblb";} # Bitwarden - {id = "bfnaelmomeimhlpmgjnjophhpkkoljpa";} # Phantom - {id = "eimadpbcbfnmbkopoojfekhnkhdbieeh";} # DarkReader - ]; -in { - programs.chromium = { - enable = true; - package = pkgs.brave; - commandLineArgs = [ - "--disable-features=WebRtcAllowInputVolumeAdjustment" - "--force-device-scale-factor=1.0" - ]; - }; - - home.file = builtins.listToAttrs (map extensionJson extensions); -} diff --git a/modules/home/desktop/awesome/default.nix b/modules/home/desktop/awesome/default.nix deleted file mode 100644 index 6f8ccc3..0000000 --- a/modules/home/desktop/awesome/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{pkgs, ...}: { - home.file = { - ".config/awesome" = { - recursive = true; - source = "${pkgs.tawm}"; - }; - }; -} diff --git a/modules/home/desktop/hyprland/default.nix b/modules/home/desktop/hyprland/default.nix deleted file mode 100644 index 15b7cf4..0000000 --- a/modules/home/desktop/hyprland/default.nix +++ /dev/null @@ -1,306 +0,0 @@ -{pkgs, ...}: { - imports = [ - ./hyprlock.nix - ]; - - home.packages = with pkgs; [ - ags - awww - ]; - - wayland.windowManager.hyprland = { - enable = true; - package = null; - portalPackage = null; - xwayland.enable = true; - systemd.variables = ["--all"]; - - plugins = with pkgs.hyprland-plugins; [ - # hyprexpo - ]; - - settings = let - # Hyprland - border_size = 0; - gaps_in = 5; - gaps_out = 10; - gaps_ws = -10; - rounding = 8; - active_border_col = "rgba(90ceaaff) rgba(ecd3a0ff) 45deg"; - inactive_border_col = "rgba(86aaeccc) rgba(93cee9cc) 45deg"; - - # Apps - terminal = "wezterm"; - floating_terminal = "wezterm start --class wezterm-floating"; - editor = "wezterm -e nvim"; - browser = "brave --new-window"; - spotify = "wezterm start --class wezterm-floating -e spotify_player"; - filemanager = "wezterm -e superfile"; - in { - # See https://wiki.hyprland.org/Configuring/Multi-GPU - env = "AQ_DRM_DEVICES,/dev/dri/card2"; - - #-- Output - # See https://wiki.hyprland.org/Configuring/Monitors - monitor = [ - "eDP-1,2560x1440@90,0x0,1" - "HDMI-A-1,preferred,0x-1440,1" - ]; - - #-- Input: Keyboard, Mouse, Touchpad - input = { - sensitivity = -0.7; - scroll_method = "2 fg"; - touchpad = { - natural_scroll = true; - clickfinger_behavior = false; - }; - }; - - device = { - name = "asue1209:00-04f3:319f-touchpad"; - sensitivity = 0; - }; - - #-- General - # See https://wiki.hyprland.org/Configuring/Variables - general = { - border_size = border_size; - gaps_in = gaps_in; - gaps_out = gaps_out; - gaps_workspaces = gaps_ws; - layout = "master"; - resize_on_border = true; - - "col.active_border" = active_border_col; - "col.inactive_border" = inactive_border_col; - }; - - misc = { - disable_hyprland_logo = true; - force_default_wallpaper = 1; - vrr = 0; - }; - - cursor = { - no_hardware_cursors = 1; - }; - - ecosystem = { - no_update_news = true; - no_donation_nag = true; - }; - - #-- Decoration - # See https://wiki.hyprland.org/Configuring/Variables/#decoration - decoration = { - rounding = rounding; - active_opacity = 1.0; - inactive_opacity = 1.0; - fullscreen_opacity = 1.0; - - blur = { - enabled = false; - size = 4; - passes = 3; - new_optimizations = true; - xray = false; - special = true; - brightness = 1; - noise = 0.02; - contrast = 1; - popups = true; - popups_ignorealpha = 0.6; - }; - - shadow = { - enabled = false; - }; - }; - - #-- Animations - # See https://wiki.hyprland.org/Configuring/Animations - animations = { - enabled = true; - - bezier = [ - "zoom, 0.05, 0.7, 0.1, 1.0" - ]; - - animation = [ - "windows, 1, 1, zoom, slide" - "windowsIn, 1, 1, zoom, slide" - "windowsOut, 1, 1, zoom, slidevert" - "windowsMove, 1, 1, zoom, slide" - "fade, 1, 2, zoom" - "workspaces, 1, 1, zoom, slide" - ]; - }; - - #-- Layout : Master - # See https://wiki.hyprland.org/Configuring/Master-Layout - master = { - allow_small_split = false; - special_scale_factor = 0.8; - mfact = 0.5; - new_on_top = false; - orientation = "left"; - smart_resizing = true; - drop_at_cursor = true; - }; - - #-- Window Rules - # See https://wiki.hyprland.org/Configuring/Window-Rules - windowrule = [ - "float on, center on, size 800 600, match:class org.pulseaudio.pavucontrol" - - # Wezterm and Ghostty floating terminal - "float on, center on, size 1200 800, match:class (com.ghostty.floating|wezterm-floating)" - - "float on, center on, size 900 700, match:class GalaxyBudsClient" - - # KDE Connect - "float on, center on, size 900 700, match:class (org.kde.kdeconnect.sms|org.kde.kdeconnect.app)" - - "workspace 7 silent, match:class (discord|org.telegram.desktop)" - ]; - - # plugin = { - # hyprexpo = { - # columns = 3; - # gap_size = 5; - # bg_col = "rgb(111111)"; - # workspace_method = "first 1"; - # gesture_distance = 300; - # }; - # }; - - gesture = [ - "3, horizontal, workspace" - "3, up, dispatcher, exec, brightnessctl s +20%" - "3, down, dispatcher, exec, brightnessctl s +20%-" - ]; - - bindm = [ - "SUPER,mouse:273,resizewindow" - "SUPER,mouse:272,movewindow" - ]; - - bind = [ - # apps - "SUPER, Return, exec, ${terminal}" - "SUPER, Space, exec, vicinae toggle" - "SUPER, F, exec, ${filemanager}" - "SUPER, E, exec, ${editor}" - "SUPER, B, exec, ${browser}" - "SUPER, G, exec, GalaxyBudsClient" - "SUPER, D, exec, discord" - "SUPER, T, exec, Telegram" - "SUPER, S, exec, ${spotify}" - "SUPER, V, exec, vicinae vicinae://extensions/vicinae/clipboard/history" - - "SUPER_SHIFT, Return, exec, ${floating_terminal}" - "SUPER_SHIFT, S, exec, hypr-screenshot" - "SUPER_SHIFT, W, exec, vicinae vicinae://extensions/sovereign/awww-switcher/wpgrid" - - # tpanel - "SUPER_SHIFT, B, exec, ags toggle bar" - "SUPER_SHIFT, C, exec, ags toggle control-center" - "SUPER_SHIFT, R, exec, ags quit; ${pkgs.tpanel}/bin/tpanel" - - # hyprland - "SUPER, Q, killactive" - # "SUPER, grave, hyprexpo:expo, toggle" - "SUPER_SHIFT, Q, forcekillactive" - "SUPER_SHIFT, F, fullscreen, 0" - "SUPER_SHIFT, Space, exec, hyprctl dispatch togglefloating; hyprctl dispatch resizeactive exact 1200 800; hyprctl dispatch centerwindow;" - "SUPER_SHIFT, P, exec, hyprctl dispatch pin" - - # lock - "SUPER_SHIFT, L, exec, hyprlock" - - # change focus - "SUPER, left, movefocus, l" - "SUPER, right, movefocus, r" - "SUPER, up, movefocus, u" - "SUPER, down, movefocus, d" - - # move active - "SUPER_SHIFT, left, movewindow, l" - "SUPER_SHIFT, right, movewindow, r" - "SUPER_SHIFT, up, movewindow, u" - "SUPER_SHIFT, down, movewindow, d" - - # workspaces - "SUPER, 1, workspace, 1" - "SUPER, 2, workspace, 2" - "SUPER, 3, workspace, 3" - "SUPER, 4, workspace, 4" - "SUPER, 5, workspace, 5" - "SUPER, 6, workspace, 6" - "SUPER, 7, workspace, 7" - - # send to workspaces - "SUPER_SHIFT, 1, movetoworkspacesilent, 1" - "SUPER_SHIFT, 2, movetoworkspacesilent, 2" - "SUPER_SHIFT, 3, movetoworkspacesilent, 3" - "SUPER_SHIFT, 4, movetoworkspacesilent, 4" - "SUPER_SHIFT, 5, movetoworkspacesilent, 5" - "SUPER_SHIFT, 6, movetoworkspacesilent, 6" - "SUPER_SHIFT, 7, movetoworkspacesilent, 7" - ]; - - workspace = [ - "1, monitor:HDMI-A-1, default:true" - "2, monitor:HDMI-A-1" - "3, monitor:HDMI-A-1" - "4, monitor:HDMI-A-1" - "5, monitor:HDMI-A-1" - "6, monitor:eDP-1" - "7, monitor:eDP-1" - ]; - - binde = [ - # resize active - "SUPER_CTRL, left, resizeactive, -20 0" - "SUPER_CTRL, right, resizeactive, 20 0" - "SUPER_CTRL, up, resizeactive, 0 -20" - "SUPER_CTRL, down, resizeactive, 0 20" - "SUPER_CTRL, equal, exec, hyprctl dispatch layoutmsg mfact exact 0.5;" - - # move active (Floating Only) - "SUPER_ALT, left, moveactive, -20 0" - "SUPER_ALT, right, moveactive, 20 0" - "SUPER_ALT, up, moveactive, 0 -20" - "SUPER_ALT, down, moveactive, 0 20" - "SUPER_ALT, equal, exec, hyprctl dispatch centerwindow;" - - # speaker and mic volume control - " , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 10%+" - " , XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 10%-" - " , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - " , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - - # display and keyboard brightness control - " , XF86MonBrightnessUp, exec, brightnessctl s +20%" - " , XF86MonBrightnessDown, exec, brightnessctl s 20%-" - " , XF86KbdBrightnessUp, exec, asusctl -n" - " , XF86KbdBrightnessDown, exec, asusctl -p" - - # performance - " , XF86Launch4, exec, asusctl profile -n" - ]; - - "exec-once" = [ - # load hyprland plugins - # "hyprctl plugin load '$HYPR_PLUGIN_DIR/lib/libhyprexpo.so'" - - "easyeffects --w" - "awww-daemon" - "${pkgs.tpanel}/bin/tpanel" - "kdeconnectd" - "kdeconnect-indicator" - ]; - }; - }; -} diff --git a/modules/home/desktop/hyprland/hyprlock.nix b/modules/home/desktop/hyprland/hyprlock.nix deleted file mode 100644 index b7c76f9..0000000 --- a/modules/home/desktop/hyprland/hyprlock.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ - programs.hyprlock = { - enable = true; - settings = { - general = { - hide_cursor = true; - ignore_empty_input = true; - }; - - animations = { - enabled = true; - fade_in = { - duration = 300; - bezier = "easeOutQuint"; - }; - fade_out = { - duration = 300; - bezier = "easeOutQuint"; - }; - }; - - background = [ - { - path = "screenshot"; - blur_passes = 3; - blur_size = 8; - } - ]; - - input-field = [ - { - size = "200, 50"; - position = "0, -80"; - monitor = ""; - dots_center = true; - fade_on_empty = false; - font_color = "rgb(202, 211, 245)"; - inner_color = "rgb(91, 96, 120)"; - outer_color = "rgb(24, 25, 38)"; - outline_thickness = 5; - placeholder_text = "Password"; - shadow_passes = 2; - } - ]; - }; - }; -} diff --git a/modules/home/desktop/hyprland/hyprpaper.nix b/modules/home/desktop/hyprland/hyprpaper.nix deleted file mode 100644 index 4d9ddc8..0000000 --- a/modules/home/desktop/hyprland/hyprpaper.nix +++ /dev/null @@ -1,19 +0,0 @@ -{pkgs, ...}: { - services.hyprpaper = { - enable = true; - - settings = { - ipc = "on"; - splash = false; - splash_offset = 20; - - wallpaper = { - monitor = ""; - path = "~/Wallpapers/new/sunset-pixel.png"; - fit_mode = ""; - }; - }; - }; - - home.packages = with pkgs; [hyprpaper]; -} diff --git a/modules/home/desktop/mango/default.nix b/modules/home/desktop/mango/default.nix deleted file mode 100644 index d86ec77..0000000 --- a/modules/home/desktop/mango/default.nix +++ /dev/null @@ -1,225 +0,0 @@ -{inputs, ...}: { - imports = [ - inputs.mango.hmModules.mango - ]; - - wayland.windowManager.mango = { - enable = true; - settings = { - # Monitors - monitorrule = [ - "name:eDP-1, width:2560, height:1440, refresh:165, x:0, y:10, vrr:1" - "name:HDMI-A-1, width:2560, height:1440, refresh:100, x:0, y:-1440, vrr:1" - ]; - - # Keyboard - repeat_rate = 25; - repeat_delay = 600; - numlockon = 0; - xkb_rules_layout = "us"; - - # Trackpad - disable_trackpad = 0; - tap_to_click = 1; - tap_and_drag = 1; - drag_lock = 1; - trackpad_natural_scrolling = 1; - disable_while_typing = 1; - left_handed = 0; - middle_button_emulation = 0; - swipe_min_threshold = 1; - - # Mouse - mouse_natural_scrolling = 0; - accel_profile = 0; - - # Theme - border_radius = 8; - no_radius_when_single = 0; - focused_opacity = 1.0; - unfocused_opacity = 1.0; - - # Scroller Layout Setting - scroller_structs = 0; - scroller_default_proportion = 0.5; - scroller_ignore_proportion_single = 0; - scroller_default_proportion_single = 1.0; - - # Master-Stack Layout Setting - new_is_master = 0; - default_mfact = 0.5; - default_nmaster = 1; - smartgaps = 0; - - # Overview Setting - hotarea_size = 10; - enable_hotarea = 1; - ov_tab_mode = 0; - overviewgappi = 15; - overviewgappo = 15; - - # layouts - tagrule = [ - "id:1, layout_name:tile" - "id:2, layout_name:tile" - "id:3, layout_name:tile" - "id:4, layout_name:tile" - "id:5, layout_name:tile" - "id:6, layout_name:scroller" - ]; - - # Keybindings - mousebind = [ - "SUPER, btn_left, moveresize, curmove" - "SUPER, btn_right, moveresize, curresize" - ]; - - gesturebind = [ - "none, right, 3, viewtoleft_have_client" - "none, up, 3, toggleoverview" - "none, down, 3, toggleoverview" - ]; - - bind = [ - # apps - "SUPER, Return, spawn, wezterm" - "SUPER, Space, spawn, vicinae toggle" - "SUPER, B, spawn, brave" - "SUPER, V, spawn, vicinae vicinae://extensions/vicinae/clipboard/history" - "SUPER+SHIFT, W, spawn, vicinae vicinae://extensions/sovereign/awww-switcher/wpgrid" - - # WM - "SUPER, Q, killclient" - "SUPER+SHIFT, R, reload_config" - "SUPER+SHIFT, F, togglefullscreen" - "SUPER+SHIFT, Space, togglefloating" - - "ALT, Tab, toggleoverview" - "ALT+SHIFT, minus, incgaps, -1" - "ALT+SHIFT, equal, incgaps, 1" - "ALT+SHIFT, R, togglegaps" - - # switch layout - "SUPER+SHIFT, H, setlayout, tile" - "SUPER+SHIFT, V, setlayout, vertical_tile" - "SUPER+SHIFT, S, setlayout, scroller" - - # resize client - "SUPER+CTRL, Up, resizewin, +0, -50" - "SUPER+CTRL, Down, resizewin, +0, +50" - "SUPER+CTRL, Left, resizewin, -50, +0" - "SUPER+CTRL, Right, resizewin, +50, +0" - - # swap client - "SUPER+SHIFT, Up, exchange_client, up" - "SUPER+SHIFT, Down, exchange_client, down" - "SUPER+SHIFT, Left, exchange_client, left" - "SUPER+SHIFT, Right, exchange_client, right" - - # switch client focus - "SUPER, Tab, focusstack, next" - "SUPER, Left, focusdir, left" - "SUPER, Right, focusdir, right" - "SUPER, Up, focusdir, up" - "SUPER, Down, focusdir, down" - - # switch view - "SUPER, 1, view, 1, 0" - "SUPER, 2, view, 2, 0" - "SUPER, 3, view, 3, 0" - "SUPER, 4, view, 4, 0" - "SUPER, 5, view, 5, 0" - "SUPER, 6, view, 6, 0" - - # move client to the tag with focus - "SUPER+SHIFT, 1, tagsilent, 1, 0" - "SUPER+SHIFT, 2, tagsilent, 2, 0" - "SUPER+SHIFT, 3, tagsilent, 3, 0" - "SUPER+SHIFT, 4, tagsilent, 4, 0" - "SUPER+SHIFT, 5, tagsilent, 5, 0" - "SUPER+SHIFT, 6, tagsilent, 6, 0" - - # move client to the tag without focus - "SUPER+ALT, 1, tag, 1, 0" - "SUPER+ALT, 2, tag, 2, 0" - "SUPER+ALT, 3, tag, 3, 0" - "SUPER+ALT, 4, tag, 4, 0" - "SUPER+ALT, 5, tag, 5, 0" - "SUPER+ALT, 6, tag, 6, 0" - ]; - - # Window effect - blur = 0; - blur_layer = 0; - blur_optimized = 1; - blur_params_num_passes = 2; - blur_params_radius = 5; - blur_params_noise = 0.02; - blur_params_brightness = 0.9; - blur_params_contrast = 0.9; - blur_params_saturation = 1.2; - - shadows = 0; - layer_shadows = 0; - shadow_only_floating = 1; - shadows_size = 10; - shadows_blur = 15; - shadows_position_x = 0; - shadows_position_y = 0; - shadowscolor = "0x000000ff"; - - # Animation - animations = 1; - layer_animations = 1; - animation_type_open = "slide"; - animation_type_close = "fade"; - animation_fade_in = 1; - animation_fade_out = 1; - tag_animation_direction = 1; - zoom_initial_ratio = 0.3; - zoom_end_ratio = 0.8; - fadein_begin_opacity = 0.5; - fadeout_begin_opacity = 0.8; - - animation_duration_move = 100; - animation_duration_open = 100; - animation_duration_close = 100; - animation_duration_tag = 200; - animation_duration_focus = 0; - - animation_curve_open = "0.46, 1.0, 0.29, 1"; - animation_curve_move = "0.46, 1.0, 0.29, 1"; - animation_curve_tag = "0.46, 1.0, 0.29, 1"; - animation_curve_close = "0.08, 0.92, 0, 1"; - animation_curve_focus = "0.46, 1.0, 0.29, 1"; - animation_curve_opafadeout = "0.5, 0.5, 0.5, 0.5"; - animation_curve_opafadein = "0.46, 1.0, 0.29, 1"; - - # Appearance - borderpx = 0; - gappih = 10; - gappiv = 10; - gappoh = 10; - gappov = 10; - - rootcolor = "0x201b14ff"; - bordercolor = "0x444444ff"; - focuscolor = "0xc9b890ff"; - maximizescreencolor = "0x89aa61ff"; - urgentcolor = "0xad401fff"; - scratchpadcolor = "0x516c93ff"; - globalcolor = "0xb153a7ff"; - overlaycolor = "0x14a57cff"; - - # Misc - syncobj_enable = 1; - - exec-once = [ - "awww-daemon" - "kdeconnectd" - "kdeconnect-indicator" - "dbus-update-activation-environment --systemd --all; systemctl --user reset-failed && systemctl --user start mango-session.target" - ]; - }; - }; -} diff --git a/modules/home/desktop/rofi/default.nix b/modules/home/desktop/rofi/default.nix deleted file mode 100644 index 8d72dfb..0000000 --- a/modules/home/desktop/rofi/default.nix +++ /dev/null @@ -1,317 +0,0 @@ -{config, ...}: { - programs.rofi = { - enable = true; - extraConfig = { - terminal = "alacritty"; - - modes = "combi,keys"; - - display-window = "window"; - display-drun = "run"; - display-windowcd = "windowcd"; - display-run = "run"; - display-ssh = "ssh"; - display-combi = "combi"; - display-keys = "keys"; - display-filebrowser = "filebrowser"; - - combi-modes = "window,drun"; - combi-hide-mode-prefix = false; - combi-display-format = "{mode} {text}"; - - window-format = "[{w=-1}] {c=-1} {t=-1}"; - window-thumbnail = false; - - drun-url-launcher = "xdg-open"; - drun-match-fields = "name,generic,exec,categories,keywords"; - drun-display-format = "{name}[ ({generic})][ {exec}]"; - drun-show-actions = true; - - run-command = "{cmd}"; - run-list-command = ""; - run-shell-command = "{terminal} -e {cmd}"; - - matching = "normal"; - font = "JetBrains Mono 11"; - show-icons = true; - scroll-method = 0; - cycle = false; - fixed-num-lines = false; - }; - theme = let - inherit (config.lib.formats.rasi) mkLiteral; - in { - "*" = { - font = "JetBrains Mono 11"; - - black = mkLiteral "#1d1f21"; - white = mkLiteral "#c5c8c6"; - red = mkLiteral "#cc6666"; - orange = mkLiteral "#de935f"; - yellow = mkLiteral "#f0c674"; - green = mkLiteral "#7cb36b"; - cyan = mkLiteral "#78bab9"; - blue = mkLiteral "#81a2be"; - magenta = mkLiteral "#b294bb"; - - black-bright = mkLiteral "#3c4044"; - white-bright = mkLiteral "#eaeaea"; - red-bright = mkLiteral "#d54e53"; - orange-bright = mkLiteral "#e78c45"; - yellow-bright = mkLiteral "#e7c547"; - green-bright = mkLiteral "#71c464"; - cyan-bright = mkLiteral "#6acdcc"; - blue-bright = mkLiteral "#7aa6da"; - magenta-bright = mkLiteral "#c397d8"; - - black-66 = mkLiteral "#131415"; - white-66 = mkLiteral "#828382"; - red-66 = mkLiteral "#864343"; - orange-66 = mkLiteral "#92613e"; - yellow-66 = mkLiteral "#9e824c"; - green-66 = mkLiteral "#517646"; - cyan-66 = mkLiteral "#4f7a7a"; - blue-66 = mkLiteral "#556a7d"; - magenta-66 = mkLiteral "#75617b"; - - black-33 = mkLiteral "#090a0a"; - white-33 = mkLiteral "#414141"; - red-33 = mkLiteral "#432121"; - orange-33 = mkLiteral "#49301f"; - yellow-33 = mkLiteral "#4f4126"; - green-33 = mkLiteral "#283b23"; - cyan-33 = mkLiteral "#273d3d"; - blue-33 = mkLiteral "#2a353e"; - magenta-33 = mkLiteral "#3a303d"; - - common-background = mkLiteral "@black"; - common-background-bright = mkLiteral "@black-bright"; - common-background-66 = " @black-66"; - common-foreground = mkLiteral "@white"; - common-foreground-bright = mkLiteral "@white-bright"; - common-foreground-66 = mkLiteral "@white-66"; - common-primary = mkLiteral "@yellow"; - common-primary-bright = mkLiteral "@yellow-bright"; - common-primary-66 = mkLiteral "@yellow-66"; - common-primary-33 = mkLiteral "@yellow-33"; - common-secondary = mkLiteral "@blue"; - common-secondary-bright = mkLiteral "@blue-bright"; - common-secondary-66 = mkLiteral "@blue-66"; - common-secondary-33 = mkLiteral "@blue-33"; - common-urgent = mkLiteral "@red"; - common-urgent-bright = mkLiteral "@red-bright"; - common-urgent-66 = mkLiteral "@red-66"; - common-urgent-33 = mkLiteral "@red-33"; - - background-color = mkLiteral "transparent"; - - normal-normal-background = mkLiteral "transparent"; - normal-normal-foreground = mkLiteral "@common-foreground"; - normal-normal-border-color = mkLiteral "transparent"; - normal-active-background = mkLiteral "transparent"; - normal-active-foreground = mkLiteral "@common-secondary-bright"; - normal-active-border-color = mkLiteral "transparent"; - normal-urgent-background = mkLiteral "transparent"; - normal-urgent-foreground = mkLiteral "@common-urgent-bright"; - normal-urgent-border-color = mkLiteral "transparent"; - - selected-normal-background = mkLiteral "@common-primary-33"; - selected-normal-foreground = mkLiteral "@common-primary-bright"; - selected-normal-border-color = mkLiteral "@common-primary-66"; - selected-active-background = mkLiteral "@common-secondary-33"; - selected-active-foreground = mkLiteral "@common-secondary-bright"; - selected-active-border-color = mkLiteral "@common-secondary-66"; - selected-urgent-background = mkLiteral "@common-urgent-33"; - selected-urgent-foreground = mkLiteral "@common-urgent-bright"; - selected-urgent-border-color = mkLiteral "@common-urgent-66"; - - alternate-normal-background = mkLiteral "@normal-normal-background"; - alternate-normal-foreground = mkLiteral "@normal-normal-foreground"; - alternate-normal-border-color = mkLiteral "@normal-normal-border-color"; - alternate-active-background = mkLiteral "@normal-active-background"; - alternate-active-foreground = mkLiteral "@normal-active-foreground"; - alternate-active-border-color = mkLiteral "@normal-active-border-color"; - alternate-urgent-background = mkLiteral "@normal-urgent-background"; - alternate-urgent-foreground = mkLiteral "@normal-urgent-foreground"; - alternate-urgent-border-color = mkLiteral "@normal-urgent-border-color"; - }; - - "window" = { - background-color = mkLiteral "#1d1f21e6"; #// @black + 0.85 alpha - border = 3; - border-color = mkLiteral "@black-bright"; - border-radius = 16; - width = 1024; - height = 460; - }; - - "mainbox" = { - padding = 16; - spacing = 16; - }; - - "inputbar" = { - background-color = mkLiteral "#333537"; #// @black-110 - border = 1; - border-color = mkLiteral "#606263"; #// @black-130 - border-radius = 8; - padding = mkLiteral "12 16"; - spacing = 0; - text-color = mkLiteral "@common-foreground"; - children = mkLiteral "[ entry, case-indicator, num-filtered-rows, textbox-num-sep, num-rows ]"; - }; - - "prompt" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "@common-foreground-bright"; - spacing = 0; - text-transform = mkLiteral "bold"; - }; - - "textbox-prompt-colon" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - margin = mkLiteral "0 0.3em 0 0"; - expand = false; - str = "="; - }; - - "entry" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "@common-foreground-bright"; - cursor = "text"; - placeholder-color = mkLiteral "@common-foreground-66"; - placeholder = "Type to filter"; - }; - - "case-indicator" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - }; - - "num-filtered-rows" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - expand = false; - }; - - "textbox-num-sep" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - expand = false; - str = "/"; - }; - - "num-rows" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - expand = false; - }; - - "message" = { - background-color = mkLiteral "@cyan-33"; - border = 1; - border-color = mkLiteral "@cyan-66"; - border-radius = 8; - padding = 16; - }; - - "textbox" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "@cyan-bright"; - }; - - "listview" = { - dynamic = true; - scrollbar = true; - spacing = 0; - }; - - "scrollbar" = { - background-color = mkLiteral "transparent"; - padding = 0; - margin = mkLiteral "0 0 0 4"; - handle-width = 8; - border = 0; - handle-color = mkLiteral "#626463"; #// @white-50 - }; - - "element" = { - border = 1; - border-radius = 8; - padding = mkLiteral "6 12"; - margin = mkLiteral "1 0"; - spacing = 12; - children = mkLiteral "[ element-icon, element-text ]"; - }; - - "element-icon" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - size = mkLiteral "1.0em"; - cursor = mkLiteral "inherit"; - }; - - "element-text" = { - background-color = mkLiteral "transparent"; - text-color = mkLiteral "inherit"; - highlight = mkLiteral "inherit"; - cursor = mkLiteral "inherit"; - }; - - "element normal.normal" = { - background-color = mkLiteral "@normal-normal-background"; - text-color = mkLiteral "@normal-normal-foreground"; - border-color = mkLiteral "@normal-normal-border-color"; - }; - - "element normal.urgent" = { - background-color = mkLiteral "@normal-urgent-background"; - text-color = mkLiteral "@normal-urgent-foreground"; - border-color = mkLiteral "@normal-urgent-border-color"; - }; - - "element normal.active" = { - background-color = mkLiteral "@normal-active-background"; - text-color = mkLiteral "@normal-active-foreground"; - border-color = mkLiteral "@normal-active-border-color"; - }; - - "element selected.normal" = { - background-color = mkLiteral "@selected-normal-background"; - text-color = mkLiteral "@selected-normal-foreground"; - border-color = mkLiteral "@selected-normal-border-color"; - }; - - "element selected.urgent" = { - background-color = mkLiteral "@selected-urgent-background"; - text-color = mkLiteral "@selected-urgent-foreground"; - border-color = mkLiteral "@selected-urgent-border-color"; - }; - - "element selected.active" = { - background-color = mkLiteral "@selected-active-background"; - text-color = mkLiteral "@selected-active-foreground"; - border-color = mkLiteral "@selected-active-border-color"; - }; - - "element alternate.normal" = { - background-color = mkLiteral "@alternate-normal-background"; - text-color = mkLiteral "@alternate-normal-foreground"; - border-color = mkLiteral "@alternate-normal-border-color"; - }; - - "element alternate.urgent" = { - background-color = mkLiteral "@alternate-urgent-background"; - text-color = mkLiteral "@alternate-urgent-foreground"; - border-color = mkLiteral "@alternate-urgent-border-color"; - }; - - "element alternate.active" = { - background-color = mkLiteral "@alternate-active-background"; - text-color = mkLiteral "@alternate-active-foreground"; - border-color = mkLiteral "@alternate-active-border-color"; - }; - }; - }; -} diff --git a/modules/home/desktop/utils/default.nix b/modules/home/desktop/utils/default.nix deleted file mode 100644 index dc2c39a..0000000 --- a/modules/home/desktop/utils/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{pkgs, ...}: { - programs.satty = { - enable = true; - settings = { - general = { - corner-roundness = 12; - initial-tool = "arrow"; - early-exit = true; - copy-command = "wl-copy"; - }; - - font = { - family = "JetBrainsMono NerdFont"; - }; - }; - }; - - home.packages = with pkgs; [ - grim - slurp - hyprshot - wl-clipboard - wl-screenrec - (writeShellScriptBin "hypr-screenshot" '' - hyprshot -m region -r ppm - | satty --filename - - '') - - (writeShellScriptBin "hypr-screenrecord" '' - wl-screenrec -g "$(slurp)" - '') - ]; -} diff --git a/modules/home/desktop/vicinae/default.nix b/modules/home/desktop/vicinae/default.nix deleted file mode 100644 index 6dab11d..0000000 --- a/modules/home/desktop/vicinae/default.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ - pkgs, - config, - ... -}: { - programs.vicinae = { - enable = true; - systemd = { - enable = true; - autoStart = true; - }; - useLayerShell = true; - - extensions = with pkgs.vicinae-extensions; [ - bluetooth - nix - ssh - awww-switcher - process-manager - pulseaudio - wifi-commander - port-killer - silverbullet - ]; - - settings = { - close_on_focus_loss = false; - consider_preedit = true; - pop_to_root_on_close = true; - favicon_service = "twenty"; - search_files_in_root = true; - font = { - normal = { - size = 10; - family = "JetBrainsMono Nerd Font"; - }; - }; - theme = { - light = { - name = "vicinae-light"; - icon_theme = "default"; - }; - dark = { - name = "vicinae-dark"; - icon_theme = "default"; - }; - }; - launcher_window = { - opacity = 0.98; - }; - - imports = ["/run/secrets/vicinae.json"]; - - providers = { - "@samlinville/store.raycast.tailscale" = { - "preferences" = { - "tailscalePath" = "${pkgs.tailscale}/bin/tailscale"; - }; - }; - "@sovereign/vicinae-extension-awww-switcher-0" = { - "preferences" = { - "transitionDuration" = "1"; - "transitionType" = "center"; - "wallpaperPath" = "/home/tux/Wallpapers/"; - }; - }; - }; - }; - }; -} diff --git a/modules/home/desktop/waybar/default.nix b/modules/home/desktop/waybar/default.nix deleted file mode 100644 index 49b760e..0000000 --- a/modules/home/desktop/waybar/default.nix +++ /dev/null @@ -1,338 +0,0 @@ -{...}: { - programs = { - waybar = { - enable = true; - settings = { - mainBar = { - position = "top"; - layer = "top"; - height = 35; - margin-top = 0; - margin-bottom = 0; - margin-left = 0; - margin-right = 0; - exclusive = true; - passthrough = false; - - modules-left = [ - "custom/l_end" - "cpu" - "memory" - "custom/r_end" - ]; - modules-center = [ - "custom/l_end" - "hyprland/workspaces" - "custom/r_end" - ]; - modules-right = [ - "custom/l_end" - "network" - "bluetooth" - "battery" - "tray" - "custom/r_end" - ]; - - "hyprland/workspaces" = { - "disable-scroll" = true; - "all-outputs" = true; - "active-only" = false; - "on-click" = "activate"; - "persistent-workspaces" = { - "1" = []; - "2" = []; - "3" = []; - "4" = []; - }; - }; - - "network" = { - "tooltip" = true; - "format-wifi" = "  {bandwidthDownBytes}  {bandwidthUpBytes}"; - "format-ethernet" = "󰈀  {bandwidthDownBytes}  {bandwidthUpBytes}"; - "tooltip-format" = "Network= {essid}\nSignal strength= {signaldBm}dBm ({signalStrength}%)\nFrequency= {frequency}MHz\nInterface= {ifname}\nIP= {ipaddr}/{cidr}\nGateway= {gwaddr}\nNetmask= {netmask}"; - "format-linked" = "󰈀 {ifname} (No IP)"; - "format-disconnected" = "󰖪 "; - "tooltip-format-disconnected" = "Disconnected"; - "interval" = 2; - }; - - "battery" = { - "states" = { - "good" = 95; - "warning" = 30; - "critical" = 20; - }; - "format" = "{icon} {capacity}%"; - "format-charging" = " {capacity}%"; - "format-plugged" = " {capacity}%"; - "format-alt" = "{time} {icon}"; - "format-icons" = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; - }; - - "bluetooth" = { - "format" = ""; - "format-disabled" = ""; - "format-connected" = " {num_connections}"; - "format-connected-battery" = "{icon} {num_connections}"; - # "format-connected-battery"= "{icon} {device_alias}-{device_battery_percentage}%"; - "format-icons" = ["󰥇" "󰤾" "󰤿" "󰥀" "󰥁" "󰥂" "󰥃" "󰥄" "󰥅" "󰥆" "󰥈"]; - # "format-device-preference"= [ "device1"; "device2" ]; // preference list deciding the displayed device If this config option is not defined or none of the devices in the list are connected; it will fall back to showing the last connected device. - "tooltip-format" = "{controller_alias}\n{num_connections} connected"; - "tooltip-format-connected" = "{controller_alias}\n{num_connections} connected\n\n{device_enumerate}"; - "tooltip-format-enumerate-connected" = "{device_alias}"; - "tooltip-format-enumerate-connected-battery" = "{device_alias}\t{icon} {device_battery_percentage}%"; - }; - - "memory" = { - "states" = { - "c" = 90; # critical - "h" = 60; # high - "m" = 30; # medium - }; - "interval" = 30; - "format" = "󰾆 {used}GB"; - "format-m" = "󰾅 {used}GB"; - "format-h" = "󰓅 {used}GB"; - "format-c" = " {used}GB"; - "format-alt" = "󰾆 {percentage}%"; - "max-length" = 10; - "tooltip" = true; - "tooltip-format" = "󰾆 {percentage}%\n {used=0.1f}GB/{total=0.1f}GB"; - }; - - "cpu" = { - "interval" = 10; - "format" = "󰍛 {usage}%"; - "format-alt" = "{icon0}{icon1}{icon2}{icon3}"; - "format-icons" = ["▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; - }; - - "tray" = { - "icon-size" = 14; - "spacing" = 5; - }; - - "custom/l_end" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - - "custom/r_end" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - - "custom/sl_end" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - - "custom/sr_end" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - - "custom/rl_end" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - - "custom/rr_end" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - - "custom/padd" = { - "format" = " "; - "interval" = "once"; - "tooltip" = false; - }; - }; - }; - style = let - bar_bg = "rgba(23, 28, 34, 0.95)"; - main_bg = "#101419"; - main_fg = "#93cee9"; - - wb_act_bg = "#90ceaa"; - wb_act_fg = "#1f2328"; - - wb_hvr_bg = "#90ceaa"; - wb_hvr_fg = "#1f2328"; - in '' - * { - border: none; - border-radius: 0px; - font-family: "JetBrainsMono Nerd Font"; - font-weight: bold; - font-size: 20px; - min-height: 10px; - } - - window#waybar { - background: ${bar_bg}; - } - - tooltip { - background: ${main_bg}; - color: ${main_fg}; - border-radius: 7px; - border-width: 0px; - } - - #workspaces button { - box-shadow: none; - text-shadow: none; - padding: 0px; - border-radius: 9px; - margin-top: 3px; - margin-bottom: 3px; - margin-left: 0px; - padding-left: 3px; - padding-right: 3px; - margin-right: 0px; - color: ${main_fg}; - animation: ws_normal 20s ease-in-out 1; - } - - #workspaces button.active { - background: ${wb_act_bg}; - color: ${wb_act_fg}; - margin-left: 3px; - padding-left: 12px; - padding-right: 12px; - margin-right: 3px; - animation: ws_active 20s ease-in-out 1; - transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682); - } - - #workspaces button:hover { - background: ${wb_hvr_bg}; - color: ${wb_hvr_fg}; - animation: ws_hover 20s ease-in-out 1; - transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682); - } - - #taskbar button { - box-shadow: none; - text-shadow: none; - padding: 0px; - border-radius: 9px; - margin-top: 3px; - margin-bottom: 3px; - margin-left: 0px; - padding-left: 3px; - padding-right: 3px; - margin-right: 0px; - color: @wb-color; - animation: tb_normal 20s ease-in-out 1; - } - - #taskbar button.active { - background: ${wb_act_bg}; - color: @wb-act-color; - margin-left: 3px; - padding-left: 12px; - padding-right: 12px; - margin-right: 3px; - animation: tb_active 20s ease-in-out 1; - transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682); - } - - #taskbar button:hover { - background: ${wb_hvr_bg}; - color: @wb-hvr-color; - animation: tb_hover 20s ease-in-out 1; - transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682); - } - - #backlight, - #battery, - #bluetooth, - #custom-cliphist, - #clock, - #custom-cpuinfo, - #cpu, - #custom-gpuinfo, - #idle_inhibitor, - #language, - #memory, - #custom-mode, - #mpris, - #network, - #custom-power, - #pulseaudio, - #custom-spotify, - #taskbar, - #tray, - #custom-updates, - #custom-wallchange, - #custom-wbar, - #window, - #workspaces, - #custom-l_end, - #custom-r_end, - #custom-sl_end, - #custom-sr_end, - #custom-rl_end, - #custom-rr_end { - color: ${main_fg}; - background: ${main_bg}; - opacity: 1; - margin: 4px 0px 4px 0px; - padding-left: 4px; - padding-right: 4px; - } - - #workspaces, - #taskbar { - padding: 0px; - } - - #custom-r_end { - border-radius: 0px 21px 21px 0px; - margin-right: 9px; - padding-right: 3px; - } - - #custom-l_end { - border-radius: 21px 0px 0px 21px; - margin-left: 9px; - padding-left: 3px; - } - - #custom-sr_end { - border-radius: 0px; - margin-right: 9px; - padding-right: 3px; - } - - #custom-sl_end { - border-radius: 0px; - margin-left: 9px; - padding-left: 3px; - } - - #custom-rr_end { - border-radius: 0px 7px 7px 0px; - margin-right: 9px; - padding-right: 3px; - } - - #custom-rl_end { - border-radius: 7px 0px 0px 7px; - margin-left: 9px; - padding-left: 3px; - } - ''; - }; - }; -} diff --git a/modules/home/discord/default.nix b/modules/home/discord/default.nix deleted file mode 100644 index bba4060..0000000 --- a/modules/home/discord/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{inputs, ...}: { - imports = [ - inputs.nixcord.homeModules.nixcord - ]; - - programs.nixcord = { - enable = true; - vesktop.enable = true; - dorion.enable = true; - config = { - themeLinks = [ - "https://raw.githubusercontent.com/refact0r/system24/refs/heads/main/archive/flavors/spotify-text.theme.css" - ]; - frameless = true; - plugins = { - hideMedia.enable = true; - ignoreActivities = { - enable = true; - ignorePlaying = true; - ignoreWatching = true; - }; - }; - }; - dorion = { - theme = "dark"; - zoom = "1.1"; - blur = "acrylic"; - sysTray = true; - openOnStartup = true; - autoClearCache = true; - disableHardwareAccel = false; - rpcServer = true; - rpcProcessScanner = true; - pushToTalk = true; - pushToTalkKeys = ["RControl"]; - desktopNotifications = true; - unreadBadge = true; - }; - }; -} diff --git a/modules/home/easyeffects/default.nix b/modules/home/easyeffects/default.nix deleted file mode 100644 index 22bfd00..0000000 --- a/modules/home/easyeffects/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - services.easyeffects.enable = true; -} diff --git a/modules/home/fastfetch/default.nix b/modules/home/fastfetch/default.nix deleted file mode 100644 index 596e562..0000000 --- a/modules/home/fastfetch/default.nix +++ /dev/null @@ -1,69 +0,0 @@ -{...}: { - home.file.".config/fastfetch/config.jsonc".text = '' - { - "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", - "logo": { - "type": "none", - }, - "display": { - "separator": " ", - "key": { - "width": 18, - }, - }, - "modules": [ - { - "key": " ╭───────────╮", - "type": "custom", - }, - { - "key": " │ │\u001b[11D{#31} user", - "type": "title", - "format": "{1}", - }, - { - "key": " │ │\u001b[11D{#34} hname", - "type": "command", - "text": "hostname", - }, - { - "key": " │ │\u001b[11D{#34}󰻀 distro", - "type": "os", - }, - { - "key": " │ │\u001b[11D{#35}󰌢 kernel", - "type": "kernel", - }, - { - "key": " │ │\u001b[11D{#31} uptime", - "type": "uptime", - }, - { - "key": " │ │\u001b[11D{#32} shell", - "type": "shell", - }, - { - "key": " │ │\u001b[11D{#35} memory", - "type": "memory", - }, - { - "key": " ├───────────┤", - "type": "custom", - }, - { - "key": " │ │\u001b[11D{#39} colors", - "type": "colors", - "symbol": "circle", - }, - { - "key": " ╰───────────╯", - "type": "custom", - }, - ], - } - ''; - - programs.fastfetch = { - enable = true; - }; -} diff --git a/modules/home/firefox/default.nix b/modules/home/firefox/default.nix deleted file mode 100644 index 7a2390a..0000000 --- a/modules/home/firefox/default.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ - pkgs, - username, - ... -}: { - home.file.".mozilla/firefox/${username}/chrome".source = pkgs.firefox-mod-blur; - - programs.firefox = { - enable = true; - - package = pkgs.firefox.override { - extraPolicies = { - CaptivePortal = false; - DisableFirefoxStudies = true; - DisablePocket = true; - DisableTelemetry = true; - DisableFirefoxAccounts = false; - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - OfferToSaveLoginsDefault = false; - PasswordManagerEnabled = false; - FirefoxHome = { - Search = true; - Pocket = false; - Snippets = false; - TopSites = false; - Highlights = false; - }; - UserMessaging = { - ExtensionRecommendations = false; - SkipOnboarding = true; - }; - }; - }; - - profiles = { - ${username} = { - id = 0; - name = "tux"; - search = { - force = true; - default = "google"; - }; - settings = { - "general.smoothScroll" = true; - "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; - "layout.css.prefers-color-scheme.content-override" = 0; - "browser.compactmode.show" = true; - "browser.tabs.firefox-view" = false; - "browser.bookmarks.addedImportButton" = false; - "extensions.pocket.enabled" = false; - "browser.fullscreen.autohide" = false; - }; - extraConfig = '' - user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); - user_pref("full-screen-api.ignore-widgets", true); - user_pref("media.ffmpeg.vaapi.enabled", true); - user_pref("media.rdd-vpx.enabled", true); - ''; - - extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ - ublock-origin - facebook-container - metamask - darkreader - bitwarden - wappalyzer - clearurls - ]; - }; - }; - }; -} diff --git a/modules/home/floorp/default.nix b/modules/home/floorp/default.nix deleted file mode 100644 index 8b0a785..0000000 --- a/modules/home/floorp/default.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - username, - pkgs, - ... -}: { - programs.floorp = { - enable = true; - - profiles = { - ${username} = { - id = 0; - name = "${username}"; - search = { - force = true; - default = "Google"; - }; - settings = { - "general.smoothScroll" = true; - "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; - "layout.css.prefers-color-scheme.content-override" = 0; - "browser.compactmode.show" = true; - "browser.tabs.firefox-view" = false; - "browser.bookmarks.addedImportButton" = false; - "extensions.pocket.enabled" = false; - "browser.fullscreen.autohide" = false; - }; - extraConfig = '' - user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); - user_pref("full-screen-api.ignore-widgets", true); - user_pref("media.ffmpeg.vaapi.enabled", true); - user_pref("media.rdd-vpx.enabled", true); - ''; - - extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ - ublock-origin - facebook-container - metamask - darkreader - bitwarden - wappalyzer - clearurls - ]; - }; - }; - }; -} diff --git a/modules/home/ghostty/default.nix b/modules/home/ghostty/default.nix deleted file mode 100644 index d7e0b87..0000000 --- a/modules/home/ghostty/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{pkgs, ...}: { - home.file = { - ".config/ghostty/config" = { - text = '' - confirm-close-surface = false - gtk-titlebar = false - window-padding-x = 10 - window-padding-y = 10 - background-opacity = 0.9 - font-size = 12 - - palette = 0=#252b37 - palette = 1=#d0679d - palette = 2=#5de4c7 - palette = 3=#fffac2 - palette = 4=#89ddff - palette = 5=#fae4fc - palette = 6=#add7ff - palette = 7=#ffffff - palette = 8=#a6accd - palette = 9=#d0679d - palette = 10=#5de4c7 - palette = 11=#fffac2 - palette = 12=#add7ff - palette = 13=#89ddff - palette = 14=#fcc5e9 - palette = 15=#ffffff - background = #0f0f0f - foreground = #a6accd - cursor-color = #f2eacf - selection-background = #1a1a1a - selection-foreground = #f1f1f1 - ''; - }; - }; - - home.packages = with pkgs; [ - ghostty - ]; -} diff --git a/modules/home/git/default.nix b/modules/home/git/default.nix deleted file mode 100755 index 2f45121..0000000 --- a/modules/home/git/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - email, - username, - ... -}: { - programs.git = { - enable = true; - signing = { - key = "~/.ssh/id_ed25519.pub"; - signByDefault = true; - }; - settings = { - user = { - name = "${username}"; - email = "${email}"; - }; - init.defaultBranch = "main"; - commit.gpgSign = true; - gpg.format = "ssh"; - }; - }; -} diff --git a/modules/home/helix/default.nix b/modules/home/helix/default.nix deleted file mode 100644 index 28268f8..0000000 --- a/modules/home/helix/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{pkgs, ...}: { - programs.helix = { - enable = true; - settings = { - theme = "gruvbox"; - editor = { - line-number = "relative"; - cursorline = true; - color-modes = true; - bufferline = "multiple"; - - "cursor-shape" = { - insert = "bar"; - normal = "block"; - select = "underline"; - }; - }; - }; - languages = { - language = [ - { - name = "nix"; - auto-format = true; - } - ]; - - language-server = { - nil = { - command = "${pkgs.nil}/bin/nil"; - config.nil.formatting = { - command = "${pkgs.alejandra}/bin/alejandra"; - }; - }; - }; - }; - }; -} diff --git a/modules/home/kdeconnect/default.nix b/modules/home/kdeconnect/default.nix deleted file mode 100644 index cff771e..0000000 --- a/modules/home/kdeconnect/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - services.kdeconnect = { - enable = true; - indicator = true; - }; -} diff --git a/modules/home/lan-mouse/default.nix b/modules/home/lan-mouse/default.nix deleted file mode 100644 index b65685f..0000000 --- a/modules/home/lan-mouse/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{inputs, ...}: { - imports = [ - inputs.lan-mouse.homeManagerModules.default - ]; - - programs.lan-mouse = { - enable = true; - systemd = true; - settings = { - # release_bind = ["KeyA" "KeyS" "KeyD" "KeyF"]; - - port = 4242; - - authorized_fingerprints = { - "30:66:b3:95:dc:6b:55:a4:9f:30:31:9c:3e:4d:70:03:33:c3:f0:6f:df:31:35:58:36:6e:80:2f:32:b2:ce:48" = "pc"; - }; - }; - }; -} diff --git a/modules/home/librewolf/default.nix b/modules/home/librewolf/default.nix deleted file mode 100644 index 299adaf..0000000 --- a/modules/home/librewolf/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs.librewolf = { - enable = true; - }; -} diff --git a/modules/home/mopidy/default.nix b/modules/home/mopidy/default.nix deleted file mode 100644 index fb3deda..0000000 --- a/modules/home/mopidy/default.nix +++ /dev/null @@ -1,38 +0,0 @@ -{pkgs, ...}: { - programs.ncmpcpp = { - enable = true; - package = pkgs.ncmpcpp.override { - visualizerSupport = true; - clockSupport = true; - }; - mpdMusicDir = "~/Music/"; - - settings = { - mpd_host = "127.0.0.1"; - mpd_port = 6600; - mpd_connection_timeout = 20; - visualizer_data_source = "localhost:5555"; - visualizer_fps = 60; - visualizer_output_name = "feed"; - visualizer_in_stereo = "yes"; - visualizer_type = "spectrum"; - visualizer_look = "▄▍"; - visualizer_spectrum_smooth_look = "yes"; - song_status_format = "$b$7♫ $2%a $4⟫$3⟫ $8%t $4⟫$3⟫ $5%b "; - header_visibility = "no"; - color1 = "white"; - color2 = "green"; - }; - }; - - services.mopidy = { - enable = true; - - extensionPackages = with pkgs; [ - mopidy-mpd - mopidy-spotify - mopidy-soundcloud - mopidy-iris - ]; - }; -} diff --git a/modules/home/nvim/default.nix b/modules/home/nvim/default.nix deleted file mode 100755 index 274b4e9..0000000 --- a/modules/home/nvim/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{pkgs, ...}: { - home.file = { - ".config/nvim" = { - recursive = true; - source = "${pkgs.tnvim}"; - }; - }; - - programs = { - neovim = { - enable = true; - defaultEditor = true; - vimAlias = true; - withPython3 = true; - withNodeJs = true; - }; - }; - - home = { - packages = with pkgs; [ - gcc - neovide - - # nix - nil # Language Server - statix # Lints and suggestions - deadnix # Find and remove unused - alejandra # Code Formatter - - # lua - luarocks - - # ts - typescript - - gdu - ripgrep - ]; - }; -} diff --git a/modules/home/picom/default.nix b/modules/home/picom/default.nix deleted file mode 100644 index 04dfeab..0000000 --- a/modules/home/picom/default.nix +++ /dev/null @@ -1,64 +0,0 @@ -{pkgs, ...}: { - services.picom = { - enable = true; - package = pkgs.picom; - - backend = "glx"; - vSync = true; - - fade = true; - fadeDelta = 10; - fadeSteps = [0.05 0.05]; - fadeExclude = [ - "window_type *= 'menu'" - ]; - - activeOpacity = 1; - inactiveOpacity = 1; - opacityRules = [ - "90:class_g = 'rofi'" - "90:class_g = 'thunar'" - "90:class_g = 'spotify'" - "90:class_g = 'discord'" - "90:class_g = 'code'" - "90:class_g = 'org.wezfurlong.wezterm'" - "90:class_g = 'wezterm-floating'" - ]; - - settings = { - glx-no-stencil = true; - glx-copy-from-font = false; - use-damage = false; - - frame-opacity = 1; - blur-background = true; - blur-method = "dual_kawase"; - blur-strength = 10; - - corner-radius = 8; - - rounded-corners-exclude = [ - "window_type = 'dock'" - ]; - - # pijulius specifics - animations = true; - animation-stiffness = 500; - animation-window-mass = 1.0; - animation-dampening = 26; - animation-delta = 10; - animation-force_steps = false; - animation-clamping = true; - - animation-for-open-window = "slide-up"; - animation-for-menu-window = "slide-down"; - animation-for-transient-window = "slide-down"; - animation-for-unmap-window = "slide-up"; - - animation-for-next-tag = "slide-right"; - animation-for-prev-tag = "slide-left"; - enable-fading-next-tag = true; - enable-fading-prev-tag = true; - }; - }; -} diff --git a/modules/home/shell/default.nix b/modules/home/shell/default.nix deleted file mode 100755 index 617d760..0000000 --- a/modules/home/shell/default.nix +++ /dev/null @@ -1,100 +0,0 @@ -{pkgs, ...}: { - imports = [ - ./lazygit.nix - ./superfile.nix - ./open-code.nix - ]; - - programs = { - bat.enable = true; - zsh = { - enable = true; - history = { - append = true; - share = true; - expireDuplicatesFirst = true; - ignoreDups = true; - size = 1000000; - save = 1000000; - path = "$HOME/.local/share/zsh/.zsh_history"; - }; - syntaxHighlighting.enable = true; - autosuggestion.enable = true; - initContent = '' - fastfetch - export WINIT_X11_SCALE_FACTOR=1 - PATH=$PATH:~/.cargo/bin:~/.local/bin - - bindkey "^A" vi-beginning-of-line - bindkey "^E" vi-end-of-line - bindkey '^R' fzf-history-widget - ''; - }; - zoxide = { - enable = true; - options = ["--cmd cd"]; - enableZshIntegration = true; - }; - ripgrep.enable = true; - btop = { - enable = true; - settings = { - theme_background = false; - update_ms = 1000; - presets = "cpu:0:default mem:0:default net:0:default"; - }; - }; - go.enable = true; - yazi = { - enable = true; - enableZshIntegration = true; - }; - fzf = { - enable = true; - enableZshIntegration = true; - }; - lsd = { - enable = true; - enableZshIntegration = true; - }; - }; - - home.packages = with pkgs; [ - systemctl-tui - ranger - wget - portal - bore-cli - zip - unzip - pciutils - gnumake - nvtopPackages.full - zellij - nix-output-monitor - duf - jq - atac - termshark - solc - dig - lsof - - python312 - python312Packages.pipx - nodejs - pnpm - yarn - rustup - bun - nixpkgs-fmt - - hunspell - hunspellDicts.en_US - air - templ - ffmpeg - deploy-rs - trok - ]; -} diff --git a/modules/home/shell/lazygit.nix b/modules/home/shell/lazygit.nix deleted file mode 100644 index f215527..0000000 --- a/modules/home/shell/lazygit.nix +++ /dev/null @@ -1,171 +0,0 @@ -{...}: { - programs.lazygit = { - enable = true; - settings = { - gui = { - showIcons = true; - nerdFontsVersion = "3"; - }; - customCommands = [ - { - key = ""; - description = "AI-powered conventional commit"; - context = "global"; - command = "git commit -m \"{{.Form.CommitMsg}}\""; - loadingText = "Generating commit messages..."; - prompts = [ - { - type = "menu"; - key = "Type"; - title = "Type of change"; - options = [ - { - name = "AI defined"; - description = "Let AI analyze and determine the best commit type"; - value = "ai-defined"; - } - { - name = "build"; - description = "Changes that affect the build system or external dependencies"; - value = "build"; - } - { - name = "feat"; - description = "A new feature"; - value = "feat"; - } - { - name = "fix"; - description = "A bug fix"; - value = "fix"; - } - { - name = "chore"; - description = "Other changes that don't modify src or test files"; - value = "chore"; - } - { - name = "ci"; - description = "Changes to CI configuration files and scripts"; - value = "ci"; - } - { - name = "docs"; - description = "Documentation only changes"; - value = "docs"; - } - { - name = "perf"; - description = "A code change that improves performance"; - value = "perf"; - } - { - name = "refactor"; - description = "A code change that neither fixes a bug nor adds a feature"; - value = "refactor"; - } - { - name = "revert"; - description = "Reverts a previous commit"; - value = "revert"; - } - { - name = "style"; - description = "Changes that do not affect the meaning of the code"; - value = "style"; - } - { - name = "test"; - description = "Adding missing tests or correcting existing tests"; - value = "test"; - } - ]; - } - { - type = "menuFromCommand"; - title = "AI Generated Commit Messages"; - key = "CommitMsg"; - command = '' - bash -c " - # Check for staged changes - diff=\$(git diff --cached | head -n 10) - if [ -z \"\$diff\" ]; then - echo \"No changes in staging. Add changes first.\" - exit 1 - fi - - SELECTED_TYPE=\"{{.Form.Type}}\" - COMMITS_TO_SUGGEST=8 - - opencode run -m \"google/gemini-2.5-flash-lite\" \" - You are an expert at writing Git commits. Your job is to write commit messages that follow the Conventional Commits format. - - The user has selected: \$SELECTED_TYPE - - Your task is to: - 1. Analyze the code changes - 2. Determine the most appropriate commit type (if user selected 'ai-defined') - 3. Determine an appropriate scope (component/area affected) - 4. Decide if this is a breaking change - 5. Write clear, concise commit messages - - Available commit types: - - feat: A new feature - - fix: A bug fix - - docs: Documentation only changes - - style: Changes that do not affect the meaning of the code - - refactor: A code change that neither fixes a bug nor adds a feature - - perf: A code change that improves performance - - test: Adding missing tests or correcting existing tests - - build: Changes that affect the build system or external dependencies - - ci: Changes to CI configuration files and scripts - - chore: Other changes that don't modify src or test files - - revert: Reverts a previous commit - - Follow these guidelines: - - Structure: (): - - If user selected 'ai-defined', analyze the changes and pick the most suitable type - - If user selected a specific type, use that type: \$SELECTED_TYPE - - Add scope in parentheses if applicable (e.g., auth, api, ui, config) - - Use exclamation mark (!) after type/scope for breaking changes: type(scope)!: description - - Use lowercase for description (except proper nouns) - - Use imperative mood (\\\"add\\\", not \\\"added\\\") - - Keep description under 50 characters when possible - - No period at the end of subject line - - Examples: - - feat(auth): add OAuth login support - - fix(api): handle null response in user endpoint - - docs(readme): update installation instructions - - style(ui): improve button spacing consistency - - refactor(database): simplify query builder logic - - test(auth): add unit tests for login flow - - build(deps): upgrade React to version 18 - - ci(github): fix deployment workflow - - chore(config): update ESLint rules - - perf(api)!: optimize database queries - - IMPORTANT: - - Generate exactly \$COMMITS_TO_SUGGEST different commit message options - - If user selected 'ai-defined', you can use different types for different options - - If user selected a specific type, all messages must use that type - - Only return commit messages, no explanations - - Do not use markdown code blocks - - One message per line - - Previous commits for context: - \$(git log --oneline -10) - - Changes to analyze: - \$(git diff --cached --stat) - \$(git diff --cached) - \" - " - ''; - } - ]; - } - ]; - }; - }; -} diff --git a/modules/home/shell/open-code.nix b/modules/home/shell/open-code.nix deleted file mode 100644 index 8042242..0000000 --- a/modules/home/shell/open-code.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - programs.opencode = { - enable = true; - tui = { - theme = "system"; - }; - settings = { - provider = { - google = { - options = { - apiKey = "{file:/run/secrets/gemini_api_key}"; - }; - }; - openrouter = { - options = { - apiKey = "{file:/run/secrets/open_router_api_key}"; - }; - }; - }; - }; - }; -} diff --git a/modules/home/shell/superfile.nix b/modules/home/shell/superfile.nix deleted file mode 100644 index ed3b9fe..0000000 --- a/modules/home/shell/superfile.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - programs.superfile = { - enable = true; - settings = { - theme = "poimandres"; - editor = ""; - dir_editor = ""; - auto_check_update = false; - cd_on_quit = false; - default_open_file_preview = true; - show_image_preview = true; - show_panel_footer_info = true; - default_directory = "~"; - file_size_use_si = false; - default_sort_type = 0; - sort_order_reversed = false; - case_sensitive_sort = false; - shell_close_on_success = false; - debug = false; - ignore_missing_fields = false; - nerdfont = true; - transparent_background = true; - file_preview_width = 0; - code_previewer = "bat"; - sidebar_width = 20; - border_top = "─"; - border_bottom = "─"; - border_left = "│"; - border_right = "│"; - border_top_left = "╭"; - border_top_right = "╮"; - border_bottom_left = "╰"; - border_bottom_right = "╯"; - border_middle_left = "├"; - border_middle_right = "┤"; - metadata = true; - zoxide_support = true; - enable_md5_checksum = false; - }; - }; -} diff --git a/modules/home/spotify/default.nix b/modules/home/spotify/default.nix deleted file mode 100644 index 504651f..0000000 --- a/modules/home/spotify/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - services.spotifyd = { - enable = true; - settings = { - global = { - device_name = "canopus"; - device_type = "computer"; - bitrate = 320; - initial_volume = 100; - autoplay = true; - }; - }; - }; - - programs.spotify-player = { - enable = true; - settings = { - theme = "default"; - client_id = "c54c06bacd3642c68d981474dadd3a53"; - login_redirect_uri = "http://127.0.0.1:8989/login"; - device = { - name = "spotify-player"; - device_type = "speaker"; - volume = 100; - bitrate = 320; - audio_cache = false; - normalization = false; - autoplay = false; - }; - }; - }; -} diff --git a/modules/home/starship/default.nix b/modules/home/starship/default.nix deleted file mode 100755 index 9c86af5..0000000 --- a/modules/home/starship/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{...}: { - programs.starship = { - enable = true; - settings = { - format = ''$os$hostname$directory$rust$golang$solidity$nodejs(bold blue)$git_branch$git_status[❯](bold yellow)[❯](bold purple)[❯](bold blue) ''; - scan_timeout = 60; - add_newline = false; - line_break.disabled = true; - - os = { - format = "[$symbol  ]($style)"; - style = "bold green"; - disabled = false; - symbols.NixOS = "󰊠"; - symbols.Linux = "󰊠"; - symbols.Arch = "󰣇"; - symbols.Ubuntu = "󰕈"; - }; - directory = { - format = "[$path]($style)[$read_only ]($read_only_style)"; - read_only = " 󰌾"; - style = "bold blue"; - }; - git_branch.format = "[$symbol$branch]($style) "; - hostname = { - ssh_only = false; - format = "[$ssh_symbol$hostname]($style) "; - style = "bold green"; - ssh_symbol = "󰇧 "; - disabled = false; - }; - rust = { - format = "[$symbol]($style)"; - symbol = " "; - }; - golang = { - format = "[$symbol]($style)"; - symbol = " "; - }; - solidity = { - format = "[$symbol]($style)"; - symbol = "󰡪 "; - }; - nodejs = { - format = "[$symbol]($style)"; - symbol = "󰎙 "; - }; - }; - }; -} diff --git a/modules/home/thunderbird/default.nix b/modules/home/thunderbird/default.nix deleted file mode 100644 index 902ca16..0000000 --- a/modules/home/thunderbird/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{username, ...}: { - programs.thunderbird = { - enable = true; - - profiles."${username}" = { - isDefault = true; - }; - }; -} diff --git a/modules/home/tmux/default.nix b/modules/home/tmux/default.nix deleted file mode 100644 index e651c08..0000000 --- a/modules/home/tmux/default.nix +++ /dev/null @@ -1,136 +0,0 @@ -{pkgs, ...}: let - bg = "default"; - fg = "default"; - bg2 = "brightblack"; - fg2 = "white"; - color = c: "#{@${c}}"; - - indicator = let - accent = color "indicator_color"; - content = "  "; - in "#[reverse,fg=${accent}]#{?client_prefix,${content},}"; - - current_window = let - accent = color "main_accent"; - index = "#[reverse,fg=${accent},bg=${fg}] #I "; - name = "#[fg=${bg2},bg=${fg2}] #W "; - # flags = "#{?window_flags,#{window_flags}, }"; - in "${index}${name}"; - - window_status = let - accent = color "window_color"; - index = "#[reverse,fg=${accent},bg=${fg}] #I "; - name = "#[fg=${bg2},bg=${fg2}] #W "; - # flags = "#{?window_flags,#{window_flags}, }"; - in "${index}${name}"; - - battery = let - percentage = pkgs.writeShellScript "percentage" ( - if pkgs.stdenv.isDarwin - then '' - echo $(pmset -g batt | grep -o "[0-9]\+%" | tr '%' ' ') - '' - else '' - path="/org/freedesktop/UPower/devices/DisplayDevice" - echo $(${pkgs.upower}/bin/upower -i $path | grep -o "[0-9]\+%" | tr '%' ' ') - '' - ); - state = pkgs.writeShellScript "state" ( - if pkgs.stdenv.isDarwin - then '' - echo $(pmset -g batt | awk '{print $4}') - '' - else '' - path="/org/freedesktop/UPower/devices/DisplayDevice" - echo $(${pkgs.upower}/bin/upower -i $path | grep state | awk '{print $2}') - '' - ); - icon = pkgs.writeShellScript "icon" '' - percentage=$(${percentage}) - state=$(${state}) - if [ "$state" == "charging" ] || [ "$state" == "fully-charged" ]; then echo "󰂄" - elif [ $percentage -ge 75 ]; then echo "󱊣" - elif [ $percentage -ge 50 ]; then echo "󱊢" - elif [ $percentage -ge 25 ]; then echo "󱊡" - elif [ $percentage -ge 0 ]; then echo "󰂎" - fi - ''; - color = pkgs.writeShellScript "color" '' - percentage=$(${percentage}) - state=$(${state}) - if [ "$state" == "charging" ] || [ "$state" == "fully-charged" ]; then echo "green" - elif [ $percentage -ge 75 ]; then echo "green" - elif [ $percentage -ge 50 ]; then echo "${fg2}" - elif [ $percentage -ge 30 ]; then echo "yellow" - elif [ $percentage -ge 0 ]; then echo "red" - fi - ''; - in "#[fg=#(${color})]#(${icon}) #[fg=${fg}]#(${percentage})%"; - - pwd = let - accent = color "main_accent"; - icon = "#[fg=${accent}] "; - format = "#[fg=${fg}]#{b:pane_current_path}"; - in "${icon}${format}"; - - git = let - icon = pkgs.writeShellScript "branch" '' - git -C "$1" branch && echo " " - ''; - branch = pkgs.writeShellScript "branch" '' - git -C "$1" rev-parse --abbrev-ref HEAD - ''; - in "#[fg=magenta]#(${icon} #{pane_current_path})#(${branch} #{pane_current_path})"; - - separator = "#[fg=${fg}]|"; -in { - programs.tmux = { - enable = true; - baseIndex = 1; - escapeTime = 0; - mouse = true; - extraConfig = '' - set-option -sa terminal-overrides ",xterm*:Tc" - set-option -g status-position top - unbind r - bind r source-file ~/.config/tmux/tmux.conf - - # remap prefix from C-b to C-Space - # unbind C-b - # set -g prefix C-Space - # bind C-Space send-prefix - - # split panes using | and - - unbind '"' - unbind % - bind | split-window -h - bind - split-window -v - - # Start windows and panes at 1, not 0 - set -g base-index 1 - set -g pane-base-index 1 - set-window-option -g pane-base-index 1 - set-option -g renumber-windows on - - # switch panes using Alt-arrow without prefix - bind -n M-Left select-pane -L - bind -n M-Right select-pane -R - bind -n M-Up select-pane -U - bind -n M-Down select-pane -D - - set-option -g default-terminal "screen-256color" - set-option -g status-right-length 100 - set-option -g @indicator_color "yellow" - set-option -g @window_color "magenta" - set-option -g @main_accent "blue" - set-option -g pane-active-border fg=black - set-option -g pane-border-style fg=black - set-option -g status-style "bg=${bg} fg=${fg}" - set-option -g status-left "${indicator}" - set-option -g status-right "${git} ${pwd} ${separator} ${battery}" - set-option -g window-status-current-format "${current_window}" - set-option -g window-status-format "${window_status}" - set-option -g window-status-separator "" - ''; - }; -} diff --git a/modules/home/vs-code/default.nix b/modules/home/vs-code/default.nix deleted file mode 100644 index 21a20b1..0000000 --- a/modules/home/vs-code/default.nix +++ /dev/null @@ -1,76 +0,0 @@ -{pkgs, ...}: { - programs.vscode = { - enable = true; - package = pkgs.vscodium; - - profiles.default = { - keybindings = [ - { - "key" = "f7"; - "command" = "-editor.action.wordHighlight.next"; - "when" = "editorTextFocus && hasWordHighlights"; - } - { - "key" = "f7"; - "command" = "-editor.action.accessibleDiffViewer.next"; - "when" = "isInDiffEditor"; - } - { - "key" = "f7"; - "command" = "workbench.action.terminal.toggleTerminal"; - "when" = "terminal.active"; - } - { - "key" = "ctrl+`"; - "command" = "-workbench.action.terminal.toggleTerminal"; - "when" = "terminal.active"; - } - ]; - - userSettings = { - "window.zoomLevel" = 2; - "window.menuBarVisibility" = "toggle"; - - "workbench.colorTheme" = "Poimandres Alternate"; - "workbench.startupEditor" = "none"; - - "editor.fontFamily" = "FiraCode NF, FiraCode Nerd Font"; - "editor.fontLigatures" = true; - "editor.cursorBlinking" = "smooth"; - "editor.minimap.enabled" = false; - - "terminal.integrated.fontFamily" = "FiraCode NF, FiraCode Nerd Font , FiraCode"; - }; - - extensions = - (with pkgs.vscode-extensions; [ - wakatime.vscode-wakatime - ms-dotnettools.csharp - naumovs.color-highlight - ms-vscode-remote.remote-containers - ms-azuretools.vscode-docker - mikestead.dotenv - golang.go - wix.vscode-import-cost - sumneko.lua - yzhang.markdown-all-in-one - jnoortheen.nix-ide - esbenp.prettier-vscode - prisma.prisma - ms-python.python - ms-vscode-remote.remote-ssh - humao.rest-client - bradlc.vscode-tailwindcss - gruntfuggly.todo-tree - ]) - ++ (with pkgs.vscode-marketplace; [ - danielpriestley.poimandres-alternate - pufferbommy.pretty-poimandres - yoavbls.pretty-ts-errors - formulahendry.auto-rename-tag - chakrounanas.turbo-console-log - streetsidesoftware.code-spell-checker - ]); - }; - }; -} diff --git a/modules/home/wezterm/default.nix b/modules/home/wezterm/default.nix deleted file mode 100644 index e681030..0000000 --- a/modules/home/wezterm/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{pkgs, ...}: { - programs.wezterm = { - enable = true; - package = pkgs.wezterm-git; - enableZshIntegration = false; - - extraConfig = '' - local wezterm = require 'wezterm' - local config = {} - - config.check_for_updates = false - - config.window_close_confirmation = 'NeverPrompt' - config.color_scheme = 'Poimandres' - config.colors = { - background = "#0f0f0f" - } - config.enable_tab_bar = false - config.font = wezterm.font_with_fallback { - 'JetBrainsMono Nerd Font', - } - config.font_size = 12.0 - config.window_background_opacity = 1 - config.audible_bell = "Disabled" - - return config - ''; - }; -} diff --git a/modules/home/zed/default.nix b/modules/home/zed/default.nix deleted file mode 100644 index c58e55e..0000000 --- a/modules/home/zed/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - programs.zed-editor = { - enable = true; - extensions = ["lua" "nix" "C#" "solidity"]; - userKeymaps = [ - { - context = "Workspace"; - bindings = { - F7 = "workspace::NewTerminal"; - }; - } - ]; - userSettings = { - ui_font_size = 18; - buffer_font_size = 18; - theme = { - mode = "dark"; - light = "Ayu Light"; - dark = "Ayu Dark"; - }; - vim_mode = true; - telemetry = { - diagnostics = false; - metrics = false; - }; - }; - }; -} diff --git a/modules/hosts/alpha/config.nix b/modules/hosts/alpha/config.nix new file mode 100644 index 0000000..4be5f17 --- /dev/null +++ b/modules/hosts/alpha/config.nix @@ -0,0 +1,138 @@ +{ inputs, config, ... }: +{ + flake.modules.nixos.alpha = + { + hostName, + userName, + ... + }@innerArgs: + { + imports = + with config.flake.modules.nixos; + [ + boot + networking + virtualisation + services + ] + ++ [ + inputs.trok.nixosModules.default + inputs.tfolio.nixosModules.default + ]; + + tnix = { + boot = { + legacy.enable = true; + + impermanence = { + enable = true; + + home = { + directories = [ + ".local/share/nvim" + ".local/share/zsh" + ".local/share/zoxide" + ".local/state/lazygit" + ".local/share/opencode" + ]; + }; + }; + }; + + networking = { + openssh = { + enable = true; + ports = [ + 23 + ]; + }; + netbird-client.enable = true; + }; + + services = { + pangolin = { + enable = true; + domain = "pangolin.lab.tux.rs"; + baseDomain = "lab.tux.rs"; + environmentFile = innerArgs.config.sops.secrets."pangolin".path; + }; + + uptime-kuma = { + enable = true; + domain = "status.lab.tux.rs"; + }; + + mediaflow-proxy = { + enable = true; + environmentFile = innerArgs.config.sops.secrets."mediaflow-proxy".path; + }; + + trok = { + enable = true; + }; + }; + + virtualisation = { + docker.enable = true; + }; + }; + + sops.secrets = { + tux-password = { + sopsFile = ./secrets.yaml; + neededForUsers = true; + }; + + gemini-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + openrouter-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + opencode-go-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + netbird-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + "cloudflare-credentials/email" = { + sopsFile = ./secrets.yaml; + }; + + "cloudflare-credentials/dns-api-token" = { + sopsFile = ./secrets.yaml; + }; + + aiostreams = { + sopsFile = ./secrets.yaml; + }; + + mediaflow-proxy = { + sopsFile = ./secrets.yaml; + }; + + pangolin = { + sopsFile = ./secrets.yaml; + }; + }; + + # --- Networking --- + networking = { + hostName = hostName; + networkmanager.enable = true; + firewall.enable = false; + }; + + services.tfolio.enable = true; + + system.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/alpha/disko.nix b/modules/hosts/alpha/disko.nix new file mode 100644 index 0000000..3cc0c26 --- /dev/null +++ b/modules/hosts/alpha/disko.nix @@ -0,0 +1,82 @@ +{ inputs, ... }: +{ + flake.modules.nixos.alpha = + { config, lib, ... }: + let + hasOptinPersistence = config.tnix.boot.impermanence.enable; + isLegacy = config.tnix.boot.legacy.enable; + in + { + imports = [ + inputs.disko.nixosModules.disko + ]; + + disko.devices.disk.primary = { + device = "/dev/sda"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "defaults" + "umask=0077" + ]; + }; + }; + root = { + size = "100%"; + type = "8300"; + content = { + type = "btrfs"; + # Base subvolumes that always exist + subvolumes = { + "/root" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + "noacl" + "space_cache=v2" + ]; + mountpoint = "/nix"; + }; + } + # Conditionally merge /persist only when impermanence is enabled + // lib.optionalAttrs hasOptinPersistence { + "/persist" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/persist"; + }; + }; + }; + }; + } + // lib.optionalAttrs isLegacy { + boot = { + name = "boot"; + size = "1M"; + type = "EF02"; + }; + }; + }; + }; + }; +} diff --git a/modules/hosts/alpha/hardware.nix b/modules/hosts/alpha/hardware.nix new file mode 100644 index 0000000..297cffe --- /dev/null +++ b/modules/hosts/alpha/hardware.nix @@ -0,0 +1,17 @@ +{ + flake.modules.nixos.alpha = + { + lib, + modulesPath, + system, + ... + }: + { + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + networking.useDHCP = lib.mkDefault true; + nixpkgs.hostPlatform = lib.mkDefault system; + }; +} diff --git a/modules/hosts/alpha/home.nix b/modules/hosts/alpha/home.nix new file mode 100644 index 0000000..eab1bd2 --- /dev/null +++ b/modules/hosts/alpha/home.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.alpha = { + home.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/alpha/secrets.yaml b/modules/hosts/alpha/secrets.yaml new file mode 100644 index 0000000..38cad75 --- /dev/null +++ b/modules/hosts/alpha/secrets.yaml @@ -0,0 +1,35 @@ +tux-password: ENC[AES256_GCM,data:tvx3nMoIuQSotxHDWLs7UesnyWY3u3EwkqAIzCw3Z2AJseaiqnt/xeSKAeUXPVSs85rVdIJ6Ys5+6r+NONEG7ujuNevpjJRNkQ==,iv:CB0BIrMfdiWiMCvmRdtsafh3dCAD5Qb3mOuE7eq4nA4=,tag:p/3AESwNCEL4EoU9rJjUPw==,type:str] +gemini-api-key: ENC[AES256_GCM,data:Bo3Z5Jhce0UOBn77I2AcrXYbBgPLDx0eOjPC8J63E/VWNhMPbbxb,iv:iWOsTACOMcK3oqq848WnJ5Ku3tYy1aadmLB4IMgoyqg=,tag:BPzlXoP8/iJaj8c/YFCWyg==,type:str] +openrouter-api-key: ENC[AES256_GCM,data:D+/ImUTg7UvBTh0fMlWMZ0O/GsQS/R4Hz+CO4l42R6mn+zk+udvw79BctXdWWyrFf2ZNOTJ/99QTtWOUOvHISWaEJogXyb+93g==,iv:c7OtgBu1Zaf7lA4InIsKOAPbAvTl3gaO7QGCFNx21Bo=,tag:KXiASj/qC1YzK6DUox57ug==,type:str] +opencode-go-api-key: ENC[AES256_GCM,data:ipKkNcRqBERIQ6f6yFzVm999s+UwJys4elHWhzpL441RfOaG9MmRWMcD+wRLJ7DSWFjYu6uUPF7TKez8J6abWeKDgg==,iv:FDSYE3R8zKVxWiP2S/sCVcwEu3fEXg/hCeqCRSF+c6g=,tag:5RDuMFGMoN6xwAYj0HiyjQ==,type:str] +netbird-key: ENC[AES256_GCM,data:NilfyafnGhFVYD6q4+jJQxlhXNdNC8BQ1CZfu8a5wc693Y1h,iv:Rpl0OpkQdBMPpIJ08t9Z0AjDAW6c97pFZKO1KPu8ipY=,tag:du3d0SQWuqJtJSwhSgJE4g==,type:str] +cloudflare-credentials: + email: ENC[AES256_GCM,data:K9L6H4dqNNgbCFg=,iv:jirDJb+Y2sXrup6/doRmOdd8tV7zLnttcgG75r4Fs04=,tag:XeyMVC+Q9TEuTxSfOeR2Uw==,type:str] + dns-api-token: ENC[AES256_GCM,data:aLZqasMaxpv08KuGqhe66J/jHqEnMNdZrYtIurv01xk2/5OW//PaHQ==,iv:7tZYpOT27n/RWaj1CqiZbhA/g3aKbxjdkMA6SuW/YpQ=,tag:oetxyD9XMrihSLyDvl7qfw==,type:str] +aiostreams: ENC[AES256_GCM,data:HeV4NONoqTti/4GBpzYaUEGgrSpDfCfcGJ3kbZAUtg5hm1zQCcelx3N4b/woSjaNZrDj98P5R3oZUkgVfv0RS2PKdJc3EdLaPFwXcuJ+W0U373sryU85uIIZi4BvQ4LyCCpuclPU5dgQmb9rzbIvhlu/ftfpKJsRbH2bUgMMo2nohMWUtg==,iv:V60U/omnN+09cSOQGvwwN8DC6/D++MB0axQyzIG97zo=,tag:vwNbXRj3CS+okb0NSwxgYw==,type:str] +mediaflow-proxy: ENC[AES256_GCM,data:jk2eYyOmO3XpqFNo3jucB/VvL6pWBGrquYi/OpIwvSPqjbo=,iv:DIsqykv77/TlLhT9uIPGJRBlCQHVdhcuYlc56qQGZgk=,tag:phMXArjIrNNI51U9hpaUzg==,type:str] +pangolin: ENC[AES256_GCM,data:G6TscTsWsyvBM/L2boxpDIrczV0cycQNT51mOf0vPKOHdifdBxT6Q3PY+Ms5arc=,iv:qh655lwIcD89D8ufIzJWYrDqPKGCrGMUXsgcFYwm9zY=,tag:kGlGzaOADZyY6gsLuI6EHw==,type:str] +sops: + age: + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaR0kzRXBGRjJaVldDRk90 + KzYwSzJBeXBnNVZ0T2VaU2oyLzdRWmo5ZzNVCk9HTDVtMk8xL1cwL2FSRUR5UGdS + bXJnOXhTbWozWm5rd2pnaFNoWk0rWncKLS0tIGFWWmY2WU9YanJ5UElab3lqaXNo + QUhYUWs4bitJaGpXL200b0s0SmVIeVUKevQ1IVqmqGIYf014iL47C02+peSYJyeE + PNluZUA6VzrL2WpdJzDqxAwSWtcgXG0/JADIg+DssnhftiHMHzn3NQ== + -----END AGE ENCRYPTED FILE----- + recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnL1VPODRnNEs2bXlUVjB5 + Z0pBUzBnRDQ0WWcvL2IvUHdmQXUxNjRpTVN3Ck9VLzd2QWpMMlFJck1EQXBVanl0 + SC91bDFqNFlJZ2E0UXVZa3BKRjh3TlkKLS0tIENuc1dUZ1dDUTg2VXBueU1ETG9S + c095blJheHhVT0E4bjdGUWlYN0N4MVUKK42sChX4V37HK1SRKQxldLpft2jVfeiG + 4TkObqH8ddGpbd7cX5a/wboTjYuEdAviWxjK2oBPgtcFc1f03X3tmA== + -----END AGE ENCRYPTED FILE----- + recipient: age1mzxxxzhy3us3rd960ufqv7vlxj5cnug86md6x69llg9ujzw2pqws057llf + lastmodified: "2026-08-07T20:02:00Z" + mac: ENC[AES256_GCM,data:VrA2OPCcVvAzYjZTkHPxytclISP24P1FqiIQjSGQItkMLieom80N6933hB0Tdn3BM6600bHt2NweSqHjGx//pn2Gbur4pxeN3TpF9tKXc12IcAThUL9g48fMbk5y+kWWVUF1Pezod0YnzWAlalUXFqvKinfm4RqPNjDjndA/dcI=,iv:xfs9XD5ZIQ6dyMMZ8OE5FEs/hrSr/T2VwC7XvZ7xC2A=,tag:jYWo2kgwwltKB+njiYaPkQ==,type:str] + unencrypted_suffix: _unencrypted + version: 3.13.3 diff --git a/modules/hosts/arcturus/config.nix b/modules/hosts/arcturus/config.nix new file mode 100644 index 0000000..909cb96 --- /dev/null +++ b/modules/hosts/arcturus/config.nix @@ -0,0 +1,165 @@ +{ config, ... }: +{ + flake.modules.nixos.arcturus = + { + pkgs, + hostName, + userName, + ... + }@innerArgs: + { + imports = with config.flake.modules.nixos; [ + boot + networking + virtualisation + services + ]; + + tnix = { + boot = { + secure-boot.enable = true; + + impermanence = { + enable = true; + + home = { + directories = [ + "Distrobox" + ".bun" + ".config/sops" + ".local/share/nvim" + ".local/share/opencode" + ".local/share/zsh" + ".local/share/zoxide" + ".local/state/lazygit" + ]; + + files = [ + ".wakatime.cfg" + ]; + }; + }; + }; + + networking = { + openssh.enable = true; + netbird-client.enable = true; + newt = { + enable = true; + environmentFile = innerArgs.config.sops.secrets.newt.path; + }; + }; + + services = { + hermes-agent = { + enable = true; + environmentFiles = [ innerArgs.config.sops.secrets.hermes.path ]; + }; + + cyber-tux = { + enable = true; + environmentFile = innerArgs.config.sops.secrets.discord-token.path; + }; + + vaultwarden = { + enable = true; + domain = "bw.lab.tux.rs"; + configurePangolin = true; + }; + + copyparty = { + enable = true; + domain = "files.lab.tux.rs"; + accounts.${userName}.passwordFile = innerArgs.config.sops.secrets.copyparty.path; + volumes = { + "/" = { + path = "/var/lib/copyparty/data"; + access = { + r = "*"; + rwmdgGha = [ userName ]; + }; + }; + }; + configurePangolin = true; + }; + }; + + virtualisation = { + docker.enable = true; + distrobox.enable = true; + }; + }; + + sops.secrets = { + tux-password = { + sopsFile = ./secrets.yaml; + neededForUsers = true; + }; + + discord-token = { + sopsFile = ./secrets.yaml; + }; + + gemini-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + openrouter-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + opencode-go-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + netbird-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + newt = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + copyparty = { + sopsFile = ./secrets.yaml; + owner = innerArgs.config.services.copyparty.user; + }; + + hermes = { + sopsFile = ./secrets.yaml; + }; + }; + + # --- Networking --- + networking = { + hostName = hostName; + networkmanager = { + enable = true; + wifi.backend = "iwd"; + }; + wireless.iwd = { + enable = true; + settings = { + Network = { + EnableIPv6 = true; + }; + Settings = { + AutoConnect = true; + }; + }; + }; + firewall.enable = false; + }; + + environment.systemPackages = with pkgs; [ + impala + ]; + + system.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/arcturus/disko.nix b/modules/hosts/arcturus/disko.nix new file mode 100644 index 0000000..a426148 --- /dev/null +++ b/modules/hosts/arcturus/disko.nix @@ -0,0 +1,74 @@ +{ inputs, ... }: +{ + flake.modules.nixos.arcturus = + { config, lib, ... }: + let + hasOptinPersistence = config.tnix.boot.impermanence.enable; + in + { + imports = [ + inputs.disko.nixosModules.disko + ]; + + disko.devices.disk.primary = { + device = "/dev/nvme0n1"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "defaults" + "umask=0077" + ]; + }; + }; + root = { + size = "100%"; + type = "8300"; + content = { + type = "btrfs"; + # Base subvolumes that always exist + subvolumes = { + "/root" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + "noacl" + "space_cache=v2" + ]; + mountpoint = "/nix"; + }; + } + # Conditionally merge /persist only when impermanence is enabled + // lib.optionalAttrs hasOptinPersistence { + "/persist" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/persist"; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/hosts/arcturus/hardware.nix b/modules/hosts/arcturus/hardware.nix new file mode 100644 index 0000000..8648393 --- /dev/null +++ b/modules/hosts/arcturus/hardware.nix @@ -0,0 +1,36 @@ +{ config, ... }: +{ + flake.modules.nixos.arcturus = + { + lib, + pkgs, + system, + ... + }@innerArgs: + { + imports = with config.flake.modules.nixos; [ + hardware + ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + hardware.cpu.amd.updateMicrocode = lib.mkDefault innerArgs.config.hardware.enableRedistributableFirmware; + + networking.useDHCP = lib.mkDefault true; + nixpkgs.hostPlatform = lib.mkDefault system; + + environment.systemPackages = with pkgs; [ + nvtopPackages.amd + ]; + }; +} diff --git a/modules/hosts/arcturus/home.nix b/modules/hosts/arcturus/home.nix new file mode 100644 index 0000000..d413830 --- /dev/null +++ b/modules/hosts/arcturus/home.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.arcturus = { + home.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/arcturus/secrets.yaml b/modules/hosts/arcturus/secrets.yaml new file mode 100644 index 0000000..82d06b4 --- /dev/null +++ b/modules/hosts/arcturus/secrets.yaml @@ -0,0 +1,33 @@ +tux-password: ENC[AES256_GCM,data:eXg28pYQjIi5iPh4oHBOvIYQReM92T79uty/O461mEoLB8awr8ikq3RM7Mux3jZKM+Fk/Ow3NNG0F/154dZentodr1uvy9gD1g==,iv:nQevOumENveBMuiYMJF0OokORyjZCpR8ahTfOuj2Dzo=,tag:64zz8eVuw1OwTltfAUwWSg==,type:str] +discord-token: ENC[AES256_GCM,data:uzxkrNRRplL/1MfvPZ/EL+I8UACuZQBHZ95BSHuxW0nBjxhr2F89D2BXTcKOBI9qO6uMjK5WBtWzSOw3y9EsngTTm/youIdkrIDLP3r/tkpOkLa/VjM=,iv:OxzFa0nEInV5uxgQFww11ZE1NorH5q130Tgp/6l9uOE=,tag:g4U9wLhPAkz72ktbQ8KrSg==,type:str] +gemini-api-key: ENC[AES256_GCM,data:gLZSoYTdKY+rwIpYiXvN9n9PGkUD6q8Oe7dHnYkjEjwDf5qpjubg,iv:ySoNgQWTu9DjvbashF4ulyYP8fJUl4yrCTeBQ0jrGmw=,tag:FctubsQv50AP78JvTb9bpQ==,type:str] +openrouter-api-key: ENC[AES256_GCM,data:6xONCl9lqOoO7b4CEyCz9607tICDUAkpglRjGS5nYq2ppg2UKqYTrWD1BGCA5Xfs/CWskniVhoNG3vscjKiYCCh9gbM6aqdmTQ==,iv:7Iwc9t00HOOBjA7URXcUO41badqYyJCkFHM/uPkLFxY=,tag:Cl39kitr2e0//HVwAdsdUQ==,type:str] +opencode-go-api-key: ENC[AES256_GCM,data:dmeRKn7TWHnqvpyPQpcEG6yHTb2bRby/rh10ytL0jHj5R+lRmNVdmqUF92GTznY9vEaB6ZYCJecWhpm8g4upNfOWBg==,iv:9UMJpAlD8gpcNiN+liu3nawoAZQKapEg7sCp561N9E8=,tag:OZlASpOa5BQaQwFWjoLCRw==,type:str] +netbird-key: ENC[AES256_GCM,data:q6eKisca04qn/CvALrvXF79MsToDhvLRLv2JTiUBAZglCC9m,iv:jj0/ZD7IDgopprTVUgSfJmdAJmUP3iqewU3dqssGYbk=,tag:6IPRdCm2FGdlTEIX7jt3qA==,type:str] +copyparty: ENC[AES256_GCM,data:QXt8IgTekg9rzFyuzpg=,iv:vJYfHqCiheq290K9TGACHNHyOWzIn60j1Kz502SE27w=,tag:ECt7Wavlqw1V6zgXiRZtUg==,type:str] +newt: ENC[AES256_GCM,data:r5Rd81ZrzrIYbXtFkypbJltoGCOYrW6P4IpwGCtaH7lqCg7wD/WMboMx13HN4Mm0J4qbBpDakpfVv9qUTrisYP1xwpKkmY1kqPlFWRZN8hzuuNS2Tv3qUjavTp5XGotVPLHj1Cg/cwGcf8EAssYTwTy7H0PgdQKwqigQD1f1s/j4iXQ=,iv:1xP38/Ayt1xvn2fJGa5zgOrVNOw2J5taG1Orx6uNgZI=,tag:H9JXu9gzyyvTPWgXaoTsiw==,type:str] +hermes: ENC[AES256_GCM,data:9A2T2LIeVGo805k5E8wPHmqfjqQ6Dp7srQrVXHLsJRk+9N9bo2pMZUvAZm9FI89zPyK7tMnmLd56Jwf+W+mmQqbupnmN66jxOxOaB0MQ9/6/1oNHvaii337ed6fviLy6hx24pEOpY3OXwSEdNftwJqzc7YXLZK3UX8thhDDdxd0TSj3VUBd0ZHDWd4NpsgtjRRyVDBjHsnF0vzSZXtomithnHqeVHpp/jWPc+ZGrpnVvU8wxNMGLlDtr4A==,iv:dYCaTygVp1hqunPmBcNaYr7JxrdxfH1pcBE6B5HMgzk=,tag:/fddnR3n6+erzWF+m/bgGQ==,type:str] +sops: + age: + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3Qkh0cmdHNGJTYmFNUFZW + c244RjlyNjlrSWh1bG1IRFFFeFZZVzhaYVdBCmd1N3JNS0IzWDlUMUJSM0pYdi9L + MzlHRk1pZ1hqaVdIYUQwczh2VDVtZE0KLS0tIEtRYWF6V0I3eDBZSnVmZ2R5S0Z5 + Z3hhRitmdEwxbzcrS0cwNTZVK1lXYlUKSFfKk7JGzxRq9weL4NKJqfmAige2O+1T + 59PvEFKvvkGb6ajkzwTw0lB3UFzly6FuTnbSLY9r+oT9AMbxLoKdcQ== + -----END AGE ENCRYPTED FILE----- + recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOYlZiak1CSW1NSGt5QTRi + RjlUeG5EODVkTVJDY1RrZXJ6OU5NQ0RIOG5jCnJxZ1R6MmlGWXY2SmtaY1pQSWdZ + UWp3L2h6c0k0MVpubE9BRSswUEk3ZkkKLS0tIGN4Zm1tcHBiKzAyYWNHVktVZmpU + V3h4dUZLcktrTUZvUm44eVZOWEl4VmMKMTvajoWcktb4jVIP4HyzQiR41Wg8Gdqi + TLKEYsPQgOJ7s8P9gw2uPUY6HRz86CtiC6EbO27u0+8BbI85x1QScg== + -----END AGE ENCRYPTED FILE----- + recipient: age1huqa3hc7wcxk4dpelrzny437nzrx4fnll3d8g9ahznzk268yju5qufapxy + lastmodified: "2026-08-12T13:48:51Z" + mac: ENC[AES256_GCM,data:0GyC8VW0qoPaIcKfGKto8wDF64gDmiIhczok8oiJ0l5B7+ZUCVAKmWkMaXHyrU7kqg06WSiIixsnclEjIMxlyZVBOcfQaXeSO51uom/ax+4CfzxSGxgnpySarWRfCHgkcGUeO/eci5MzmZPgAHy7b8IBcJWzVUCS7XBIMMyYwNs=,iv:yUsltZZ1y4fzi3Kakwt/ji/J+r/P1/3mLEQqZiN2pm4=,tag:6Fwo34LOX+jCXF9DoYUv/A==,type:str] + unencrypted_suffix: _unencrypted + version: 3.13.3 diff --git a/modules/hosts/canopus/config.nix b/modules/hosts/canopus/config.nix new file mode 100644 index 0000000..fd23b52 --- /dev/null +++ b/modules/hosts/canopus/config.nix @@ -0,0 +1,139 @@ +{ config, ... }: +{ + flake.modules.nixos.canopus = + { + pkgs, + hostName, + userName, + ... + }: + { + imports = with config.flake.modules.nixos; [ + boot + networking + desktop + gaming + virtualisation + ]; + + tnix = { + boot = { + secure-boot.enable = true; + + impermanence = { + enable = true; + + home = { + directories = [ + "Distrobox" + ".steam" + ".bun" + ".cache/awww" + ".config/BraveSoftware" + ".config/zed" + ".config/Vencord" + ".config/vesktop" + ".config/sops" + ".config/obs-studio" + ".config/easyeffects" + ".config/DankMaterialShell" + ".local/share/Steam" + ".local/share/lutris" + ".local/share/net.lutris.Lutris" + ".local/share/nvim" + ".local/share/opencode" + ".local/share/zsh" + ".local/share/zoxide" + ".local/share/voxtype" + ".local/state/lazygit" + ".local/share/vicinae" + ".local/share/TelegramDesktop" + ".local/share/GalaxyBudsClient" + ]; + + files = [ + ".wakatime.cfg" + ]; + }; + }; + }; + + networking = { + openssh.enable = true; + netbird-client.enable = true; + }; + + virtualisation = { + docker.enable = true; + docker.nvidia.enable = false; + qemu.enable = true; + waydroid.enable = true; + distrobox.enable = true; + }; + }; + + sops.secrets = { + tux-password = { + sopsFile = ./secrets.yaml; + neededForUsers = true; + }; + + gemini-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + openrouter-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + opencode-go-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + netbird-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + vicinae-json = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + }; + + # --- Networking --- + networking = { + hostName = hostName; + networkmanager = { + enable = true; + wifi.backend = "iwd"; + }; + wireless.iwd = { + enable = true; + settings = { + Network = { + EnableIPv6 = true; + }; + Settings = { + AutoConnect = true; + }; + }; + }; + firewall.enable = false; + }; + + environment.systemPackages = with pkgs; [ + davinci-resolve + telegram-desktop + galaxy-buds-client + impala + ]; + + # !!! DO NOT CHANGE THIS !!! + # This should match the version used at initial install. + system.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/canopus/disko.nix b/modules/hosts/canopus/disko.nix new file mode 100644 index 0000000..ea9e61b --- /dev/null +++ b/modules/hosts/canopus/disko.nix @@ -0,0 +1,82 @@ +{ inputs, ... }: +{ + flake.modules.nixos.canopus = + { config, lib, ... }: + let + hasOptinPersistence = config.tnix.boot.impermanence.enable; + in + { + imports = [ + inputs.disko.nixosModules.disko + ]; + + disko.devices.disk.primary = { + device = "/dev/nvme0n1"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "defaults" + "umask=0077" + ]; + }; + }; + swap = { + size = "32G"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; + }; + }; + root = { + size = "100%"; + type = "8300"; + content = { + type = "btrfs"; + # Base subvolumes that always exist + subvolumes = { + "/root" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + "noacl" + "space_cache=v2" + ]; + mountpoint = "/nix"; + }; + } + # Conditionally merge /persist only when impermanence is enabled + // lib.optionalAttrs hasOptinPersistence { + "/persist" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/persist"; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/hosts/canopus/hardware.nix b/modules/hosts/canopus/hardware.nix new file mode 100644 index 0000000..422e375 --- /dev/null +++ b/modules/hosts/canopus/hardware.nix @@ -0,0 +1,150 @@ +{ inputs, config, ... }: +{ + flake.modules.nixos.canopus = + { + lib, + pkgs, + system, + ... + }@innerArgs: + { + imports = + with config.flake.modules.nixos; + [ + hardware + ] + ++ [ + inputs.nixos-hardware.nixosModules.asus-zephyrus-ga503 + inputs.cardwire.nixosModules.default + ]; + + boot.kernelParams = [ "nvidia-drm.modeset=1" ]; + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + hardware = { + nvidia = { + modesetting.enable = true; + open = false; + nvidiaSettings = true; + }; + + cpu.amd.updateMicrocode = lib.mkDefault innerArgs.config.hardware.enableRedistributableFirmware; + }; + + services = { + xserver.videoDrivers = [ "nvidia" ]; + power-profiles-daemon.enable = true; + upower.enable = true; + + cardwire = { + enable = true; + settings = { + auto_apply_gpu_state = true; + experimental_nvidia_block = true; + battery_auto_switch = true; + battery_auto_switch_mode = "hybrid"; + }; + }; + + asusd = { + enable = true; + asusdConfig.text = '' + ( + charge_control_end_threshold: 80, + disable_nvidia_powerd_on_battery: true, + ac_command: "", + bat_command: "", + + platform_profile_linked_epp: true, + platform_profile_on_battery: Quiet, + platform_profile_on_ac: Performance, + + change_platform_profile_on_battery: true, + change_platform_profile_on_ac: true, + + profile_quiet_epp: Power, + profile_balanced_epp: BalancePower, + profile_custom_epp: Performance, + profile_performance_epp: Performance, + + ac_profile_tunings: {}, + dc_profile_tunings: {}, + armoury_settings: {}, + ) + ''; + profileConfig.text = '' + ( + active_profile: Quiet, + ) + ''; + fanCurvesConfig.text = '' + ( + profiles: ( + balanced: [ + ( + fan: CPU, + pwm: (20, 40, 60, 85, 110, 140, 170, 200), + temp: (45, 55, 62, 68, 74, 80, 86, 92), + enabled: true, + ), + ( + fan: GPU, + pwm: (20, 40, 60, 85, 110, 140, 170, 200), + temp: (45, 55, 62, 68, 74, 80, 86, 92), + enabled: true, + ), + ], + performance: [ + ( + fan: CPU, + pwm: (35, 60, 90, 120, 150, 180, 220, 255), + temp: (45, 55, 62, 68, 74, 80, 86, 92), + enabled: true, + ), + ( + fan: GPU, + pwm: (35, 60, 90, 120, 150, 180, 220, 255), + temp: (45, 55, 62, 68, 74, 80, 86, 92), + enabled: true, + ), + ], + quiet: [ + ( + fan: CPU, + pwm: (0, 10, 20, 35, 55, 80, 110, 140), + temp: (45, 55, 62, 68, 74, 80, 86, 92), + enabled: true, + ), + ( + fan: GPU, + pwm: (0, 10, 20, 35, 55, 80, 110, 140), + temp: (45, 55, 62, 68, 74, 80, 86, 92), + enabled: true, + ), + ], + custom: [], + ), + ) + ''; + }; + }; + + networking.useDHCP = lib.mkDefault true; + nixpkgs.config.cudaSupport = true; + nixpkgs.hostPlatform = lib.mkDefault system; + + environment.systemPackages = with pkgs; [ + nvtopPackages.full + ]; + }; +} diff --git a/modules/hosts/canopus/home.nix b/modules/hosts/canopus/home.nix new file mode 100644 index 0000000..c9bd1dc --- /dev/null +++ b/modules/hosts/canopus/home.nix @@ -0,0 +1,87 @@ +{ config, ... }: +{ + flake.modules.homeManager.canopus = { pkgs, ... }: { + imports = with config.flake.modules.homeManager; [ + desktop + ]; + + tnix = { + desktop = { + mangowm = { + enable = true; + monitorRule = [ + "name:eDP-1, width:2560, height:1440, refresh:165, x:0, y:0, vrr:1" + ]; + + tagRule = [ + "id:1, layout_name:tile" + "id:2, layout_name:tile" + "id:3, layout_name:tile" + "id:4, layout_name:tile" + "id:5, layout_name:scroller" + ]; + }; + }; + + services.lan-mouse = { + enable = true; + settings = { + authorized_fingerprints = { + "f4:4b:17:61:f7:01:a4:a2:e1:c7:8c:1c:7a:f3:8b:87:14:3d:05:3d:a0:8b:cc:e7:88:d8:d8:d2:a4:c2:75:8b" = + "sirius"; + }; + }; + }; + }; + + home.packages = with pkgs; [ + (writeShellScriptBin "mirror-display" '' + hyprctl eval 'hl.monitor({ + output = "eDP-1", + mode = "2560x1440@165", + position = "0x0", + scale = "1", + disabled = false + })' && + hyprctl eval 'hl.monitor({ + output = "HDMI-A-1", + mode = "preferred", + position = "auto", + scale = "1", + mirror = "eDP-1" + })' + '') + (writeShellScriptBin "extend-display" '' + hyprctl eval 'hl.monitor({ + output = "eDP-1", + mode = "2560x1440@165", + position = "0x0", + scale = "1", + disabled = false + })' && + hyprctl eval 'hl.monitor({ + output = "HDMI-A-1", + mode = "preferred", + position = "0x-1440", + scale = "1", + mirror = "" + })' + '') + (writeShellScriptBin "dock-display" '' + hyprctl eval 'hl.monitor({ + output = "eDP-1", + disabled = true + })' && + hyprctl eval 'hl.monitor({ + output = "HDMI-A-1", + mode = "preferred", + position = "0x0", + scale = "1", + mirror = "" + })' + '') + ]; + + home.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/canopus/secrets.yaml b/modules/hosts/canopus/secrets.yaml new file mode 100644 index 0000000..8877a0a --- /dev/null +++ b/modules/hosts/canopus/secrets.yaml @@ -0,0 +1,30 @@ +tux-password: ENC[AES256_GCM,data:Xb4/JMAZCBnBheDCJdRRGXLnMJ1ej8HbN+AUqA/+2sdYESKeF1PFny4Iq2kqvzdK4D3mp+pdjd7GAGfJp4M7sOcvI3V/coyxPQ==,iv:h+S+MEwHj22uHaTzFoxGZtefNUAQNp3fbU+QRfgtKvQ=,tag:VHrIEIQivPFTfhmm7dWEyQ==,type:str] +gemini-api-key: ENC[AES256_GCM,data:Q6+actg0oyUWiUJVy/9yZmea1QyGu2o8LfMsuAVFD6k7kp0dYIrl,iv:ukyouqrHxzVpBBE98KL6PW8P3j+seemm/e0Gl1urUcM=,tag:Z7MM3dJ414CmdxE72cdzNA==,type:str] +openrouter-api-key: ENC[AES256_GCM,data:SalhWKR6artX/kOVKZGpKSmrgsQDU/heshrdkK3wotOZ3BRn/ZqZRBldvl1JPSenMAMvE2LWUdmBQmwG/id7L7JL1O/+lUHIQw==,iv:hLlHayFJgUkWOirVLfqP0pGRBZAqGKe+EE2yG1ELGNk=,tag:0qoo0tb+xWjjQXr4n1qGmw==,type:str] +opencode-go-api-key: ENC[AES256_GCM,data:zbeTcaXJZFVfYnM/7sgblJFU9WfeosX/44KsXvrzKwiLPfGLLYYo9AFaCvWzzG6jHuSZC5OYrBWfOZv4+3omfCgglQ==,iv:LscUQE+PNhXGim9PSqc9nZIZichWSgAn/zsNxQ/HM/o=,tag:MaBCobnRM42fopiibibe5Q==,type:str] +netbird-key: ENC[AES256_GCM,data:swmaa+RjxeUmEl8hS2riGrW4lP5jdks9HM3x57/FLpOuqFtR,iv:MrpVjiocrPi+dBGPk7pwgSUNlJ1eryRpMjC8+jkU+T0=,tag:j6sqpQ02apqc6FwkdDvk9g==,type:str] +vicinae-json: ENC[AES256_GCM,data:FarBf6l8pl3hF7kGKPIWztUhwiKoQXmyTufCuJ120K/bPh1Bfiyi+ETt4DLYOGI6FJXfpVz4BbZOA29bXTLhVPxH0QtyBu/F5uEqA015b/c8VevDJSyy9huR13qO9ksLbMBt8RfWbAd9j26t7A1C8/mMyiJOEXCCTV9CEIW3xWrsYmhwsT8RYM+PwrPSeN1gQXHSMyRUjf/kOdJoda8+iXpLfjo4II4r2ELpbqi8QxhrRdsJsoOfAymFM784NtlTjE+h6S4TMehmoF/9ARif6I5SGQ0WfIKt/8orTGCPllL+NupLziSnpIGRGSybdArD+o5NCw59GOAbVRADxq8rCESwEkq3cF+hm8HabfYbiQ==,iv:Y/hXLFTJT3gNF3B6tgKoAh7njVuneoUzjVTlsCZiySw=,tag:2hfrwph6IccJdRu/yGu3XA==,type:str] +sops: + age: + - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqS2RZdVJaNTlRamZPMkll + MDRVSVl1b2x2LzZpdlBrdmZtdyt3UE15RldRCldXUXE2a1BFeHg5NGNPbW5IMDht + cHN1QituOU9uWFQwNS9udzNEbVhtUjQKLS0tIEtkTXhlYS9XSUlQRTY1eXBjeXZQ + bThQTFdZU29ISm93TWcwVk5ZTkhRWm8KCcprmLGhahgDkXCBpzjctHgao+gc+rKC + xLIwheUyFJOGK+ixqcdoZ/PC0kY68hVLt1YzLAyxFi4Ur1wltPrNug== + -----END AGE ENCRYPTED FILE----- + - recipient: age1x36yr8h993srfj29sfpzt4wyz52nztvncpmhgmfs0j26qvfecq3qvcm0an + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVW13WFE1Ylh3Uk1HNU1i + bU9kRzFqTmhkQlRzMlRkM0VhMlNmMDUyK25NCkZYUStxM2tScGozRXJGekxGa1RX + b1VXK0Y2Z1U0YU9XRmxRUWdWem50L1EKLS0tIFovcHRlZ1JJd2lRN0RFbHdCdm9m + V1N3eUVjZ0VZRjBZdXRPNng3Y3JoUTAKQau9CG9XfvM+5JZVRwaJr/o/sXMaJiy2 + wo2YcDb+4vfT4Wr+/8J3ccQgbLRZH916X5ZPL+A+nFyVXVKOCl3ENg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-05-12T06:33:00Z" + mac: ENC[AES256_GCM,data:htDJdEx34Q5NG8vwbBimnFENZawbLZ4FC0DkyG6J5RYP0BFnycKcKGsYR87SvIjcJZXvfZ0e6fXdtc78dd6I0sQtrQ7aNn4Iktbu/AkPmntsBwpIjVI99X9zUyQB87go/oX15yuyt8loB6ds2RkL/pfFsgLbFc10JHsBy+WcEzI=,iv:HvY+5LYzyHpRm8XCSKrN8ra/LJT9v23TPSsZg/4QVNU=,tag:k+d45+zgBYq4vlWmmc8ZkQ==,type:str] + unencrypted_suffix: _unencrypted + version: 3.12.2 diff --git a/modules/hosts/sirius/config.nix b/modules/hosts/sirius/config.nix new file mode 100644 index 0000000..1d67aa1 --- /dev/null +++ b/modules/hosts/sirius/config.nix @@ -0,0 +1,138 @@ +{ config, ... }: +{ + flake.modules.nixos.sirius = + { + pkgs, + hostName, + userName, + ... + }: + { + imports = with config.flake.modules.nixos; [ + boot + networking + desktop + gaming + virtualisation + ]; + + tnix = { + boot = { + secure-boot.enable = true; + + impermanence = { + enable = true; + + home = { + directories = [ + "Distrobox" + ".bun" + ".steam" + ".cache/awww" + ".config/BraveSoftware" + ".config/zed" + ".config/Vencord" + ".config/vesktop" + ".config/sops" + ".config/obs-studio" + ".config/easyeffects" + ".config/DankMaterialShell" + ".local/share/Steam" + ".local/share/lutris" + ".local/share/net.lutris.Lutris" + ".local/share/nvim" + ".local/share/opencode" + ".local/share/zsh" + ".local/share/zoxide" + ".local/share/voxtype" + ".local/state/lazygit" + ".local/share/vicinae" + ".local/share/TelegramDesktop" + ]; + + files = [ + ".wakatime.cfg" + ".config/lan-mouse/lan-mouse.pem" + ]; + }; + }; + }; + + networking = { + openssh.enable = true; + netbird-client.enable = true; + }; + + virtualisation = { + docker.enable = true; + docker.nvidia.enable = true; + qemu.enable = true; + waydroid.enable = true; + distrobox.enable = true; + }; + }; + + sops.secrets = { + tux-password = { + sopsFile = ./secrets.yaml; + neededForUsers = true; + }; + + gemini-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + openrouter-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + opencode-go-api-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + netbird-key = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + + vicinae-json = { + sopsFile = ./secrets.yaml; + owner = userName; + }; + }; + + # --- Networking --- + networking = { + hostName = hostName; + networkmanager = { + enable = true; + wifi.backend = "iwd"; + }; + wireless.iwd = { + enable = true; + settings = { + Network = { + EnableIPv6 = true; + }; + Settings = { + AutoConnect = true; + }; + }; + }; + firewall.enable = false; + }; + + environment.systemPackages = with pkgs; [ + davinci-resolve + telegram-desktop + impala + ]; + + # !!! DO NOT CHANGE THIS !!! + # This should match the version used at initial install. + system.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/sirius/disko.nix b/modules/hosts/sirius/disko.nix new file mode 100644 index 0000000..7704fb5 --- /dev/null +++ b/modules/hosts/sirius/disko.nix @@ -0,0 +1,82 @@ +{ inputs, ... }: +{ + flake.modules.nixos.sirius = + { config, lib, ... }: + let + hasOptinPersistence = config.tnix.boot.impermanence.enable; + in + { + imports = [ + inputs.disko.nixosModules.disko + ]; + + disko.devices.disk.primary = { + device = "/dev/nvme1n1"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "defaults" + "umask=0077" + ]; + }; + }; + swap = { + size = "70G"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; + }; + }; + root = { + size = "100%"; + type = "8300"; + content = { + type = "btrfs"; + # Base subvolumes that always exist + subvolumes = { + "/root" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + "noacl" + "space_cache=v2" + ]; + mountpoint = "/nix"; + }; + } + # Conditionally merge /persist only when impermanence is enabled + // lib.optionalAttrs hasOptinPersistence { + "/persist" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/persist"; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/hosts/sirius/hardware.nix b/modules/hosts/sirius/hardware.nix new file mode 100644 index 0000000..313e615 --- /dev/null +++ b/modules/hosts/sirius/hardware.nix @@ -0,0 +1,61 @@ +{ inputs, config, ... }: +{ + flake.modules.nixos.sirius = + { + lib, + pkgs, + system, + ... + }@innerArgs: + { + imports = + with config.flake.modules.nixos; + [ + hardware + ] + ++ [ + inputs.cardwire.nixosModules.default + ]; + + boot.kernelParams = [ "nvidia-drm.modeset=1" ]; + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + hardware = { + nvidia = { + modesetting.enable = true; + open = false; + nvidiaSettings = true; + }; + + cpu.amd.updateMicrocode = lib.mkDefault innerArgs.config.hardware.enableRedistributableFirmware; + }; + + services = { + xserver.videoDrivers = [ "nvidia" ]; + power-profiles-daemon.enable = true; + + cardwire = { + enable = true; + settings.auto_apply_gpu_state = true; + }; + }; + + networking.useDHCP = lib.mkDefault true; + nixpkgs.config.cudaSupport = true; + nixpkgs.hostPlatform = lib.mkDefault system; + + environment.systemPackages = with pkgs; [ + nvtopPackages.full + ]; + }; +} diff --git a/modules/hosts/sirius/home.nix b/modules/hosts/sirius/home.nix new file mode 100644 index 0000000..143d2f0 --- /dev/null +++ b/modules/hosts/sirius/home.nix @@ -0,0 +1,57 @@ +{ config, ... }: +{ + flake.modules.homeManager.sirius = { + imports = with config.flake.modules.homeManager; [ + desktop + ]; + + tnix = { + desktop = { + mangowm = { + enable = true; + monitorRule = [ + "name:DP-2, width:1440, height:2560, refresh:144, x:0, y:0, vrr:0, rr:1" + "name:DP-3, width:2560, height:1440, refresh:144, x:1440, y:0, vrr:0" + "name:DP-1, width:1080, height:1920, refresh:144, x:4000, y:0, vrr:0, rr:3" + ]; + + tagRule = [ + "id:1, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:2, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:3, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:4, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:5, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + + "id:1, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:2, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:3, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:4, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:5, layout_name:tile, monitor_name:DP-3, no_hide:1" + + "id:1, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:2, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:3, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:4, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:5, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + ]; + }; + }; + + services.lan-mouse = { + enable = true; + settings = { + clients = [ + { + position = "bottom"; + hostname = "canopus"; + activate_on_startup = true; + ips = [ "192.168.8.2" ]; + } + ]; + }; + }; + }; + + home.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/sirius/secrets.yaml b/modules/hosts/sirius/secrets.yaml new file mode 100644 index 0000000..b5448d8 --- /dev/null +++ b/modules/hosts/sirius/secrets.yaml @@ -0,0 +1,30 @@ +tux-password: ENC[AES256_GCM,data:JWQVd2MYX2U4UP4II62ixG9hWI5MtgHAFhl8aCmyrYPl1H/ig9ZYqfTiggJsOoXM9CUHmhUTrSWw7xRvbzztBrC7L4ABcWPbrQ==,iv:wY/RNJs7XaCsHHNX2MLBqzAgDCSo4rht10oiKrUlTHo=,tag:DcADVtEJs2KCeNS6AhO0SQ==,type:str] +gemini-api-key: ENC[AES256_GCM,data:Y9YgXp/tB3Q1Rb5YMsZLgWCq+bdeIjsXAVeO3Yh7nZ8MwDH7d5De,iv:FIXxJCn6JDYsHIoNn8f8Un3z9ZPVbxdjR48Ux88poRg=,tag:bMJ4i69HTspnhzsrsxkbrw==,type:str] +openrouter-api-key: ENC[AES256_GCM,data:HfZgZz4NyCLLM9woTZp2I6JGOlVcFblw2OMjx8k0TG5ZU2ycBCF6bKqp3wFibUxXcHy+nIfjI82fkLeSyIaGILRLYCJCc8BHKw==,iv:umUcn8MRaj7JXo6IFrGMXOu+jsFSCEikMxsQxfaFS/Q=,tag:l2s61C4EpJoKv8cc9nYGFA==,type:str] +opencode-go-api-key: ENC[AES256_GCM,data:BGERcZg5Jpnznc4cXeYFMhPk9kKBkd9GvIuQBV9TW3JE1utgrLLYK6mKNCQqrEStRFiO2jUUnBm3opUNL4SuEHFLpw==,iv:fgFAwx6z9yruK27PvAJX/Q2CS9gU+LJ5zMUK/f/rzpo=,tag:BPu3M+jppPB8sLoLmfuY/Q==,type:str] +netbird-key: ENC[AES256_GCM,data:qXAnRnLM2TlzpOvWG4exJv0+pUvpe0FpRN5xOWx3+KNt+yhq,iv:X+yl4o1RSYMCMWdVXo1hpzy+6IdKXUpsKPtYNSiHiCY=,tag:I8HbnD5iw6EJ1TdsNrhvfw==,type:str] +vicinae-json: ENC[AES256_GCM,data:JjxolEgS6uakqR4eHOx3VyrOO5kaL4dj1jcEiLWsrktCU32UB7OmP1kJEVomA1rZjODpFHL89+FRpcNFspTFrc365WlANE81RLg/M2Ja1MiLYaDFNcBGtqMX9Yc1muor53Xl7t+rTSvDIj1oE1L7xPPcjCLfwC5QDzJjCBWj9FhCxnU5BwvoJNv9vgA6xnkzAOYSPZK/ihULMD0DxyqOUEa5ECGX62OPM9Gbr7jEviaItYzOOxaRs/yQVqizodGGl/BcK6fPqvOYSxip9ABYRVSI9ZvysY7ofAkeX91ardPwVG5VvEYfxZwBvGFjV7ZfTzVkK+BiUUNrvciAETHqwkjHftPpfJjxWsgLr8lbOA==,iv:HjDE/sqVDnxeww7r2upxH57rc1+LpuMKnhhyGXoc1Ms=,tag:d2kZeWkg17eVoNACIQ3Q9A==,type:str] +sops: + age: + - recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQNGdHcDc4bTFkR0EyZlUr + eXovR1lyeTZJTDg5R281MFFuMHVwOXZXYzNvCkpIT1g3K05WUUswaEVjVVJWQkJq + V20xODdoWlJMY3ZCcGo0czU1TXZFRE0KLS0tIGNTeXV2Mld2STRmRnFaM1MzT3Nk + Z0JwWWR0STUybjVhSXdDR3NiKzV1eDQK22HmMuyqYaR/eGuALkAPB1Y5bN2KwIt3 + pamM8vbnjB//hXoyrv4vsoDk9WzLGFGjgiw2qsM2HQgzQqtrwF1/1A== + -----END AGE ENCRYPTED FILE----- + - recipient: age1maxsx5tq2h3d92rfyl8ekcdan5gu5cpch4qs3c56cu7qag02xgvs3h0gqc + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1N3ZBd1pHODFtZkZxaHNP + OXlXUzVFS0ZIam1IWVkxNldOdTEwY0s4aUNZCjVlcnF1aXJxUUlQSXhteXJ6OU1W + L0crZzJOaHF2SnVhWVZnVEdqRlR0cjgKLS0tIFlFWHhaR3U2QTNxRGZRMnk3cmll + M3JocWZJeXFxenhXOENBVWpvNkd3bm8KqhNLzCyEAI643jGWpZF/uTchHmBj8ozU + HtpOzKsshif66D0XOHeJQfQamJI4TyKsj3Sk3j9rstsLmN2lxTRGHg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-05-10T00:35:50Z" + mac: ENC[AES256_GCM,data:u27zQ1PPnWy5Parbh/1DkVP3ICmHnLZJKaLbN3dZEVONgqOWi32LV3t0iNhtLWwVnzFPBusRWahQiqAkUdnQtrXF0OtjPCpLuIw86xB75QPGbet0GZlLNb8/xPshChZe4v520csdJMWiy3vYeKrk8LxMSViAGhmhYK2a5NbGhzI=,iv:/9vePmvCNqoP0kx24fP3HfCjS2FkjBmI5B+SycvKKW4=,tag:gE1/DnLolwhoyfMJYejGIQ==,type:str] + unencrypted_suffix: _unencrypted + version: 3.12.2 diff --git a/modules/hosts/vega/config.nix b/modules/hosts/vega/config.nix new file mode 100644 index 0000000..d115df5 --- /dev/null +++ b/modules/hosts/vega/config.nix @@ -0,0 +1,56 @@ +{ config, ... }: +{ + flake.modules.nixOnDroid.vega = + { + pkgs, + userEmail, + ... + }: + { + imports = with config.flake.modules.nixOnDroid; [ + networking + ]; + + # @TODO: Broken currently + # android-integration.am.enable = true; + # android-integration.termux-open-url.enable = true; + # android-integration.xdg-open.enable = true; + # android-integration.termux-setup-storage.enable = true; + # android-integration.termux-reload-settings.enable = true; + + terminal.font = + let + firacode = pkgs.nerd-fonts.fira-code; + fontPath = "share/fonts/truetype/NerdFonts/FiraCode/FiraCodeNerdFont-Regular.ttf"; + in + "${firacode}/${fontPath}"; + + time.timeZone = "Asia/Kolkata"; + + tnix.networking.openssh = { + enable = true; + ports = [ 8033 ]; + authorizedKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${userEmail}" + ]; + }; + + user = { + uid = 10481; + gid = 10481; + shell = "${pkgs.zsh}/bin/zsh"; + }; + + environment.etcBackupExtension = ".backup"; + environment.motd = ""; + environment.packages = with pkgs; [ + ncurses + procps + util-linux + rsync + gnutar + ]; + + system.stateVersion = "24.05"; + }; +} diff --git a/modules/hosts/vega/home.nix b/modules/hosts/vega/home.nix new file mode 100644 index 0000000..8d219c1 --- /dev/null +++ b/modules/hosts/vega/home.nix @@ -0,0 +1,9 @@ +{ lib, ... }: +{ + flake.modules.homeManager.vega = { + # @TODO: Broken currently - By default it's enabled by neovim module + programs.vim.enable = lib.mkForce false; + + home.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/vps/config.nix b/modules/hosts/vps/config.nix new file mode 100644 index 0000000..ac29c61 --- /dev/null +++ b/modules/hosts/vps/config.nix @@ -0,0 +1,50 @@ +{ config, ... }: +{ + flake.modules.nixos.vps = + { + hostName, + ... + }: + { + imports = with config.flake.modules.nixos; [ + boot + networking + virtualisation + services + ]; + + tnix = { + boot = { + legacy.enable = true; + + impermanence = { + enable = true; + + home = { + directories = [ + ".local/share/nvim" + ".local/share/zsh" + ".local/share/zoxide" + ".local/state/lazygit" + ]; + }; + }; + }; + + networking.openssh.enable = true; + + virtualisation = { + docker.enable = true; + }; + }; + + # --- Networking --- + networking = { + hostName = hostName; + networkmanager.enable = true; + firewall.enable = false; + }; + + system.stateVersion = "26.05"; + }; +} diff --git a/modules/hosts/vps/disko.nix b/modules/hosts/vps/disko.nix new file mode 100644 index 0000000..f6dccaa --- /dev/null +++ b/modules/hosts/vps/disko.nix @@ -0,0 +1,82 @@ +{ inputs, ... }: +{ + flake.modules.nixos.vps = + { config, lib, ... }: + let + hasOptinPersistence = config.tnix.boot.impermanence.enable; + isLegacy = config.tnix.boot.legacy.enable; + in + { + imports = [ + inputs.disko.nixosModules.disko + ]; + + disko.devices.disk.primary = { + device = "/dev/sda"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "1G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "defaults" + "umask=0077" + ]; + }; + }; + root = { + size = "100%"; + type = "8300"; + content = { + type = "btrfs"; + # Base subvolumes that always exist + subvolumes = { + "/root" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/"; + }; + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + "noacl" + "space_cache=v2" + ]; + mountpoint = "/nix"; + }; + } + # Conditionally merge /persist only when impermanence is enabled + // lib.optionalAttrs hasOptinPersistence { + "/persist" = { + mountOptions = [ + "compress=zstd" + "noatime" + "space_cache=v2" + ]; + mountpoint = "/persist"; + }; + }; + }; + }; + } + // lib.optionalAttrs isLegacy { + boot = { + name = "boot"; + size = "1M"; + type = "EF02"; + }; + }; + }; + }; + }; +} diff --git a/modules/hosts/vps/hardware.nix b/modules/hosts/vps/hardware.nix new file mode 100644 index 0000000..0dbbb22 --- /dev/null +++ b/modules/hosts/vps/hardware.nix @@ -0,0 +1,17 @@ +{ + flake.modules.nixos.vps = + { + lib, + modulesPath, + system, + ... + }: + { + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + networking.useDHCP = lib.mkDefault true; + nixpkgs.hostPlatform = lib.mkDefault system; + }; +} diff --git a/modules/hosts/vps/home.nix b/modules/hosts/vps/home.nix new file mode 100644 index 0000000..10ce823 --- /dev/null +++ b/modules/hosts/vps/home.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.vps = { + home.stateVersion = "26.05"; + }; +} diff --git a/modules/nixos/boot/impermanence.nix b/modules/nixos/boot/impermanence.nix new file mode 100644 index 0000000..46c97e1 --- /dev/null +++ b/modules/nixos/boot/impermanence.nix @@ -0,0 +1,122 @@ +{ inputs, ... }: +{ + flake.modules.nixos.boot = + { + config, + lib, + userName, + ... + }: + let + cfg = config.tnix.boot; + in + { + imports = [ + inputs.impermanence.nixosModules.impermanence + ]; + + options.tnix.boot.impermanence = { + enable = lib.mkEnableOption "Enable impermanence"; + + directories = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + }; + + files = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + }; + }; + + options.tnix.boot.impermanence.home = { + directories = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + }; + + files = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + }; + }; + + config = lib.mkIf cfg.impermanence.enable { + programs.fuse.userAllowOther = true; + fileSystems."/persist".neededForBoot = true; + environment.persistence."/persist" = { + hideMounts = true; + directories = [ + "/var/log" + "/var/lib" + "/etc/NetworkManager/system-connections" + ] + ++ cfg.impermanence.directories; + + files = [ + "/etc/machine-id" + "/etc/ssh/ssh_host_ed25519_key" + "/etc/ssh/ssh_host_ed25519_key.pub" + "/etc/ssh/ssh_host_rsa_key" + "/etc/ssh/ssh_host_rsa_key.pub" + ] + ++ cfg.impermanence.files; + }; + + home-manager.users.${userName} = { + home.persistence."/persist" = { + directories = [ + "Downloads" + "Music" + "Wallpapers" + "Documents" + "Videos" + "Projects" + "Stuff" + ".ssh" + ] + ++ cfg.impermanence.home.directories; + + files = cfg.impermanence.home.files; + }; + }; + + boot.initrd.systemd = { + enable = true; + + services.wipe-my-fs = { + wantedBy = [ "initrd.target" ]; + after = [ "initrd-root-device.target" ]; + before = [ "sysroot.mount" ]; + unitConfig.DefaultDependencies = "no"; + serviceConfig.Type = "oneshot"; + script = '' + mkdir /btrfs_tmp + mount /dev/disk/by-partlabel/disk-primary-root /btrfs_tmp + + if [[ -e /btrfs_tmp/root ]]; then + mkdir -p /btrfs_tmp/old_roots + timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") + mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" + fi + + delete_subvolume_recursively() { + IFS=$'\n' + for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do + delete_subvolume_recursively "/btrfs_tmp/$i" + done + btrfs subvolume delete "$1" + } + + for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do + delete_subvolume_recursively "$i" + done + + btrfs subvolume create /btrfs_tmp/root + umount /btrfs_tmp + ''; + }; + }; + }; + }; +} diff --git a/modules/nixos/boot/loader.nix b/modules/nixos/boot/loader.nix new file mode 100644 index 0000000..37081e7 --- /dev/null +++ b/modules/nixos/boot/loader.nix @@ -0,0 +1,31 @@ +{ + flake.modules.nixos.boot = + { config, lib, ... }: + let + cfg = config.tnix.boot; + in + { + options.tnix.boot.legacy = { + enable = lib.mkEnableOption "legacy boot (GRUB) instead of systemd-boot"; + }; + + config = lib.mkMerge [ + { + boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; + + boot.loader = { + timeout = 1; + efi.canTouchEfiVariables = true; + }; + } + + (lib.mkIf (!cfg.legacy.enable && !cfg.secure-boot.enable) { + boot.loader.systemd-boot.enable = true; + }) + + (lib.mkIf cfg.legacy.enable { + boot.loader.grub.enable = true; + }) + ]; + }; +} diff --git a/modules/nixos/boot/misc.nix b/modules/nixos/boot/misc.nix new file mode 100644 index 0000000..bec171b --- /dev/null +++ b/modules/nixos/boot/misc.nix @@ -0,0 +1,12 @@ +{ + flake.modules.nixos.boot = + { pkgs, ... }: + { + boot = { + consoleLogLevel = 0; + initrd.verbose = false; + kernelPackages = pkgs.linuxPackages_zen; + supportedFilesystems = [ "ntfs" ]; + }; + }; +} diff --git a/modules/nixos/boot/secure-boot.nix b/modules/nixos/boot/secure-boot.nix new file mode 100644 index 0000000..49065e7 --- /dev/null +++ b/modules/nixos/boot/secure-boot.nix @@ -0,0 +1,43 @@ +{ inputs, ... }: +{ + flake.modules.nixos.boot = + { + config, + lib, + pkgs, + ... + }: + let + cfg = config.tnix.boot; + in + { + imports = [ inputs.lanzaboote.nixosModules.lanzaboote ]; + + options.tnix.boot.secure-boot = { + enable = lib.mkEnableOption "Enable secure-boot"; + }; + + config = lib.mkIf cfg.secure-boot.enable { + assertions = [ + { + assertion = !cfg.legacy.enable; + message = "secure-boot and legacy boot (GRUB) cannot be enabled at the same time"; + } + ]; + + environment.systemPackages = [ pkgs.sbctl ]; + + # Lanzaboote replaces systemd-boot, so force it off + boot.loader.systemd-boot.enable = lib.mkForce false; + + boot.lanzaboote = { + enable = true; + autoGenerateKeys.enable = true; + autoEnrollKeys.enable = true; + + configurationLimit = 10; + pkiBundle = "/var/lib/sbctl"; + }; + }; + }; +} diff --git a/modules/nixos/core/hm.nix b/modules/nixos/core/hm.nix new file mode 100644 index 0000000..1f58bc1 --- /dev/null +++ b/modules/nixos/core/hm.nix @@ -0,0 +1,37 @@ +{ inputs, config, ... }: +{ + flake.modules.nixos.core = + { + hostName, + userName, + userEmail, + ... + }: + { + imports = [ + inputs.home-manager.nixosModules.home-manager + ]; + + home-manager = { + backupFileExtension = "bak"; + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { + inherit + inputs + hostName + userName + userEmail + ; + }; + + users.${userName} = { + imports = [ + config.flake.modules.homeManager.core + config.flake.modules.homeManager.shell + config.flake.modules.homeManager.${hostName} + ]; + }; + }; + }; +} diff --git a/modules/nixos/core/nh.nix b/modules/nixos/core/nh.nix new file mode 100644 index 0000000..5205e6d --- /dev/null +++ b/modules/nixos/core/nh.nix @@ -0,0 +1,20 @@ +{ + flake.modules.nixos.core = + { + config, + userName, + ... + }: + { + programs.nh = { + enable = true; + + clean = { + enable = !config.nix.gc.automatic; + dates = "weekly"; + }; + + flake = "/home/${userName}/Projects/nixos-config"; + }; + }; +} diff --git a/modules/nixos/core/nix-index.nix b/modules/nixos/core/nix-index.nix new file mode 100644 index 0000000..3c42155 --- /dev/null +++ b/modules/nixos/core/nix-index.nix @@ -0,0 +1,13 @@ +{ inputs, ... }: +{ + flake.modules.nixos.core = { pkgs, ... }: { + imports = [ + inputs.nix-index-database.nixosModules.default + ]; + + programs = { + nix-index.package = pkgs.nix-index-small; + nix-index-database.comma.enable = true; + }; + }; +} diff --git a/modules/nixos/core/nix.nix b/modules/nixos/core/nix.nix new file mode 100644 index 0000000..465c37c --- /dev/null +++ b/modules/nixos/core/nix.nix @@ -0,0 +1,88 @@ +{ + flake.modules.nixos.core = + { userName, ... }: + { + nix = { + channel.enable = false; + + gc = { + automatic = true; + options = "--delete-older-than 7d"; + dates = "weekly"; + persistent = true; + }; + + optimise.automatic = true; + + settings = { + extra-platforms = [ + "aarch64-linux" + "arm-linux" + ]; + + experimental-features = [ + "nix-command" + "flakes" + ]; + + max-jobs = "auto"; + + # Make legacy nix commands use the XDG base directories instead of creating directories in $HOME. + use-xdg-base-directories = true; + + # The maximum number of parallel TCP connections used to fetch files from binary caches and by other downloads. + # It defaults to 25. 0 means no limit. + http-connections = 128; + + # This option defines the maximum number of substitution jobs that Nix will try to run in + # parallel. The default is 16. The minimum value one can choose is 1 and lower values will be + # interpreted as 1. + max-substitution-jobs = 128; + + # The number of lines of the tail of the log to show if a build fails. + log-lines = 25; + + # When free disk space in /nix/store drops below min-free during a build, Nix performs a + # garbage-collection until max-free bytes are available or there is no more garbage. + # A value of 0 (the default) disables this feature. + min-free = 128000000; # 128 MB + max-free = 1000000000; # 1 GB + + # Prevent garbage collection from altering nix-shells managed by nix-direnv + # https://github.com/nix-community/nix-direnv#installation + keep-outputs = true; + keep-derivations = true; + + # If set to true, Nix will keep building derivations even if some fail. The default is false. + keep-going = true; + + # Automatically detect files in the store that have identical contents, and replaces + # them with hard links to a single copy. This saves disk space. + auto-optimise-store = true; + + # Whether to warn about dirty Git/Mercurial trees. + warn-dirty = false; + + # The timeout (in seconds) for establishing connections in the binary cache substituter. + # It corresponds to curl’s –connect-timeout option. A value of 0 means no limit. + connect-timeout = 5; + + # Allow the use of cachix + trusted-users = [ + "root" + "${userName}" + ]; + allowed-users = [ + "root" + "${userName}" + ]; + + builders-use-substitutes = true; + + # If set to true, Nix will fall back to building from source if a binary substitute + # fails. This is equivalent to the –fallback flag. The default is false. + fallback = true; + }; + }; + }; +} diff --git a/modules/nixos/core/nixpkgs.nix b/modules/nixos/core/nixpkgs.nix new file mode 100644 index 0000000..ba594b6 --- /dev/null +++ b/modules/nixos/core/nixpkgs.nix @@ -0,0 +1,12 @@ +{ inputs, ... }: +{ + flake.modules.nixos.core = { + nixpkgs = { + config = { + allowUnfree = true; + joypixels.acceptLicense = true; + }; + overlays = builtins.attrValues inputs.self.overlays; + }; + }; +} diff --git a/modules/nixos/core/security.nix b/modules/nixos/core/security.nix new file mode 100644 index 0000000..12da9af --- /dev/null +++ b/modules/nixos/core/security.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixos.core = { + security = { + sudo.wheelNeedsPassword = false; + }; + }; +} diff --git a/modules/nixos/core/sops.nix b/modules/nixos/core/sops.nix new file mode 100644 index 0000000..a3cb3f8 --- /dev/null +++ b/modules/nixos/core/sops.nix @@ -0,0 +1,25 @@ +{ inputs, ... }: +{ + flake.modules.nixos.core = + { + config, + pkgs, + ... + }: + let + isEd25519 = k: k.type == "ed25519"; + getKeyPath = k: k.path; + keys = builtins.filter isEd25519 config.services.openssh.hostKeys; + in + { + imports = [ inputs.sops-nix.nixosModules.sops ]; + + sops.age = { + sshKeyPaths = map getKeyPath keys; + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = true; + }; + + environment.systemPackages = with pkgs; [ sops ]; + }; +} diff --git a/modules/nixos/core/substituters.nix b/modules/nixos/core/substituters.nix new file mode 100644 index 0000000..360a53b --- /dev/null +++ b/modules/nixos/core/substituters.nix @@ -0,0 +1,38 @@ +{ + flake.modules.nixos.core = { + nix.settings = { + substituters = [ + "https://cache.nixos.org?priority=10" + "https://anyrun.cachix.org" + "https://fufexan.cachix.org" + "https://helix.cachix.org" + "https://hyprland.cachix.org" + "https://nix-community.cachix.org" + "https://nix-gaming.cachix.org" + "https://yazi.cachix.org" + "https://nix-on-droid.cachix.org" + "https://lan-mouse.cachix.org" + "https://wezterm.cachix.org" + "https://cache.nixos-cuda.org" + ]; + trusted-substituters = [ + "https://nix-on-droid.cachix.org" + "https://hyprland.cachix.org" + ]; + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + "fufexan.cachix.org-1:LwCDjCJNJQf5XD2BV+yamQIMZfcKWR9ISIFy5curUsY=" + "helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs=" + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" + "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" + "nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU=" + "lan-mouse.cachix.org-1:KlE2AEZUgkzNKM7BIzMQo8w9yJYqUpor1CAUNRY6OyM=" + "wezterm.cachix.org-1:kAbhjYUC9qvblTE+s7S+kl5XM1zVa4skO+E/1IDWdH0=" + "cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M=" + ]; + }; + }; +} diff --git a/modules/nixos/core/users.nix b/modules/nixos/core/users.nix new file mode 100644 index 0000000..92719d7 --- /dev/null +++ b/modules/nixos/core/users.nix @@ -0,0 +1,51 @@ +{ + flake.modules.nixos.core = + { + pkgs, + lib, + config, + userName, + userEmail, + ... + }: + let + hasPasswordSecret = lib.hasAttrByPath [ "sops" "secrets" "tux-password" ] config; + in + { + programs.zsh.enable = true; + + time.timeZone = "Asia/Kolkata"; + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = lib.genAttrs [ + "LC_ADDRESS" + "LC_IDENTIFICATION" + "LC_MEASUREMENT" + "LC_MONETARY" + "LC_NAME" + "LC_NUMERIC" + "LC_PAPER" + "LC_TELEPHONE" + "LC_TIME" + ] (_: "en_IN"); + }; + + users = { + mutableUsers = false; + defaultUserShell = pkgs.zsh; + users.${userName} = { + hashedPasswordFile = lib.mkIf hasPasswordSecret config.sops.secrets.tux-password.path; + initialPassword = lib.mkIf (!hasPasswordSecret) userName; + isNormalUser = true; + extraGroups = [ + "networkmanager" + "wheel" + "storage" + ]; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+OzPUe2ECPC929DqpkM39tl/vdNAXfsRnmrGfR+X3D ${userEmail}" + ]; + }; + }; + }; +} diff --git a/modules/nixos/desktop/awesome/default.nix b/modules/nixos/desktop/awesome/default.nix deleted file mode 100755 index d79543e..0000000 --- a/modules/nixos/desktop/awesome/default.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - services = { - displayManager = { - defaultSession = "none+awesome"; - ly = { - enable = true; - settings = { - session_log = "null"; - }; - }; - }; - - xserver = { - enable = true; - windowManager.awesome = { - enable = true; - luaModules = lib.attrValues { - inherit - (pkgs.luajitPackages) - lgi - ldbus - luadbi-mysql - luaposix - dkjson - ; - }; - }; - }; - - acpid.enable = true; - picom.enable = true; - upower.enable = true; - blueman.enable = true; - }; - - programs.dconf.enable = true; - - environment.systemPackages = with pkgs; [ - luajit - acpi - linuxKernel.packages.linux_zen.acpi_call - lxappearance - inotify-tools - polkit_gnome - xdotool - xclip - xbacklight - gpick - alsa-utils - pavucontrol - brightnessctl - libnotify - feh - maim - mpdris2 - python311Packages.mutagen - xdg-utils - playerctl - pulsemixer - easyeffects - procps - sct - slop - sddm-sugar-dark - ]; -} diff --git a/modules/nixos/desktop/brave.nix b/modules/nixos/desktop/brave.nix new file mode 100644 index 0000000..2baa7bd --- /dev/null +++ b/modules/nixos/desktop/brave.nix @@ -0,0 +1,13 @@ +{ + flake.modules.nixos.desktop = { + environment.etc."/brave/policies/managed/brave-policies.json".text = builtins.toJSON { + TorDisabled = true; + BraveAIChatEnabled = false; + BraveRewardsDisabled = true; + BraveWalletDisabled = true; + BraveVPNDisabled = true; + BraveNewsDisabled = true; + BraveTalkDisabled = true; + }; + }; +} diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix deleted file mode 100644 index b62351a..0000000 --- a/modules/nixos/desktop/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{pkgs, ...}: { - services = { - displayManager = { - defaultSession = "none+awesome"; - ly = { - enable = true; - settings = { - session_log = "null"; - }; - }; - }; - - acpid.enable = true; - picom.enable = true; - upower.enable = true; - blueman.enable = true; - }; - - programs.dconf.enable = true; - - xdg.mime = { - enable = true; - defaultApplications = { - "application/pdf" = ["brave-browser.desktop"]; - "text/html" = ["brave-browser.desktop"]; - "x-scheme-handler/http" = ["brave-browser.desktop"]; - "x-scheme-handler/https" = ["brave-browser.desktop"]; - "x-scheme-handler/about" = ["brave-browser.desktop"]; - "x-scheme-handler/unknown" = ["brave-browser.desktop"]; - }; - }; - - environment.systemPackages = with pkgs; [ - acpi - linuxKernel.packages.linux_zen.acpi_call - inotify-tools - polkit_gnome - xdotool - xclip - xbacklight - gpick - alsa-utils - pavucontrol - brightnessctl - libnotify - feh - maim - mpdris2 - xdg-utils - playerctl - pulsemixer - easyeffects - procps - ]; -} diff --git a/modules/nixos/desktop/font.nix b/modules/nixos/desktop/font.nix new file mode 100644 index 0000000..05a42f0 --- /dev/null +++ b/modules/nixos/desktop/font.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + fonts.packages = with pkgs.nerd-fonts; [ + fira-code + jetbrains-mono + bigblue-terminal + ]; + }; +} diff --git a/modules/nixos/desktop/gpu-screen-recorder.nix b/modules/nixos/desktop/gpu-screen-recorder.nix new file mode 100644 index 0000000..5289b79 --- /dev/null +++ b/modules/nixos/desktop/gpu-screen-recorder.nix @@ -0,0 +1,13 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + programs.gpu-screen-recorder = { + enable = true; + }; + + environment.systemPackages = with pkgs; [ + gpu-screen-recorder-gtk + ]; + }; +} diff --git a/modules/nixos/desktop/hyprland.nix b/modules/nixos/desktop/hyprland.nix new file mode 100644 index 0000000..e07c0e8 --- /dev/null +++ b/modules/nixos/desktop/hyprland.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + programs.hyprland = { + enable = true; + package = pkgs.hyprland-git.hyprland; + portalPackage = pkgs.hyprland-git.xdg-desktop-portal-hyprland; + }; + }; +} diff --git a/modules/nixos/desktop/hyprland/default.nix b/modules/nixos/desktop/hyprland/default.nix deleted file mode 100644 index 13b3756..0000000 --- a/modules/nixos/desktop/hyprland/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{pkgs, ...}: { - programs.hyprland = { - enable = true; - package = pkgs.hyprland-git.hyprland; - portalPackage = pkgs.hyprland-git.xdg-desktop-portal-hyprland; - }; - - environment.systemPackages = [ - (pkgs.writeShellScriptBin "mirror-display" '' - hyprctl keyword monitor "eDP-1,2560x1440@90,0x0,1" \ - && hyprctl keyword monitor "HDMI-A-1,preferred,0x0,1,mirror,eDP-1" \ - && ags quit \ - && ${pkgs.tpanel}/bin/tpanel & - '') - (pkgs.writeShellScriptBin "extend-display" '' - hyprctl keyword monitor "eDP-1,2560x1440@90,0x0,1" \ - && hyprctl keyword monitor "HDMI-A-1,preferred,0x-1440,1" \ - && ags quit \ - && ${pkgs.tpanel}/bin/tpanel & - '') - (pkgs.writeShellScriptBin "dock-display" '' - hyprctl keyword monitor "eDP-1,disable" \ - && hyprctl keyword monitor "HDMI-A-1,preferred,0x0,1" \ - && ags quit \ - && ${pkgs.tpanel}/bin/tpanel & - '') - ]; -} diff --git a/modules/nixos/desktop/ly.nix b/modules/nixos/desktop/ly.nix new file mode 100644 index 0000000..feea59e --- /dev/null +++ b/modules/nixos/desktop/ly.nix @@ -0,0 +1,10 @@ +{ + flake.modules.nixos.desktop = { + services.displayManager.ly = { + enable = true; + settings = { + session_log = "null"; + }; + }; + }; +} diff --git a/modules/nixos/desktop/mango.nix b/modules/nixos/desktop/mango.nix new file mode 100644 index 0000000..4e6fc4d --- /dev/null +++ b/modules/nixos/desktop/mango.nix @@ -0,0 +1,36 @@ +{ + inputs, + ... +}: +{ + flake.modules.nixos.desktop = + { + pkgs, + lib, + ... + }: + { + imports = [ + inputs.mango.nixosModules.mango + ]; + + programs.mango.enable = true; + + xdg.portal = { + enable = lib.mkDefault true; + extraPortals = with pkgs; [ + hyprland-git.xdg-desktop-portal-hyprland + xdg-desktop-portal-wlr + xdg-desktop-portal-gtk + ]; + config.mango = { + default = lib.mkForce [ + "hyprland" + "gtk" + ]; + "org.freedesktop.impl.portal.ScreenCast" = lib.mkForce [ "hyprland" ]; + "org.freedesktop.impl.portal.ScreenShot" = lib.mkForce [ "hyprland" ]; + }; + }; + }; +} diff --git a/modules/nixos/desktop/mango/default.nix b/modules/nixos/desktop/mango/default.nix deleted file mode 100644 index 120de56..0000000 --- a/modules/nixos/desktop/mango/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - inputs, - pkgs, - lib, - ... -}: { - imports = [ - inputs.mango.nixosModules.mango - ]; - - programs.mango.enable = true; - - xdg.portal = { - enable = lib.mkDefault true; - extraPortals = with pkgs; [ - hyprland-git.xdg-desktop-portal-hyprland - xdg-desktop-portal-wlr - xdg-desktop-portal-gtk - ]; - config.mango = { - default = lib.mkForce ["hyprland" "gtk"]; - "org.freedesktop.impl.portal.ScreenCast" = lib.mkForce ["hyprland"]; - "org.freedesktop.impl.portal.ScreenShot" = lib.mkForce ["hyprland"]; - }; - }; -} diff --git a/modules/nixos/desktop/misc.nix b/modules/nixos/desktop/misc.nix new file mode 100644 index 0000000..c0787e1 --- /dev/null +++ b/modules/nixos/desktop/misc.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ brightnessctl ]; + }; +} diff --git a/modules/nixos/desktop/obs-studio.nix b/modules/nixos/desktop/obs-studio.nix new file mode 100644 index 0000000..1eef51f --- /dev/null +++ b/modules/nixos/desktop/obs-studio.nix @@ -0,0 +1,15 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + programs.obs-studio = { + enable = true; + enableVirtualCamera = true; + plugins = with pkgs.obs-studio-plugins; [ + obs-vaapi + wlrobs + obs-source-record + ]; + }; + }; +} diff --git a/modules/nixos/desktop/thunar.nix b/modules/nixos/desktop/thunar.nix new file mode 100644 index 0000000..91615ff --- /dev/null +++ b/modules/nixos/desktop/thunar.nix @@ -0,0 +1,18 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + services = { + gvfs.enable = true; + tumbler.enable = true; + }; + + programs.thunar = { + enable = true; + plugins = with pkgs; [ + thunar-archive-plugin + thunar-volman + ]; + }; + }; +} diff --git a/modules/nixos/desktop/tshell.nix b/modules/nixos/desktop/tshell.nix new file mode 100644 index 0000000..83b65ac --- /dev/null +++ b/modules/nixos/desktop/tshell.nix @@ -0,0 +1,7 @@ +{ + flake.modules.nixos.desktop = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ tshell ]; + }; +} diff --git a/modules/nixos/distrobox.nix b/modules/nixos/distrobox.nix deleted file mode 100644 index 8d3f74e..0000000 --- a/modules/nixos/distrobox.nix +++ /dev/null @@ -1,112 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -with lib; let - cfg = config.tux.packages.distrobox; -in { - options.tux.packages.distrobox = { - enable = mkEnableOption "Enable DistroBox"; - }; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - distrobox - - (writeShellScriptBin "dbox-create" '' - #!/usr/bin/env bash - - # 1. Initialize variables - IMAGE="" - NAME="" - - # Array to hold optional arguments (like volumes) - declare -a EXTRA_ARGS - - # 2. Parse arguments - while [[ $# -gt 0 ]]; do - case $1 in - -i|--image) - IMAGE="$2" - shift 2 - ;; - -n|--name) - NAME="$2" - shift 2 - ;; - -p|--profile) - echo ":: Profile mode enabled: Mounting Nix store and user profiles (Read-Only)" - # Add volume flags to the array - EXTRA_ARGS+=( "--volume" "/nix/store:/nix/store:ro" ) - EXTRA_ARGS+=( "--volume" "/etc/profiles/per-user:/etc/profiles/per-user:ro" ) - EXTRA_ARGS+=( "--volume" "/etc/static/profiles/per-user:/etc/static/profiles/per-user:ro" ) - shift 1 - ;; - *) - echo "Unknown option $1" - exit 1 - ;; - esac - done - - if [ -z "$IMAGE" ] || [ -z "$NAME" ]; then - echo "Usage: dbox-create -i -n [-p]" - exit 1 - fi - - # 3. Define the custom home path - CUSTOM_HOME="$HOME/Distrobox/$NAME" - - echo "------------------------------------------------" - echo "Creating Distrobox: $NAME" - echo "Location: $CUSTOM_HOME" - echo "------------------------------------------------" - - # 4. Run Distrobox Create - # We expand "''${EXTRA_ARGS[@]}" to properly pass the volume arguments - ${pkgs.distrobox}/bin/distrobox create \ - --image "$IMAGE" \ - --name "$NAME" \ - --home "$CUSTOM_HOME" \ - "''${EXTRA_ARGS[@]}" - - # Check exit code - if [ $? -ne 0 ]; then - echo "Error: Distrobox creation failed." - exit 1 - fi - - # 5. Post-Creation: Symlink Config Files - echo "--> Linking configurations to $NAME..." - - # Helper function to symlink - link_config() { - SRC="$1" - DEST="$2" - DEST_DIR=$(dirname "$DEST") - - # Create parent directory if it doesn't exist - mkdir -p "$DEST_DIR" - - if [ -e "$SRC" ]; then - # ln -sf: symbolic link, force overwrite - ln -sf "$SRC" "$DEST" - echo " [LINK] $DEST -> $SRC" - else - echo " [SKIP] $SRC not found on host" - fi - } - - # Create Symlinks - link_config "$HOME/.zshrc" "$CUSTOM_HOME/.zshrc" - link_config "$HOME/.zshenv" "$CUSTOM_HOME/.zshenv" - link_config "$HOME/.config/fastfetch" "$CUSTOM_HOME/.config/fastfetch" - link_config "$HOME/.config/starship.toml" "$CUSTOM_HOME/.config/starship.toml" - - echo "--> Done! Enter via: distrobox enter $NAME" - '') - ]; - }; -} diff --git a/modules/nixos/fail2ban.nix b/modules/nixos/fail2ban.nix deleted file mode 100644 index 802e938..0000000 --- a/modules/nixos/fail2ban.nix +++ /dev/null @@ -1,32 +0,0 @@ -{config, ...}: let - isFirewallEnabled = config.networking.firewall.enable; -in { - services.fail2ban = { - enable = isFirewallEnabled; - maxretry = 5; - banaction = "iptables-multiport[blocktype=DROP]"; - ignoreIP = [ - "127.0.0.0/8" - "10.0.0.0/8" - "192.168.0.0/16" - ]; - bantime = "24h"; - - bantime-increment = { - enable = true; - rndtime = "12m"; - overalljails = true; - multipliers = "4 8 16 32 64 128 256 512 1024 2048"; - maxtime = "192h"; - }; - - jails = { - sshd.settings = { - enabled = true; - port = toString config.services.openssh.ports; - mode = "aggressive"; - filter = "sshd"; - }; - }; - }; -} diff --git a/modules/nixos/gaming/steam.nix b/modules/nixos/gaming/steam.nix new file mode 100644 index 0000000..bce53b3 --- /dev/null +++ b/modules/nixos/gaming/steam.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixos.gaming = + { pkgs, ... }: + { + programs.steam = { + enable = true; + protontricks.enable = true; + extraCompatPackages = with pkgs; [ proton-ge-bin ]; + }; + }; +} diff --git a/modules/nixos/hardware/audio.nix b/modules/nixos/hardware/audio.nix new file mode 100644 index 0000000..13bb453 --- /dev/null +++ b/modules/nixos/hardware/audio.nix @@ -0,0 +1,18 @@ +{ + flake.modules.nixos.hardware = { pkgs, ... }: { + security.rtkit.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + wireplumber.enable = true; + }; + + environment.systemPackages = with pkgs; [ + alsa-utils + pavucontrol + ]; + }; +} diff --git a/modules/nixos/hardware/bluetooth.nix b/modules/nixos/hardware/bluetooth.nix new file mode 100644 index 0000000..1f58530 --- /dev/null +++ b/modules/nixos/hardware/bluetooth.nix @@ -0,0 +1,11 @@ +{ + flake.modules.nixos.hardware = { pkgs, ... }: { + hardware.bluetooth = { + enable = true; + }; + + environment.systemPackages = [ + pkgs.bluetui + ]; + }; +} diff --git a/modules/nixos/hardware/graphics.nix b/modules/nixos/hardware/graphics.nix new file mode 100644 index 0000000..312b007 --- /dev/null +++ b/modules/nixos/hardware/graphics.nix @@ -0,0 +1,13 @@ +{ + flake.modules.nixos.hardware = { + hardware = { + graphics = { + enable = true; + enable32Bit = true; + }; + + enableAllFirmware = true; + usb-modeswitch.enable = true; + }; + }; +} diff --git a/modules/nixos/networking/netbird-client.nix b/modules/nixos/networking/netbird-client.nix new file mode 100644 index 0000000..ed3e480 --- /dev/null +++ b/modules/nixos/networking/netbird-client.nix @@ -0,0 +1,31 @@ +{ + flake.modules.nixos.networking = + { + config, + lib, + hostName, + ... + }: + with lib; + let + cfg = config.tnix.networking.netbird-client; + in + { + options.tnix.networking.netbird-client = { + enable = mkEnableOption "Enable netbird client"; + }; + + config = mkIf cfg.enable { + services.netbird.clients = { + ${hostName} = { + port = 61820; + login = { + enable = true; + setupKeyFile = config.sops.secrets.netbird-key.path; + }; + bin.suffix = ""; + }; + }; + }; + }; +} diff --git a/modules/nixos/networking/newt.nix b/modules/nixos/networking/newt.nix new file mode 100644 index 0000000..82fa749 --- /dev/null +++ b/modules/nixos/networking/newt.nix @@ -0,0 +1,30 @@ +{ + flake.modules.nixos.networking = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.networking.newt; + in + { + options.tnix.networking.newt = { + enable = mkEnableOption "Newt"; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = "Environment file with secrets passed to Newt"; + }; + }; + + config = mkIf cfg.enable { + services.newt = { + enable = true; + environmentFile = cfg.environmentFile; + }; + }; + }; +} diff --git a/modules/nixos/networking/ssh.nix b/modules/nixos/networking/ssh.nix index 4914000..27240a5 100644 --- a/modules/nixos/networking/ssh.nix +++ b/modules/nixos/networking/ssh.nix @@ -1,69 +1,76 @@ { - config, - lib, - ... -}: -with lib; let - cfg = config.tux.services.openssh; + flake.modules.nixos.networking = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.networking.openssh; - # Sops needs acess to the keys before the persist dirs are even mounted; so - # just persisting the keys won't work, we must point at /persist - hasOptinPersistence = config.environment.persistence."/persist".enable; -in { - options.tux.services.openssh = { - enable = mkEnableOption "Enable OpenSSH server"; + # Sops needs acess to the keys before the persist dirs are even mounted; so + # just persisting the keys won't work, we must point at /persist + hasOptinPersistence = config.tnix.boot.impermanence.enable; + in + { + options.tnix.networking.openssh = { + enable = mkEnableOption "Enable OpenSSH server"; - ports = mkOption { - type = types.listOf types.port; - default = [22]; - description = '' - Specifies on which ports the SSH daemon listens. - ''; - }; - }; - - config = mkIf cfg.enable { - services.openssh = { - enable = true; - startWhenNeeded = true; - allowSFTP = true; - ports = cfg.ports; - - settings = { - PermitRootLogin = "no"; - PasswordAuthentication = false; - KbdInteractiveAuthentication = false; - AuthenticationMethods = "publickey"; - PubkeyAuthentication = "yes"; - ChallengeResponseAuthentication = "no"; - UsePAM = false; - UseDns = false; - X11Forwarding = false; - KexAlgorithms = [ - "curve25519-sha256" - "curve25519-sha256@libssh.org" - "diffie-hellman-group16-sha512" - "diffie-hellman-group18-sha512" - "sntrup761x25519-sha512@openssh.com" - "diffie-hellman-group-exchange-sha256" - "mlkem768x25519-sha256" - "sntrup761x25519-sha512" - ]; - Macs = [ - "hmac-sha2-512-etm@openssh.com" - "hmac-sha2-256-etm@openssh.com" - "umac-128-etm@openssh.com" - ]; - ClientAliveCountMax = 5; - ClientAliveInterval = 60; + ports = mkOption { + type = types.listOf types.port; + default = [ 22 ]; + description = '' + Specifies on which ports the SSH daemon listens. + ''; + }; }; - hostKeys = [ - { - path = "${lib.optionalString hasOptinPersistence "/persist"}/etc/ssh/ssh_host_ed25519_key"; - type = "ed25519"; - } - ]; + config = mkIf cfg.enable { + programs.ssh.startAgent = true; + + services.openssh = { + enable = true; + startWhenNeeded = true; + allowSFTP = true; + ports = cfg.ports; + + settings = { + PermitRootLogin = "no"; + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + AuthenticationMethods = "publickey"; + PubkeyAuthentication = "yes"; + ChallengeResponseAuthentication = "no"; + UsePAM = false; + UseDns = false; + X11Forwarding = false; + KexAlgorithms = [ + "curve25519-sha256" + "curve25519-sha256@libssh.org" + "diffie-hellman-group16-sha512" + "diffie-hellman-group18-sha512" + "sntrup761x25519-sha512@openssh.com" + "diffie-hellman-group-exchange-sha256" + "mlkem768x25519-sha256" + "sntrup761x25519-sha512" + ]; + Macs = [ + "hmac-sha2-512-etm@openssh.com" + "hmac-sha2-256-etm@openssh.com" + "umac-128-etm@openssh.com" + ]; + ClientAliveCountMax = 5; + ClientAliveInterval = 60; + }; + + hostKeys = [ + { + path = "${lib.optionalString hasOptinPersistence "/persist"}/etc/ssh/ssh_host_ed25519_key"; + type = "ed25519"; + } + ]; + }; + }; }; - }; } diff --git a/modules/nixos/obs-studio.nix b/modules/nixos/obs-studio.nix deleted file mode 100644 index f4e745a..0000000 --- a/modules/nixos/obs-studio.nix +++ /dev/null @@ -1,7 +0,0 @@ -{pkgs, ...}: { - programs.obs-studio = { - enable = true; - enableVirtualCamera = true; - plugins = with pkgs.obs-studio-plugins; [obs-vaapi wlrobs obs-source-record]; - }; -} diff --git a/modules/nixos/selfhosted/adguard.nix b/modules/nixos/selfhosted/adguard.nix deleted file mode 100644 index b2a489c..0000000 --- a/modules/nixos/selfhosted/adguard.nix +++ /dev/null @@ -1,8 +0,0 @@ -{...}: { - services = { - adguardhome = { - enable = true; - openFirewall = true; - }; - }; -} diff --git a/modules/nixos/selfhosted/containers/aiostreams.nix b/modules/nixos/selfhosted/containers/aiostreams.nix deleted file mode 100644 index 6b429e8..0000000 --- a/modules/nixos/selfhosted/containers/aiostreams.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; let - cfg = config.tux.containers.aiostreams; -in { - options.tux.containers.aiostreams = { - enable = mkEnableOption "Enable AIOStreams"; - - port = mkOption { - type = types.int; - default = 3000; - }; - - dataDir = mkOption { - type = types.path; - default = "/var/lib/aiostreams"; - description = "Directory to store persistent AIOStreams data"; - }; - - environment = mkOption { - type = with types; attrsOf str; - default = {}; - }; - - environmentFiles = mkOption { - type = with types; listOf path; - default = []; - }; - }; - - config = mkIf cfg.enable { - virtualisation.oci-containers.containers.aiostreams = { - autoStart = true; - image = "ghcr.io/viren070/aiostreams:latest"; - ports = [ - "${toString cfg.port}:3000" - ]; - - environment = cfg.environment; - environmentFiles = cfg.environmentFiles; - volumes = [ - "${cfg.dataDir}:/app/data" - ]; - }; - - services.nginx.virtualHosts = { - "${cfg.environment.ADDON_ID}" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:${toString cfg.port}"; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/containers/cs2.nix b/modules/nixos/selfhosted/containers/cs2.nix deleted file mode 100644 index da5cb8e..0000000 --- a/modules/nixos/selfhosted/containers/cs2.nix +++ /dev/null @@ -1,61 +0,0 @@ -{config, ...}: { - virtualisation.oci-containers.containers.cs2-server = { - image = "joedwards32/cs2"; - environmentFiles = [ - config.sops.secrets."cs2_secrets/SRCDS_TOKEN".path - config.sops.secrets."cs2_secrets/CS2_RCONPW".path - config.sops.secrets."cs2_secrets/CS2_PW".path - ]; - - environment = { - # Server configuration - STEAMAPPVALIDATE = "0"; - CS2_SERVERNAME = "tux's CS-2 Server"; - CS2_CHEATS = "0"; - CS2_PORT = "27015"; - CS2_SERVER_HIBERNATE = "1"; - CS2_RCON_PORT = ""; - CS2_LAN = "0"; - CS2_MAXPLAYERS = "10"; - CS2_ADDITIONAL_ARGS = ""; - CS2_CFG_URL = ""; - # Game modes - CS2_GAMEALIAS = "competitive"; - CS2_GAMETYPE = "0"; - CS2_GAMEMODE = "1"; - CS2_MAPGROUP = "mg_active"; - CS2_STARTMAP = "de_mirage"; - # Workshop Maps - CS2_HOST_WORKSHOP_COLLECTION = ""; - CS2_HOST_WORKSHOP_MAP = ""; - # Bots - CS2_BOT_DIFFICULTY = "3"; - CS2_BOT_QUOTA = ""; - CS2_BOT_QUOTA_MODE = ""; - # TV - TV_AUTORECORD = "0"; - TV_ENABLE = "0"; - TV_PORT = "27020"; - TV_PW = "changeme"; - TV_RELAY_PW = "changeme"; - TV_MAXRATE = "0"; - TV_DELAY = "0"; - # Logs - CS2_LOG = "on"; - CS2_LOG_MONEY = "0"; - CS2_LOG_DETAIL = "0"; - CS2_LOG_ITEMS = "0"; - }; - volumes = [ - "cs2:/home/steam/cs2-dedicated" - ]; - ports = [ - "27015:27015/tcp" - "27015:27015/udp" - "27020:27020/udp" - ]; - extraOptions = [ - "--interactive" - ]; - }; -} diff --git a/modules/nixos/selfhosted/cyber-tux.nix b/modules/nixos/selfhosted/cyber-tux.nix deleted file mode 100644 index 5f3ebc2..0000000 --- a/modules/nixos/selfhosted/cyber-tux.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.tux.services.cyber-tux; -in { - options.tux.services.cyber-tux = { - enable = mkEnableOption "Enable CyberTux Discord bot"; - - user = mkOption { - type = types.str; - default = "cyber-tux"; - description = "User under which the CyberTux service runs."; - }; - - group = mkOption { - type = types.str; - default = "cyber-tux"; - description = "Group under which the CyberTux service runs."; - }; - - environmentFile = mkOption { - type = types.path; - description = "Environment file containing DISCORD_TOKEN"; - }; - }; - - config = mkIf cfg.enable { - systemd.services = { - cyber-tux = { - description = "A discord bot for my server"; - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - - serviceConfig = { - Type = "simple"; - User = "cyber-tux"; - Group = "cyber-tux"; - EnvironmentFile = cfg.environmentFile; - ExecStart = getExe pkgs.cyber-tux; - Restart = "always"; - - LockPersonality = true; - MemoryDenyWriteExecute = true; - NoNewPrivileges = true; - PrivateDevices = true; - PrivateIPC = true; - PrivateTmp = true; - PrivateUsers = true; - ProtectClock = true; - ProtectControlGroups = true; - ProtectHome = true; - ProtectHostname = true; - ProtectKernelLogs = true; - ProtectKernelModules = true; - ProtectKernelTunables = true; - ProtectProc = "invisible"; - ProtectSystem = "strict"; - RestrictNamespaces = "uts ipc pid user cgroup"; - RestrictRealtime = true; - RestrictSUIDSGID = true; - SystemCallArchitectures = "native"; - SystemCallFilter = ["@system-service"]; - UMask = "0077"; - }; - }; - }; - # Ensure the user and group exist - users.users = mkIf (cfg.user == "cyber-tux") { - ${cfg.user} = { - isSystemUser = true; - group = cfg.group; - description = "CyberTux service user"; - home = "/var/lib/cyber-tux"; - createHome = true; - }; - }; - - users.groups = mkIf (cfg.group == "cyber-tux") { - ${cfg.group} = {}; - }; - }; -} diff --git a/modules/nixos/selfhosted/gitea.nix b/modules/nixos/selfhosted/gitea.nix deleted file mode 100644 index 40c3e52..0000000 --- a/modules/nixos/selfhosted/gitea.nix +++ /dev/null @@ -1,29 +0,0 @@ -{lib, ...}: { - services = { - gitea = { - enable = true; - settings = { - service.DISABLE_REGISTRATION = true; - server = { - DOMAIN = "git.tux.rs"; - ROOT_URL = "https://git.tux.rs"; - }; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "git.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:3000"; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/glance/default.nix b/modules/nixos/selfhosted/glance/default.nix deleted file mode 100644 index b9bccb9..0000000 --- a/modules/nixos/selfhosted/glance/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - username, - lib, - config, - ... -}: let - home = import ./home.nix; -in { - services = { - glance = { - enable = true; - openFirewall = true; - settings = { - server = { - host = "0.0.0.0"; - port = 5678; - }; - branding = { - custom-footer = "

${username}

"; - }; - pages = [ - home.page - ]; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "home.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://${config.services.glance.settings.server.host}:${toString config.services.glance.settings.server.port}"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/glance/home.nix b/modules/nixos/selfhosted/glance/home.nix deleted file mode 100644 index 2b7bdb9..0000000 --- a/modules/nixos/selfhosted/glance/home.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - page = { - name = "Dashboard - tux"; - width = "slim"; - hide-desktop-navigation = true; - center-vertically = true; - columns = [ - { - size = "full"; - widgets = [ - { - type = "search"; - autofocus = true; - } - { - type = "markets"; - markets = [ - { - symbol = "BTC-USD"; - name = "Bitcoin"; - chart-link = "https://www.tradingview.com/chart/?symbol=INDEX:BTCUSD"; - } - { - symbol = "ETH-USD"; - name = "Ethereum"; - chart-link = "https://www.tradingview.com/chart/?symbol=INDEX:ETHUSD"; - } - { - symbol = "SOL-USD"; - name = "Solana"; - chart-link = "https://www.tradingview.com/chart/?symbol=INDEX:SOLUSD"; - } - ]; - } - { - type = "monitor"; - cache = "1m"; - title = "Services"; - sites = [ - { - title = "Gitea"; - url = "https://git.tux.rs"; - icon = "si:gitea"; - } - { - title = "Vaultwarden"; - url = "https://bw.tux.rs"; - icon = "si:vaultwarden"; - } - { - title = "Ntfy"; - url = "https://ntfy.tux.rs"; - icon = "si:ntfy"; - } - { - title = "Grafana"; - url = "https://grafana.tux.rs"; - icon = "si:grafana"; - } - { - title = "SearXNG"; - url = "https://sx.tux.rs"; - icon = "si:searxng"; - } - { - title = "Wakapi"; - url = "https://wakapi.tux.rs"; - icon = "si:wakatime"; - } - ]; - } - { - type = "reddit"; - subreddit = "selfhosted"; - style = "horizontal-cards"; - } - { - type = "reddit"; - subreddit = "homelab"; - style = "horizontal-cards"; - } - ]; - } - ]; - }; -} diff --git a/modules/nixos/selfhosted/headscale.nix b/modules/nixos/selfhosted/headscale.nix deleted file mode 100644 index 154c3e0..0000000 --- a/modules/nixos/selfhosted/headscale.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ - config, - pkgs, - lib, - email, - ... -}: { - security = { - acme = { - defaults.email = "${email}"; - acceptTerms = true; - }; - }; - - services = { - headscale = { - enable = true; - port = 8080; - address = "0.0.0.0"; - settings = { - dns = { - base_domain = "hs.tux.rs"; - search_domains = ["tux.rs"]; - magic_dns = true; - nameservers.global = [ - "9.9.9.9" - ]; - }; - # server_url = "https://hs.tux.rs:443"; - metrics_listen_addr = "0.0.0.0:8095"; - logtail = { - enabled = false; - }; - log = { - level = "warn"; - }; - ip_prefixes = [ - "100.64.0.0/10" - "fd7a:115c:a1e0::/48" - ]; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "hs.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:${toString config.services.headscale.port}"; - proxyWebsockets = true; - }; - "/metrics" = { - proxyPass = "http://${config.services.headscale.settings.metrics_listen_addr}/metrics"; - }; - }; - }; - }; - }; - }; - - environment.systemPackages = with pkgs; [headscale]; -} diff --git a/modules/nixos/selfhosted/kasmweb.nix b/modules/nixos/selfhosted/kasmweb.nix deleted file mode 100644 index a756a25..0000000 --- a/modules/nixos/selfhosted/kasmweb.nix +++ /dev/null @@ -1,24 +0,0 @@ -{lib, ...}: { - services = { - kasmweb = { - enable = true; - listenPort = 8843; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "kasm.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "https://127.0.0.1:8843"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/monitoring/grafana.nix b/modules/nixos/selfhosted/monitoring/grafana.nix deleted file mode 100644 index fc18920..0000000 --- a/modules/nixos/selfhosted/monitoring/grafana.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - lib, - username, - email, - ... -}: { - services = { - grafana = { - enable = true; - settings = { - server.http_port = 8888; - security = { - admin_user = "${username}"; - admin_email = "${email}"; - }; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "grafana.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:8888"; - proxyWebsockets = true; - }; - - "/api/live/" = { - proxyPass = "http://localhost:8888"; - extraConfig = '' - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - proxy_set_header Host $host; - ''; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/monitoring/loki.nix b/modules/nixos/selfhosted/monitoring/loki.nix deleted file mode 100644 index eadac07..0000000 --- a/modules/nixos/selfhosted/monitoring/loki.nix +++ /dev/null @@ -1,77 +0,0 @@ -{lib, ...}: { - services = { - loki = { - enable = true; - configuration = { - auth_enabled = false; - server = { - http_listen_port = 3100; - }; - common = { - ring = { - instance_addr = "127.0.0.1"; - kvstore = { - store = "inmemory"; - }; - }; - replication_factor = 1; - path_prefix = "/tmp/loki"; - }; - schema_config = { - configs = [ - { - from = "2020-05-15"; - store = "tsdb"; - object_store = "filesystem"; - schema = "v13"; - index = { - prefix = "index_"; - period = "24h"; - }; - } - ]; - }; - storage_config = { - filesystem = { - directory = "/tmp/loki/chunks"; - }; - }; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "loki.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:3100"; - extraConfig = '' - proxy_http_version 1.1; - proxy_read_timeout 1800s; - proxy_connect_timeout 1600s; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - proxy_set_header Connection "Keep-Alive"; - proxy_set_header Proxy-Connection "Keep-Alive"; - proxy_redirect off; - ''; - }; - - "/ready" = { - proxyPass = "http://localhost:3100"; - extraConfig = '' - proxy_http_version 1.1; - proxy_set_header Connection "Keep-Alive"; - proxy_set_header Proxy-Connection "Keep-Alive"; - proxy_redirect off; - ''; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/monitoring/promtail.nix b/modules/nixos/selfhosted/monitoring/promtail.nix deleted file mode 100644 index 4a31bbe..0000000 --- a/modules/nixos/selfhosted/monitoring/promtail.nix +++ /dev/null @@ -1,55 +0,0 @@ -{lib, ...}: { - services = { - promtail = { - enable = true; - configuration = { - server = { - http_listen_port = 9080; - grpc_listen_port = 0; - }; - positions = { - filename = "/var/lib/promtail/positions.yaml"; - }; - clients = [ - { - url = "https://loki.tux.rs/loki/api/v1/push"; - } - ]; - scrape_configs = [ - { - job_name = "journal"; - journal = { - max_age = "12h"; - labels = { - job = "systemd-journal"; - }; - }; - relabel_configs = [ - { - source_labels = [ - "__journal__systemd_unit" - ]; - target_label = "unit"; - } - ]; - } - ]; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "promtail.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:9080"; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/nextcloud.nix b/modules/nixos/selfhosted/nextcloud.nix deleted file mode 100644 index b2c0850..0000000 --- a/modules/nixos/selfhosted/nextcloud.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - config, - pkgs, - lib, - username, - ... -}: { - services = { - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "cloud.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - }; - }; - }; - - nextcloud = { - enable = true; - hostName = "cloud.tux.rs"; - package = pkgs.nextcloud32; - database.createLocally = true; - configureRedis = true; - maxUploadSize = "16G"; - https = true; - - autoUpdateApps.enable = true; - extraAppsEnable = true; - extraApps = with config.services.nextcloud.package.packages.apps; { - inherit mail spreed; - }; - - config = { - dbtype = "sqlite"; - adminuser = "${username}"; - adminpassFile = config.sops.secrets.nextcloud_password.path; - }; - - settings = { - overwriteProtocol = "https"; - default_phone_region = "IN"; - }; - }; - }; - - environment.systemPackages = with pkgs; [ - nextcloud32 - ]; -} diff --git a/modules/nixos/selfhosted/ntfy-sh.nix b/modules/nixos/selfhosted/ntfy-sh.nix deleted file mode 100644 index fcb19e1..0000000 --- a/modules/nixos/selfhosted/ntfy-sh.nix +++ /dev/null @@ -1,28 +0,0 @@ -{lib, ...}: { - services = { - ntfy-sh = { - enable = true; - settings = { - listen-http = ":7070"; - base-url = "https://ntfy.tux.rs"; - behind-proxy = true; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "ntfy.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:7070"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/open-webui.nix b/modules/nixos/selfhosted/open-webui.nix deleted file mode 100644 index ab69d7e..0000000 --- a/modules/nixos/selfhosted/open-webui.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - lib, - config, - ... -}: { - services = { - open-webui = { - enable = true; - openFirewall = true; - host = "0.0.0.0"; - port = 1111; - environment = { - WEBUI_URL = "https://chat.tux.rs"; - ENABLE_OLLAMA_API = "True"; - OLLAMA_BASE_URL = "http://pc:11434"; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "chat.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://${config.services.open-webui.host}:${toString config.services.open-webui.port}"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/plausible.nix b/modules/nixos/selfhosted/plausible.nix deleted file mode 100644 index 1f62556..0000000 --- a/modules/nixos/selfhosted/plausible.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - config, - lib, - ... -}: { - services = { - plausible = { - enable = true; - - server = { - baseUrl = "https://plausible.tux.rs"; - port = 2100; - disableRegistration = true; - secretKeybaseFile = config.sops.secrets.plausible_key.path; - }; - - database.postgres = { - dbname = "plausible"; - socket = "/run/postgresql"; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "plausible.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:2100"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/postgresql.nix b/modules/nixos/selfhosted/postgresql.nix deleted file mode 100644 index f79085b..0000000 --- a/modules/nixos/selfhosted/postgresql.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - services.postgresql = { - enable = true; - package = pkgs.postgresql_16; - - ensureDatabases = [ - "plausible" - "wakapi" - ]; - ensureUsers = [ - { - name = "postgres"; - ensureClauses = { - superuser = true; - login = true; - createrole = true; - createdb = true; - replication = true; - }; - } - { - name = "plausible"; - ensureDBOwnership = true; - } - { - name = "wakapi"; - ensureDBOwnership = true; - } - ]; - - checkConfig = true; - enableTCPIP = false; - - settings = { - max_connections = 100; - superuser_reserved_connections = 3; - - shared_buffers = "1024 MB"; - work_mem = "32 MB"; - maintenance_work_mem = "320 MB"; - huge_pages = "off"; - effective_cache_size = "3 GB"; - effective_io_concurrency = 100; - random_page_cost = 1.25; - - shared_preload_libraries = "pg_stat_statements"; - track_io_timing = "on"; - track_functions = "pl"; - - wal_level = "replica"; - max_wal_senders = 0; - synchronous_commit = "on"; - - checkpoint_timeout = "15 min"; - checkpoint_completion_target = 0.9; - max_wal_size = "1024 MB"; - min_wal_size = "512 MB"; - - wal_compression = "on"; - wal_buffers = -1; - wal_writer_delay = "200ms"; - wal_writer_flush_after = "1MB"; - - bgwriter_delay = "200ms"; - bgwriter_lru_maxpages = 100; - bgwriter_lru_multiplier = 2.0; - bgwriter_flush_after = 0; - - max_worker_processes = 3; - max_parallel_workers_per_gather = 2; - max_parallel_maintenance_workers = 2; - max_parallel_workers = 3; - parallel_leader_participation = "on"; - - enable_partitionwise_join = "on"; - enable_partitionwise_aggregate = "on"; - jit = "on"; - - jit_above_cost = 100000; - jit_inline_above_cost = 150000; - jit_optimize_above_cost = 500000; - - log_min_duration_statement = 100; - "auto_explain.log_min_duration" = 100; - - log_connections = true; - log_statement = "all"; - logging_collector = true; - log_disconnections = true; - log_destination = lib.mkForce "syslog"; - }; - }; -} diff --git a/modules/nixos/selfhosted/rustdesk-server.nix b/modules/nixos/selfhosted/rustdesk-server.nix deleted file mode 100644 index 4a85453..0000000 --- a/modules/nixos/selfhosted/rustdesk-server.nix +++ /dev/null @@ -1,9 +0,0 @@ -{...}: { - services = { - rustdesk-server = { - enable = true; - openFirewall = true; - signal.relayHosts = ["156.67.105.203"]; - }; - }; -} diff --git a/modules/nixos/selfhosted/searx.nix b/modules/nixos/selfhosted/searx.nix deleted file mode 100644 index aa89895..0000000 --- a/modules/nixos/selfhosted/searx.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: { - services = { - searx = { - enable = true; - package = pkgs.searxng; - environmentFile = config.sops.secrets.searx_secret_key.path; - settings = { - general = { - instance_name = "SearXNG"; - }; - server = { - bind_address = "0.0.0.0"; - port = 3415; - base_url = "https://sx.tux.rs"; - secret_key = "@secret_key@"; - }; - search = { - autocomplete = "google"; - }; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "sx.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:3415"; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/send.nix b/modules/nixos/selfhosted/send.nix deleted file mode 100644 index 093a993..0000000 --- a/modules/nixos/selfhosted/send.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - lib, - config, - ... -}: { - services = { - send = { - enable = true; - port = 1443; - - environment = { - DEFAULT_DOWNLOADS = 5; - DETECT_BASE_URL = true; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "share.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://${config.services.send.host}:${toString config.services.send.port}"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/silver-bullet.nix b/modules/nixos/selfhosted/silver-bullet.nix deleted file mode 100644 index 89aae56..0000000 --- a/modules/nixos/selfhosted/silver-bullet.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - config, - ... -}: { - services = { - silverbullet = { - enable = true; - listenPort = 9876; - envFile = config.sops.secrets.silver_bullet.path; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "notes.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:9876"; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/tfolio.nix b/modules/nixos/selfhosted/tfolio.nix deleted file mode 100644 index 9669acf..0000000 --- a/modules/nixos/selfhosted/tfolio.nix +++ /dev/null @@ -1,102 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.tux.services.tfolio; -in { - options.tux.services.tfolio = { - enable = mkEnableOption "Enable tfolio"; - - host = mkOption { - type = lib.types.str; - default = "0.0.0.0"; - description = "IP address or hostname on which the tfolio service will listen."; - }; - - port = mkOption { - type = lib.types.port; - default = 22; - description = "Port number on which the tfolio service will listen."; - }; - - dataDir = mkOption { - type = lib.types.str; - default = "/var/lib/tfolio/"; - description = "Directory where tfolio will store its data files."; - }; - - user = mkOption { - type = types.str; - default = "tfolio"; - description = "User under which the tfolio service runs."; - }; - - group = mkOption { - type = types.str; - default = "tfolio"; - description = "Group under which the tfolio service runs."; - }; - }; - - config = mkIf cfg.enable { - systemd.services = { - tfolio = { - description = "my portfolio in a ssh session"; - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - - serviceConfig = { - Type = "simple"; - User = cfg.user; - Group = cfg.group; - ExecStart = "${getExe pkgs.tfolio} -l ${cfg.host} -p ${toString cfg.port} -d ${cfg.dataDir}"; - Restart = "always"; - StateDirectory = "tfolio"; - - # Allow binding to privileged ports - AmbientCapabilities = "CAP_NET_BIND_SERVICE"; - CapabilityBoundingSet = "CAP_NET_BIND_SERVICE"; - - LockPersonality = true; - MemoryDenyWriteExecute = true; - NoNewPrivileges = true; - PrivateDevices = true; - PrivateIPC = true; - PrivateTmp = true; - ProtectClock = true; - ProtectControlGroups = true; - ProtectHome = "read-only"; - ProtectHostname = true; - ProtectKernelLogs = true; - ProtectKernelModules = true; - ProtectKernelTunables = true; - ProtectProc = "invisible"; - ProtectSystem = "full"; - RestrictNamespaces = "uts ipc pid user cgroup"; - RestrictRealtime = true; - RestrictSUIDSGID = true; - SystemCallArchitectures = "native"; - SystemCallFilter = ["@system-service"]; - UMask = "0077"; - }; - }; - }; - # Ensure the user and group exist - users.users = mkIf (cfg.user == "tfolio") { - ${cfg.user} = { - isSystemUser = true; - group = cfg.group; - description = "tfolio service user"; - home = "/var/lib/tfolio"; - createHome = true; - }; - }; - - users.groups = mkIf (cfg.group == "tfolio") { - ${cfg.group} = {}; - }; - }; -} diff --git a/modules/nixos/selfhosted/umami.nix b/modules/nixos/selfhosted/umami.nix deleted file mode 100644 index 7f815f8..0000000 --- a/modules/nixos/selfhosted/umami.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - lib, - config, - ... -}: { - services = { - umami = { - enable = true; - settings = { - APP_SECRET_FILE = config.sops.secrets.umami.path; - PORT = 4645; - }; - createPostgresqlDatabase = true; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "umami.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:${toString config.services.umami.settings.PORT}"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/upstream-proxy.nix b/modules/nixos/selfhosted/upstream-proxy.nix deleted file mode 100644 index 7ca136e..0000000 --- a/modules/nixos/selfhosted/upstream-proxy.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - lib, - config, - pkgs, - ... -}: let - cfg = config.tux.services.nginxStreamProxy; - - upstreamServerType = lib.types.submodule ({config, ...}: { - options = { - address = lib.mkOption { - type = lib.types.str; - description = "IP address or hostname of the upstream server"; - }; - port = lib.mkOption { - type = lib.types.port; - default = 9999; - description = "Port number of the upstream server"; - }; - listenPort = lib.mkOption { - type = lib.types.port; - default = config.port; - defaultText = lib.literalExpression "port"; - description = "Local port to listen for incoming connections (defaults to port)"; - }; - }; - }); -in { - options.tux.services.nginxStreamProxy = { - enable = lib.mkEnableOption "Enable nginx TCP stream proxy"; - - upstreamServers = lib.mkOption { - type = lib.types.listOf upstreamServerType; - default = [ - { - address = "0.0.0.0"; - port = 9999; - } - ]; - description = "List of upstream servers to proxy to, each with its own listen port"; - }; - }; - - config = lib.mkIf cfg.enable { - networking.firewall.allowedTCPPorts = map (server: server.listenPort) cfg.upstreamServers; - - services.nginx = { - enable = lib.mkForce true; - package = pkgs.nginx.override {withStream = true;}; - streamConfig = - lib.concatMapStringsSep "\n" (server: '' - server { - listen ${toString server.listenPort}; - proxy_pass ${server.address}:${toString server.port}; - } - '') - cfg.upstreamServers; - }; - }; -} diff --git a/modules/nixos/selfhosted/uptime-kuma.nix b/modules/nixos/selfhosted/uptime-kuma.nix deleted file mode 100644 index ba33ffd..0000000 --- a/modules/nixos/selfhosted/uptime-kuma.nix +++ /dev/null @@ -1,22 +0,0 @@ -{lib, ...}: { - services = { - uptime-kuma = { - enable = true; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "uptime.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:3001"; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/vaultwarden.nix b/modules/nixos/selfhosted/vaultwarden.nix deleted file mode 100644 index d518e16..0000000 --- a/modules/nixos/selfhosted/vaultwarden.nix +++ /dev/null @@ -1,29 +0,0 @@ -{lib, ...}: { - services = { - vaultwarden = { - enable = true; - config = { - domain = "https://bw.tux.rs"; - enableWebsocket = true; - signupsAllowed = true; - disableIconDownload = true; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "bw.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:8000"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/selfhosted/wakapi.nix b/modules/nixos/selfhosted/wakapi.nix deleted file mode 100644 index 60e4a9a..0000000 --- a/modules/nixos/selfhosted/wakapi.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - lib, - config, - ... -}: { - services = { - wakapi = { - enable = true; - passwordSaltFile = config.sops.secrets.wakapi_salt.path; - database.createLocally = true; - settings = { - app.avatar_url_template = "https://www.gravatar.com/avatar/{email_hash}.png"; - - server = { - port = 15999; - public_url = "https://wakapi.tux.rs"; - }; - - db = { - dialect = "postgres"; - host = "/run/postgresql"; - port = 5432; - name = "wakapi"; - user = "wakapi"; - }; - - security = { - allow_signup = false; - disable_frontpage = true; - }; - }; - }; - - nginx = { - enable = lib.mkForce true; - virtualHosts = { - "wakapi.tux.rs" = { - forceSSL = true; - useACMEHost = "tux.rs"; - locations = { - "/" = { - proxyPass = "http://localhost:15999"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - }; -} diff --git a/modules/nixos/services/aiostreams.nix b/modules/nixos/services/aiostreams.nix new file mode 100644 index 0000000..64b60df --- /dev/null +++ b/modules/nixos/services/aiostreams.nix @@ -0,0 +1,127 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.aiostreams; + port = toString cfg.port; + acmeHost = config.tnix.services.nginx.domain; + in + { + options.tnix.services.aiostreams = { + enable = mkEnableOption "AIOStreams"; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "Host on which AIOStreams listens"; + }; + + port = mkOption { + type = types.port; + default = 3000; + description = "Port on which AIOStreams listens"; + }; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which AIOStreams is available"; + }; + + configureNginx = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Nginx as a reverse proxy for AIOStreams"; + }; + + configurePangolin = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Pangolin as a reverse proxy for AIOStreams"; + }; + + image = mkOption { + type = types.str; + default = "ghcr.io/viren070/aiostreams:latest"; + description = "Container image to use"; + }; + + dataDir = mkOption { + type = types.path; + default = "/var/lib/docker/volumes/aiostreams/_data"; + description = "Directory to store persistent AIOStreams data"; + }; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = "Environment file with secrets passed to the container"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.domain != ""; + message = "tnix.services.aiostreams.domain must be set when tnix.services.aiostreams.enable is true."; + } + ]; + + virtualisation.oci-containers.containers.aiostreams = { + image = cfg.image; + ports = [ + "${cfg.host}:${port}:3000" + ]; + environment = { + ADDON_ID = cfg.domain; + BASE_URL = "https://${cfg.domain}"; + }; + environmentFiles = optional (cfg.environmentFile != null) cfg.environmentFile; + volumes = [ + "${cfg.dataDir}:/app/data" + ]; + }; + + services = { + nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx { + forceSSL = acmeHost != ""; + useACMEHost = mkIf (acmeHost != "") acmeHost; + locations."/" = { + proxyPass = "http://${cfg.host}:${port}"; + proxyWebsockets = true; + }; + }; + + newt.blueprint.proxy-resources = mkIf cfg.configurePangolin { + aiostreams = { + auth = { + sso-enabled = false; + }; + full-domain = cfg.domain; + name = "aiostreams"; + protocol = "http"; + targets = [ + { + hostname = "localhost"; + method = "http"; + port = cfg.port; + healthcheck = { + hostname = "localhost"; + port = cfg.port; + scheme = "http"; + method = "GET"; + path = "/"; + }; + } + ]; + }; + }; + }; + }; + }; +} diff --git a/modules/nixos/services/copyparty.nix b/modules/nixos/services/copyparty.nix new file mode 100644 index 0000000..0ec9631 --- /dev/null +++ b/modules/nixos/services/copyparty.nix @@ -0,0 +1,118 @@ +{ inputs, ... }: { + flake.modules.nixos.services = + { + config, + lib, + pkgs, + options, + ... + }: + with lib; + let + cfg = config.tnix.services.copyparty; + port = toString cfg.port; + acmeHost = config.tnix.services.nginx.domain; + in + { + imports = [ + inputs.copyparty.nixosModules.default + ]; + + options.tnix.services.copyparty = { + enable = mkEnableOption "Copyparty"; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "Host on which Copyparty listens"; + }; + + port = mkOption { + type = types.port; + default = 1115; + description = "Port on which Copyparty listens"; + }; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which Copyparty is available"; + }; + + accounts = options.services.copyparty.accounts; + volumes = options.services.copyparty.volumes; + + configureNginx = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Nginx as a reverse proxy for Copyparty"; + }; + + configurePangolin = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Pangolin as a reverse proxy for Copyparty"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.domain != ""; + message = "tnix.services.copyparty.domain must be set when tnix.services.copyparty.enable is true."; + } + ]; + + services = { + copyparty = { + enable = true; + settings = { + i = cfg.host; + p = cfg.port; + no-reload = true; + ignored-flag = false; + }; + accounts = cfg.accounts; + volumes = cfg.volumes; + package = pkgs.copyparty.override { + extraPackages = [ pkgs.exiftool ]; + }; + }; + + nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx { + forceSSL = acmeHost != ""; + useACMEHost = mkIf (acmeHost != "") acmeHost; + locations."/" = { + proxyPass = "http://${cfg.host}:${port}"; + proxyWebsockets = true; + }; + }; + + newt.blueprint.proxy-resources = mkIf cfg.configurePangolin { + copyparty = { + auth = { + sso-enabled = false; + }; + full-domain = cfg.domain; + name = "copyparty"; + protocol = "http"; + targets = [ + { + hostname = "localhost"; + method = "http"; + port = cfg.port; + healthcheck = { + hostname = "localhost"; + port = cfg.port; + scheme = "http"; + method = "GET"; + path = "/"; + }; + } + ]; + }; + }; + }; + }; + }; +} diff --git a/modules/nixos/services/cyber-tux.nix b/modules/nixos/services/cyber-tux.nix new file mode 100644 index 0000000..7614854 --- /dev/null +++ b/modules/nixos/services/cyber-tux.nix @@ -0,0 +1,106 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + pkgs, + ... + }: + with lib; + let + cfg = config.tnix.services.cyber-tux; + in + { + options.tnix.services.cyber-tux = { + enable = mkEnableOption "CyberTux Discord bot"; + + user = mkOption { + type = types.str; + default = "cyber-tux"; + description = "User under which the CyberTux service runs."; + }; + + group = mkOption { + type = types.str; + default = "cyber-tux"; + description = "Group under which the CyberTux service runs."; + }; + + dataDir = mkOption { + type = types.path; + default = "/var/lib/cyber-tux"; + description = "Directory where CyberTux stores its data (must be under /var/lib)."; + }; + + environmentFile = mkOption { + type = types.path; + description = "Environment file containing the Discord bot token."; + }; + }; + + config = mkIf cfg.enable { + systemd.services.cyber-tux = { + description = "CyberTux Discord bot"; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Type = "simple"; + User = cfg.user; + Group = cfg.group; + EnvironmentFile = cfg.environmentFile; + ExecStart = getExe pkgs.cyber-tux; + Restart = "always"; + RestartSec = 5; + WorkingDirectory = cfg.dataDir; + StateDirectory = baseNameOf cfg.dataDir; + StateDirectoryMode = "0700"; + + LockPersonality = true; + MemoryDenyWriteExecute = true; + NoNewPrivileges = true; + PrivateDevices = true; + PrivateIPC = true; + PrivateTmp = true; + PrivateUsers = true; + ProtectClock = true; + ProtectControlGroups = true; + ProtectHome = true; + ProtectHostname = true; + ProtectKernelLogs = true; + ProtectKernelModules = true; + ProtectKernelTunables = true; + ProtectProc = "invisible"; + ProtectSystem = "strict"; + RestrictNamespaces = [ + "uts" + "ipc" + "pid" + "user" + "cgroup" + ]; + RestrictRealtime = true; + RestrictSUIDSGID = true; + SystemCallArchitectures = "native"; + SystemCallFilter = [ "@system-service" ]; + UMask = "0077"; + }; + }; + + users.users = mkIf (cfg.user == "cyber-tux") { + ${cfg.user} = { + isSystemUser = true; + group = cfg.group; + description = "CyberTux service user"; + home = cfg.dataDir; + createHome = true; + }; + }; + + users.groups = mkIf (cfg.group == "cyber-tux") { + ${cfg.group} = { }; + }; + }; + }; +} diff --git a/modules/nixos/services/gitea.nix b/modules/nixos/services/gitea.nix new file mode 100644 index 0000000..743159a --- /dev/null +++ b/modules/nixos/services/gitea.nix @@ -0,0 +1,123 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.gitea; + port = toString cfg.port; + acmeHost = config.tnix.services.nginx.domain; + in + { + options.tnix.services.gitea = { + enable = mkEnableOption "Gitea"; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "Host on which Gitea listens"; + }; + + port = mkOption { + type = types.port; + default = 1114; + description = "Port on which Gitea listens"; + }; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which Gitea is available"; + }; + + configureNginx = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Nginx as a reverse proxy for Gitea"; + }; + + configurePangolin = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Pangolin as a reverse proxy for Gitea"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.domain != ""; + message = "tnix.services.gitea.domain must be set when tnix.services.gitea.enable is true."; + } + ]; + + services = { + gitea = { + enable = true; + settings = { + service.DISABLE_REGISTRATION = true; + server = { + HTTP_ADDR = cfg.host; + HTTP_PORT = cfg.port; + DOMAIN = cfg.domain; + ROOT_URL = "https://${cfg.domain}"; + }; + }; + database = { + type = "postgres"; + name = "gitea"; + user = "gitea"; + }; + }; + + nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx { + forceSSL = acmeHost != ""; + useACMEHost = mkIf (acmeHost != "") acmeHost; + locations."/" = { + proxyPass = "http://${cfg.host}:${port}"; + proxyWebsockets = true; + }; + }; + + newt.blueprint.proxy-resources = mkIf cfg.configurePangolin { + gitea = { + auth = { + sso-enabled = false; + }; + full-domain = cfg.domain; + name = "gitea"; + protocol = "http"; + targets = [ + { + hostname = "localhost"; + method = "http"; + port = cfg.port; + healthcheck = { + hostname = "localhost"; + port = cfg.port; + scheme = "http"; + method = "GET"; + path = "/"; + }; + } + ]; + }; + }; + + postgresql = { + enable = true; + ensureDatabases = [ "gitea" ]; + ensureUsers = [ + { + name = "gitea"; + ensureDBOwnership = true; + } + ]; + }; + }; + }; + }; +} diff --git a/modules/nixos/services/hermes-agent.nix b/modules/nixos/services/hermes-agent.nix new file mode 100644 index 0000000..5f0da1d --- /dev/null +++ b/modules/nixos/services/hermes-agent.nix @@ -0,0 +1,48 @@ +{ inputs, ... }: { + flake.modules.nixos.services = + { + config, + lib, + pkgs, + options, + userName, + ... + }: + with lib; + let + cfg = config.tnix.services.hermes-agent; + in + { + imports = [ + inputs.hermes-agent.nixosModules.default + ]; + + options.tnix.services.hermes-agent = { + enable = mkEnableOption "Hermes Agent"; + environmentFiles = options.services.hermes-agent.environmentFiles; + }; + + config = mkIf cfg.enable { + services.hermes-agent = { + enable = true; + settings.model = { + provider = "opencode-go"; + default = "deepseek-v4-flash"; + }; + environmentFiles = cfg.environmentFiles; + addToSystemPackages = true; + + extraPlugins = [ + (pkgs.fetchFromGitHub { + owner = "DietrichGebert"; + repo = "ponytail"; + rev = "v4.9.0"; + hash = "sha256-8cYggVltBAlZ/Zj4pl1bOu7mQdZFXCmDGW4RSpvRA+w="; + }) + ]; + }; + + users.users.${userName}.extraGroups = [ "hermes" ]; + }; + }; +} diff --git a/modules/nixos/services/mediaflow-proxy.nix b/modules/nixos/services/mediaflow-proxy.nix new file mode 100644 index 0000000..ba5cac3 --- /dev/null +++ b/modules/nixos/services/mediaflow-proxy.nix @@ -0,0 +1,122 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.mediaflow-proxy; + port = toString cfg.port; + acmeHost = config.tnix.services.nginx.domain; + in + { + options.tnix.services.mediaflow-proxy = { + enable = mkEnableOption "MediaFlow Proxy"; + + host = mkOption { + type = types.str; + default = "0.0.0.0"; + description = "Host on which MediaFlow Proxy listens"; + }; + + port = mkOption { + type = types.port; + default = 1113; + description = "Port on which MediaFlow Proxy listens"; + }; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which MediaFlow Proxy is available"; + }; + + configureNginx = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Nginx as a reverse proxy for MediaFlow Proxy"; + }; + + configurePangolin = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Pangolin as a reverse proxy for MediaFlow Proxy"; + }; + + image = mkOption { + type = types.str; + default = "ghcr.io/mhdzumair/mediaflow-proxy-light:latest"; + description = "Container image to use"; + }; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = "Environment file with secrets passed to the container"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = !cfg.configureNginx || cfg.domain != ""; + message = "tnix.services.mediaflow-proxy.domain must be set when tnix.services.mediaflow-proxy.configureNginx is enabled."; + } + { + assertion = !cfg.configurePangolin || cfg.domain != ""; + message = "tnix.services.mediaflow-proxy.domain must be set when tnix.services.mediaflow-proxy.configurePangolin is enabled."; + } + ]; + + virtualisation.oci-containers.containers.mediaflow-proxy = { + image = cfg.image; + ports = [ + "${cfg.host}:${port}:${port}" + ]; + environment = { + APP__SERVER__HOST = "0.0.0.0"; + APP__SERVER__PORT = port; + }; + environmentFiles = optional (cfg.environmentFile != null) cfg.environmentFile; + }; + + services = { + nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx { + forceSSL = acmeHost != ""; + useACMEHost = mkIf (acmeHost != "") acmeHost; + locations."/" = { + proxyPass = "http://${cfg.host}:${port}"; + proxyWebsockets = true; + }; + }; + + newt.blueprint.proxy-resources = mkIf cfg.configurePangolin { + mediaflow-proxy = { + auth = { + sso-enabled = false; + }; + full-domain = cfg.domain; + name = "mediaflow-proxy"; + protocol = "http"; + targets = [ + { + hostname = "localhost"; + method = "http"; + port = cfg.port; + healthcheck = { + hostname = "localhost"; + port = cfg.port; + scheme = "http"; + method = "GET"; + path = "/"; + }; + } + ]; + }; + }; + }; + }; + }; +} diff --git a/modules/nixos/services/nginx.nix b/modules/nixos/services/nginx.nix new file mode 100644 index 0000000..30c6b4a --- /dev/null +++ b/modules/nixos/services/nginx.nix @@ -0,0 +1,55 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + userEmail, + ... + }: + with lib; + let + cfg = config.tnix.services.nginx; + in + { + options.tnix.services.nginx = { + enable = mkEnableOption "Nginx"; + + domain = mkOption { + type = types.str; + default = ""; + description = "Base domain for the wildcard ACME certificate (disabled when empty)"; + }; + }; + + config = mkIf cfg.enable { + security = { + acme = { + acceptTerms = true; + defaults.email = userEmail; + certs = mkIf (cfg.domain != "") { + "${cfg.domain}" = { + group = "nginx"; + domain = "*.${cfg.domain}"; + extraDomainNames = [ "${cfg.domain}" ]; + dnsProvider = "cloudflare"; + credentialFiles = { + CLOUDFLARE_EMAIL_FILE = config.sops.secrets."cloudflare-credentials/email".path; + CLOUDFLARE_DNS_API_TOKEN_FILE = config.sops.secrets."cloudflare-credentials/dns-api-token".path; + }; + }; + }; + }; + }; + + users.users.nginx.extraGroups = [ "acme" ]; + + services.nginx = { + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + }; + }; + }; +} diff --git a/modules/nixos/services/pangolin.nix b/modules/nixos/services/pangolin.nix new file mode 100644 index 0000000..ed2253a --- /dev/null +++ b/modules/nixos/services/pangolin.nix @@ -0,0 +1,91 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + userEmail, + pkgs, + ... + }: + with lib; + let + cfg = config.tnix.services.pangolin; + in + { + options.tnix.services.pangolin = { + enable = mkEnableOption "Pangolin"; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which Pangolin Dashboard is available"; + }; + + baseDomain = mkOption { + type = types.str; + default = ""; + description = "Pangolin base fully qualified domain name"; + }; + + environmentFile = mkOption { + type = types.nullOr types.path; + default = null; + description = "Environment file with secrets passed to Pangolin"; + }; + }; + + config = mkIf cfg.enable { + services = { + pangolin = { + enable = true; + package = ( + pkgs.fosrl-pangolin.override { + databaseType = "pg"; + } + ); + openFirewall = true; + baseDomain = cfg.baseDomain; + dashboardDomain = cfg.domain; + environmentFile = cfg.environmentFile; + letsEncryptEmail = userEmail; + + settings = { + app.dashboard_url = "https://${config.services.pangolin.dashboardDomain}"; + domains.domain1 = { + base_domain = config.services.pangolin.baseDomain; + prefer_wildcard_cert = false; + }; + server = { + external_port = 3000; + internal_port = 3001; + next_port = 3002; + integration_port = 3003; + # needs to be set, otherwise this fails silently + # see https://github.com/fosrl/newt/issues/37 + internal_hostname = "localhost"; + }; + gerbil.base_endpoint = config.services.pangolin.dashboardDomain; + flags = { + disable_signup_without_invite = true; + enable_integration_api = false; + allow_raw_resources = true; + disable_enterprise_features = true; + }; + postgres.connection_string = "postgresql:///pangolin?host=/run/postgresql"; + }; + }; + + postgresql = { + enable = true; + ensureDatabases = [ "pangolin" ]; + ensureUsers = [ + { + name = "pangolin"; + ensureDBOwnership = true; + } + ]; + }; + }; + }; + }; +} diff --git a/modules/nixos/services/trok.nix b/modules/nixos/services/trok.nix new file mode 100644 index 0000000..7c0a732 --- /dev/null +++ b/modules/nixos/services/trok.nix @@ -0,0 +1,27 @@ +{ inputs, ... }: { + flake.modules.nixos.services = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.trok; + in + { + imports = [ + inputs.trok.nixosModules.default + ]; + + options.tnix.services.trok = { + enable = mkEnableOption "trok"; + }; + + config = mkIf cfg.enable { + services.trok = { + enable = true; + }; + }; + }; +} diff --git a/modules/nixos/services/uptime-kuma.nix b/modules/nixos/services/uptime-kuma.nix new file mode 100644 index 0000000..52fc8c3 --- /dev/null +++ b/modules/nixos/services/uptime-kuma.nix @@ -0,0 +1,102 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.uptime-kuma; + port = toString cfg.port; + acmeHost = config.tnix.services.nginx.domain; + in + { + options.tnix.services.uptime-kuma = { + enable = mkEnableOption "Uptime Kuma"; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "Host on which Uptime Kuma listens"; + }; + + port = mkOption { + type = types.port; + default = 1111; + description = "Port on which Uptime Kuma listens"; + }; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which Uptime Kuma is available"; + }; + + configureNginx = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Nginx as a reverse proxy for Uptime Kuma"; + }; + + configurePangolin = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Pangolin as a reverse proxy for Uptime Kuma"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.domain != ""; + message = "tnix.services.uptime-kuma.domain must be set when tnix.services.uptime-kuma.enable is true."; + } + ]; + + services = { + uptime-kuma = { + enable = true; + settings = { + HOST = cfg.host; + PORT = port; + }; + }; + + nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx { + forceSSL = acmeHost != ""; + useACMEHost = mkIf (acmeHost != "") acmeHost; + locations."/" = { + proxyPass = "http://${cfg.host}:${port}"; + proxyWebsockets = true; + }; + }; + + newt.blueprint.proxy-resources = mkIf cfg.configurePangolin { + uptime-kuma = { + auth = { + sso-enabled = false; + }; + full-domain = cfg.domain; + name = "uptime-kuma"; + protocol = "http"; + targets = [ + { + hostname = "localhost"; + method = "http"; + port = cfg.port; + healthcheck = { + hostname = "localhost"; + port = cfg.port; + scheme = "http"; + method = "GET"; + path = "/"; + }; + } + ]; + }; + }; + }; + }; + }; +} diff --git a/modules/nixos/services/vaultwarden.nix b/modules/nixos/services/vaultwarden.nix new file mode 100644 index 0000000..e2ac87b --- /dev/null +++ b/modules/nixos/services/vaultwarden.nix @@ -0,0 +1,120 @@ +{ + flake.modules.nixos.services = + { + config, + lib, + ... + }: + with lib; + let + cfg = config.tnix.services.vaultwarden; + port = toString cfg.port; + acmeHost = config.tnix.services.nginx.domain; + in + { + options.tnix.services.vaultwarden = { + enable = mkEnableOption "Vaultwarden"; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "Host on which Vaultwarden listens"; + }; + + port = mkOption { + type = types.port; + default = 1112; + description = "Port on which Vaultwarden listens"; + }; + + domain = mkOption { + type = types.str; + default = ""; + description = "Domain on which Vaultwarden is available"; + }; + + configureNginx = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Nginx as a reverse proxy for Vaultwarden"; + }; + + configurePangolin = mkOption { + type = types.bool; + default = false; + description = "Whether to configure Pangolin as a reverse proxy for Vaultwarden"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = cfg.domain != ""; + message = "tnix.services.vaultwarden.domain must be set when tnix.services.vaultwarden.enable is true."; + } + ]; + + services = { + vaultwarden = { + enable = true; + dbBackend = "postgresql"; + config = { + ROCKET_ADDRESS = cfg.host; + ROCKET_PORT = cfg.port; + DOMAIN = "https://${cfg.domain}"; + + DATABASE_URL = "postgresql:///vaultwarden?host=/run/postgresql"; + ENABLE_WEBSOCKET = true; + SIGNUPS_ALLOWED = true; + DISABLE_ICON_DOWNLOAD = true; + }; + }; + + nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx { + forceSSL = acmeHost != ""; + useACMEHost = mkIf (acmeHost != "") acmeHost; + locations."/" = { + proxyPass = "http://${cfg.host}:${port}"; + proxyWebsockets = true; + }; + }; + + newt.blueprint.proxy-resources = mkIf cfg.configurePangolin { + vaultwarden = { + auth = { + sso-enabled = false; + }; + full-domain = cfg.domain; + name = "vaultwarden"; + protocol = "http"; + targets = [ + { + hostname = "localhost"; + method = "http"; + port = cfg.port; + healthcheck = { + hostname = "localhost"; + port = cfg.port; + scheme = "http"; + method = "GET"; + path = "/"; + }; + } + ]; + }; + }; + + postgresql = { + enable = true; + ensureDatabases = [ "vaultwarden" ]; + ensureUsers = [ + { + name = "vaultwarden"; + ensureDBOwnership = true; + } + ]; + }; + }; + }; + }; +} diff --git a/modules/nixos/steam.nix b/modules/nixos/steam.nix deleted file mode 100644 index 1931b0d..0000000 --- a/modules/nixos/steam.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - programs.steam = { - enable = true; - }; - - hardware.graphics.enable32Bit = true; -} diff --git a/modules/nixos/virtualisation/default.nix b/modules/nixos/virtualisation/default.nix deleted file mode 100755 index bbae769..0000000 --- a/modules/nixos/virtualisation/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./docker.nix - ./waydroid.nix - ./qemu.nix - ]; -} diff --git a/modules/nixos/virtualisation/distrobox.nix b/modules/nixos/virtualisation/distrobox.nix new file mode 100644 index 0000000..aa22cf6 --- /dev/null +++ b/modules/nixos/virtualisation/distrobox.nix @@ -0,0 +1,118 @@ +{ + flake.modules.nixos.virtualisation = + { + config, + lib, + pkgs, + ... + }: + let + cfg = config.tnix.virtualisation; + in + { + options.tnix.virtualisation.distrobox = { + enable = lib.mkEnableOption "Enable DistroBox"; + }; + + config = lib.mkIf cfg.distrobox.enable { + virtualisation.waydroid.enable = true; + + environment.systemPackages = with pkgs; [ + distrobox + + (writeShellScriptBin "dbox-create" '' + #!/usr/bin/env bash + + # 1. Initialize variables + IMAGE="" + NAME="" + + # Array to hold optional arguments (like volumes) + declare -a EXTRA_ARGS + + # 2. Parse arguments + while [[ $# -gt 0 ]]; do + case $1 in + -i|--image) + IMAGE="$2" + shift 2 + ;; + -n|--name) + NAME="$2" + shift 2 + ;; + -p|--profile) + echo ":: Profile mode enabled: Mounting Nix store and user profiles (Read-Only)" + # Add volume flags to the array + EXTRA_ARGS+=( "--volume" "/nix/store:/nix/store:ro" ) + EXTRA_ARGS+=( "--volume" "/etc/profiles/per-user:/etc/profiles/per-user:ro" ) + EXTRA_ARGS+=( "--volume" "/etc/static/profiles/per-user:/etc/static/profiles/per-user:ro" ) + shift 1 + ;; + *) + echo "Unknown option $1" + exit 1 + ;; + esac + done + + if [ -z "$IMAGE" ] || [ -z "$NAME" ]; then + echo "Usage: dbox-create -i -n [-p]" + exit 1 + fi + + # 3. Define the custom home path + CUSTOM_HOME="$HOME/Distrobox/$NAME" + + echo "------------------------------------------------" + echo "Creating Distrobox: $NAME" + echo "Location: $CUSTOM_HOME" + echo "------------------------------------------------" + + # 4. Run Distrobox Create + # We expand "''${EXTRA_ARGS[@]}" to properly pass the volume arguments + ${pkgs.distrobox}/bin/distrobox create \ + --image "$IMAGE" \ + --name "$NAME" \ + --home "$CUSTOM_HOME" \ + "''${EXTRA_ARGS[@]}" + + # Check exit code + if [ $? -ne 0 ]; then + echo "Error: Distrobox creation failed." + exit 1 + fi + + # 5. Post-Creation: Symlink Config Files + echo "--> Linking configurations to $NAME..." + + # Helper function to symlink + link_config() { + SRC="$1" + DEST="$2" + DEST_DIR=$(dirname "$DEST") + + # Create parent directory if it doesn't exist + mkdir -p "$DEST_DIR" + + if [ -e "$SRC" ]; then + # ln -sf: symbolic link, force overwrite + ln -sf "$SRC" "$DEST" + echo " [LINK] $DEST -> $SRC" + else + echo " [SKIP] $SRC not found on host" + fi + } + + # Create Symlinks + link_config "$HOME/.zshrc" "$CUSTOM_HOME/.zshrc" + link_config "$HOME/.zshenv" "$CUSTOM_HOME/.zshenv" + link_config "$HOME/.config/fastfetch" "$CUSTOM_HOME/.config/fastfetch" + link_config "$HOME/.config/starship.toml" "$CUSTOM_HOME/.config/starship.toml" + + echo "--> Done! Enter via: distrobox enter $NAME" + '') + ]; + }; + }; +} diff --git a/modules/nixos/virtualisation/docker.nix b/modules/nixos/virtualisation/docker.nix old mode 100755 new mode 100644 index d93f20a..dfcdb6e --- a/modules/nixos/virtualisation/docker.nix +++ b/modules/nixos/virtualisation/docker.nix @@ -1,14 +1,32 @@ { - username, - pkgs, - ... -}: { - virtualisation = { - oci-containers.backend = "docker"; - docker.enable = true; - }; + flake.modules.nixos.virtualisation = + { + config, + lib, + pkgs, + userName, + ... + }: + let + cfg = config.tnix.virtualisation; + in + { + options.tnix.virtualisation.docker = { + enable = lib.mkEnableOption "Docker container runtime"; + nvidia = { + enable = lib.mkEnableOption "NVIDIA Container Toolkit for Docker"; + }; + }; - environment.systemPackages = with pkgs; [lazydocker]; + config = lib.mkIf cfg.docker.enable { + virtualisation = { + oci-containers.backend = "docker"; + docker.enable = true; + }; - users.users.${username}.extraGroups = ["docker"]; + hardware.nvidia-container-toolkit.enable = lib.mkIf cfg.docker.nvidia.enable true; + environment.systemPackages = with pkgs; [ lazydocker ]; + users.users.${userName}.extraGroups = [ "docker" ]; + }; + }; } diff --git a/modules/nixos/virtualisation/qemu.nix b/modules/nixos/virtualisation/qemu.nix old mode 100755 new mode 100644 index 50ba010..793c2b0 --- a/modules/nixos/virtualisation/qemu.nix +++ b/modules/nixos/virtualisation/qemu.nix @@ -1,22 +1,38 @@ { - pkgs, - username, - ... -}: { - virtualisation = { - libvirtd = { - enable = true; - qemu = { - swtpm.enable = true; + flake.modules.nixos.virtualisation = + { + config, + lib, + pkgs, + userName, + ... + }: + let + cfg = config.tnix.virtualisation; + in + { + options.tnix.virtualisation.qemu = { + enable = lib.mkEnableOption "QEMU/KVM virtualization with libvirtd"; + }; + + config = lib.mkIf cfg.qemu.enable { + virtualisation = { + libvirtd = { + enable = true; + qemu = { + swtpm.enable = true; + }; + }; + spiceUSBRedirection.enable = true; + }; + + users.users.${userName}.extraGroups = [ "libvirtd" ]; + + environment.systemPackages = with pkgs; [ + virt-manager + virt-viewer + ]; }; }; - spiceUSBRedirection.enable = true; - }; - users.users.${username}.extraGroups = ["libvirtd"]; - - environment.systemPackages = with pkgs; [ - virt-manager - virt-viewer - ]; } diff --git a/modules/nixos/virtualisation/waydroid.nix b/modules/nixos/virtualisation/waydroid.nix old mode 100755 new mode 100644 index 1e2080a..933e2d2 --- a/modules/nixos/virtualisation/waydroid.nix +++ b/modules/nixos/virtualisation/waydroid.nix @@ -1,5 +1,20 @@ -{...}: { - virtualisation = { - waydroid.enable = true; - }; +{ + flake.modules.nixos.virtualisation = + { + config, + lib, + ... + }: + let + cfg = config.tnix.virtualisation; + in + { + options.tnix.virtualisation.waydroid = { + enable = lib.mkEnableOption "Waydroid Android container"; + }; + + config = lib.mkIf cfg.waydroid.enable { + virtualisation.waydroid.enable = true; + }; + }; } diff --git a/overlays/default.nix b/overlays/default.nix deleted file mode 100755 index 12d16cc..0000000 --- a/overlays/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{inputs, ...}: { - additions = final: _prev: import ../pkgs {pkgs = final;}; - - modifications = final: prev: { - awesome = inputs.nixpkgs-f2k.packages.${prev.stdenv.hostPlatform.system}.awesome-git; - ghostty = inputs.ghostty.packages.${prev.stdenv.hostPlatform.system}.default; - tawm = inputs.tawm.packages.${prev.stdenv.hostPlatform.system}.default; - tnvim = inputs.tnvim.packages.${prev.stdenv.hostPlatform.system}.default; - tpanel = inputs.tpanel.packages.${prev.stdenv.hostPlatform.system}.default; - ags = inputs.tpanel.packages.${prev.stdenv.hostPlatform.system}.ags.default; - tfolio = inputs.tfolio.packages.${prev.stdenv.hostPlatform.system}.default; - trok = inputs.trok.packages.${prev.stdenv.hostPlatform.system}.default; - cyber-tux = inputs.cyber-tux.packages.${prev.stdenv.hostPlatform.system}.default; - hyprland-git = inputs.hyprland.packages.${prev.stdenv.hostPlatform.system}; - hyprland-plugins = inputs.hyprland-plugins.packages.${prev.stdenv.hostPlatform.system}; - wezterm-git = inputs.wezterm-flake.packages.${prev.stdenv.hostPlatform.system}.default; - awww = inputs.awww.packages.${prev.stdenv.hostPlatform.system}.awww; - vicinae-extensions = inputs.vicinae-extensions.packages.${prev.stdenv.hostPlatform.system}; - }; - - # When applied, the stable nixpkgs set (declared in the flake inputs) will - # be accessible through 'pkgs.stable' - stable-packages = final: _prev: { - stable = import inputs.nixpkgs-stable { - system = final.stdenv.hostPlatform.system; - config.allowUnfree = true; - }; - }; - - nur = inputs.nur.overlays.default; - - nix-vscode-extensions = inputs.nix-vscode-extensions.overlays.default; -} diff --git a/pkgs/default.nix b/pkgs/default.nix deleted file mode 100755 index 9ad3acd..0000000 --- a/pkgs/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - firefox-mod-blur = pkgs.callPackage ./firefox-mod-blur {}; - plymouth-spinner-monochrome = pkgs.callPackage ./plymouth-spinner-monochrome {}; - go-wol = pkgs.callPackage ./go-wol {}; -} diff --git a/pkgs/firefox-mod-blur/default.nix b/pkgs/firefox-mod-blur/default.nix deleted file mode 100644 index fe7e6eb..0000000 --- a/pkgs/firefox-mod-blur/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - lib, - stdenv, - pkgs, -}: -stdenv.mkDerivation { - pname = "firefox-mod-blur"; - version = "v2.14"; - - src = pkgs.fetchFromGitHub { - owner = "datguypiko"; - repo = "Firefox-Mod-Blur"; - rev = "refs/heads/master"; - sha256 = "sha256-PX26cPYKU5ERgmcMrpCyFGwLE2a2w80z2zPn28xJq/U="; - }; - - installPhase = '' - mkdir $out - cp -r * "$out/" - cp -r "$out/EXTRA MODS/Bookmarks Bar Mods/Bookmarks bar same color as toolbar/bookmarks_bar_same_color_as_toolbar.css" "$out/" - ''; - - meta = with lib; { - description = "Firefox Mod Blur"; - homepage = "https://github.com/datguypiko/Firefox-Mod-Blur"; - platforms = platforms.all; - license = licenses.gpl3; - }; -} diff --git a/pkgs/go-wol/default.nix b/pkgs/go-wol/default.nix deleted file mode 100644 index 01977ce..0000000 --- a/pkgs/go-wol/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - buildGoModule, - fetchFromGitHub, - ... -}: let - version = "2.0.1"; -in - buildGoModule { - pname = "go-wol"; - inherit version; - - src = fetchFromGitHub { - owner = "sabhiram"; - repo = "go-wol"; - rev = "v${version}"; - hash = "sha256-iV3p0PjRK0ItfOaRJoS30iZC+O3lNPWfcRb3pfv60RY="; - }; - - vendorHash = "sha256-Ze928UnuvScA32fglTYkQx+XE15BxSB6vNa9OSyhN3w="; - - meta = with lib; { - homepage = "https://github.com/sabhiram/go-wol"; - description = "Simple wake on LAN magic packet generator for golang"; - license = licenses.mit; - }; - } diff --git a/pkgs/plymouth-spinner-monochrome/default.nix b/pkgs/plymouth-spinner-monochrome/default.nix deleted file mode 100644 index 78f2a92..0000000 --- a/pkgs/plymouth-spinner-monochrome/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - stdenv, - logo ? null, - lib, - ... -}: -stdenv.mkDerivation { - pname = "plymouth-spinner-monochrome"; - version = "1.0"; - src = ./src; - - buildPhase = lib.optionalString (logo != null) '' - ln -s ${logo} watermark.png - ''; - installPhase = '' - mkdir -p $out/share/plymouth/themes - cp -rT . $out/share/plymouth/themes/spinner-monochrome - ''; - - meta = { - platforms = lib.platforms.all; - }; -} diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0001.png b/pkgs/plymouth-spinner-monochrome/src/animation-0001.png deleted file mode 100644 index 6bd8239..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0001.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0002.png b/pkgs/plymouth-spinner-monochrome/src/animation-0002.png deleted file mode 100644 index ef8ff54..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0002.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0003.png b/pkgs/plymouth-spinner-monochrome/src/animation-0003.png deleted file mode 100644 index 205380b..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0003.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0004.png b/pkgs/plymouth-spinner-monochrome/src/animation-0004.png deleted file mode 100644 index 6038af8..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0004.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0005.png b/pkgs/plymouth-spinner-monochrome/src/animation-0005.png deleted file mode 100644 index 7a96767..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0005.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0006.png b/pkgs/plymouth-spinner-monochrome/src/animation-0006.png deleted file mode 100644 index eb0256f..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0006.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0007.png b/pkgs/plymouth-spinner-monochrome/src/animation-0007.png deleted file mode 100644 index d2ccac9..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0007.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0008.png b/pkgs/plymouth-spinner-monochrome/src/animation-0008.png deleted file mode 100644 index 85849c8..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0008.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0009.png b/pkgs/plymouth-spinner-monochrome/src/animation-0009.png deleted file mode 100644 index 3e79b9b..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0009.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0010.png b/pkgs/plymouth-spinner-monochrome/src/animation-0010.png deleted file mode 100644 index 1f64875..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0010.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0011.png b/pkgs/plymouth-spinner-monochrome/src/animation-0011.png deleted file mode 100644 index 57bec05..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0011.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0012.png b/pkgs/plymouth-spinner-monochrome/src/animation-0012.png deleted file mode 100644 index cdefdc7..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0012.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0013.png b/pkgs/plymouth-spinner-monochrome/src/animation-0013.png deleted file mode 100644 index de5aa6e..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0013.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0014.png b/pkgs/plymouth-spinner-monochrome/src/animation-0014.png deleted file mode 100644 index a019904..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0014.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0015.png b/pkgs/plymouth-spinner-monochrome/src/animation-0015.png deleted file mode 100644 index 249e173..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0015.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0016.png b/pkgs/plymouth-spinner-monochrome/src/animation-0016.png deleted file mode 100644 index f72a577..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0016.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0017.png b/pkgs/plymouth-spinner-monochrome/src/animation-0017.png deleted file mode 100644 index 02926e7..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0017.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0018.png b/pkgs/plymouth-spinner-monochrome/src/animation-0018.png deleted file mode 100644 index 667cd7d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0018.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0019.png b/pkgs/plymouth-spinner-monochrome/src/animation-0019.png deleted file mode 100644 index 760868a..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0019.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0020.png b/pkgs/plymouth-spinner-monochrome/src/animation-0020.png deleted file mode 100644 index d228ed8..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0020.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0021.png b/pkgs/plymouth-spinner-monochrome/src/animation-0021.png deleted file mode 100644 index e7bd0f5..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0021.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0022.png b/pkgs/plymouth-spinner-monochrome/src/animation-0022.png deleted file mode 100644 index 4c77282..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0022.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0023.png b/pkgs/plymouth-spinner-monochrome/src/animation-0023.png deleted file mode 100644 index 8e77aa1..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0023.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0024.png b/pkgs/plymouth-spinner-monochrome/src/animation-0024.png deleted file mode 100644 index ed52d3d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0024.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0025.png b/pkgs/plymouth-spinner-monochrome/src/animation-0025.png deleted file mode 100644 index 371a299..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0025.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0026.png b/pkgs/plymouth-spinner-monochrome/src/animation-0026.png deleted file mode 100644 index 1bfd5dc..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0026.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0027.png b/pkgs/plymouth-spinner-monochrome/src/animation-0027.png deleted file mode 100644 index 6f4d83b..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0027.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0028.png b/pkgs/plymouth-spinner-monochrome/src/animation-0028.png deleted file mode 100644 index eda5e3f..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0028.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0029.png b/pkgs/plymouth-spinner-monochrome/src/animation-0029.png deleted file mode 100644 index 33f2683..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0029.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0030.png b/pkgs/plymouth-spinner-monochrome/src/animation-0030.png deleted file mode 100644 index c5132bd..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0030.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0031.png b/pkgs/plymouth-spinner-monochrome/src/animation-0031.png deleted file mode 100644 index f6ed4b2..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0031.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0032.png b/pkgs/plymouth-spinner-monochrome/src/animation-0032.png deleted file mode 100644 index 0979164..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0032.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0033.png b/pkgs/plymouth-spinner-monochrome/src/animation-0033.png deleted file mode 100644 index c9ec0e5..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0033.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0034.png b/pkgs/plymouth-spinner-monochrome/src/animation-0034.png deleted file mode 100644 index 2851ef3..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0034.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0035.png b/pkgs/plymouth-spinner-monochrome/src/animation-0035.png deleted file mode 100644 index 2bd3b0d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0035.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/animation-0036.png b/pkgs/plymouth-spinner-monochrome/src/animation-0036.png deleted file mode 100644 index fbe48ff..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/animation-0036.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/bullet.png b/pkgs/plymouth-spinner-monochrome/src/bullet.png deleted file mode 100644 index 5799dda..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/bullet.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/capslock.png b/pkgs/plymouth-spinner-monochrome/src/capslock.png deleted file mode 100644 index 9d775f6..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/capslock.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/entry.png b/pkgs/plymouth-spinner-monochrome/src/entry.png deleted file mode 100644 index 81cf210..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/entry.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/keyboard.png b/pkgs/plymouth-spinner-monochrome/src/keyboard.png deleted file mode 100644 index f532ad0..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/keyboard.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/keymap-render.png b/pkgs/plymouth-spinner-monochrome/src/keymap-render.png deleted file mode 100644 index 4aaed5a..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/keymap-render.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/lock.png b/pkgs/plymouth-spinner-monochrome/src/lock.png deleted file mode 100644 index 2de24c4..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/lock.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/spinner-monochrome.plymouth b/pkgs/plymouth-spinner-monochrome/src/spinner-monochrome.plymouth deleted file mode 100644 index b40d928..0000000 --- a/pkgs/plymouth-spinner-monochrome/src/spinner-monochrome.plymouth +++ /dev/null @@ -1,79 +0,0 @@ -[Plymouth Theme] -Name[be]=Круцёлка -Name[cs]=Točítko -Name[da]=Snurre -Name[de]=Spinner -Name[eo]=Turnilo -Name[es]=Spinner -Name[eu]=Spinner -Name[fr]=Roulette -Name[fur]=Roulette -Name[hu]=Forgó -Name[id]=Spinner -Name[it]=Spinner -Name[nl]=Spinner -Name[pa]=ਸਪਿੱਨਰ -Name[pl]=Spinner -Name[pt_BR]=Spinner -Name[ru]=Числовое поле с кнопками -Name[sr]=Предилица -Name[sv]=Spinnare -Name[uk]=Крутний індикатор -Name[zh_CN]=Spinner -Name[ms]=Spinner -Name[he]=שבשבת טעינה -Name[fa]=چرخنده -Name[fi]=Spinneri -Name=Spinner -Description=A theme designed by jimmac that features a simple spinner. -ModuleName=two-step - -[two-step] -Font=Fira Sans 12 -TitleFont=Fira Sans 30 -ImageDir=/etc/plymouth/themes/spinner-monochrome -DialogHorizontalAlignment=.5 -DialogVerticalAlignment=.382 -TitleHorizontalAlignment=.5 -TitleVerticalAlignment=.382 -HorizontalAlignment=.5 -VerticalAlignment=.7 -WatermarkHorizontalAlignment=.5 -WatermarkVerticalAlignment=.96 -Transition=none -TransitionDuration=0.0 -BackgroundStartColor=0x000000 -BackgroundEndColor=0x000000 -ProgressBarBackgroundColor=0x606060 -ProgressBarForegroundColor=0xffffff -MessageBelowAnimation=true - -[boot-up] -UseEndAnimation=false - -[shutdown] -UseEndAnimation=false - -[reboot] -UseEndAnimation=false - -[updates] -SuppressMessages=true -ProgressBarShowPercentComplete=true -UseProgressBar=true -Title=Installing Updates... -SubTitle=Do not turn off your computer - -[system-upgrade] -SuppressMessages=true -ProgressBarShowPercentComplete=true -UseProgressBar=true -Title=Upgrading System... -SubTitle=Do not turn off your computer - -[firmware-upgrade] -SuppressMessages=true -ProgressBarShowPercentComplete=true -UseProgressBar=true -Title=Upgrading Firmware... -SubTitle=Do not turn off your computer diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0001.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0001.png deleted file mode 100644 index 6a64683..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0001.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0002.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0002.png deleted file mode 100644 index 8e9a85d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0002.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0003.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0003.png deleted file mode 100644 index 9fe95aa..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0003.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0004.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0004.png deleted file mode 100644 index 687aa8b..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0004.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0005.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0005.png deleted file mode 100644 index 3a56beb..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0005.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0006.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0006.png deleted file mode 100644 index 949cb23..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0006.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0007.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0007.png deleted file mode 100644 index 14d8b45..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0007.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0008.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0008.png deleted file mode 100644 index beef391..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0008.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0009.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0009.png deleted file mode 100644 index b366daa..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0009.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0010.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0010.png deleted file mode 100644 index 0312f62..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0010.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0011.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0011.png deleted file mode 100644 index f3e2cb9..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0011.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0012.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0012.png deleted file mode 100644 index ca4f017..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0012.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0013.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0013.png deleted file mode 100644 index ace8764..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0013.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0014.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0014.png deleted file mode 100644 index 6c43a9d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0014.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0015.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0015.png deleted file mode 100644 index 1e87c5d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0015.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0016.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0016.png deleted file mode 100644 index fac163b..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0016.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0017.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0017.png deleted file mode 100644 index ce792de..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0017.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0018.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0018.png deleted file mode 100644 index 6423b95..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0018.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0019.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0019.png deleted file mode 100644 index 45e9359..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0019.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0020.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0020.png deleted file mode 100644 index b84b04d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0020.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0021.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0021.png deleted file mode 100644 index a64932d..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0021.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0022.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0022.png deleted file mode 100644 index 4b57e23..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0022.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0023.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0023.png deleted file mode 100644 index b3dbeef..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0023.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0024.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0024.png deleted file mode 100644 index 196e987..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0024.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0025.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0025.png deleted file mode 100644 index 3905e00..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0025.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0026.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0026.png deleted file mode 100644 index 4c02eb1..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0026.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0027.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0027.png deleted file mode 100644 index 9ab5b00..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0027.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0028.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0028.png deleted file mode 100644 index fa8584b..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0028.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0029.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0029.png deleted file mode 100644 index d9931e1..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0029.png and /dev/null differ diff --git a/pkgs/plymouth-spinner-monochrome/src/throbber-0030.png b/pkgs/plymouth-spinner-monochrome/src/throbber-0030.png deleted file mode 100644 index fc1683f..0000000 Binary files a/pkgs/plymouth-spinner-monochrome/src/throbber-0030.png and /dev/null differ