mirror of
https://github.com/tuxdotrs/nix-config.git
synced 2026-09-20 00:59:04 +05:30
Compare commits
1 Commits
main
...
8f531dfc4e
| Author | SHA1 | Date | |
|---|---|---|---|
|
8f531dfc4e
|
204
README.md
204
README.md
@@ -15,48 +15,196 @@
|
|||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
- [Hosts](#hosts)
|
- [Hosts](#hosts)
|
||||||
|
- [Installation](#installation)
|
||||||
- [Components](#components)
|
- [Components](#components)
|
||||||
- [Showcase](#showcase)
|
- [Showcase](#showcase)
|
||||||
- [Pain](#spent-months-on-this-system-configuration-)
|
- [Pain](#spent-weeks-on-this-system-configuration-)
|
||||||
|
|
||||||
## Hosts
|
## Hosts
|
||||||
|
|
||||||
| | Hostname | Board | CPU | RAM | GPU | Purpose |
|
| | 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. |
|
| 🖥️ | `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 | Portable workstation for work, gaming, and media on the go. |
|
| 💻 | `canopus` | Asus Zephyrus G15 | Ryzen 9 5900HS | 16GB | RTX 3060 | Optimized for productivity on the go and some gaming. |
|
||||||
| ☁️ | `arcturus` | Minisforum MS-A1 | Ryzen 7 8700G | 32GB | Radeon 780M | Homelab server for self-hosted services and infrastructure workloads. |
|
| ☁️ | `homelab` | Minisforum MS-A1 | Ryzen 7 8700G | 32GB | Radeon 780M | WIP |
|
||||||
| ☁️ | `alpha` | KVM | 2 Core | 4GB | | Public-facing server for exposing homelab services to the internet. |
|
| ☁️ | `arcturus` | KVM | 4 Core | 8GB | | Primary server responsible for exposing my homelab applications to the internet. |
|
||||||
| 📱 | `vega` | Samsung S25 Ultra | Snapdragon 8 Elite | 12GB | Adreno 830 | Primary mobile for daily usage. (Locked) |
|
| ☁️ | `alpha` | KVM | 4 Core | 4GB | | Monitors uptime and health status of all services across the infrastructure. |
|
||||||
| 📱 | `capella` | Motorola Edge 30 | Snapdragon 778G+ | 8GB | Adreno 642L | Secondary mobile for tinkering and experimentation. (Rooted) |
|
| 🥔 | `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.
|
||||||
|
|
||||||
## Components
|
## Components
|
||||||
|
|
||||||
| | Wayland | Xorg |
|
| | Wayland | Xorg |
|
||||||
| ------------- | -------- | ---- |
|
| ------------- | -------- | ---------------- |
|
||||||
| DM | ly | - |
|
| DM | ly | ly |
|
||||||
| WM/DE | Hyprland | - |
|
| WM/DE | Hyprland | AwesomeWM |
|
||||||
| Compositor | Hyprland | - |
|
| Compositor | Hyprland | Picom (Jonaburg) |
|
||||||
| Bar | Tshell | - |
|
| Bar | tPanel | Wibar |
|
||||||
| Hotkeys | Hyprland | - |
|
| Hotkeys | Hyprland | Awful |
|
||||||
| Launcher | Tshell | - |
|
| Launcher | tPanel | Rofi |
|
||||||
| Notifications | Tshell | - |
|
| Notifications | tPanel | Naughty |
|
||||||
| Terminal | Wezterm | - |
|
| Terminal | Wezterm | Wezterm |
|
||||||
| Editor | Neovim | - |
|
| Editor | Neovim | Neovim |
|
||||||
|
|
||||||
## Showcase
|
## Showcase
|
||||||
|
|
||||||
| **Desktop** | **Tshell** |
|
### Desktop Hyprland
|
||||||
| :-------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------: |
|
|
||||||
| <img src="https://raw.githubusercontent.com/tuxdotrs/nix-config/refs/heads/main/assets/hyprland/desktop.png" width="100%"> | <img src="https://raw.githubusercontent.com/tuxdotrs/nix-config/refs/heads/main/assets/hyprland/tPanel.png" width="100%"> |
|
|
||||||
| **Workflow** | **Neovim** |
|
|
||||||
| <img src="https://raw.githubusercontent.com/tuxdotrs/nix-config/refs/heads/main/assets/hyprland/workflow.png" width="100%"> | <img src="https://github.com/user-attachments/assets/f881c672-8d77-43ec-b637-df5004c7d11f" width="100%"> |
|
|
||||||
| **Floating Terminal** | **Lazygit** |
|
|
||||||
| <img src="https://github.com/user-attachments/assets/3339ecf8-3264-4179-a093-337c844592a6" width="100%"> | <img src="https://github.com/user-attachments/assets/6df15881-fc2b-41b1-af3b-124fe0599b94" width="100%"> |
|
|
||||||
| **Telescope** | **Firefox** |
|
|
||||||
| <img src="https://github.com/user-attachments/assets/03be05bc-8ede-4d6e-a341-2761d89b7288" width="100%"> | <img src="https://github.com/user-attachments/assets/6f12173b-2480-404e-b01a-599115a886c0" width="100%"> |
|
|
||||||
|
|
||||||
## Spent months on this system configuration 😢
|

|
||||||
|
|
||||||
|
### tPanel
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Workflow
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Showcase
|
||||||
|
|
||||||
|
### Desktop AwesomeWM
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Neovim
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Floating Terminal
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Lazygit
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Telescope
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Firefox
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Spent weeks on this system configuration 😢
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://user-images.githubusercontent.com/97862450/265550523-2f66a8b6-4347-40af-89c6-12db3a61cc7c.jpeg" width="60%">
|
<img src="https://user-images.githubusercontent.com/97862450/265550523-2f66a8b6-4347-40af-89c6-12db3a61cc7c.jpeg" width="60%">
|
||||||
|
|||||||
1567
flake.lock
generated
1567
flake.lock
generated
File diff suppressed because it is too large
Load Diff
31
flake.nix
31
flake.nix
@@ -24,18 +24,8 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
tshell = {
|
tpanel = {
|
||||||
url = "github:tuxdotrs/tshell";
|
url = "github:tuxdotrs/tpanel";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
trok = {
|
|
||||||
url = "github:tuxdotrs/trok";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
tfolio = {
|
|
||||||
url = "git+ssh://git@github.com/tuxdotrs/tfolio.git";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -64,17 +54,6 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
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";
|
import-tree.url = "github:vic/import-tree";
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11-small";
|
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11-small";
|
||||||
@@ -89,11 +68,5 @@
|
|||||||
nixcord.url = "github:kaylorben/nixcord";
|
nixcord.url = "github:kaylorben/nixcord";
|
||||||
nur.url = "github:nix-community/nur";
|
nur.url = "github:nix-community/nur";
|
||||||
lanzaboote.url = "github:nix-community/lanzaboote/v1.1.0";
|
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";
|
|
||||||
llm-agents.url = "github:numtide/llm-agents.nix";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
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}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.nixOnDroid.core = {
|
|
||||||
nix.extraOptions = ''
|
|
||||||
experimental-features = nix-command flakes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
{
|
|
||||||
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
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
imports = [ inputs.flake-parts.flakeModules.modules ];
|
imports = [ inputs.flake-parts.flakeModules.modules ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,118 +0,0 @@
|
|||||||
{
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,32 +1,20 @@
|
|||||||
{inputs, ...}: {
|
{
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
flake.overlays = {
|
flake.overlays = {
|
||||||
modifications = final: prev: {
|
modifications = final: prev: {
|
||||||
omasnap = prev.callPackage ../../packages/omasnap.nix {};
|
|
||||||
tnvim = inputs.tnvim.packages.${prev.stdenv.hostPlatform.system}.default;
|
tnvim = inputs.tnvim.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
tshell = inputs.tshell.packages.${prev.stdenv.hostPlatform.system}.default;
|
tpanel = inputs.tpanel.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;
|
cyber-tux = inputs.cyber-tux.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
|
ags = inputs.tpanel.packages.${prev.stdenv.hostPlatform.system}.ags.default;
|
||||||
wezterm-git = inputs.wezterm-flake.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};
|
hyprland-git = inputs.hyprland.packages.${prev.stdenv.hostPlatform.system};
|
||||||
awww = inputs.awww.packages.${prev.stdenv.hostPlatform.system}.awww;
|
awww = inputs.awww.packages.${prev.stdenv.hostPlatform.system}.awww;
|
||||||
vicinae-extensions = inputs.vicinae-extensions.packages.${prev.stdenv.hostPlatform.system};
|
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 =
|
nix-index-small =
|
||||||
inputs.nix-index-database.packages.${prev.stdenv.hostPlatform.system}.nix-index-with-small-db;
|
inputs.nix-index-database.packages.${prev.stdenv.hostPlatform.system}.nix-index-with-small-db;
|
||||||
|
|
||||||
davinci-resolve = prev.davinci-resolve.override {
|
|
||||||
runCommandLocal = name: env: cmd:
|
|
||||||
if prev.lib.hasSuffix "-src.zip" name
|
|
||||||
then
|
|
||||||
prev.runCommandLocal name (env
|
|
||||||
// {
|
|
||||||
outputHash = "sha256-+3SB32EHpH9/0hM3h8CrO6f7V4ZAmxUFh3P8m6QDeO0=";
|
|
||||||
})
|
|
||||||
cmd
|
|
||||||
else prev.runCommandLocal name env cmd;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
stable-packages = final: _prev: {
|
stable-packages = final: _prev: {
|
||||||
@@ -37,18 +25,14 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
nur = inputs.nur.overlays.default;
|
nur = inputs.nur.overlays.default;
|
||||||
copyparty = inputs.copyparty.overlays.default;
|
|
||||||
llm-agents = inputs.llm-agents.overlays.shared-nixpkgs;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
perSystem = {system, ...}: let
|
perSystem =
|
||||||
pkgs = import inputs.nixpkgs {
|
{ system, ... }:
|
||||||
|
{
|
||||||
|
_module.args.pkgs = import inputs.nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = builtins.attrValues inputs.self.overlays;
|
overlays = builtins.attrValues inputs.self.overlays;
|
||||||
};
|
};
|
||||||
in {
|
|
||||||
_module.args.pkgs = pkgs;
|
|
||||||
|
|
||||||
packages.omasnap = pkgs.omasnap;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.treefmt-nix.flakeModule
|
inputs.treefmt-nix.flakeModule
|
||||||
];
|
];
|
||||||
@@ -8,7 +9,7 @@
|
|||||||
projectRootFile = "flake.nix";
|
projectRootFile = "flake.nix";
|
||||||
flakeCheck = true;
|
flakeCheck = true;
|
||||||
programs = {
|
programs = {
|
||||||
alejandra.enable = true;
|
nixfmt.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.core = {userName, ...}: {
|
flake.modules.homeManager.core =
|
||||||
|
{ userName, ... }:
|
||||||
|
{
|
||||||
programs.home-manager.enable = true;
|
programs.home-manager.enable = true;
|
||||||
systemd.user.startServices = "sd-switch";
|
systemd.user.startServices = "sd-switch";
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.homeManager.core = {
|
{
|
||||||
|
flake.modules.homeManager.core =
|
||||||
|
{
|
||||||
lib,
|
lib,
|
||||||
osConfig ? { },
|
osConfig ? { },
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
nixpkgs = lib.mkIf (!(osConfig.home-manager.useGlobalPkgs or false)) {
|
nixpkgs = lib.mkIf (!(osConfig.home-manager.useGlobalPkgs or false)) {
|
||||||
config = {
|
config = {
|
||||||
allowUnfree = true;
|
allowUnfree = true;
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {
|
flake.modules.homeManager.desktop =
|
||||||
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
configDir = "${config.xdg.configHome}/BraveSoftware/Brave-Origin";
|
let
|
||||||
|
configDir = "${config.xdg.configHome}/BraveSoftware/Brave-Browser";
|
||||||
|
|
||||||
extensionJson = ext: {
|
extensionJson = ext: {
|
||||||
name = "${configDir}/External Extensions/${ext.id}.json";
|
name = "${configDir}/External Extensions/${ext.id}.json";
|
||||||
@@ -20,18 +22,17 @@
|
|||||||
{ id = "bfnaelmomeimhlpmgjnjophhpkkoljpa"; } # Phantom
|
{ id = "bfnaelmomeimhlpmgjnjophhpkkoljpa"; } # Phantom
|
||||||
{ id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; } # DarkReader
|
{ id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; } # DarkReader
|
||||||
];
|
];
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
programs.chromium = {
|
programs.chromium = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.brave-origin;
|
package = pkgs.brave;
|
||||||
commandLineArgs = [
|
commandLineArgs = [
|
||||||
"--disable-features=WebRtcAllowInputVolumeAdjustment"
|
"--disable-features=WebRtcAllowInputVolumeAdjustment"
|
||||||
"--force-device-scale-factor=1.0"
|
"--force-device-scale-factor=1.0"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
home.packages = [pkgs.brave];
|
|
||||||
|
|
||||||
home.file = builtins.listToAttrs (map extensionJson extensions);
|
home.file = builtins.listToAttrs (map extensionJson extensions);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {
|
flake.modules.homeManager.desktop =
|
||||||
inputs,
|
{ inputs, userName, ... }:
|
||||||
userName,
|
{
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
imports = [
|
||||||
inputs.nixcord.homeModules.nixcord
|
inputs.nixcord.homeModules.nixcord
|
||||||
];
|
];
|
||||||
@@ -20,22 +18,11 @@
|
|||||||
frameless = true;
|
frameless = true;
|
||||||
plugins = {
|
plugins = {
|
||||||
hideMedia.enable = true;
|
hideMedia.enable = true;
|
||||||
anonymiseFileNames.enable = true;
|
|
||||||
copyFileContents.enable = true;
|
|
||||||
noTypingAnimation.enable = true;
|
|
||||||
readAllNotificationsButton.enable = true;
|
|
||||||
silentTyping.enable = true;
|
|
||||||
validUser.enable = true;
|
|
||||||
biggerStreamPreview.enable = true;
|
|
||||||
ignoreActivities = {
|
ignoreActivities = {
|
||||||
enable = true;
|
enable = true;
|
||||||
ignorePlaying = true;
|
ignorePlaying = true;
|
||||||
ignoreWatching = true;
|
ignoreWatching = true;
|
||||||
};
|
};
|
||||||
sortFriendRequests = {
|
|
||||||
enable = true;
|
|
||||||
showDates = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
dorion = {
|
dorion = {
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {
|
flake.modules.homeManager.desktop =
|
||||||
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@
|
|||||||
font-size = 12;
|
font-size = 12;
|
||||||
font-family = "JetBrainsMono Nerd Font";
|
font-family = "JetBrainsMono Nerd Font";
|
||||||
theme = "poimandres";
|
theme = "poimandres";
|
||||||
custom-shader = "shaders/cursor_warp.glsl";
|
|
||||||
custom-shader-animation = "always";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
themes = {
|
themes = {
|
||||||
|
|||||||
@@ -1,19 +1,17 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {
|
flake.modules.homeManager.desktop =
|
||||||
config,
|
{ config, pkgs, ... }:
|
||||||
pkgs,
|
{
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# TODO: Hyprland 0.55 switched to Lua-based configuration.
|
# 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.
|
# Until the Home Manager module is updated, we symlink our config instead.
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
# wayland.windowManager.hyprland = {
|
||||||
package = null;
|
# enable = true;
|
||||||
portalPackage = null;
|
# package = null;
|
||||||
xwayland.enable = true;
|
# portalPackage = null;
|
||||||
configType = "hyprlang";
|
# xwayland.enable = true;
|
||||||
systemd.variables = ["--all"];
|
# systemd.variables = [ "--all" ];
|
||||||
};
|
# };
|
||||||
|
|
||||||
home.file = {
|
home.file = {
|
||||||
".config/hypr/config".source =
|
".config/hypr/config".source =
|
||||||
@@ -30,7 +28,6 @@
|
|||||||
hyprshot
|
hyprshot
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
wl-screenrec
|
wl-screenrec
|
||||||
omasnap
|
|
||||||
(writeShellScriptBin "hypr-screenshot" ''
|
(writeShellScriptBin "hypr-screenshot" ''
|
||||||
hyprshot -m region -r ppm - | satty --filename -
|
hyprshot -m region -r ppm - | satty --filename -
|
||||||
'')
|
'')
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.homeManager.desktop = {pkgs, ...}: {
|
|
||||||
programs.kitty = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.kitty;
|
|
||||||
|
|
||||||
font = {
|
|
||||||
name = "JetBrainsMono Nerd Font";
|
|
||||||
size = 12.0;
|
|
||||||
};
|
|
||||||
|
|
||||||
shellIntegration.enableZshIntegration = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
background_opacity = "1.0";
|
|
||||||
|
|
||||||
enable_audio_bell = false;
|
|
||||||
confirm_os_window_close = 0;
|
|
||||||
|
|
||||||
cursor_trail = 3;
|
|
||||||
|
|
||||||
# Window
|
|
||||||
window_padding_width = 10;
|
|
||||||
|
|
||||||
foreground = "#f1f1f1";
|
|
||||||
background = "#0f0f0f";
|
|
||||||
|
|
||||||
# Borders
|
|
||||||
active_border_color = "#3d59a1";
|
|
||||||
inactive_border_color = "#101014";
|
|
||||||
bell_border_color = "#fffac2";
|
|
||||||
|
|
||||||
# Colors
|
|
||||||
color0 = "#0f0f0f";
|
|
||||||
color8 = "#a6accd";
|
|
||||||
|
|
||||||
color1 = "#d0679d";
|
|
||||||
color9 = "#d0679d";
|
|
||||||
|
|
||||||
color2 = "#5de4c7";
|
|
||||||
color10 = "#5de4c7";
|
|
||||||
|
|
||||||
color3 = "#fffac2";
|
|
||||||
color11 = "#fffac2";
|
|
||||||
|
|
||||||
color4 = "#89ddff";
|
|
||||||
color12 = "#add7ff";
|
|
||||||
|
|
||||||
color5 = "#fcc5e9";
|
|
||||||
color13 = "#fae4fc";
|
|
||||||
|
|
||||||
color6 = "#add7ff";
|
|
||||||
color14 = "#89ddff";
|
|
||||||
|
|
||||||
color7 = "#ffffff";
|
|
||||||
color15 = "#ffffff";
|
|
||||||
|
|
||||||
# Cursor
|
|
||||||
cursor = "#ffffff";
|
|
||||||
cursor_text_color = "#0f0f0f";
|
|
||||||
|
|
||||||
# Selection
|
|
||||||
selection_foreground = "none";
|
|
||||||
selection_background = "#28344a";
|
|
||||||
|
|
||||||
# URLs
|
|
||||||
url_color = "#5de4c7";
|
|
||||||
|
|
||||||
# Tab bar
|
|
||||||
tab_bar_edge = "bottom";
|
|
||||||
tab_bar_style = "fade";
|
|
||||||
tab_fade = "1";
|
|
||||||
|
|
||||||
active_tab_foreground = "#3d59a1";
|
|
||||||
active_tab_background = "#16161e";
|
|
||||||
active_tab_font_style = "bold";
|
|
||||||
|
|
||||||
inactive_tab_foreground = "#787c99";
|
|
||||||
inactive_tab_background = "#16161e";
|
|
||||||
inactive_tab_font_style = "bold";
|
|
||||||
|
|
||||||
tab_bar_background = "#101014";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,17 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.homeManager.desktop = {
|
{
|
||||||
|
flake.modules.homeManager.desktop =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.tnix.services.lan-mouse;
|
cfg = config.tnix.services.lan-mouse;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [ inputs.lan-mouse.homeManagerModules.default ];
|
imports = [ inputs.lan-mouse.homeManagerModules.default ];
|
||||||
|
|
||||||
options.tnix.services.lan-mouse = {
|
options.tnix.services.lan-mouse = {
|
||||||
@@ -24,6 +28,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
programs.lan-mouse = {
|
programs.lan-mouse = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemd = true;
|
systemd = true;
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.homeManager.desktop = {
|
{
|
||||||
|
flake.modules.homeManager.desktop =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.tnix.desktop.mangowm;
|
cfg = config.tnix.desktop.mangowm;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.mango.hmModules.mango
|
inputs.mango.hmModules.mango
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.homeManager.desktop = {
|
|
||||||
xdg.mimeApps = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
defaultApplications = {
|
|
||||||
"x-scheme-handler/discord" = "vesktop.desktop";
|
|
||||||
|
|
||||||
"text/html" = "brave-origin.desktop";
|
|
||||||
"x-scheme-handler/http" = "brave-origin.desktop";
|
|
||||||
"x-scheme-handler/https" = "brave-origin.desktop";
|
|
||||||
"x-scheme-handler/about" = "brave-origin.desktop";
|
|
||||||
"x-scheme-handler/unknown" = "brave-origin.desktop";
|
|
||||||
|
|
||||||
"x-scheme-handler/claude-cli" = "claude-code-url-handler.desktop";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {pkgs, ...}: {
|
flake.modules.homeManager.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.mpv = {
|
programs.mpv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
scripts = (
|
scripts = (
|
||||||
with pkgs.mpvScripts; [
|
with pkgs.mpvScripts;
|
||||||
|
[
|
||||||
modernz
|
modernz
|
||||||
thumbfast
|
thumbfast
|
||||||
mpris
|
mpris
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
{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;
|
|
||||||
avatarPath = "/home/tux/Wallpapers/tux.png";
|
|
||||||
muteSfx = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
bar = {
|
|
||||||
position = "top";
|
|
||||||
style = "modular";
|
|
||||||
time = {
|
|
||||||
format = "hh:mm:ss A";
|
|
||||||
};
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
idle = {
|
|
||||||
enabled = true;
|
|
||||||
manualInhibit = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {pkgs, ...}: {
|
flake.modules.homeManager.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
home.pointerCursor = {
|
home.pointerCursor = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.bibata-cursors;
|
package = pkgs.bibata-cursors;
|
||||||
name = "Bibata-Modern-Ice";
|
name = "Bibata-Modern-Ice";
|
||||||
size = 24;
|
size = 28;
|
||||||
};
|
};
|
||||||
|
|
||||||
qt = {
|
qt = {
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {pkgs, ...}: {
|
flake.modules.homeManager.desktop =
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
programs.vicinae = {
|
programs.vicinae = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemd = {
|
systemd = {
|
||||||
@@ -9,16 +14,20 @@
|
|||||||
useLayerShell = true;
|
useLayerShell = true;
|
||||||
|
|
||||||
extensions = with pkgs.vicinae-extensions; [
|
extensions = with pkgs.vicinae-extensions; [
|
||||||
|
# @TODO broken in upstream repo
|
||||||
|
# bluetooth
|
||||||
nix
|
nix
|
||||||
ssh
|
ssh
|
||||||
awww-switcher
|
awww-switcher
|
||||||
process-manager
|
process-manager
|
||||||
pulseaudio
|
pulseaudio
|
||||||
|
wifi-commander
|
||||||
port-killer
|
port-killer
|
||||||
|
silverbullet
|
||||||
];
|
];
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
close_on_focus_loss = false;
|
close_on_focus_loss = true;
|
||||||
consider_preedit = true;
|
consider_preedit = true;
|
||||||
pop_to_root_on_close = true;
|
pop_to_root_on_close = true;
|
||||||
favicon_service = "twenty";
|
favicon_service = "twenty";
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
{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";
|
|
||||||
on_demand_loading = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
parakeet = {
|
|
||||||
on_demand_loading = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.desktop = {pkgs, ...}: {
|
flake.modules.homeManager.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.wezterm = {
|
programs.wezterm = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.wezterm-git;
|
package = pkgs.wezterm-git;
|
||||||
|
|||||||
@@ -29,25 +29,6 @@
|
|||||||
diagnostics = false;
|
diagnostics = false;
|
||||||
metrics = false;
|
metrics = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
agent = {
|
|
||||||
dock = "right";
|
|
||||||
favorite_models = [];
|
|
||||||
model_parameters = [];
|
|
||||||
};
|
|
||||||
|
|
||||||
collaboration_panel = {
|
|
||||||
button = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
agent_servers = {
|
|
||||||
opencode = {
|
|
||||||
default_config_options = {
|
|
||||||
model = "opencode-go/deepseek-v4.1-flash";
|
|
||||||
};
|
|
||||||
type = "registry";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.homeManager.desktop = {osConfig, ...}: {
|
|
||||||
programs.lutris = {
|
|
||||||
enable = true;
|
|
||||||
steamPackage = osConfig.programs.steam.package;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.shell = {
|
flake.modules.homeManager.shell =
|
||||||
|
{
|
||||||
userName,
|
userName,
|
||||||
userEmail,
|
userEmail,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
signing = {
|
signing = {
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.homeManager.shell = {
|
|
||||||
programs.gh = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.shell = {pkgs, ...}: {
|
flake.modules.homeManager.shell =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
systemctl-tui
|
systemctl-tui
|
||||||
zip
|
zip
|
||||||
@@ -9,78 +11,6 @@
|
|||||||
jq
|
jq
|
||||||
dig
|
dig
|
||||||
lsof
|
lsof
|
||||||
trok
|
|
||||||
|
|
||||||
(writeShellScriptBin "hm-override" ''
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
echo "Usage:"
|
|
||||||
echo " $0 <filename> Override symlink"
|
|
||||||
echo " $0 <filename> --restore Restore symlink"
|
|
||||||
echo " $0 <filename> -r Restore symlink"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ $# -lt 1 || $# -gt 2 ]]; then
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
FILE="$1"
|
|
||||||
LINK_BACKUP="''${FILE}.backup-link"
|
|
||||||
|
|
||||||
# Restore
|
|
||||||
if [[ "''${2:-}" == "--restore" || "''${2:-}" == "-r" ]]; then
|
|
||||||
if [[ ! -f "$LINK_BACKUP" ]]; then
|
|
||||||
echo "Error: no backup symlink found: $LINK_BACKUP"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
TARGET="$(cat "$LINK_BACKUP")"
|
|
||||||
|
|
||||||
# Remove the temporary override.
|
|
||||||
rm -f "$FILE"
|
|
||||||
|
|
||||||
# Restore the original symlink.
|
|
||||||
ln -s "$TARGET" "$FILE"
|
|
||||||
|
|
||||||
# Remove the temporary symlink target backup.
|
|
||||||
rm "$LINK_BACKUP"
|
|
||||||
|
|
||||||
echo "Restored: $FILE -> $TARGET"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Override mode
|
|
||||||
if [[ ! -L "$FILE" ]]; then
|
|
||||||
echo "Error: $FILE is not a symlink"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -e "$LINK_BACKUP" ]]; then
|
|
||||||
echo "Error: backup already exists: $LINK_BACKUP"
|
|
||||||
echo "Restore the existing override before running again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remember the original symlink target.
|
|
||||||
TARGET="$(readlink "$FILE")"
|
|
||||||
printf '%s\n' "$TARGET" > "$LINK_BACKUP"
|
|
||||||
|
|
||||||
# Copy the contents before removing the symlink.
|
|
||||||
cp "$FILE" "$FILE.tmp"
|
|
||||||
|
|
||||||
# Replace the symlink with a regular writable file.
|
|
||||||
rm "$FILE"
|
|
||||||
mv "$FILE.tmp" "$FILE"
|
|
||||||
|
|
||||||
chmod u+w "$FILE"
|
|
||||||
|
|
||||||
echo "Overridden: $FILE"
|
|
||||||
echo "Original: $FILE -> $TARGET"
|
|
||||||
'')
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.shell = {pkgs, ...}: {
|
flake.modules.homeManager.shell =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
home.file = {
|
home.file = {
|
||||||
".config/nvim" = {
|
".config/nvim" = {
|
||||||
recursive = true;
|
recursive = true;
|
||||||
@@ -12,6 +14,8 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
vim.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.shell = {pkgs, ...}: {
|
flake.modules.homeManager.shell = {
|
||||||
programs.opencode = {
|
programs.opencode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.opencode-git;
|
|
||||||
tui = {
|
tui = {
|
||||||
theme = "system";
|
theme = "system";
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
model = "opencode-go/deepseek-v4.1-flash";
|
model = "opencode-go/kimi-k3";
|
||||||
provider = {
|
provider = {
|
||||||
google = {
|
google = {
|
||||||
options = {
|
options = {
|
||||||
@@ -24,14 +23,8 @@
|
|||||||
apiKey = "{file:/run/secrets/opencode-go-api-key}";
|
apiKey = "{file:/run/secrets/opencode-go-api-key}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
zai-coding-plan = {
|
|
||||||
options = {
|
|
||||||
apiKey = "{file:/run/secrets/zai-coding-plan-api-key}";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
plugin = ["@dietrichgebert/ponytail"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.homeManager.shell = {pkgs, ...}: {
|
|
||||||
home.file.".pi/agent/auth.json".text = builtins.toJSON {
|
|
||||||
google = {
|
|
||||||
type = "api_key";
|
|
||||||
key = "!cat /run/secrets/gemini-api-key";
|
|
||||||
};
|
|
||||||
openrouter = {
|
|
||||||
type = "api_key";
|
|
||||||
key = "!cat /run/secrets/openrouter-api-key";
|
|
||||||
};
|
|
||||||
opencode-go = {
|
|
||||||
type = "api_key";
|
|
||||||
key = "!cat /run/secrets/opencode-go-api-key";
|
|
||||||
};
|
|
||||||
zai = {
|
|
||||||
type = "api_key";
|
|
||||||
key = "!cat /run/secrets/zai-coding-plan-api-key";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.pi-coding-agent = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.llm-agents.pi;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
defaultModel = "glm-5.3-flash";
|
|
||||||
defaultProvider = "zai";
|
|
||||||
defaultThinkingLevel = "medium";
|
|
||||||
theme = "dark";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = with pkgs; [llm-agents.omp];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,47 +1,58 @@
|
|||||||
{
|
{
|
||||||
flake.modules.homeManager.shell = {pkgs, ...}: let
|
flake.modules.homeManager.shell =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
bg = "default";
|
bg = "default";
|
||||||
fg = "default";
|
fg = "default";
|
||||||
bg2 = "brightblack";
|
bg2 = "brightblack";
|
||||||
fg2 = "white";
|
fg2 = "white";
|
||||||
color = c: "#{@${c}}";
|
color = c: "#{@${c}}";
|
||||||
|
|
||||||
indicator = let
|
indicator =
|
||||||
|
let
|
||||||
accent = color "indicator_color";
|
accent = color "indicator_color";
|
||||||
content = " ";
|
content = " ";
|
||||||
in "#[reverse,fg=${accent}]#{?client_prefix,${content},}";
|
in
|
||||||
|
"#[reverse,fg=${accent}]#{?client_prefix,${content},}";
|
||||||
|
|
||||||
current_window = let
|
current_window =
|
||||||
|
let
|
||||||
accent = color "main_accent";
|
accent = color "main_accent";
|
||||||
index = "#[reverse,fg=${accent},bg=${fg}] #I ";
|
index = "#[reverse,fg=${accent},bg=${fg}] #I ";
|
||||||
name = "#[fg=${bg2},bg=${fg2}] #W ";
|
name = "#[fg=${bg2},bg=${fg2}] #W ";
|
||||||
# flags = "#{?window_flags,#{window_flags}, }";
|
# flags = "#{?window_flags,#{window_flags}, }";
|
||||||
in "${index}${name}";
|
in
|
||||||
|
"${index}${name}";
|
||||||
|
|
||||||
window_status = let
|
window_status =
|
||||||
|
let
|
||||||
accent = color "window_color";
|
accent = color "window_color";
|
||||||
index = "#[reverse,fg=${accent},bg=${fg}] #I ";
|
index = "#[reverse,fg=${accent},bg=${fg}] #I ";
|
||||||
name = "#[fg=${bg2},bg=${fg2}] #W ";
|
name = "#[fg=${bg2},bg=${fg2}] #W ";
|
||||||
# flags = "#{?window_flags,#{window_flags}, }";
|
# flags = "#{?window_flags,#{window_flags}, }";
|
||||||
in "${index}${name}";
|
in
|
||||||
|
"${index}${name}";
|
||||||
|
|
||||||
battery = let
|
battery =
|
||||||
|
let
|
||||||
percentage = pkgs.writeShellScript "percentage" (
|
percentage = pkgs.writeShellScript "percentage" (
|
||||||
if pkgs.stdenv.isDarwin
|
if pkgs.stdenv.isDarwin then
|
||||||
then ''
|
''
|
||||||
echo $(pmset -g batt | grep -o "[0-9]\+%" | tr '%' ' ')
|
echo $(pmset -g batt | grep -o "[0-9]\+%" | tr '%' ' ')
|
||||||
''
|
''
|
||||||
else ''
|
else
|
||||||
|
''
|
||||||
path="/org/freedesktop/UPower/devices/DisplayDevice"
|
path="/org/freedesktop/UPower/devices/DisplayDevice"
|
||||||
echo $(${pkgs.upower}/bin/upower -i $path | grep -o "[0-9]\+%" | tr '%' ' ')
|
echo $(${pkgs.upower}/bin/upower -i $path | grep -o "[0-9]\+%" | tr '%' ' ')
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
state = pkgs.writeShellScript "state" (
|
state = pkgs.writeShellScript "state" (
|
||||||
if pkgs.stdenv.isDarwin
|
if pkgs.stdenv.isDarwin then
|
||||||
then ''
|
''
|
||||||
echo $(pmset -g batt | awk '{print $4}')
|
echo $(pmset -g batt | awk '{print $4}')
|
||||||
''
|
''
|
||||||
else ''
|
else
|
||||||
|
''
|
||||||
path="/org/freedesktop/UPower/devices/DisplayDevice"
|
path="/org/freedesktop/UPower/devices/DisplayDevice"
|
||||||
echo $(${pkgs.upower}/bin/upower -i $path | grep state | awk '{print $2}')
|
echo $(${pkgs.upower}/bin/upower -i $path | grep state | awk '{print $2}')
|
||||||
''
|
''
|
||||||
@@ -66,25 +77,31 @@
|
|||||||
elif [ $percentage -ge 0 ]; then echo "red"
|
elif [ $percentage -ge 0 ]; then echo "red"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
in "#[fg=#(${color})]#(${icon}) #[fg=${fg}]#(${percentage})%";
|
in
|
||||||
|
"#[fg=#(${color})]#(${icon}) #[fg=${fg}]#(${percentage})%";
|
||||||
|
|
||||||
pwd = let
|
pwd =
|
||||||
|
let
|
||||||
accent = color "main_accent";
|
accent = color "main_accent";
|
||||||
icon = "#[fg=${accent}] ";
|
icon = "#[fg=${accent}] ";
|
||||||
format = "#[fg=${fg}]#{b:pane_current_path}";
|
format = "#[fg=${fg}]#{b:pane_current_path}";
|
||||||
in "${icon}${format}";
|
in
|
||||||
|
"${icon}${format}";
|
||||||
|
|
||||||
git = let
|
git =
|
||||||
|
let
|
||||||
icon = pkgs.writeShellScript "branch" ''
|
icon = pkgs.writeShellScript "branch" ''
|
||||||
git -C "$1" branch && echo " "
|
git -C "$1" branch && echo " "
|
||||||
'';
|
'';
|
||||||
branch = pkgs.writeShellScript "branch" ''
|
branch = pkgs.writeShellScript "branch" ''
|
||||||
git -C "$1" rev-parse --abbrev-ref HEAD
|
git -C "$1" rev-parse --abbrev-ref HEAD
|
||||||
'';
|
'';
|
||||||
in "#[fg=magenta]#(${icon} #{pane_current_path})#(${branch} #{pane_current_path})";
|
in
|
||||||
|
"#[fg=magenta]#(${icon} #{pane_current_path})#(${branch} #{pane_current_path})";
|
||||||
|
|
||||||
separator = "#[fg=${fg}]|";
|
separator = "#[fg=${fg}]|";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
baseIndex = 1;
|
baseIndex = 1;
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
{lib, ...}: {
|
{ lib, ... }:
|
||||||
flake.modules.homeManager.shell = {pkgs, ...}: {
|
{
|
||||||
|
flake.modules.homeManager.shell =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
history = {
|
history = {
|
||||||
@@ -18,10 +21,6 @@
|
|||||||
bindkey "^A" vi-beginning-of-line
|
bindkey "^A" vi-beginning-of-line
|
||||||
bindkey "^E" vi-end-of-line
|
bindkey "^E" vi-end-of-line
|
||||||
bindkey '^R' fzf-history-widget
|
bindkey '^R' fzf-history-widget
|
||||||
|
|
||||||
PATH=$PATH:~/.cargo/bin:~/.local/bin
|
|
||||||
alias stui='systemctl-tui'
|
|
||||||
alias vim='nvim --clean'
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,23 +1,17 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
flake.modules.nixos.alpha =
|
||||||
{
|
{
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
flake.modules.nixos.alpha = {
|
|
||||||
hostName,
|
hostName,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
} @ innerArgs: {
|
}@innerArgs:
|
||||||
imports = with config.flake.modules.nixos;
|
{
|
||||||
[
|
imports = with config.flake.modules.nixos; [
|
||||||
boot
|
boot
|
||||||
networking
|
networking
|
||||||
virtualisation
|
virtualisation
|
||||||
services
|
services
|
||||||
]
|
|
||||||
++ [
|
|
||||||
inputs.trok.nixosModules.default
|
|
||||||
inputs.tfolio.nixosModules.default
|
|
||||||
];
|
];
|
||||||
|
|
||||||
tnix = {
|
tnix = {
|
||||||
@@ -40,18 +34,18 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
openssh = {
|
openssh.enable = true;
|
||||||
enable = true;
|
|
||||||
ports = [
|
|
||||||
23
|
|
||||||
];
|
|
||||||
};
|
|
||||||
netbird-client.enable = true;
|
netbird-client.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
pangolin = {
|
nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
domain = "lab.tux.rs";
|
||||||
|
};
|
||||||
|
|
||||||
|
pangolin = {
|
||||||
|
enable = false;
|
||||||
domain = "pangolin.lab.tux.rs";
|
domain = "pangolin.lab.tux.rs";
|
||||||
baseDomain = "lab.tux.rs";
|
baseDomain = "lab.tux.rs";
|
||||||
environmentFile = innerArgs.config.sops.secrets."pangolin".path;
|
environmentFile = innerArgs.config.sops.secrets."pangolin".path;
|
||||||
@@ -59,17 +53,21 @@
|
|||||||
|
|
||||||
uptime-kuma = {
|
uptime-kuma = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
port = 1111;
|
||||||
domain = "status.lab.tux.rs";
|
domain = "status.lab.tux.rs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
vaultwarden = {
|
||||||
|
enable = true;
|
||||||
|
port = 9999;
|
||||||
|
domain = "bw.lab.tux.rs";
|
||||||
|
};
|
||||||
|
|
||||||
mediaflow-proxy = {
|
mediaflow-proxy = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
port = 8888;
|
||||||
environmentFile = innerArgs.config.sops.secrets."mediaflow-proxy".path;
|
environmentFile = innerArgs.config.sops.secrets."mediaflow-proxy".path;
|
||||||
};
|
};
|
||||||
|
|
||||||
trok = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualisation = {
|
virtualisation = {
|
||||||
@@ -98,11 +96,6 @@
|
|||||||
owner = userName;
|
owner = userName;
|
||||||
};
|
};
|
||||||
|
|
||||||
zai-coding-plan-api-key = {
|
|
||||||
sopsFile = ./secrets.yaml;
|
|
||||||
owner = userName;
|
|
||||||
};
|
|
||||||
|
|
||||||
netbird-key = {
|
netbird-key = {
|
||||||
sopsFile = ./secrets.yaml;
|
sopsFile = ./secrets.yaml;
|
||||||
owner = userName;
|
owner = userName;
|
||||||
@@ -136,8 +129,6 @@
|
|||||||
firewall.enable = false;
|
firewall.enable = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.tfolio.enable = true;
|
|
||||||
|
|
||||||
system.stateVersion = "26.05";
|
system.stateVersion = "26.05";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
30
modules/hosts/alpha/default.nix
Normal file
30
modules/hosts/alpha/default.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostName = "alpha";
|
||||||
|
userName = "tux";
|
||||||
|
userEmail = "t@tux.rs";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
unstable = true;
|
||||||
|
nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit
|
||||||
|
hostName
|
||||||
|
userName
|
||||||
|
userEmail
|
||||||
|
system
|
||||||
|
;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
config.flake.modules.nixos.core
|
||||||
|
config.flake.modules.nixos.${hostName}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.alpha = {
|
{
|
||||||
config,
|
flake.modules.nixos.alpha =
|
||||||
lib,
|
{ config, lib, ... }:
|
||||||
...
|
let
|
||||||
}: let
|
|
||||||
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
||||||
isLegacy = config.tnix.boot.legacy.enable;
|
isLegacy = config.tnix.boot.legacy.enable;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
];
|
];
|
||||||
@@ -16,8 +16,7 @@
|
|||||||
type = "disk";
|
type = "disk";
|
||||||
content = {
|
content = {
|
||||||
type = "gpt";
|
type = "gpt";
|
||||||
partitions =
|
partitions = {
|
||||||
{
|
|
||||||
ESP = {
|
ESP = {
|
||||||
size = "1G";
|
size = "1G";
|
||||||
type = "EF00";
|
type = "EF00";
|
||||||
@@ -37,8 +36,7 @@
|
|||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
# Base subvolumes that always exist
|
# Base subvolumes that always exist
|
||||||
subvolumes =
|
subvolumes = {
|
||||||
{
|
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountOptions = [
|
mountOptions = [
|
||||||
"compress=zstd"
|
"compress=zstd"
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.alpha = {
|
flake.modules.nixos.alpha =
|
||||||
|
{
|
||||||
lib,
|
lib,
|
||||||
modulesPath,
|
modulesPath,
|
||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
{ ... }:
|
||||||
{
|
{
|
||||||
flake.modules.homeManager.alpha = {
|
flake.modules.homeManager.alpha = {
|
||||||
home.stateVersion = "26.05";
|
home.stateVersion = "26.05";
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ tux-password: ENC[AES256_GCM,data:tvx3nMoIuQSotxHDWLs7UesnyWY3u3EwkqAIzCw3Z2AJse
|
|||||||
gemini-api-key: ENC[AES256_GCM,data:Bo3Z5Jhce0UOBn77I2AcrXYbBgPLDx0eOjPC8J63E/VWNhMPbbxb,iv:iWOsTACOMcK3oqq848WnJ5Ku3tYy1aadmLB4IMgoyqg=,tag:BPzlXoP8/iJaj8c/YFCWyg==,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]
|
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]
|
opencode-go-api-key: ENC[AES256_GCM,data:ipKkNcRqBERIQ6f6yFzVm999s+UwJys4elHWhzpL441RfOaG9MmRWMcD+wRLJ7DSWFjYu6uUPF7TKez8J6abWeKDgg==,iv:FDSYE3R8zKVxWiP2S/sCVcwEu3fEXg/hCeqCRSF+c6g=,tag:5RDuMFGMoN6xwAYj0HiyjQ==,type:str]
|
||||||
zai-coding-plan-api-key: ENC[AES256_GCM,data:HrNfR+Ux/Iyt4qkD1uXzDFQb+l0ltMMrbRahEG3pofFbw98VXfRFbhspcxh9vEyqkw==,iv:lzkLxPV7Q38dn0IEgtchVMrvnVBz4e5q282704x/hmU=,tag:IKzE6Tp6D93nJHoEvCPGBQ==,type:str]
|
|
||||||
netbird-key: ENC[AES256_GCM,data:NilfyafnGhFVYD6q4+jJQxlhXNdNC8BQ1CZfu8a5wc693Y1h,iv:Rpl0OpkQdBMPpIJ08t9Z0AjDAW6c97pFZKO1KPu8ipY=,tag:du3d0SQWuqJtJSwhSgJE4g==,type:str]
|
netbird-key: ENC[AES256_GCM,data:NilfyafnGhFVYD6q4+jJQxlhXNdNC8BQ1CZfu8a5wc693Y1h,iv:Rpl0OpkQdBMPpIJ08t9Z0AjDAW6c97pFZKO1KPu8ipY=,tag:du3d0SQWuqJtJSwhSgJE4g==,type:str]
|
||||||
cloudflare-credentials:
|
cloudflare-credentials:
|
||||||
email: ENC[AES256_GCM,data:K9L6H4dqNNgbCFg=,iv:jirDJb+Y2sXrup6/doRmOdd8tV7zLnttcgG75r4Fs04=,tag:XeyMVC+Q9TEuTxSfOeR2Uw==,type:str]
|
email: ENC[AES256_GCM,data:K9L6H4dqNNgbCFg=,iv:jirDJb+Y2sXrup6/doRmOdd8tV7zLnttcgG75r4Fs04=,tag:XeyMVC+Q9TEuTxSfOeR2Uw==,type:str]
|
||||||
@@ -30,7 +29,7 @@ sops:
|
|||||||
4TkObqH8ddGpbd7cX5a/wboTjYuEdAviWxjK2oBPgtcFc1f03X3tmA==
|
4TkObqH8ddGpbd7cX5a/wboTjYuEdAviWxjK2oBPgtcFc1f03X3tmA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1mzxxxzhy3us3rd960ufqv7vlxj5cnug86md6x69llg9ujzw2pqws057llf
|
recipient: age1mzxxxzhy3us3rd960ufqv7vlxj5cnug86md6x69llg9ujzw2pqws057llf
|
||||||
lastmodified: "2026-09-16T14:21:00Z"
|
lastmodified: "2026-08-07T20:02:00Z"
|
||||||
mac: ENC[AES256_GCM,data:Aqg1cboHKW5QrJooVIqgbHTFg9EpTEnfCv/RRSp0efzyXvDrR7eG5WTvJPE9IbrmS190yvOlT0fw1Bhzyr8kiyoO71sbyUessw5IMUGcLP+m2FNtt8osc7fSTGseojv3MXBndOMDEOpT+Clv6hbv/rr5eGbb05oK6rW97/pDDfU=,iv:s/9PAHHQ0mHQJosKGclSnumHqm6CG3fDVKD5eT4Q1Y0=,tag:3pgycAwYUz9aEOy4/aW30Q==,type:str]
|
mac: ENC[AES256_GCM,data:VrA2OPCcVvAzYjZTkHPxytclISP24P1FqiIQjSGQItkMLieom80N6933hB0Tdn3BM6600bHt2NweSqHjGx//pn2Gbur4pxeN3TpF9tKXc12IcAThUL9g48fMbk5y+kWWVUF1Pezod0YnzWAlalUXFqvKinfm4RqPNjDjndA/dcI=,iv:xfs9XD5ZIQ6dyMMZ8OE5FEs/hrSr/T2VwC7XvZ7xC2A=,tag:jYWo2kgwwltKB+njiYaPkQ==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.3
|
version: 3.13.3
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
flake.modules.nixos.arcturus = {
|
{
|
||||||
pkgs,
|
flake.modules.nixos.arcturus =
|
||||||
|
{
|
||||||
hostName,
|
hostName,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
} @ innerArgs: {
|
}@innerArgs:
|
||||||
|
{
|
||||||
imports = with config.flake.modules.nixos; [
|
imports = with config.flake.modules.nixos; [
|
||||||
boot
|
boot
|
||||||
networking
|
networking
|
||||||
@@ -22,18 +24,12 @@
|
|||||||
home = {
|
home = {
|
||||||
directories = [
|
directories = [
|
||||||
"Distrobox"
|
"Distrobox"
|
||||||
".bun"
|
|
||||||
".rustup"
|
|
||||||
".config/sops"
|
".config/sops"
|
||||||
".config/nix"
|
|
||||||
".local/share/nvim"
|
".local/share/nvim"
|
||||||
".local/share/opencode"
|
".local/share/opencode"
|
||||||
".local/share/zsh"
|
".local/share/zsh"
|
||||||
".local/share/zoxide"
|
".local/share/zoxide"
|
||||||
".local/state/lazygit"
|
".local/state/lazygit"
|
||||||
|
|
||||||
".pi/agent/sessions"
|
|
||||||
".omp"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
files = [
|
files = [
|
||||||
@@ -47,49 +43,16 @@
|
|||||||
openssh.enable = true;
|
openssh.enable = true;
|
||||||
netbird-client.enable = true;
|
netbird-client.enable = true;
|
||||||
newt = {
|
newt = {
|
||||||
enable = true;
|
enable = false;
|
||||||
environmentFile = innerArgs.config.sops.secrets.newt.path;
|
environmentFile = innerArgs.config.sops.secrets.newt.path;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
hermes-agent = {
|
|
||||||
enable = true;
|
|
||||||
environmentFiles = [innerArgs.config.sops.secrets.hermes.path];
|
|
||||||
};
|
|
||||||
|
|
||||||
cyber-tux = {
|
cyber-tux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
environmentFile = innerArgs.config.sops.secrets.discord-token.path;
|
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
coder = {
|
|
||||||
enable = true;
|
|
||||||
domain = "coder.lab.tux.rs";
|
|
||||||
configurePangolin = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualisation = {
|
virtualisation = {
|
||||||
@@ -123,11 +86,6 @@
|
|||||||
owner = userName;
|
owner = userName;
|
||||||
};
|
};
|
||||||
|
|
||||||
zai-coding-plan-api-key = {
|
|
||||||
sopsFile = ./secrets.yaml;
|
|
||||||
owner = userName;
|
|
||||||
};
|
|
||||||
|
|
||||||
netbird-key = {
|
netbird-key = {
|
||||||
sopsFile = ./secrets.yaml;
|
sopsFile = ./secrets.yaml;
|
||||||
owner = userName;
|
owner = userName;
|
||||||
@@ -137,15 +95,6 @@
|
|||||||
sopsFile = ./secrets.yaml;
|
sopsFile = ./secrets.yaml;
|
||||||
owner = userName;
|
owner = userName;
|
||||||
};
|
};
|
||||||
|
|
||||||
copyparty = {
|
|
||||||
sopsFile = ./secrets.yaml;
|
|
||||||
owner = innerArgs.config.services.copyparty.user;
|
|
||||||
};
|
|
||||||
|
|
||||||
hermes = {
|
|
||||||
sopsFile = ./secrets.yaml;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# --- Networking ---
|
# --- Networking ---
|
||||||
@@ -154,7 +103,6 @@
|
|||||||
networkmanager = {
|
networkmanager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wifi.backend = "iwd";
|
wifi.backend = "iwd";
|
||||||
wifi.powersave = false;
|
|
||||||
};
|
};
|
||||||
wireless.iwd = {
|
wireless.iwd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -170,10 +118,6 @@
|
|||||||
firewall.enable = false;
|
firewall.enable = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
impala
|
|
||||||
];
|
|
||||||
|
|
||||||
system.stateVersion = "26.05";
|
system.stateVersion = "26.05";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
30
modules/hosts/arcturus/default.nix
Normal file
30
modules/hosts/arcturus/default.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostName = "arcturus";
|
||||||
|
userName = "tux";
|
||||||
|
userEmail = "t@tux.rs";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
unstable = true;
|
||||||
|
nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit
|
||||||
|
hostName
|
||||||
|
userName
|
||||||
|
userEmail
|
||||||
|
system
|
||||||
|
;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
config.flake.modules.nixos.core
|
||||||
|
config.flake.modules.nixos.${hostName}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.arcturus = {
|
{
|
||||||
config,
|
flake.modules.nixos.arcturus =
|
||||||
lib,
|
{ config, lib, ... }:
|
||||||
...
|
let
|
||||||
}: let
|
|
||||||
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
];
|
];
|
||||||
@@ -35,8 +35,7 @@
|
|||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
# Base subvolumes that always exist
|
# Base subvolumes that always exist
|
||||||
subvolumes =
|
subvolumes = {
|
||||||
{
|
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountOptions = [
|
mountOptions = [
|
||||||
"compress=zstd"
|
"compress=zstd"
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
flake.modules.nixos.arcturus = {
|
{
|
||||||
|
flake.modules.nixos.arcturus =
|
||||||
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
} @ innerArgs: {
|
}@innerArgs:
|
||||||
|
{
|
||||||
imports = with config.flake.modules.nixos; [
|
imports = with config.flake.modules.nixos; [
|
||||||
hardware
|
hardware
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
{ ... }:
|
||||||
{
|
{
|
||||||
flake.modules.homeManager.arcturus = {
|
flake.modules.homeManager.arcturus = {
|
||||||
home.stateVersion = "26.05";
|
home.stateVersion = "26.05";
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ discord-token: ENC[AES256_GCM,data:uzxkrNRRplL/1MfvPZ/EL+I8UACuZQBHZ95BSHuxW0nBj
|
|||||||
gemini-api-key: ENC[AES256_GCM,data:gLZSoYTdKY+rwIpYiXvN9n9PGkUD6q8Oe7dHnYkjEjwDf5qpjubg,iv:ySoNgQWTu9DjvbashF4ulyYP8fJUl4yrCTeBQ0jrGmw=,tag:FctubsQv50AP78JvTb9bpQ==,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]
|
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]
|
opencode-go-api-key: ENC[AES256_GCM,data:dmeRKn7TWHnqvpyPQpcEG6yHTb2bRby/rh10ytL0jHj5R+lRmNVdmqUF92GTznY9vEaB6ZYCJecWhpm8g4upNfOWBg==,iv:9UMJpAlD8gpcNiN+liu3nawoAZQKapEg7sCp561N9E8=,tag:OZlASpOa5BQaQwFWjoLCRw==,type:str]
|
||||||
zai-coding-plan-api-key: ENC[AES256_GCM,data:lLegmS/RIo7JoBoAyVdcS++rXS8W62cwz+zVsv4dPnlfjGFO/nVlI5InqC34sPxLRQ==,iv:BRC7eYVmdZuWwb+2k2FrnlJih63HXrcvhVp/K5t5td8=,tag:aP8x+Xcnkz2t0hn7erCkKw==,type:str]
|
|
||||||
netbird-key: ENC[AES256_GCM,data:q6eKisca04qn/CvALrvXF79MsToDhvLRLv2JTiUBAZglCC9m,iv:jj0/ZD7IDgopprTVUgSfJmdAJmUP3iqewU3dqssGYbk=,tag:6IPRdCm2FGdlTEIX7jt3qA==,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:Agv3ljcUhld+e+YpRNsOXuQPq5uyZWQ+S6epUH044CIlvrC3DMFskOFVPnDco9P5y0pBnL5m9rltlRiQtMP4RNMzYFz5yR/weskmvZkt3dtZ2sdyaK36p6PTsQDOLl3l8rCDoFxaGRHBz3gD5Gyz9lS5GmLcZql6xg/VIAMdwv36/g0=,iv:NrsrTVJ+ycjEU1/nPigCXGUoIZqheEf+WqYhVqVsuJ0=,tag:0UqLf5ZdVCoQrhKDq4EgPw==,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:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- enc: |
|
||||||
@@ -28,7 +25,7 @@ sops:
|
|||||||
TLKEYsPQgOJ7s8P9gw2uPUY6HRz86CtiC6EbO27u0+8BbI85x1QScg==
|
TLKEYsPQgOJ7s8P9gw2uPUY6HRz86CtiC6EbO27u0+8BbI85x1QScg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1huqa3hc7wcxk4dpelrzny437nzrx4fnll3d8g9ahznzk268yju5qufapxy
|
recipient: age1huqa3hc7wcxk4dpelrzny437nzrx4fnll3d8g9ahznzk268yju5qufapxy
|
||||||
lastmodified: "2026-09-16T14:20:26Z"
|
lastmodified: "2026-08-08T11:57:44Z"
|
||||||
mac: ENC[AES256_GCM,data:I33KZL3u+7jfOFu0qn4LVx2nACiURSd6RcEn0ojfT62yC/TcXlGGu4QeN1Dx4Nta77n/h8RzDTcZtiUJylLhiVBmqyMOoNaBOmLDJ+P1L7weYLoWMoaDP7IWyzttGkNTgvyv2nW5IxbdcTZwrcSlPtdupsJeNy76ATHO+eUsvGQ=,iv:FvQKGH5Vzm36huGDnMr15wQL9vsH2hsAhvu0BE/NfEI=,tag:fzAzzgmv3vjWs1VYhh4GeA==,type:str]
|
mac: ENC[AES256_GCM,data:0BYRw78P4Q0x/Wm5XmT1Jg3o/njic4qmaCFrZ+Egz34TL42zLCjax7TvVrJ/Rzb6UqGgeQb0Nca+JOHjOqs5J+J3SqnTpWnQa51LBu3naPwMphPhGrXgmvzHIFNlTXmljxjGo7tHt8hWHtHy6SgAOuep4tP7vgV/XeY91HGQyXc=,iv:mEbJ8OZ+uaTjhG4tsrHtPjQ6N6UDo7yAJAA7JMdO/r8=,tag:JE2aqSv4hJT4hpWZiyu9/g==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.3
|
version: 3.13.3
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
flake.modules.nixos.canopus = {
|
{
|
||||||
|
flake.modules.nixos.canopus =
|
||||||
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
hostName,
|
hostName,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
imports = with config.flake.modules.nixos; [
|
imports = with config.flake.modules.nixos; [
|
||||||
boot
|
boot
|
||||||
networking
|
networking
|
||||||
@@ -24,49 +27,28 @@
|
|||||||
directories = [
|
directories = [
|
||||||
"Distrobox"
|
"Distrobox"
|
||||||
".steam"
|
".steam"
|
||||||
".bun"
|
|
||||||
".rustup"
|
|
||||||
".agents"
|
|
||||||
".cache/awww"
|
".cache/awww"
|
||||||
".cache/serpantinum"
|
|
||||||
".config/BraveSoftware"
|
".config/BraveSoftware"
|
||||||
".config/zed"
|
".config/zed"
|
||||||
".config/Vencord"
|
".config/Vencord"
|
||||||
".config/vesktop"
|
".config/vesktop"
|
||||||
".config/sops"
|
".config/sops"
|
||||||
".config/nix"
|
|
||||||
".config/coderv2"
|
|
||||||
".config/obs-studio"
|
".config/obs-studio"
|
||||||
".config/easyeffects"
|
".config/easyeffects"
|
||||||
".config/DankMaterialShell"
|
".config/DankMaterialShell"
|
||||||
".local/share/Steam"
|
".local/share/Steam"
|
||||||
".local/share/lutris"
|
|
||||||
".local/share/net.lutris.Lutris"
|
|
||||||
".local/share/nvim"
|
".local/share/nvim"
|
||||||
".local/share/opencode"
|
".local/share/opencode"
|
||||||
".local/share/zsh"
|
".local/share/zsh"
|
||||||
".local/share/zoxide"
|
".local/share/zoxide"
|
||||||
".local/share/voxtype"
|
|
||||||
".local/state/lazygit"
|
".local/state/lazygit"
|
||||||
".local/share/vicinae"
|
".local/share/vicinae"
|
||||||
".local/share/TelegramDesktop"
|
".local/share/TelegramDesktop"
|
||||||
".local/share/GalaxyBudsClient"
|
".local/share/GalaxyBudsClient"
|
||||||
".local/state/serpantinum"
|
|
||||||
".local/share/zed"
|
|
||||||
|
|
||||||
".claude"
|
|
||||||
".orca"
|
|
||||||
".config/orca"
|
|
||||||
".zcode"
|
|
||||||
".config/ZCode"
|
|
||||||
".pi/agent/sessions"
|
|
||||||
".omp"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
files = [
|
files = [
|
||||||
".wakatime.cfg"
|
".wakatime.cfg"
|
||||||
".claude.json"
|
|
||||||
".config/gh/hosts.yml"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -84,8 +66,6 @@
|
|||||||
waydroid.enable = true;
|
waydroid.enable = true;
|
||||||
distrobox.enable = true;
|
distrobox.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.nix-ld.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sops.secrets = {
|
sops.secrets = {
|
||||||
@@ -109,11 +89,6 @@
|
|||||||
owner = userName;
|
owner = userName;
|
||||||
};
|
};
|
||||||
|
|
||||||
zai-coding-plan-api-key = {
|
|
||||||
sopsFile = ./secrets.yaml;
|
|
||||||
owner = userName;
|
|
||||||
};
|
|
||||||
|
|
||||||
netbird-key = {
|
netbird-key = {
|
||||||
sopsFile = ./secrets.yaml;
|
sopsFile = ./secrets.yaml;
|
||||||
owner = userName;
|
owner = userName;
|
||||||
@@ -131,7 +106,6 @@
|
|||||||
networkmanager = {
|
networkmanager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wifi.backend = "iwd";
|
wifi.backend = "iwd";
|
||||||
wifi.powersave = false;
|
|
||||||
};
|
};
|
||||||
wireless.iwd = {
|
wireless.iwd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -151,11 +125,6 @@
|
|||||||
davinci-resolve
|
davinci-resolve
|
||||||
telegram-desktop
|
telegram-desktop
|
||||||
galaxy-buds-client
|
galaxy-buds-client
|
||||||
impala
|
|
||||||
llm-agents.claude-code
|
|
||||||
llm-agents.orca
|
|
||||||
llm-agents.zcode
|
|
||||||
coder
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# !!! DO NOT CHANGE THIS !!!
|
# !!! DO NOT CHANGE THIS !!!
|
||||||
|
|||||||
30
modules/hosts/canopus/default.nix
Normal file
30
modules/hosts/canopus/default.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostName = "canopus";
|
||||||
|
userName = "tux";
|
||||||
|
userEmail = "t@tux.rs";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
unstable = true;
|
||||||
|
nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit
|
||||||
|
hostName
|
||||||
|
userName
|
||||||
|
userEmail
|
||||||
|
system
|
||||||
|
;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
config.flake.modules.nixos.core
|
||||||
|
config.flake.modules.nixos.${hostName}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.canopus = {
|
{
|
||||||
config,
|
flake.modules.nixos.canopus =
|
||||||
lib,
|
{ config, lib, ... }:
|
||||||
...
|
let
|
||||||
}: let
|
|
||||||
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
];
|
];
|
||||||
@@ -43,8 +43,7 @@
|
|||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
# Base subvolumes that always exist
|
# Base subvolumes that always exist
|
||||||
subvolumes =
|
subvolumes = {
|
||||||
{
|
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountOptions = [
|
mountOptions = [
|
||||||
"compress=zstd"
|
"compress=zstd"
|
||||||
|
|||||||
@@ -1,22 +1,19 @@
|
|||||||
|
{ inputs, config, ... }:
|
||||||
|
{
|
||||||
|
flake.modules.nixos.canopus =
|
||||||
{
|
{
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
flake.modules.nixos.canopus = {
|
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
} @ innerArgs: {
|
}@innerArgs:
|
||||||
imports = with config.flake.modules.nixos;
|
{
|
||||||
|
imports =
|
||||||
|
with config.flake.modules.nixos;
|
||||||
[
|
[
|
||||||
hardware
|
hardware
|
||||||
]
|
]
|
||||||
++ [
|
++ [ inputs.nixos-hardware.nixosModules.asus-zephyrus-ga503 ];
|
||||||
inputs.nixos-hardware.nixosModules.asus-zephyrus-ga503
|
|
||||||
inputs.cardwire.nixosModules.default
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
|
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
|
||||||
boot.initrd.availableKernelModules = [
|
boot.initrd.availableKernelModules = [
|
||||||
@@ -46,13 +43,16 @@
|
|||||||
power-profiles-daemon.enable = true;
|
power-profiles-daemon.enable = true;
|
||||||
upower.enable = true;
|
upower.enable = true;
|
||||||
|
|
||||||
cardwire = {
|
supergfxd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
auto_apply_gpu_state = true;
|
mode = "Hybrid";
|
||||||
experimental_nvidia_block = true;
|
vfio_enable = false;
|
||||||
battery_auto_switch = true;
|
vfio_save = false;
|
||||||
battery_auto_switch_mode = "hybrid";
|
always_reboot = false;
|
||||||
|
no_logind = false;
|
||||||
|
logout_timeout_s = 180;
|
||||||
|
hotplug_type = "None";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
|
{
|
||||||
flake.modules.homeManager.canopus = { pkgs, ... }: {
|
flake.modules.homeManager.canopus = { pkgs, ... }: {
|
||||||
imports = with config.flake.modules.homeManager; [
|
imports = with config.flake.modules.homeManager; [
|
||||||
desktop
|
desktop
|
||||||
@@ -26,7 +27,8 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
authorized_fingerprints = {
|
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";
|
"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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ tux-password: ENC[AES256_GCM,data:Xb4/JMAZCBnBheDCJdRRGXLnMJ1ej8HbN+AUqA/+2sdYES
|
|||||||
gemini-api-key: ENC[AES256_GCM,data:Q6+actg0oyUWiUJVy/9yZmea1QyGu2o8LfMsuAVFD6k7kp0dYIrl,iv:ukyouqrHxzVpBBE98KL6PW8P3j+seemm/e0Gl1urUcM=,tag:Z7MM3dJ414CmdxE72cdzNA==,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]
|
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]
|
opencode-go-api-key: ENC[AES256_GCM,data:zbeTcaXJZFVfYnM/7sgblJFU9WfeosX/44KsXvrzKwiLPfGLLYYo9AFaCvWzzG6jHuSZC5OYrBWfOZv4+3omfCgglQ==,iv:LscUQE+PNhXGim9PSqc9nZIZichWSgAn/zsNxQ/HM/o=,tag:MaBCobnRM42fopiibibe5Q==,type:str]
|
||||||
zai-coding-plan-api-key: ENC[AES256_GCM,data:osUoFOvBgu+PtNiTIDIm3JoxsBJnQ9I8zY//9oeTpJxIvMctSWYnT4GYP4oI5mClZg==,iv:z5qxUPomGF1avLyk8PrAS3t+34ZGlQMRjbxVJ4JH9Cc=,tag:Qbz/LYAMXejXU4RS3RUPqA==,type:str]
|
|
||||||
netbird-key: ENC[AES256_GCM,data:swmaa+RjxeUmEl8hS2riGrW4lP5jdks9HM3x57/FLpOuqFtR,iv:MrpVjiocrPi+dBGPk7pwgSUNlJ1eryRpMjC8+jkU+T0=,tag:j6sqpQ02apqc6FwkdDvk9g==,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]
|
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:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
|
||||||
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqS2RZdVJaNTlRamZPMkll
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqS2RZdVJaNTlRamZPMkll
|
||||||
MDRVSVl1b2x2LzZpdlBrdmZtdyt3UE15RldRCldXUXE2a1BFeHg5NGNPbW5IMDht
|
MDRVSVl1b2x2LzZpdlBrdmZtdyt3UE15RldRCldXUXE2a1BFeHg5NGNPbW5IMDht
|
||||||
@@ -15,8 +15,8 @@ sops:
|
|||||||
bThQTFdZU29ISm93TWcwVk5ZTkhRWm8KCcprmLGhahgDkXCBpzjctHgao+gc+rKC
|
bThQTFdZU29ISm93TWcwVk5ZTkhRWm8KCcprmLGhahgDkXCBpzjctHgao+gc+rKC
|
||||||
xLIwheUyFJOGK+ixqcdoZ/PC0kY68hVLt1YzLAyxFi4Ur1wltPrNug==
|
xLIwheUyFJOGK+ixqcdoZ/PC0kY68hVLt1YzLAyxFi4Ur1wltPrNug==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
|
- recipient: age1x36yr8h993srfj29sfpzt4wyz52nztvncpmhgmfs0j26qvfecq3qvcm0an
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVW13WFE1Ylh3Uk1HNU1i
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVW13WFE1Ylh3Uk1HNU1i
|
||||||
bU9kRzFqTmhkQlRzMlRkM0VhMlNmMDUyK25NCkZYUStxM2tScGozRXJGekxGa1RX
|
bU9kRzFqTmhkQlRzMlRkM0VhMlNmMDUyK25NCkZYUStxM2tScGozRXJGekxGa1RX
|
||||||
@@ -24,8 +24,7 @@ sops:
|
|||||||
V1N3eUVjZ0VZRjBZdXRPNng3Y3JoUTAKQau9CG9XfvM+5JZVRwaJr/o/sXMaJiy2
|
V1N3eUVjZ0VZRjBZdXRPNng3Y3JoUTAKQau9CG9XfvM+5JZVRwaJr/o/sXMaJiy2
|
||||||
wo2YcDb+4vfT4Wr+/8J3ccQgbLRZH916X5ZPL+A+nFyVXVKOCl3ENg==
|
wo2YcDb+4vfT4Wr+/8J3ccQgbLRZH916X5ZPL+A+nFyVXVKOCl3ENg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1x36yr8h993srfj29sfpzt4wyz52nztvncpmhgmfs0j26qvfecq3qvcm0an
|
lastmodified: "2026-05-12T06:33:00Z"
|
||||||
lastmodified: "2026-09-16T14:20:36Z"
|
mac: ENC[AES256_GCM,data:htDJdEx34Q5NG8vwbBimnFENZawbLZ4FC0DkyG6J5RYP0BFnycKcKGsYR87SvIjcJZXvfZ0e6fXdtc78dd6I0sQtrQ7aNn4Iktbu/AkPmntsBwpIjVI99X9zUyQB87go/oX15yuyt8loB6ds2RkL/pfFsgLbFc10JHsBy+WcEzI=,iv:HvY+5LYzyHpRm8XCSKrN8ra/LJT9v23TPSsZg/4QVNU=,tag:k+d45+zgBYq4vlWmmc8ZkQ==,type:str]
|
||||||
mac: ENC[AES256_GCM,data:mhJvvn/+VBfNrP1pXRweLSNVlHq9/DLDcKQv8k9ZVsEcd077ifEAqduOXVKXcXDM0VTuBzArw9hmih+kZbCHoUZAQrk8LF7FC4a4FFwXG9p45uKWbUloTuq5w3MCxyU8IoyiAufZcWUlYFQjZ8K4n8N0bVrGQGHogemnrBXTUIo=,iv:H3tKQOuIe/pEIp0pUWCSar8VDompXNZ4BZfD1Wg4pb0=,tag:lyPR4Prlal1bpSRLmGfy7A==,type:str]
|
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.3
|
version: 3.12.2
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
flake.modules.nixos.sirius = {
|
{
|
||||||
|
flake.modules.nixos.sirius =
|
||||||
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
hostName,
|
hostName,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
imports = with config.flake.modules.nixos; [
|
imports = with config.flake.modules.nixos; [
|
||||||
boot
|
boot
|
||||||
networking
|
networking
|
||||||
@@ -24,50 +27,28 @@
|
|||||||
directories = [
|
directories = [
|
||||||
"Distrobox"
|
"Distrobox"
|
||||||
".steam"
|
".steam"
|
||||||
".bun"
|
|
||||||
".rustup"
|
|
||||||
".agents"
|
|
||||||
".cache/awww"
|
".cache/awww"
|
||||||
".cache/serpantinum"
|
|
||||||
".config/BraveSoftware"
|
".config/BraveSoftware"
|
||||||
".config/zed"
|
".config/zed"
|
||||||
".config/Vencord"
|
".config/Vencord"
|
||||||
".config/vesktop"
|
".config/vesktop"
|
||||||
".config/sops"
|
".config/sops"
|
||||||
".config/nix"
|
|
||||||
".config/coderv2"
|
|
||||||
".config/obs-studio"
|
".config/obs-studio"
|
||||||
".config/easyeffects"
|
".config/easyeffects"
|
||||||
".config/DankMaterialShell"
|
".config/DankMaterialShell"
|
||||||
".local/share/Steam"
|
".local/share/Steam"
|
||||||
".local/share/lutris"
|
|
||||||
".local/share/net.lutris.Lutris"
|
|
||||||
".local/share/nvim"
|
".local/share/nvim"
|
||||||
".local/share/opencode"
|
".local/share/opencode"
|
||||||
".local/share/zsh"
|
".local/share/zsh"
|
||||||
".local/share/zoxide"
|
".local/share/zoxide"
|
||||||
".local/share/voxtype"
|
|
||||||
".local/state/lazygit"
|
".local/state/lazygit"
|
||||||
".local/share/vicinae"
|
".local/share/vicinae"
|
||||||
".local/share/TelegramDesktop"
|
".local/share/TelegramDesktop"
|
||||||
".local/share/GalaxyBudsClient"
|
|
||||||
".local/state/serpantinum"
|
|
||||||
".local/share/zed"
|
|
||||||
|
|
||||||
".claude"
|
|
||||||
".orca"
|
|
||||||
".config/orca"
|
|
||||||
".zcode"
|
|
||||||
".config/ZCode"
|
|
||||||
".pi/agent/sessions"
|
|
||||||
".omp"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
files = [
|
files = [
|
||||||
".wakatime.cfg"
|
".wakatime.cfg"
|
||||||
".config/lan-mouse/lan-mouse.pem"
|
".config/lan-mouse/lan-mouse.pem"
|
||||||
".claude.json"
|
|
||||||
".config/gh/hosts.yml"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -85,8 +66,6 @@
|
|||||||
waydroid.enable = true;
|
waydroid.enable = true;
|
||||||
distrobox.enable = true;
|
distrobox.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.nix-ld.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sops.secrets = {
|
sops.secrets = {
|
||||||
@@ -110,11 +89,6 @@
|
|||||||
owner = userName;
|
owner = userName;
|
||||||
};
|
};
|
||||||
|
|
||||||
zai-coding-plan-api-key = {
|
|
||||||
sopsFile = ./secrets.yaml;
|
|
||||||
owner = userName;
|
|
||||||
};
|
|
||||||
|
|
||||||
netbird-key = {
|
netbird-key = {
|
||||||
sopsFile = ./secrets.yaml;
|
sopsFile = ./secrets.yaml;
|
||||||
owner = userName;
|
owner = userName;
|
||||||
@@ -132,7 +106,6 @@
|
|||||||
networkmanager = {
|
networkmanager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wifi.backend = "iwd";
|
wifi.backend = "iwd";
|
||||||
wifi.powersave = false;
|
|
||||||
};
|
};
|
||||||
wireless.iwd = {
|
wireless.iwd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -151,12 +124,6 @@
|
|||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
davinci-resolve
|
davinci-resolve
|
||||||
telegram-desktop
|
telegram-desktop
|
||||||
galaxy-buds-client
|
|
||||||
impala
|
|
||||||
llm-agents.claude-code
|
|
||||||
llm-agents.orca
|
|
||||||
llm-agents.zcode
|
|
||||||
coder
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# !!! DO NOT CHANGE THIS !!!
|
# !!! DO NOT CHANGE THIS !!!
|
||||||
|
|||||||
30
modules/hosts/sirius/default.nix
Normal file
30
modules/hosts/sirius/default.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostName = "sirius";
|
||||||
|
userName = "tux";
|
||||||
|
userEmail = "t@tux.rs";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
unstable = true;
|
||||||
|
nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit
|
||||||
|
hostName
|
||||||
|
userName
|
||||||
|
userEmail
|
||||||
|
system
|
||||||
|
;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
config.flake.modules.nixos.core
|
||||||
|
config.flake.modules.nixos.${hostName}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.sirius = {
|
{
|
||||||
config,
|
flake.modules.nixos.sirius =
|
||||||
lib,
|
{ config, lib, ... }:
|
||||||
...
|
let
|
||||||
}: let
|
|
||||||
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
];
|
];
|
||||||
@@ -43,8 +43,7 @@
|
|||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
# Base subvolumes that always exist
|
# Base subvolumes that always exist
|
||||||
subvolumes =
|
subvolumes = {
|
||||||
{
|
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountOptions = [
|
mountOptions = [
|
||||||
"compress=zstd"
|
"compress=zstd"
|
||||||
|
|||||||
@@ -1,20 +1,15 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
flake.modules.nixos.sirius =
|
||||||
{
|
{
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
flake.modules.nixos.sirius = {
|
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
} @ innerArgs: {
|
}@innerArgs:
|
||||||
imports = with config.flake.modules.nixos;
|
{
|
||||||
[
|
imports = with config.flake.modules.nixos; [
|
||||||
hardware
|
hardware
|
||||||
]
|
|
||||||
++ [
|
|
||||||
inputs.cardwire.nixosModules.default
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
|
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
|
||||||
@@ -43,11 +38,6 @@
|
|||||||
services = {
|
services = {
|
||||||
xserver.videoDrivers = [ "nvidia" ];
|
xserver.videoDrivers = [ "nvidia" ];
|
||||||
power-profiles-daemon.enable = true;
|
power-profiles-daemon.enable = true;
|
||||||
|
|
||||||
cardwire = {
|
|
||||||
enable = true;
|
|
||||||
settings.auto_apply_gpu_state = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
|
{
|
||||||
flake.modules.homeManager.sirius = {
|
flake.modules.homeManager.sirius = {
|
||||||
imports = with config.flake.modules.homeManager; [
|
imports = with config.flake.modules.homeManager; [
|
||||||
desktop
|
desktop
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ tux-password: ENC[AES256_GCM,data:JWQVd2MYX2U4UP4II62ixG9hWI5MtgHAFhl8aCmyrYPl1H
|
|||||||
gemini-api-key: ENC[AES256_GCM,data:Y9YgXp/tB3Q1Rb5YMsZLgWCq+bdeIjsXAVeO3Yh7nZ8MwDH7d5De,iv:FIXxJCn6JDYsHIoNn8f8Un3z9ZPVbxdjR48Ux88poRg=,tag:bMJ4i69HTspnhzsrsxkbrw==,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]
|
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]
|
opencode-go-api-key: ENC[AES256_GCM,data:BGERcZg5Jpnznc4cXeYFMhPk9kKBkd9GvIuQBV9TW3JE1utgrLLYK6mKNCQqrEStRFiO2jUUnBm3opUNL4SuEHFLpw==,iv:fgFAwx6z9yruK27PvAJX/Q2CS9gU+LJ5zMUK/f/rzpo=,tag:BPu3M+jppPB8sLoLmfuY/Q==,type:str]
|
||||||
zai-coding-plan-api-key: ENC[AES256_GCM,data:u5RHaBq5WHit+GjcKYnr6vN7jkputBtt3G0lCNBciMgBnBzIcZd/JjJcNaKXfbal5w==,iv:x+mG1aoct7yfm4Hvu1mMqBq8MiF8UZbQ8SFjA99qTIw=,tag:9cEIO2tuhqE6df2M2N/R+g==,type:str]
|
|
||||||
netbird-key: ENC[AES256_GCM,data:qXAnRnLM2TlzpOvWG4exJv0+pUvpe0FpRN5xOWx3+KNt+yhq,iv:X+yl4o1RSYMCMWdVXo1hpzy+6IdKXUpsKPtYNSiHiCY=,tag:I8HbnD5iw6EJ1TdsNrhvfw==,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]
|
vicinae-json: ENC[AES256_GCM,data:JjxolEgS6uakqR4eHOx3VyrOO5kaL4dj1jcEiLWsrktCU32UB7OmP1kJEVomA1rZjODpFHL89+FRpcNFspTFrc365WlANE81RLg/M2Ja1MiLYaDFNcBGtqMX9Yc1muor53Xl7t+rTSvDIj1oE1L7xPPcjCLfwC5QDzJjCBWj9FhCxnU5BwvoJNv9vgA6xnkzAOYSPZK/ihULMD0DxyqOUEa5ECGX62OPM9Gbr7jEviaItYzOOxaRs/yQVqizodGGl/BcK6fPqvOYSxip9ABYRVSI9ZvysY7ofAkeX91ardPwVG5VvEYfxZwBvGFjV7ZfTzVkK+BiUUNrvciAETHqwkjHftPpfJjxWsgLr8lbOA==,iv:HjDE/sqVDnxeww7r2upxH57rc1+LpuMKnhhyGXoc1Ms=,tag:d2kZeWkg17eVoNACIQ3Q9A==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
|
||||||
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQNGdHcDc4bTFkR0EyZlUr
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQNGdHcDc4bTFkR0EyZlUr
|
||||||
eXovR1lyeTZJTDg5R281MFFuMHVwOXZXYzNvCkpIT1g3K05WUUswaEVjVVJWQkJq
|
eXovR1lyeTZJTDg5R281MFFuMHVwOXZXYzNvCkpIT1g3K05WUUswaEVjVVJWQkJq
|
||||||
@@ -15,8 +15,8 @@ sops:
|
|||||||
Z0JwWWR0STUybjVhSXdDR3NiKzV1eDQK22HmMuyqYaR/eGuALkAPB1Y5bN2KwIt3
|
Z0JwWWR0STUybjVhSXdDR3NiKzV1eDQK22HmMuyqYaR/eGuALkAPB1Y5bN2KwIt3
|
||||||
pamM8vbnjB//hXoyrv4vsoDk9WzLGFGjgiw2qsM2HQgzQqtrwF1/1A==
|
pamM8vbnjB//hXoyrv4vsoDk9WzLGFGjgiw2qsM2HQgzQqtrwF1/1A==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
|
- recipient: age1maxsx5tq2h3d92rfyl8ekcdan5gu5cpch4qs3c56cu7qag02xgvs3h0gqc
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1N3ZBd1pHODFtZkZxaHNP
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1N3ZBd1pHODFtZkZxaHNP
|
||||||
OXlXUzVFS0ZIam1IWVkxNldOdTEwY0s4aUNZCjVlcnF1aXJxUUlQSXhteXJ6OU1W
|
OXlXUzVFS0ZIam1IWVkxNldOdTEwY0s4aUNZCjVlcnF1aXJxUUlQSXhteXJ6OU1W
|
||||||
@@ -24,8 +24,7 @@ sops:
|
|||||||
M3JocWZJeXFxenhXOENBVWpvNkd3bm8KqhNLzCyEAI643jGWpZF/uTchHmBj8ozU
|
M3JocWZJeXFxenhXOENBVWpvNkd3bm8KqhNLzCyEAI643jGWpZF/uTchHmBj8ozU
|
||||||
HtpOzKsshif66D0XOHeJQfQamJI4TyKsj3Sk3j9rstsLmN2lxTRGHg==
|
HtpOzKsshif66D0XOHeJQfQamJI4TyKsj3Sk3j9rstsLmN2lxTRGHg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1maxsx5tq2h3d92rfyl8ekcdan5gu5cpch4qs3c56cu7qag02xgvs3h0gqc
|
lastmodified: "2026-05-10T00:35:50Z"
|
||||||
lastmodified: "2026-09-16T14:20:48Z"
|
mac: ENC[AES256_GCM,data:u27zQ1PPnWy5Parbh/1DkVP3ICmHnLZJKaLbN3dZEVONgqOWi32LV3t0iNhtLWwVnzFPBusRWahQiqAkUdnQtrXF0OtjPCpLuIw86xB75QPGbet0GZlLNb8/xPshChZe4v520csdJMWiy3vYeKrk8LxMSViAGhmhYK2a5NbGhzI=,iv:/9vePmvCNqoP0kx24fP3HfCjS2FkjBmI5B+SycvKKW4=,tag:gE1/DnLolwhoyfMJYejGIQ==,type:str]
|
||||||
mac: ENC[AES256_GCM,data:i2I6vo/tKTLq44Tu6vI2Cqp0EqQPbwuuRM2WUflD58UCr7huXIKnKrxmB1Hz/fdmpZPiCZ2dSlmOh733fKFclRmpHJLScYRX4+lFXEzToYExZlybVergxC6Cr4IaiB+A/HZIkW6iKK/ULr2mtXYNCqQgDQw8BgJuV2M/bAMM/V4=,iv:9akzmVH4CMMdDS5aukeLOxncMLKfvQCw2BYl36WAfOM=,tag:4F26bqEI8fEtNugqjHCUOg==,type:str]
|
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.3
|
version: 3.12.2
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
{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";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{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";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,11 @@
|
|||||||
{config, ...}: {
|
{ config, ... }:
|
||||||
flake.modules.nixos.vps = {hostName, ...}: {
|
{
|
||||||
|
flake.modules.nixos.vps =
|
||||||
|
{
|
||||||
|
hostName,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
imports = with config.flake.modules.nixos; [
|
imports = with config.flake.modules.nixos; [
|
||||||
boot
|
boot
|
||||||
networking
|
networking
|
||||||
|
|||||||
30
modules/hosts/vps/default.nix
Normal file
30
modules/hosts/vps/default.nix
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostName = "vps";
|
||||||
|
userName = "tux";
|
||||||
|
userEmail = "t@tux.rs";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
unstable = true;
|
||||||
|
nixpkgs = if unstable then inputs.nixpkgs else inputs.nixpkgs-stable;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.nixosConfigurations."${hostName}" = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit
|
||||||
|
hostName
|
||||||
|
userName
|
||||||
|
userEmail
|
||||||
|
system
|
||||||
|
;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
config.flake.modules.nixos.core
|
||||||
|
config.flake.modules.nixos.${hostName}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.vps = {
|
{
|
||||||
config,
|
flake.modules.nixos.vps =
|
||||||
lib,
|
{ config, lib, ... }:
|
||||||
...
|
let
|
||||||
}: let
|
|
||||||
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
||||||
isLegacy = config.tnix.boot.legacy.enable;
|
isLegacy = config.tnix.boot.legacy.enable;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
];
|
];
|
||||||
@@ -16,8 +16,7 @@
|
|||||||
type = "disk";
|
type = "disk";
|
||||||
content = {
|
content = {
|
||||||
type = "gpt";
|
type = "gpt";
|
||||||
partitions =
|
partitions = {
|
||||||
{
|
|
||||||
ESP = {
|
ESP = {
|
||||||
size = "1G";
|
size = "1G";
|
||||||
type = "EF00";
|
type = "EF00";
|
||||||
@@ -37,8 +36,7 @@
|
|||||||
content = {
|
content = {
|
||||||
type = "btrfs";
|
type = "btrfs";
|
||||||
# Base subvolumes that always exist
|
# Base subvolumes that always exist
|
||||||
subvolumes =
|
subvolumes = {
|
||||||
{
|
|
||||||
"/root" = {
|
"/root" = {
|
||||||
mountOptions = [
|
mountOptions = [
|
||||||
"compress=zstd"
|
"compress=zstd"
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.vps = {
|
flake.modules.nixos.vps =
|
||||||
|
{
|
||||||
lib,
|
lib,
|
||||||
modulesPath,
|
modulesPath,
|
||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
{ ... }:
|
||||||
{
|
{
|
||||||
flake.modules.homeManager.vps = {
|
flake.modules.homeManager.vps = {
|
||||||
home.stateVersion = "26.05";
|
home.stateVersion = "26.05";
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.boot = {
|
{
|
||||||
|
flake.modules.nixos.boot =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
cfg = config.tnix.boot;
|
cfg = config.tnix.boot;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.impermanence.nixosModules.impermanence
|
inputs.impermanence.nixosModules.impermanence
|
||||||
];
|
];
|
||||||
@@ -42,30 +46,25 @@
|
|||||||
fileSystems."/persist".neededForBoot = true;
|
fileSystems."/persist".neededForBoot = true;
|
||||||
environment.persistence."/persist" = {
|
environment.persistence."/persist" = {
|
||||||
hideMounts = true;
|
hideMounts = true;
|
||||||
directories =
|
directories = [
|
||||||
[
|
|
||||||
"/var/log"
|
"/var/log"
|
||||||
"/var/lib"
|
"/var/lib"
|
||||||
"/etc/NetworkManager/system-connections"
|
"/etc/NetworkManager/system-connections"
|
||||||
]
|
]
|
||||||
++ cfg.impermanence.directories;
|
++ cfg.impermanence.directories;
|
||||||
|
|
||||||
files =
|
files = [
|
||||||
[
|
|
||||||
"/etc/machine-id"
|
|
||||||
"/etc/ssh/ssh_host_ed25519_key"
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
"/etc/ssh/ssh_host_ed25519_key.pub"
|
"/etc/ssh/ssh_host_ed25519_key.pub"
|
||||||
"/etc/ssh/ssh_host_rsa_key"
|
"/etc/ssh/ssh_host_rsa_key"
|
||||||
"/etc/ssh/ssh_host_rsa_key.pub"
|
"/etc/ssh/ssh_host_rsa_key.pub"
|
||||||
"/etc/ly/save.txt"
|
|
||||||
]
|
]
|
||||||
++ cfg.impermanence.files;
|
++ cfg.impermanence.files;
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.${userName} = {
|
home-manager.users.${userName} = {
|
||||||
home.persistence."/persist" = {
|
home.persistence."/persist" = {
|
||||||
directories =
|
directories = [
|
||||||
[
|
|
||||||
"Downloads"
|
"Downloads"
|
||||||
"Music"
|
"Music"
|
||||||
"Wallpapers"
|
"Wallpapers"
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.boot = {
|
flake.modules.nixos.boot =
|
||||||
config,
|
{ config, lib, ... }:
|
||||||
lib,
|
let
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.tnix.boot;
|
cfg = config.tnix.boot;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.tnix.boot.legacy = {
|
options.tnix.boot.legacy = {
|
||||||
enable = lib.mkEnableOption "legacy boot (GRUB) instead of systemd-boot";
|
enable = lib.mkEnableOption "legacy boot (GRUB) instead of systemd-boot";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
{
|
{
|
||||||
boot.binfmt.emulatedSystems = ["aarch64-linux"];
|
|
||||||
|
|
||||||
boot.loader = {
|
boot.loader = {
|
||||||
timeout = 1;
|
timeout = 1;
|
||||||
efi.canTouchEfiVariables = true;
|
efi.canTouchEfiVariables = true;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.boot = {pkgs, ...}: {
|
flake.modules.nixos.boot =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
boot = {
|
boot = {
|
||||||
consoleLogLevel = 0;
|
consoleLogLevel = 0;
|
||||||
initrd.verbose = false;
|
initrd.verbose = false;
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.boot = {
|
{
|
||||||
|
flake.modules.nixos.boot =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
cfg = config.tnix.boot;
|
cfg = config.tnix.boot;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [ inputs.lanzaboote.nixosModules.lanzaboote ];
|
imports = [ inputs.lanzaboote.nixosModules.lanzaboote ];
|
||||||
|
|
||||||
options.tnix.boot.secure-boot = {
|
options.tnix.boot.secure-boot = {
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.nixos.core = {...}: {
|
|
||||||
environment.enableAllTerminfo = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
|
{ inputs, config, ... }:
|
||||||
|
{
|
||||||
|
flake.modules.nixos.core =
|
||||||
{
|
{
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
flake.modules.nixos.core = {
|
|
||||||
hostName,
|
hostName,
|
||||||
userName,
|
userName,
|
||||||
userEmail,
|
userEmail,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.core = {
|
flake.modules.nixos.core =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
programs.nh = {
|
programs.nh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
flake.modules.nixos.core = { pkgs, ... }: {
|
flake.modules.nixos.core = { pkgs, ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
inputs.nix-index-database.nixosModules.default
|
inputs.nix-index-database.nixosModules.default
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
flake.modules.nixos.core = {
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.tnix.programs.nix-ld;
|
|
||||||
in {
|
|
||||||
options.tnix.programs.nix-ld = {
|
|
||||||
enable = mkEnableOption "nix-ld";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.nix-ld.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.core = {userName, ...}: {
|
flake.modules.nixos.core =
|
||||||
|
{ userName, ... }:
|
||||||
|
{
|
||||||
nix = {
|
nix = {
|
||||||
channel.enable = false;
|
channel.enable = false;
|
||||||
|
|
||||||
@@ -13,11 +15,6 @@
|
|||||||
optimise.automatic = true;
|
optimise.automatic = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
extra-platforms = [
|
|
||||||
"aarch64-linux"
|
|
||||||
"arm-linux"
|
|
||||||
];
|
|
||||||
|
|
||||||
experimental-features = [
|
experimental-features = [
|
||||||
"nix-command"
|
"nix-command"
|
||||||
"flakes"
|
"flakes"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
flake.modules.nixos.core = {
|
flake.modules.nixos.core = {
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
config = {
|
config = {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.core = {
|
flake.modules.nixos.core =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
security = {
|
security = {
|
||||||
sudo.wheelNeedsPassword = false;
|
sudo.wheelNeedsPassword = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
{inputs, ...}: {
|
{ inputs, ... }:
|
||||||
flake.modules.nixos.core = {
|
{
|
||||||
|
flake.modules.nixos.core =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
isEd25519 = k: k.type == "ed25519";
|
isEd25519 = k: k.type == "ed25519";
|
||||||
getKeyPath = k: k.path;
|
getKeyPath = k: k.path;
|
||||||
keys = builtins.filter isEd25519 config.services.openssh.hostKeys;
|
keys = builtins.filter isEd25519 config.services.openssh.hostKeys;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
imports = [ inputs.sops-nix.nixosModules.sops ];
|
imports = [ inputs.sops-nix.nixosModules.sops ];
|
||||||
|
|
||||||
sops.age = {
|
sops.age = {
|
||||||
|
|||||||
@@ -33,10 +33,6 @@
|
|||||||
"wezterm.cachix.org-1:kAbhjYUC9qvblTE+s7S+kl5XM1zVa4skO+E/1IDWdH0="
|
"wezterm.cachix.org-1:kAbhjYUC9qvblTE+s7S+kl5XM1zVa4skO+E/1IDWdH0="
|
||||||
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
|
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
|
||||||
];
|
];
|
||||||
extra-substituters = ["https://cache.numtide.com"];
|
|
||||||
extra-trusted-public-keys = [
|
|
||||||
"niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g="
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.core = {
|
flake.modules.nixos.core =
|
||||||
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
userName,
|
userName,
|
||||||
userEmail,
|
userEmail,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
hasPasswordSecret = lib.hasAttrByPath [ "sops" "secrets" "tux-password" ] config;
|
hasPasswordSecret = lib.hasAttrByPath [ "sops" "secrets" "tux-password" ] config;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
programs.zsh.enable = true;
|
programs.zsh.enable = true;
|
||||||
|
|
||||||
time.timeZone = "Asia/Kolkata";
|
time.timeZone = "Asia/Kolkata";
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
fonts.packages = with pkgs.nerd-fonts; [
|
fonts.packages = with pkgs.nerd-fonts; [
|
||||||
fira-code
|
fira-code
|
||||||
jetbrains-mono
|
jetbrains-mono
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.gpu-screen-recorder = {
|
programs.gpu-screen-recorder = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.hyprland = {
|
programs.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.hyprland-git.hyprland;
|
package = pkgs.hyprland-git.hyprland;
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
{inputs, ...}: {
|
{
|
||||||
flake.modules.nixos.desktop = {
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
flake.modules.nixos.desktop =
|
||||||
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.mango.nixosModules.mango
|
inputs.mango.nixosModules.mango
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
environment.systemPackages = with pkgs; [ brightnessctl ];
|
environment.systemPackages = with pkgs; [ brightnessctl ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.obs-studio = {
|
programs.obs-studio = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableVirtualCamera = true;
|
enableVirtualCamera = true;
|
||||||
@@ -7,7 +9,6 @@
|
|||||||
obs-vaapi
|
obs-vaapi
|
||||||
wlrobs
|
wlrobs
|
||||||
obs-source-record
|
obs-source-record
|
||||||
obs-advanced-masks
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
services = {
|
services = {
|
||||||
gvfs.enable = true;
|
gvfs.enable = true;
|
||||||
tumbler.enable = true;
|
tumbler.enable = true;
|
||||||
|
|||||||
7
modules/nixos/desktop/tpanel.nix
Normal file
7
modules/nixos/desktop/tpanel.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
flake.modules.nixos.desktop =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [ tpanel ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.nixos.desktop = {pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [tshell];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.gaming = {pkgs, ...}: {
|
flake.modules.nixos.gaming =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
programs.steam = {
|
programs.steam = {
|
||||||
enable = true;
|
enable = true;
|
||||||
protontricks.enable = true;
|
protontricks.enable = true;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.hardware = {pkgs, ...}: {
|
flake.modules.nixos.hardware = {
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
|
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
@@ -9,10 +9,5 @@
|
|||||||
pulse.enable = true;
|
pulse.enable = true;
|
||||||
wireplumber.enable = true;
|
wireplumber.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
alsa-utils
|
|
||||||
pavucontrol
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.networking = {
|
flake.modules.nixos.networking =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
hostName,
|
hostName,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.tnix.networking.netbird-client;
|
cfg = config.tnix.networking.netbird-client;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.tnix.networking.netbird-client = {
|
options.tnix.networking.netbird-client = {
|
||||||
enable = mkEnableOption "Enable netbird client";
|
enable = mkEnableOption "Enable netbird client";
|
||||||
};
|
};
|
||||||
@@ -15,7 +18,7 @@
|
|||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
services.netbird.clients = {
|
services.netbird.clients = {
|
||||||
${hostName} = {
|
${hostName} = {
|
||||||
port = 61820;
|
port = 51820;
|
||||||
login = {
|
login = {
|
||||||
enable = true;
|
enable = true;
|
||||||
setupKeyFile = config.sops.secrets.netbird-key.path;
|
setupKeyFile = config.sops.secrets.netbird-key.path;
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.networking = {
|
flake.modules.nixos.networking =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.tnix.networking.newt;
|
cfg = config.tnix.networking.newt;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.tnix.networking.newt = {
|
options.tnix.networking.newt = {
|
||||||
enable = mkEnableOption "Newt";
|
enable = mkEnableOption "Newt";
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.networking = {
|
flake.modules.nixos.networking =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.tnix.networking.openssh;
|
cfg = config.tnix.networking.openssh;
|
||||||
|
|
||||||
# Sops needs acess to the keys before the persist dirs are even mounted; so
|
# 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
|
# just persisting the keys won't work, we must point at /persist
|
||||||
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
hasOptinPersistence = config.tnix.boot.impermanence.enable;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.tnix.networking.openssh = {
|
options.tnix.networking.openssh = {
|
||||||
enable = mkEnableOption "Enable OpenSSH server";
|
enable = mkEnableOption "Enable OpenSSH server";
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,20 @@
|
|||||||
{
|
{
|
||||||
flake.modules.nixos.services = {
|
flake.modules.nixos.services =
|
||||||
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
|
let
|
||||||
cfg = config.tnix.services.aiostreams;
|
cfg = config.tnix.services.aiostreams;
|
||||||
port = toString cfg.port;
|
port = toString cfg.port;
|
||||||
acmeHost = config.tnix.services.nginx.domain;
|
acmeHost = config.tnix.services.nginx.domain;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.tnix.services.aiostreams = {
|
options.tnix.services.aiostreams = {
|
||||||
enable = mkEnableOption "AIOStreams";
|
enable = mkEnableOption "AIOStreams";
|
||||||
|
|
||||||
host = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "127.0.0.1";
|
|
||||||
description = "Host on which AIOStreams listens";
|
|
||||||
};
|
|
||||||
|
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 3000;
|
default = 3000;
|
||||||
@@ -27,19 +24,7 @@
|
|||||||
domain = mkOption {
|
domain = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
description = "Domain on which AIOStreams is available";
|
description = "Domain on which nginx serves AIOStreams (disabled when empty)";
|
||||||
};
|
|
||||||
|
|
||||||
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 {
|
image = mkOption {
|
||||||
@@ -62,17 +47,10 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
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 = {
|
virtualisation.oci-containers.containers.aiostreams = {
|
||||||
image = cfg.image;
|
image = cfg.image;
|
||||||
ports = [
|
ports = [
|
||||||
"${cfg.host}:${port}:3000"
|
"127.0.0.1:${port}:3000"
|
||||||
];
|
];
|
||||||
environment = {
|
environment = {
|
||||||
ADDON_ID = cfg.domain;
|
ADDON_ID = cfg.domain;
|
||||||
@@ -84,39 +62,11 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services.nginx.virtualHosts.${cfg.domain} = mkIf (cfg.domain != "") {
|
||||||
nginx.virtualHosts.${cfg.domain} = mkIf cfg.configureNginx {
|
|
||||||
forceSSL = acmeHost != "";
|
forceSSL = acmeHost != "";
|
||||||
useACMEHost = mkIf (acmeHost != "") acmeHost;
|
useACMEHost = mkIf (acmeHost != "") acmeHost;
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://${cfg.host}:${port}";
|
proxyPass = "http://127.0.0.1:${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 = "/";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
{
|
|
||||||
flake.modules.nixos.services = {
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
options,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.tnix.services.coder;
|
|
||||||
port = toString cfg.port;
|
|
||||||
in {
|
|
||||||
options.tnix.services.coder = {
|
|
||||||
enable = mkEnableOption "Coder";
|
|
||||||
|
|
||||||
host = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "127.0.0.1";
|
|
||||||
description = "Host on which Coder listens";
|
|
||||||
};
|
|
||||||
|
|
||||||
port = mkOption {
|
|
||||||
type = types.port;
|
|
||||||
default = 1116;
|
|
||||||
description = "Port on which Coder listens";
|
|
||||||
};
|
|
||||||
|
|
||||||
environment = options.services.coder.environment;
|
|
||||||
|
|
||||||
domain = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "";
|
|
||||||
description = "Domain on which Coder is available";
|
|
||||||
};
|
|
||||||
|
|
||||||
configureNginx = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether to configure Nginx as a reverse proxy for Coder";
|
|
||||||
};
|
|
||||||
|
|
||||||
configurePangolin = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether to configure Pangolin as a reverse proxy for Coder";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
users.users.coder.extraGroups = ["docker"];
|
|
||||||
|
|
||||||
services = {
|
|
||||||
coder = {
|
|
||||||
enable = true;
|
|
||||||
accessUrl = "https://${cfg.domain}";
|
|
||||||
listenAddress = "${cfg.host}:${port}";
|
|
||||||
environment = cfg.environment;
|
|
||||||
};
|
|
||||||
|
|
||||||
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 = "coder";
|
|
||||||
protocol = "http";
|
|
||||||
targets = [
|
|
||||||
{
|
|
||||||
hostname = "localhost";
|
|
||||||
method = "http";
|
|
||||||
port = cfg.port;
|
|
||||||
healthcheck = {
|
|
||||||
hostname = "localhost";
|
|
||||||
port = cfg.port;
|
|
||||||
scheme = "http";
|
|
||||||
method = "GET";
|
|
||||||
path = "/";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
{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 = "/";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user