Compare commits
119 Commits
plasma-man
...
shared-ste
| Author | SHA1 | Date | |
|---|---|---|---|
| 433cfe3985 | |||
| ffd7ce45a7 | |||
| cc3d398963 | |||
| f757ea7271 | |||
| 64149713d2 | |||
| 88b413e0af | |||
| c5070eb4bf | |||
| 6b4dc1e6b7 | |||
| aadd8c7b6c | |||
| f8d145b495 | |||
| 9232d46f6a | |||
| b2b34fc05f | |||
| aa4dacb3af | |||
| 6dc4d6956a | |||
| be83fc566f | |||
| 485df44aea | |||
| 4861128de6 | |||
| 9fe7cfbbfc | |||
| 741e3a67d6 | |||
| 22254eb1f3 | |||
| 79dde1a0fe | |||
| f4b3c36a4e | |||
| 1fa7a2689c | |||
| c08c5e2486 | |||
| ecaa6dcb83 | |||
| 7729ff7434 | |||
| 52c110a505 | |||
| d5997575df | |||
| 57bc35101e | |||
| 6b09b1b0bc | |||
| 1851743a21 | |||
| c6d787f9f5 | |||
| f4a8f9d614 | |||
| 1e01d44f2f | |||
| 39dbe6644c | |||
| 870e1073dc | |||
| c1f132026a | |||
| 5650125d7e | |||
| 6536213bd0 | |||
| a0ce3b810e | |||
| abbcfebc97 | |||
| 495aba3fef | |||
| f9bcec74d3 | |||
| 97c4d7035c | |||
| 8abd331619 | |||
| aca0afa0dc | |||
| 1d0b3a0367 | |||
| 50f9defdd5 | |||
| d71d7a1ffb | |||
| ee511f6ab8 | |||
| e3dd0bdb30 | |||
| 10300ed10b | |||
| 8e72ef71d2 | |||
| d6e031efd0 | |||
| 16fa4a641c | |||
| 7a5ec23cc5 | |||
| ff1124fbe6 | |||
| 53088f9536 | |||
| 68c04b43fd | |||
| efbfffbb61 | |||
| 0e1a67b980 | |||
| 7d6e294340 | |||
| 8690a0289d | |||
| e95f56e240 | |||
| 2dffbb0a98 | |||
| 2ceaf78825 | |||
| e164097f36 | |||
| d1605e386d | |||
| 4a41533ba8 | |||
| 9d45449fce | |||
| 877bc2c739 | |||
| cd6e028142 | |||
| 421b27f76f | |||
| 1f4a72d28c | |||
| a8f19af989 | |||
| d4b0fe5b9e | |||
| 09cff42222 | |||
| 0183e7c823 | |||
| 29cdd1e239 | |||
| 7ced8f11ba | |||
| 244b7c0888 | |||
| 80744bcbf1 | |||
| 56d03f4228 | |||
| 32d0c7fa5a | |||
| 1c2aae93b7 | |||
| 0ab6562694 | |||
| 986ee06a46 | |||
| 34abaeeec9 | |||
| 11638cfa1b | |||
| 1ce431b0e5 | |||
| 98ef9b1443 | |||
| 4c779663df | |||
| e2bb87fcf1 | |||
| ef47c5dc9a | |||
| 7da089daa3 | |||
| 8134d7cb33 | |||
| 24f1a64f3c | |||
| 19531074ca | |||
| a30c130f21 | |||
| e088ee2dc8 | |||
| 366a7e2ea3 | |||
| 9116e44dfe | |||
| e3ef710bdb | |||
| e1a804cfed | |||
| ec59936012 | |||
| 844d17a855 | |||
| b19dc65c6d | |||
| 6db2c78e0b | |||
| 475aafa33e | |||
| 09562f0af9 | |||
| ae543d9628 | |||
| c7716d2bca | |||
| 54cf339d52 | |||
| b9097e91d5 | |||
| abf8fe9ad2 | |||
| 926b47f07f | |||
| 749ef988f1 | |||
| dfa91d327f | |||
| 37c455d75e |
21
.goosehints
Normal file
21
.goosehints
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
NixOS Configurations Repository
|
||||||
|
================================
|
||||||
|
|
||||||
|
Overview:
|
||||||
|
---------
|
||||||
|
This repository hosts modular and reproducible NixOS configurations managed via Nix flakes. It is structured to separate concerns across machine-specific setups, common roles, and custom packages.
|
||||||
|
|
||||||
|
Directory Structure:
|
||||||
|
----------------------
|
||||||
|
• packages/ - Custom Nix packages leveraged across various configurations.
|
||||||
|
• roles/ - Role-based configurations (e.g., kodi, bluetooth) each with its own module (default.nix) for inclusion in machine setups.
|
||||||
|
• machines/ - Machine-specific configurations (e.g., nix-book, z790prors, boxy, wixos) including configuration.nix and hardware-configuration.nix tailored for each hardware.
|
||||||
|
• home/ - Home-manager configurations for personal environments and application settings (e.g., home-nix-book.nix, home-z790prors.nix).
|
||||||
|
|
||||||
|
Design Principles:
|
||||||
|
------------------
|
||||||
|
• Modularity: Clear separation between roles, machines, and packages allows for flexible and reusable configurations.
|
||||||
|
• Declarative & Reproducible: Using Nix flakes guarantees a fully declarative setup that can be effortlessly reproduced across systems.
|
||||||
|
• Scalability: The structure is designed to accommodate adding new roles or machines with minimal disruption to existing configurations.
|
||||||
|
|
||||||
|
This file serves as a concise guide for navigating and understanding the repository from an advanced Nix perspective. Further documentation can be found within the respective directories or individual README files where applicable.
|
||||||
11
.sops.yaml
11
.sops.yaml
@@ -1,11 +0,0 @@
|
|||||||
keys:
|
|
||||||
- &admin_johno age1ls6a033d4p4u8h4rwazjwt8w4c4xg73wq0mdnm64jajxzcz4k9asvjnks3
|
|
||||||
- &host_z790prors age12l5u7sw59u5pkwp83qm8t3ff7uv0ld2c9k3zh5j4ame9k2szcynqu7ftqe
|
|
||||||
- &host_nixbook age1fa3zqavfmqk4ssa22yne9td90gyqv9q5a8y0s8jp3xak8q7p3yjqyn7rkg
|
|
||||||
creation_rules:
|
|
||||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *admin_johno
|
|
||||||
- *host_z790prors
|
|
||||||
- *host_nixbook
|
|
||||||
110
CLAUDE.md
Normal file
110
CLAUDE.md
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Repository Overview
|
||||||
|
|
||||||
|
This is a NixOS configuration repository using flakes, managing multiple machines and home-manager configurations. The repository follows a modular architecture with reusable "roles" that can be composed for different machines.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Flake Structure
|
||||||
|
- **flake.nix**: Main entry point defining inputs (nixpkgs, home-manager, plasma-manager, etc.) and outputs for multiple NixOS configurations
|
||||||
|
- **Machines**: `nix-book`, `boxy`, `wixos` (WSL configuration)
|
||||||
|
- **Home configurations**: Standalone home-manager configuration for user `johno`
|
||||||
|
|
||||||
|
### Directory Structure
|
||||||
|
- `machines/`: Machine-specific configurations with hardware-configuration.nix
|
||||||
|
- `roles/`: Modular system configurations (audio, bluetooth, desktop, users, etc.)
|
||||||
|
- `home/`: Home Manager configurations and user-specific modules
|
||||||
|
- `home/modules/`: User environment modules (emacs, i3+sway, plasma-manager, tmux)
|
||||||
|
- `packages/`: Custom package definitions
|
||||||
|
|
||||||
|
### Role-Based Configuration System
|
||||||
|
The repository uses a custom "roles" system where each role is a NixOS module with enable options:
|
||||||
|
- `roles.desktop`: Desktop environment with sub-options for X11, Wayland, KDE, gaming, SDDM
|
||||||
|
- `roles.audio`: Audio configuration
|
||||||
|
- `roles.bluetooth`: Bluetooth support
|
||||||
|
- `roles.users`: User account management
|
||||||
|
- `roles.virtualisation`: Virtualization setup
|
||||||
|
- `roles.kodi`: Kodi media center
|
||||||
|
|
||||||
|
Example role usage in machine configuration:
|
||||||
|
```nix
|
||||||
|
roles = {
|
||||||
|
audio.enable = true;
|
||||||
|
desktop = {
|
||||||
|
enable = true;
|
||||||
|
gaming = true;
|
||||||
|
kde = true;
|
||||||
|
wayland = true;
|
||||||
|
};
|
||||||
|
users.enable = true;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Commands
|
||||||
|
|
||||||
|
### Building and Switching Configurations
|
||||||
|
```bash
|
||||||
|
# Build and switch to a specific machine configuration
|
||||||
|
sudo nixos-rebuild switch --flake .#<hostname>
|
||||||
|
|
||||||
|
# Build without switching
|
||||||
|
nixos-rebuild build --flake .#<hostname>
|
||||||
|
|
||||||
|
# Build home-manager configuration only
|
||||||
|
home-manager switch --flake .#johno
|
||||||
|
```
|
||||||
|
|
||||||
|
### Available Machine Configurations
|
||||||
|
- `nix-book`: Uses `home/home-nix-book.nix`
|
||||||
|
- `boxy`: Gaming desktop with AMD GPU, uses `home/home.nix`
|
||||||
|
- `wixos`: WSL configuration, uses `home/home.nix`
|
||||||
|
|
||||||
|
### Flake Operations
|
||||||
|
```bash
|
||||||
|
# Update flake inputs
|
||||||
|
nix flake update
|
||||||
|
|
||||||
|
# Check flake
|
||||||
|
nix flake check
|
||||||
|
|
||||||
|
# Show flake info
|
||||||
|
nix flake show
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bootstrap New Machine
|
||||||
|
Use the provided bootstrap script:
|
||||||
|
```bash
|
||||||
|
sudo ./bootstrap.sh <hostname>
|
||||||
|
```
|
||||||
|
This script pulls from the remote git repository and applies the configuration.
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
### Adding New Machines
|
||||||
|
1. Create new directory in `machines/<hostname>/`
|
||||||
|
2. Add `configuration.nix` with role assignments
|
||||||
|
3. Include hardware-configuration.nix (generated by nixos-generate-config)
|
||||||
|
4. Add nixosConfiguration to flake.nix outputs
|
||||||
|
|
||||||
|
### Adding New Roles
|
||||||
|
1. Create directory in `roles/<role-name>/`
|
||||||
|
2. Create `default.nix` with module definition using mkEnableOption
|
||||||
|
3. Add role import to `roles/default.nix`
|
||||||
|
4. Configure role options in machine configurations
|
||||||
|
|
||||||
|
### Home Manager Modules
|
||||||
|
- Located in `home/modules/`
|
||||||
|
- Each module has its own `default.nix`
|
||||||
|
- Imported in main home configuration files
|
||||||
|
|
||||||
|
## Key Configuration Details
|
||||||
|
|
||||||
|
- **Experimental features**: nix-command and flakes are enabled
|
||||||
|
- **User**: Primary user is `johno` with trusted-user privileges
|
||||||
|
- **Locale**: en_US.UTF-8, America/Los_Angeles timezone
|
||||||
|
- **SSH**: OpenSSH enabled on all configurations
|
||||||
|
- **Garbage collection**: Automatic, deletes older than 10 days
|
||||||
|
- **Unfree packages**: Allowed globally
|
||||||
11
bootstrap.sh
Executable file
11
bootstrap.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# bootstrap.sh
|
||||||
|
# Usage: sudo ./bootstrap.sh <hostname>
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
NEW_HOSTNAME="${1:?missing hostname}"
|
||||||
|
FLAKE_URI="git+https://git.johnogle.info/johno/nixos-configs.git#${NEW_HOSTNAME}"
|
||||||
|
|
||||||
|
export NIX_CONFIG="experimental-features = nix-command flakes"
|
||||||
|
nixos-rebuild switch --flake "$FLAKE_URI"
|
||||||
|
|
||||||
120
flake.lock
generated
120
flake.lock
generated
@@ -1,5 +1,41 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1747046372,
|
||||||
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"google-cookie-retrieval": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752428473,
|
||||||
|
"narHash": "sha256-IsE7fdAYbRlZuc0H5FtPfhhuHvlxnDGoAxdlnjpVNCU=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "1fad66b55144ab6beaecd900172a21ac3c34dc52",
|
||||||
|
"revCount": 10,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.johnogle.info/johno/google-cookie-retrieval.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.johnogle.info/johno/google-cookie-retrieval.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -7,11 +43,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1728041527,
|
"lastModified": 1752402455,
|
||||||
"narHash": "sha256-03liqiJtk9UP7YQHW4r8MduKCK242FQzud8iWvvlK+o=",
|
"narHash": "sha256-mCHfZhQKdTj2JhCFcqfOfa3uKZbwUkPQbd0/zPnhOE8=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "509dbf8d45606b618e9ec3bbe4e936b7c5bc6c1e",
|
"rev": "bf893ad4cbf46610dd1b620c974f824e266cd1df",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -20,34 +56,54 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixos-wsl": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752199438,
|
||||||
|
"narHash": "sha256-xSBMmGtq8K4Qv80TMqREmESCAsRLJRHAbFH2T/2Bf1Y=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NixOS-WSL",
|
||||||
|
"rev": "d34d9412556d3a896e294534ccd25f53b6822e80",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "main",
|
||||||
|
"repo": "NixOS-WSL",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1727802920,
|
"lastModified": 1751792365,
|
||||||
"narHash": "sha256-HP89HZOT0ReIbI7IJZJQoJgxvB2Tn28V6XS3MNKnfLs=",
|
"narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=",
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "27e30d177e57d912d614c88c622dcfdb2e6e6515",
|
"rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1725762081,
|
"lastModified": 1751984180,
|
||||||
"narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=",
|
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05",
|
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"ref": "release-24.05",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -62,11 +118,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1728750492,
|
"lastModified": 1748196248,
|
||||||
"narHash": "sha256-9IHlIsH4gLqQjS2lFbEnsl/ItdqzBBLWLsyXS0k0jf8=",
|
"narHash": "sha256-1iHjsH6/5UOerJEoZKE+Gx1BgAoge/YcnUsOA4wQ/BU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "plasma-manager",
|
"repo": "plasma-manager",
|
||||||
"rev": "c6d4b6f3e0138c08f37d66fcfbcbe37dab08f108",
|
"rev": "b7697abe89967839b273a863a3805345ea54ab56",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -77,31 +133,11 @@
|
|||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"google-cookie-retrieval": "google-cookie-retrieval",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixos-wsl": "nixos-wsl",
|
||||||
"plasma-manager": "plasma-manager",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"sops-nix": "sops-nix"
|
"plasma-manager": "plasma-manager"
|
||||||
}
|
|
||||||
},
|
|
||||||
"sops-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nixpkgs-stable": "nixpkgs-stable"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1727423009,
|
|
||||||
"narHash": "sha256-+4B/dQm2EnORIk0k2wV3aHGaE0WXTBjColXjj7qWh10=",
|
|
||||||
"owner": "Mic92",
|
|
||||||
"repo": "sops-nix",
|
|
||||||
"rev": "127a96f49ddc377be6ba76964411bab11ae27803",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "Mic92",
|
|
||||||
"repo": "sops-nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
67
flake.nix
67
flake.nix
@@ -3,11 +3,7 @@
|
|||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
|
||||||
sops-nix = {
|
|
||||||
url = "github:Mic92/sops-nix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
@@ -19,41 +15,36 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.home-manager.follows = "home-manager";
|
inputs.home-manager.follows = "home-manager";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
google-cookie-retrieval = {
|
||||||
|
url = "git+https://git.johnogle.info/johno/google-cookie-retrieval.git";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, ... } @ inputs: let
|
outputs = { self, nixpkgs, nixos-wsl, ... } @ inputs: let
|
||||||
baseModules = [
|
baseModules = [
|
||||||
./roles
|
./roles
|
||||||
inputs.sops-nix.nixosModules.sops
|
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = true;
|
home-manager.useUserPackages = true;
|
||||||
home-manager.sharedModules = [ inputs.plasma-manager.homeManagerModules.plasma-manager ];
|
home-manager.sharedModules = [
|
||||||
|
inputs.plasma-manager.homeManagerModules.plasma-manager
|
||||||
|
];
|
||||||
|
home-manager.extraSpecialArgs = {
|
||||||
|
globalInputs = inputs;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
nixosConfigurations.z790prors-nix = nixpkgs.lib.nixosSystem rec {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
specialArgs = { inherit inputs; };
|
|
||||||
modules = baseModules ++ [
|
|
||||||
./machines/z790prors/configuration.nix
|
|
||||||
{
|
|
||||||
home-manager.users.johno = import ./home/home-z790prors.nix;
|
|
||||||
home-manager.extraSpecialArgs.customPkgs =
|
|
||||||
nixpkgs.legacyPackages."${system}".callPackage ./packages {};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem rec {
|
nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem rec {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = baseModules ++ [
|
modules = baseModules ++ [
|
||||||
./machines/nix-book/configuration.nix
|
./machines/nix-book/configuration.nix
|
||||||
{
|
{
|
||||||
home-manager.users.johno = import ./home/home-nix-book.nix;
|
home-manager.users.johno = import ./home/home-nix-book.nix;
|
||||||
home-manager.extraSpecialArgs.customPkgs =
|
home-manager.extraSpecialArgs = { inherit system; };
|
||||||
nixpkgs.legacyPackages."${system}".callPackage ./packages {};
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -64,11 +55,35 @@
|
|||||||
./machines/boxy/configuration.nix
|
./machines/boxy/configuration.nix
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
home-manager.users.johno = import ./home/home-default.nix;
|
home-manager.users.johno = import ./home/home.nix;
|
||||||
home-manager.extraSpecialArgs.customPkgs =
|
home-manager.extraSpecialArgs = { inherit system; };
|
||||||
nixpkgs.legacyPackages."${system}".callPackage ./packages {};
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nixosConfigurations.wixos = nixpkgs.lib.nixosSystem rec {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = baseModules ++ [
|
||||||
|
nixos-wsl.nixosModules.default
|
||||||
|
./machines/wixos/configuration.nix
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.users.johno = import ./home/home.nix;
|
||||||
|
home-manager.extraSpecialArgs = { inherit system; };
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
homeConfigurations."johno" = inputs.home-manager.lib.homeManagerConfiguration {
|
||||||
|
pkgs = inputs.nixpkgs.legacyPackages."x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
inputs.plasma-manager.homeManagerModules.plasma-manager
|
||||||
|
./home/home.nix
|
||||||
|
];
|
||||||
|
extraSpecialArgs = {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
globalInputs = inputs;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./home-default.nix
|
./home.nix
|
||||||
./modules/hyprland/nix-book.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home.i3_sway.extraSwayConfig = {
|
home.i3_sway.extraSwayConfig = {
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./home-default.nix
|
|
||||||
./modules/hyprland/z790prors.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
{ pkgs, customPkgs, ... }:
|
{ pkgs, customPkgs, globalInputs, system, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
customPkgs = pkgs.callPackage ../packages {};
|
||||||
|
in
|
||||||
{
|
{
|
||||||
# Home Manager needs a bit of information about you and the paths it should
|
# Home Manager needs a bit of information about you and the paths it should
|
||||||
# manage.
|
# manage.
|
||||||
@@ -36,10 +39,13 @@
|
|||||||
# '')
|
# '')
|
||||||
|
|
||||||
pkgs.bitwarden
|
pkgs.bitwarden
|
||||||
|
pkgs.claude-code
|
||||||
|
pkgs.codex
|
||||||
pkgs.dunst
|
pkgs.dunst
|
||||||
pkgs.element-desktop
|
pkgs.element-desktop
|
||||||
pkgs.fd
|
pkgs.fd
|
||||||
#pkgs.fluffychat # security vulnerability in current version
|
#pkgs.fluffychat # security vulnerability in current version
|
||||||
|
pkgs.goose-cli
|
||||||
pkgs.gzip
|
pkgs.gzip
|
||||||
pkgs.htop
|
pkgs.htop
|
||||||
pkgs.jellyfin-media-player
|
pkgs.jellyfin-media-player
|
||||||
@@ -49,17 +55,24 @@
|
|||||||
pkgs.less
|
pkgs.less
|
||||||
pkgs.moonlight-qt
|
pkgs.moonlight-qt
|
||||||
pkgs.ncdu
|
pkgs.ncdu
|
||||||
|
pkgs.nextcloud-talk-desktop
|
||||||
|
pkgs.openscad-unstable
|
||||||
pkgs.pandoc
|
pkgs.pandoc
|
||||||
pkgs.pinentry-qt
|
#pkgs.pinentry-qt
|
||||||
#pkgs.pytest
|
#pkgs.pytest
|
||||||
pkgs.shellcheck
|
pkgs.shellcheck
|
||||||
pkgs.solaar # Logitech management software
|
pkgs.solaar # Logitech management software
|
||||||
|
(pkgs.snapcast.override { pulseaudioSupport = true; })
|
||||||
pkgs.tmux
|
pkgs.tmux
|
||||||
pkgs.waybar
|
pkgs.waybar
|
||||||
pkgs.wofi
|
pkgs.wofi
|
||||||
pkgs.vlc
|
pkgs.vlc
|
||||||
|
|
||||||
customPkgs.nextcloudTalkDesktop
|
## Kubernetes cluster management
|
||||||
|
pkgs.kubectl
|
||||||
|
pkgs.kubernetes-helm
|
||||||
|
|
||||||
|
globalInputs.google-cookie-retrieval.packages.${system}.default
|
||||||
];
|
];
|
||||||
|
|
||||||
# Home Manager is pretty good at managing dotfiles. The primary way to manage
|
# Home Manager is pretty good at managing dotfiles. The primary way to manage
|
||||||
@@ -75,9 +88,10 @@
|
|||||||
# org.gradle.console=verbose
|
# org.gradle.console=verbose
|
||||||
# org.gradle.daemon.idletimeout=3600000
|
# org.gradle.daemon.idletimeout=3600000
|
||||||
# '';
|
# '';
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
targets.genericLinux.enable = true;
|
||||||
|
|
||||||
# Home Manager can also manage your environment variables through
|
# Home Manager can also manage your environment variables through
|
||||||
# 'home.sessionVariables'. These will be explicitly sourced when using a
|
# 'home.sessionVariables'. These will be explicitly sourced when using a
|
||||||
# shell provided by Home Manager. If you don't want to manage your shell
|
# shell provided by Home Manager. If you don't want to manage your shell
|
||||||
@@ -100,21 +114,22 @@
|
|||||||
home.sessionPath = [
|
home.sessionPath = [
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
./modules/emacs
|
./modules/emacs
|
||||||
./modules/i3+sway
|
./modules/i3+sway
|
||||||
./modules/lutris
|
|
||||||
./modules/plasma-manager
|
./modules/plasma-manager
|
||||||
|
./modules/tmux
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.bash.enable = true;
|
programs.bash = {
|
||||||
|
enable = true;
|
||||||
nix = {
|
initExtra = ''
|
||||||
gc = {
|
codex() {
|
||||||
automatic = true;
|
local key
|
||||||
};
|
key="$(rbw get openai-api-key-codex)"
|
||||||
|
OPENAI_API_KEY="$key" command codex "$@"
|
||||||
|
}
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# Let Home Manager install and manage itself.
|
# Let Home Manager install and manage itself.
|
||||||
@@ -135,15 +150,6 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.gpg.enable = true;
|
|
||||||
|
|
||||||
services.gpg-agent = {
|
|
||||||
enable = true;
|
|
||||||
enableSshSupport = true;
|
|
||||||
defaultCacheTtl = 1800;
|
|
||||||
pinentryPackage = pkgs.pinentry-qt;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.jq.enable = true;
|
programs.jq.enable = true;
|
||||||
|
|
||||||
programs.k9s.enable = true;
|
programs.k9s.enable = true;
|
||||||
@@ -176,17 +182,16 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.home-manager.autoUpgrade = {
|
|
||||||
enable = true;
|
|
||||||
frequency = "weekly";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.kdeconnect = {
|
services.kdeconnect = {
|
||||||
enable = true;
|
enable = true;
|
||||||
indicator = true;
|
indicator = true;
|
||||||
package = pkgs.kdePackages.kdeconnect-kde;
|
package = pkgs.kdePackages.kdeconnect-kde;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.gnome-keyring = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
services.syncthing = {
|
services.syncthing = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tray = {
|
tray = {
|
||||||
@@ -3,20 +3,25 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
doomSync = (let
|
doomEmacs = pkgs.fetchFromGitHub {
|
||||||
git = pkgs.git;
|
owner = "doomemacs";
|
||||||
in ''
|
repo = "doomemacs";
|
||||||
export PATH=${pkgs.emacs}/bin:${git}/bin:$PATH
|
rev = "8406c1ff22b95bd0f816de4a0223fa3ce3c82568";
|
||||||
${config.xdg.configHome}/emacs/bin/doom sync -u -j $((`nproc`/4*3))
|
sha256 = "sha256-rOkgOdmLESVAbOeEM9nJTzxyI+akdk48Ed2VlktOy3Q=";
|
||||||
'');
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
config = {
|
config = {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
|
pkgs.emacs
|
||||||
|
|
||||||
pkgs.emacs-all-the-icons-fonts
|
pkgs.emacs-all-the-icons-fonts
|
||||||
|
pkgs.fira-code
|
||||||
pkgs.fontconfig
|
pkgs.fontconfig
|
||||||
pkgs.graphviz
|
pkgs.graphviz
|
||||||
pkgs.isort
|
pkgs.isort
|
||||||
pkgs.nerdfonts
|
pkgs.nerd-fonts.fira-code
|
||||||
|
pkgs.nerd-fonts.droid-sans-mono
|
||||||
pkgs.nil # nix lsp language server
|
pkgs.nil # nix lsp language server
|
||||||
pkgs.nixfmt-rfc-style
|
pkgs.nixfmt-rfc-style
|
||||||
(pkgs.ripgrep.override {withPCRE2 = true;})
|
(pkgs.ripgrep.override {withPCRE2 = true;})
|
||||||
@@ -27,41 +32,16 @@ in {
|
|||||||
|
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
|
|
||||||
home.file = {
|
home.file."${config.xdg.configHome}/emacs".source = doomEmacs;
|
||||||
".config/emacs" = {
|
|
||||||
source = fetchGit {
|
|
||||||
url = "https://github.com/doomemacs/doomemacs.git";
|
|
||||||
# When updating me, remember to run `doom sync`
|
|
||||||
rev = "5ad99220b86ae1bf421861dfad24492d768ac4d9";
|
|
||||||
};
|
|
||||||
# We need to use recursive mode here or else doom fails to sync for
|
|
||||||
# some reason related to the permissions on the synced path. I'm not
|
|
||||||
# quite sure of everything that's going on here.
|
|
||||||
recursive = true;
|
|
||||||
|
|
||||||
# Because `recursive = true` will cause this to sync every single
|
|
||||||
# activation, we turn this off here.
|
|
||||||
#
|
|
||||||
# There's probably a way we could do better detection of this within
|
|
||||||
# our onChange shell?
|
|
||||||
#
|
|
||||||
# onChange = doomSync;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
DOOMLOCALDIR = "${config.xdg.dataHome}/doom";
|
|
||||||
EDITOR = "emacs -nw";
|
|
||||||
};
|
|
||||||
|
|
||||||
home.sessionPath = [
|
home.sessionPath = [
|
||||||
"${config.xdg.configHome}/emacs/bin"
|
"${config.xdg.configHome}/emacs/bin"
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.configFile."doom" = {
|
home.sessionVariables = {
|
||||||
source = ./doom;
|
DOOMDIR = "${config.xdg.configHome}/doom";
|
||||||
# Sync doom if we updated the config
|
DOOMLOCALDIR = "${config.xdg.dataHome}/doom";
|
||||||
onChange = doomSync;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.file."${config.xdg.configHome}/doom".source = ./doom;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
||||||
;; refresh your font settings. If Emacs still can't find your font, it likely
|
;; refresh your font settings. If Emacs still can't find your font, it likely
|
||||||
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
||||||
|
(setq doom-font (font-spec :family "Fira Code"))
|
||||||
|
|
||||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
;; There are two ways to load a theme. Both assume the theme is installed and
|
||||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
;; available. You can either set `doom-theme' or manually load a theme with the
|
||||||
@@ -43,7 +44,11 @@
|
|||||||
(setq org-directory "~/org/")
|
(setq org-directory "~/org/")
|
||||||
(after! org
|
(after! org
|
||||||
(setq org-agenda-span 'week
|
(setq org-agenda-span 'week
|
||||||
org-agenda-files `(,org-directory ,(concat org-directory "roam/"))
|
my-agenda-dirs '("projects" "roam")
|
||||||
|
org-agenda-files (cons org-directory (mapcan (lambda (x) (directory-files-recursively
|
||||||
|
(expand-file-name x org-directory)
|
||||||
|
"\.org$"))
|
||||||
|
my-agenda-dirs))
|
||||||
org-log-done 'time
|
org-log-done 'time
|
||||||
org-agenda-custom-commands '(("n" "Agenda"
|
org-agenda-custom-commands '(("n" "Agenda"
|
||||||
((agenda "")
|
((agenda "")
|
||||||
@@ -67,6 +72,16 @@
|
|||||||
;; org-caldav-files nil
|
;; org-caldav-files nil
|
||||||
;; org-caldav-sync-direction 'cal->org))
|
;; org-caldav-sync-direction 'cal->org))
|
||||||
|
|
||||||
|
(defun my/get-rbw-password (alias)
|
||||||
|
"Return the password for ALIAS via rbw, unlocking the vault only if needed."
|
||||||
|
(let* ((cmd (format "rbw get %s 2>&1" alias))
|
||||||
|
(output (shell-command-to-string cmd)))
|
||||||
|
(string-trim output)))
|
||||||
|
|
||||||
|
(use-package! gptel
|
||||||
|
:defer t
|
||||||
|
:config
|
||||||
|
(setq! gptel-api-key (my/get-rbw-password "openai-api-key-chatgpt-el")))
|
||||||
|
|
||||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
||||||
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
||||||
|
|||||||
@@ -108,7 +108,7 @@
|
|||||||
|
|
||||||
:os
|
:os
|
||||||
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
|
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
|
||||||
;;tty ; improve the terminal Emacs experience
|
tty ; improve the terminal Emacs experience
|
||||||
|
|
||||||
:lang
|
:lang
|
||||||
;;agda ; types of types of types of types...
|
;;agda ; types of types of types of types...
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
;;lua ; one-based indices? one-based indices
|
;;lua ; one-based indices? one-based indices
|
||||||
markdown ; writing docs for people to ignore
|
markdown ; writing docs for people to ignore
|
||||||
;;nim ; python + lisp at the speed of c
|
;;nim ; python + lisp at the speed of c
|
||||||
(nix +tree-sitter +lsp) ; I hereby declare "nix geht mehr!"
|
(nix +tree-sitter) ; I hereby declare "nix geht mehr!"
|
||||||
;;ocaml ; an objective camel
|
;;ocaml ; an objective camel
|
||||||
(org +roam2) ; organize your plain life in plain text
|
(org +roam2) ; organize your plain life in plain text
|
||||||
;;php ; perl's insecure younger brother
|
;;php ; perl's insecure younger brother
|
||||||
|
|||||||
@@ -50,3 +50,5 @@
|
|||||||
;; (unpin! t)
|
;; (unpin! t)
|
||||||
|
|
||||||
;; (package! org-caldav)
|
;; (package! org-caldav)
|
||||||
|
|
||||||
|
(package! gptel :recipe (:nonrecursive t))
|
||||||
|
|||||||
@@ -1,94 +0,0 @@
|
|||||||
{ inputs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./hyprpaper.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
plugins = [ inputs.hy3.packages.x86_64-linux.hy3 ];
|
|
||||||
settings = {
|
|
||||||
"$mod" = "SUPER";
|
|
||||||
"$terminal" = "kitty";
|
|
||||||
"$fileManager" = "dolphin";
|
|
||||||
"$menu" = "wofi --show drun";
|
|
||||||
|
|
||||||
exec-once = [
|
|
||||||
"waybar"
|
|
||||||
"dunst"
|
|
||||||
];
|
|
||||||
|
|
||||||
xwayland = {
|
|
||||||
force_zero_scaling = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
input = {
|
|
||||||
kb_layout = "us";
|
|
||||||
kb_options = "caps:escape";
|
|
||||||
follow_mouse = 1;
|
|
||||||
touchpad.natural_scroll = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
windowrulev2 = [
|
|
||||||
# I can guess, but I should figure out what this actually does
|
|
||||||
"suppressevent maximize, class:.*"
|
|
||||||
];
|
|
||||||
|
|
||||||
general.layout = "hy3";
|
|
||||||
|
|
||||||
bind =
|
|
||||||
[
|
|
||||||
"SHIFT_$mod, Q, killactive"
|
|
||||||
"SHIFT_$mod, M, exit"
|
|
||||||
|
|
||||||
"$mod, D, exec, $menu"
|
|
||||||
"$mod, Return, exec, $terminal"
|
|
||||||
|
|
||||||
"$mod, H, hy3:movefocus, l"
|
|
||||||
"$mod, L, hy3:movefocus, r"
|
|
||||||
"$mod, K, hy3:movefocus, u"
|
|
||||||
"$mod, J, hy3:movefocus, d"
|
|
||||||
|
|
||||||
"SHIFT_$mod, H, hy3:movewindow, l"
|
|
||||||
"SHIFT_$mod, L, hy3:movewindow, r"
|
|
||||||
"SHIFT_$mod, K, hy3:movewindow, u"
|
|
||||||
"SHIFT_$mod, J, hy3:movewindow, d"
|
|
||||||
|
|
||||||
"$mod, V, hy3:makegroup, opposite"
|
|
||||||
"$mod, W, hy3:changegroup, toggletab"
|
|
||||||
|
|
||||||
"$mod, A, hy3:changefocus, raise"
|
|
||||||
"SHIFT_$mod, A, hy3:changefocus, lower"
|
|
||||||
|
|
||||||
"$mod, M, fullscreen, 0"
|
|
||||||
"$mod, E, hy3:expand, expand"
|
|
||||||
"SHIFT_$mod, E, hy3:expand, base"
|
|
||||||
|
|
||||||
"$mod, Q, hy3:warpcursor"
|
|
||||||
]
|
|
||||||
++ (
|
|
||||||
# workspaces
|
|
||||||
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
|
|
||||||
builtins.concatLists (builtins.genList (
|
|
||||||
x: let
|
|
||||||
ws = let
|
|
||||||
c = (x + 1) / 10;
|
|
||||||
in
|
|
||||||
builtins.toString (x + 1 - (c * 10));
|
|
||||||
in [
|
|
||||||
"$mod, ${ws}, workspace, ${toString (x + 1)}"
|
|
||||||
"$mod SHIFT, ${ws}, hy3:movetoworkspace, ${toString (x + 1)}"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
10)
|
|
||||||
);
|
|
||||||
|
|
||||||
bindm =
|
|
||||||
[
|
|
||||||
"$mod, mouse:272, movewindow"
|
|
||||||
"$mod, mouse:273, resizewindow"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
services.hyprpaper = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
ipc = "on";
|
|
||||||
splash = false;
|
|
||||||
preload = [
|
|
||||||
"${config.xdg.dataHome}/wallpaper.jpg"
|
|
||||||
];
|
|
||||||
wallpaper = [
|
|
||||||
",${config.xdg.dataHome}/wallpaper.jpg"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.dataFile."wallpaper.jpg" = {
|
|
||||||
source = ./wallpaper.jpg;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
wayland.windowManager.hyprland.settings.monitor = ",preferred,2880x1800@90.00Hz,1.33333";
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 842 KiB |
@@ -1,16 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
wayland.windowManager.hyprland.settings.monitor = "DP-1,3440x1440@164.90,0x0,1.33333,vrr,1";
|
|
||||||
wayland.windowManager.hyprland.settings.env = [
|
|
||||||
"LIBVA_DRIVER_NAME,nvidia"
|
|
||||||
"XDG_SESSION_TYPE,wayland"
|
|
||||||
"GBM_BACKEND,nvidia-drm"
|
|
||||||
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
|
|
||||||
"NVD_BACKEND,direct"
|
|
||||||
"ELECTRON_OZONE_PLATFORM_HINT,auto"
|
|
||||||
"NIXOS_OZONE_WL,1"
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.cursor.no_hardware_cursors = true;
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
home.packages = [
|
|
||||||
pkgs.gamescope
|
|
||||||
pkgs.lutris
|
|
||||||
pkgs.mangohud
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,225 +1,80 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
|
||||||
# The following can be generated with the command:
|
# The current KDE config can be output with the command:
|
||||||
# nix run github:nix-community/plasma-manager
|
# nix run github:nix-community/plasma-manager
|
||||||
#
|
#
|
||||||
# Plasma-manager options documentation
|
# Plasma-manager options documentation
|
||||||
# https://nix-community.github.io/plasma-manager/options.xhtml
|
# https://nix-community.github.io/plasma-manager/options.xhtml
|
||||||
#
|
#
|
||||||
# Polonium usage
|
# TODO: (ambitious) Add Kmail support to plasma-manager
|
||||||
# https://github.com/zeroxoneafour/polonium/blob/master/docs/usage.md
|
|
||||||
#
|
|
||||||
# TODO: Extract this configuration into something that's a bit easier to manage
|
|
||||||
# TODO: Update shortcuts for better window/tiling/desktop management akin to i3wm
|
|
||||||
# TODO(ambitious): Add Kmail support to plasma-manager
|
|
||||||
{
|
{
|
||||||
programs.plasma = {
|
programs.plasma = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
overrideConfig = true;
|
||||||
|
|
||||||
|
hotkeys.commands."launch-konsole" = {
|
||||||
|
name = "Launch Konsole";
|
||||||
|
key = "Meta+Return";
|
||||||
|
command = "konsole";
|
||||||
|
};
|
||||||
|
|
||||||
shortcuts = {
|
shortcuts = {
|
||||||
"KDE Keyboard Layout Switcher"."Switch to Last-Used Keyboard Layout" = "Meta+Alt+L";
|
kmix = {
|
||||||
"KDE Keyboard Layout Switcher"."Switch to Next Keyboard Layout" = "Meta+Alt+K";
|
"decrease_microphone_volume" = "Microphone Volume Down";
|
||||||
"kaccess"."Toggle Screen Reader On and Off" = "Meta+Alt+S";
|
"decrease_volume" = "Volume Down";
|
||||||
"kcm_touchpad"."Disable Touchpad" = "Touchpad Off";
|
"decrease_volume_small" = "Shift+Volume Down";
|
||||||
"kcm_touchpad"."Enable Touchpad" = "Touchpad On";
|
"increase_microphone_volume" = "Microphone Volume Up";
|
||||||
"kcm_touchpad"."Toggle Touchpad" = ["Touchpad Toggle" "Meta+Ctrl+Zenkaku Hankaku,Touchpad Toggle" "Meta+Ctrl+Zenkaku Hankaku,Toggle Touchpad"];
|
"increase_volume" = "Volume Up";
|
||||||
"kmix"."decrease_microphone_volume" = "Microphone Volume Down";
|
"increase_volume_small" = "Shift+Volume Up";
|
||||||
"kmix"."decrease_volume" = "Volume Down";
|
"mic_mute" = ["Microphone Mute" "Meta+Volume Mute,Microphone Mute" "Meta+Volume Mute,Mute Microphone"];
|
||||||
"kmix"."decrease_volume_small" = "Shift+Volume Down";
|
"mute" = "Volume Mute";
|
||||||
"kmix"."increase_microphone_volume" = "Microphone Volume Up";
|
};
|
||||||
"kmix"."increase_volume" = "Volume Up";
|
|
||||||
"kmix"."increase_volume_small" = "Shift+Volume Up";
|
mediacontrol = {
|
||||||
"kmix"."mic_mute" = ["Microphone Mute" "Meta+Volume Mute,Microphone Mute" "Meta+Volume Mute,Mute Microphone"];
|
"mediavolumedown" = "none,,Media volume down";
|
||||||
"kmix"."mute" = "Volume Mute";
|
"mediavolumeup" = "none,,Media volume up";
|
||||||
"ksmserver"."Halt Without Confirmation" = "none,,Shut Down Without Confirmation";
|
"nextmedia" = "Media Next";
|
||||||
"ksmserver"."Lock Session" = ["Meta+L" "Screensaver,Meta+L" "Screensaver,Lock Session"];
|
"pausemedia" = "Media Pause";
|
||||||
"ksmserver"."Log Out" = "Ctrl+Alt+Del";
|
"playmedia" = "none,,Play media playback";
|
||||||
"ksmserver"."Log Out Without Confirmation" = "none,,Log Out Without Confirmation";
|
"playpausemedia" = "Media Play";
|
||||||
"ksmserver"."LogOut" = "none,,Log Out";
|
"previousmedia" = "Media Previous";
|
||||||
"ksmserver"."Reboot" = "none,,Reboot";
|
"stopmedia" = "Media Stop";
|
||||||
"ksmserver"."Reboot Without Confirmation" = "none,,Reboot Without Confirmation";
|
};
|
||||||
"ksmserver"."Shut Down" = "none,,Shut Down";
|
|
||||||
"kwin"."Activate Window Demanding Attention" = "Meta+Ctrl+A";
|
ksmserver = {
|
||||||
"kwin"."Cycle Overview" = [ ];
|
"Lock Session" = ["Meta+Ctrl+Q" "Screensaver" "Screensaver,Lock Session"];
|
||||||
"kwin"."Cycle Overview Opposite" = [ ];
|
};
|
||||||
"kwin"."Decrease Opacity" = "none,,Decrease Opacity of Active Window by 5%";
|
|
||||||
"kwin"."Edit Tiles" = "Meta+T";
|
kwin = {
|
||||||
"kwin"."Expose" = "Ctrl+F9";
|
"Window Close" = "Meta+Shift+Q";
|
||||||
"kwin"."ExposeAll" = ["Ctrl+F10" "Launch (C),Ctrl+F10" "Launch (C),Toggle Present Windows (All desktops)"];
|
"Kill Window" = "Meta+Ctrl+Esc";
|
||||||
"kwin"."ExposeClass" = "Ctrl+F7";
|
"Window Operations Menu" = "Alt+F3";
|
||||||
"kwin"."ExposeClassCurrentDesktop" = [ ];
|
"Window Resize" = "Meta+R,,Resize Window";
|
||||||
"kwin"."Grid View" = "Meta+G";
|
|
||||||
"kwin"."Increase Opacity" = "none,,Increase Opacity of Active Window by 5%";
|
"Overview" = "Meta+W";
|
||||||
"kwin"."Kill Window" = "Meta+Ctrl+Esc";
|
"Grid View" = "Meta+G";
|
||||||
"kwin"."Move Tablet to Next Output" = [ ];
|
"Edit Tiles" = "Meta+T";
|
||||||
"kwin"."MoveMouseToCenter" = "Meta+F6";
|
|
||||||
"kwin"."MoveMouseToFocus" = "Meta+F5";
|
"Activate Window Demanding Attention" = "Meta+Ctrl+A";
|
||||||
"kwin"."MoveZoomDown" = [ ];
|
|
||||||
"kwin"."MoveZoomLeft" = [ ];
|
"Show Desktop" = "Meta+D";
|
||||||
"kwin"."MoveZoomRight" = [ ];
|
|
||||||
"kwin"."MoveZoomUp" = [ ];
|
"Walk Through Windows" = "Alt+Tab";
|
||||||
"kwin"."Overview" = "Meta+W";
|
"Walk Through Windows (Reverse)" = "Alt+Shift+Tab";
|
||||||
"kwin"."PoloniumCycleEngine" = "Meta+|,none,Polonium: Cycle Engine";
|
"Walk Through Windows of Current Application" = "Alt+`";
|
||||||
"kwin"."PoloniumFocusAbove" = "Meta+K,none,Polonium: Focus Above";
|
"Walk Through Windows of Current Application (Reverse)" = "Alt+~";
|
||||||
"kwin"."PoloniumFocusBelow" = "Meta+J,none,Polonium: Focus Below";
|
"Window Fullscreen" = "Meta+Shift+F,,Make Window Fullscreen";
|
||||||
"kwin"."PoloniumFocusLeft" = "Meta+H,none,Polonium: Focus Left";
|
|
||||||
"kwin"."PoloniumFocusRight" = "Meta+L,none,Polonium: Focus Right";
|
"Window Quick Tile Bottom" = "Meta+Down";
|
||||||
"kwin"."PoloniumInsertAbove" = "Meta+Shift+K,none,Polonium: Insert Above";
|
"Window Quick Tile Left" = "Meta+Left";
|
||||||
"kwin"."PoloniumInsertBelow" = "Meta+Shift+J,none,Polonium: Insert Below";
|
"Window Quick Tile Right" = "Meta+Right";
|
||||||
"kwin"."PoloniumInsertLeft" = "Meta+Shift+H,none,Polonium: Insert Left";
|
"Window Quick Tile Top" = "Meta+Up";
|
||||||
"kwin"."PoloniumInsertRight" = "Meta+Shift+L,none,Polonium: Insert Right";
|
|
||||||
"kwin"."PoloniumOpenSettings" = "Meta+\\\\,none,Polonium: Open Settings Dialog";
|
"view_actual_size" = "Meta+0";
|
||||||
"kwin"."PoloniumResizeAbove" = "Meta+Ctrl+K,none,Polonium: Resize Above";
|
"view_zoom_in" = ["Meta++" "Meta+=,Meta++" "Meta+=,Zoom In"];
|
||||||
"kwin"."PoloniumResizeBelow" = "Meta+Ctrl+J,none,Polonium: Resize Below";
|
"view_zoom_out" = "Meta+-";
|
||||||
"kwin"."PoloniumResizeLeft" = "Meta+Ctrl+H,none,Polonium: Resize Left";
|
};
|
||||||
"kwin"."PoloniumResizeRight" = "Meta+Ctrl+L,none,Polonium: Resize Right";
|
|
||||||
"kwin"."PoloniumRetileWindow" = "Meta+Shift+Space,none,Polonium: Retile Window";
|
|
||||||
"kwin"."PoloniumSwitchBTree" = [ ];
|
|
||||||
"kwin"."PoloniumSwitchHalf" = [ ];
|
|
||||||
"kwin"."PoloniumSwitchKwin" = [ ];
|
|
||||||
"kwin"."PoloniumSwitchMonocle" = [ ];
|
|
||||||
"kwin"."PoloniumSwitchThreeColumn" = [ ];
|
|
||||||
"kwin"."Setup Window Shortcut" = "none,,Setup Window Shortcut";
|
|
||||||
"kwin"."Show Desktop" = "Meta+D";
|
|
||||||
"kwin"."Suspend Compositing" = "Alt+Shift+F12";
|
|
||||||
"kwin"."Switch One Desktop Down" = "Meta+Ctrl+Down";
|
|
||||||
"kwin"."Switch One Desktop Up" = "Meta+Ctrl+Up";
|
|
||||||
"kwin"."Switch One Desktop to the Left" = "Meta+Ctrl+Left";
|
|
||||||
"kwin"."Switch One Desktop to the Right" = "Meta+Ctrl+Right";
|
|
||||||
"kwin"."Switch Window Down" = "Meta+Alt+Down";
|
|
||||||
"kwin"."Switch Window Left" = "Meta+Alt+Left";
|
|
||||||
"kwin"."Switch Window Right" = "Meta+Alt+Right";
|
|
||||||
"kwin"."Switch Window Up" = "Meta+Alt+Up";
|
|
||||||
"kwin"."Switch to Desktop 1" = "Meta+1,Ctrl+F1,Switch to Desktop 1";
|
|
||||||
"kwin"."Switch to Desktop 10" = "none,,Switch to Desktop 10";
|
|
||||||
"kwin"."Switch to Desktop 11" = "none,,Switch to Desktop 11";
|
|
||||||
"kwin"."Switch to Desktop 12" = "none,,Switch to Desktop 12";
|
|
||||||
"kwin"."Switch to Desktop 13" = "none,,Switch to Desktop 13";
|
|
||||||
"kwin"."Switch to Desktop 14" = "none,,Switch to Desktop 14";
|
|
||||||
"kwin"."Switch to Desktop 15" = "none,,Switch to Desktop 15";
|
|
||||||
"kwin"."Switch to Desktop 16" = "none,,Switch to Desktop 16";
|
|
||||||
"kwin"."Switch to Desktop 17" = "none,,Switch to Desktop 17";
|
|
||||||
"kwin"."Switch to Desktop 18" = "none,,Switch to Desktop 18";
|
|
||||||
"kwin"."Switch to Desktop 19" = "none,,Switch to Desktop 19";
|
|
||||||
"kwin"."Switch to Desktop 2" = "Meta+2,Ctrl+F2,Switch to Desktop 2";
|
|
||||||
"kwin"."Switch to Desktop 20" = "none,,Switch to Desktop 20";
|
|
||||||
"kwin"."Switch to Desktop 3" = "Meta+3,Ctrl+F3,Switch to Desktop 3";
|
|
||||||
"kwin"."Switch to Desktop 4" = "Meta+4,Ctrl+F4,Switch to Desktop 4";
|
|
||||||
"kwin"."Switch to Desktop 5" = "Meta+5,,Switch to Desktop 5";
|
|
||||||
"kwin"."Switch to Desktop 6" = "none,,Switch to Desktop 6";
|
|
||||||
"kwin"."Switch to Desktop 7" = "none,,Switch to Desktop 7";
|
|
||||||
"kwin"."Switch to Desktop 8" = "none,,Switch to Desktop 8";
|
|
||||||
"kwin"."Switch to Desktop 9" = "none,,Switch to Desktop 9";
|
|
||||||
"kwin"."Switch to Next Desktop" = "none,,Switch to Next Desktop";
|
|
||||||
"kwin"."Switch to Next Screen" = "none,,Switch to Next Screen";
|
|
||||||
"kwin"."Switch to Previous Desktop" = "none,,Switch to Previous Desktop";
|
|
||||||
"kwin"."Switch to Previous Screen" = "none,,Switch to Previous Screen";
|
|
||||||
"kwin"."Switch to Screen 0" = "none,,Switch to Screen 0";
|
|
||||||
"kwin"."Switch to Screen 1" = "none,,Switch to Screen 1";
|
|
||||||
"kwin"."Switch to Screen 2" = "none,,Switch to Screen 2";
|
|
||||||
"kwin"."Switch to Screen 3" = "none,,Switch to Screen 3";
|
|
||||||
"kwin"."Switch to Screen 4" = "none,,Switch to Screen 4";
|
|
||||||
"kwin"."Switch to Screen 5" = "none,,Switch to Screen 5";
|
|
||||||
"kwin"."Switch to Screen 6" = "none,,Switch to Screen 6";
|
|
||||||
"kwin"."Switch to Screen 7" = "none,,Switch to Screen 7";
|
|
||||||
"kwin"."Switch to Screen Above" = "none,,Switch to Screen Above";
|
|
||||||
"kwin"."Switch to Screen Below" = "none,,Switch to Screen Below";
|
|
||||||
"kwin"."Switch to Screen to the Left" = "none,,Switch to Screen to the Left";
|
|
||||||
"kwin"."Switch to Screen to the Right" = "none,,Switch to Screen to the Right";
|
|
||||||
"kwin"."Toggle Night Color" = [ ];
|
|
||||||
"kwin"."Toggle Window Raise/Lower" = "none,,Toggle Window Raise/Lower";
|
|
||||||
"kwin"."Walk Through Windows" = "Alt+Tab";
|
|
||||||
"kwin"."Walk Through Windows (Reverse)" = "Alt+Shift+Tab";
|
|
||||||
"kwin"."Walk Through Windows Alternative" = "none,,Walk Through Windows Alternative";
|
|
||||||
"kwin"."Walk Through Windows Alternative (Reverse)" = "none,,Walk Through Windows Alternative (Reverse)";
|
|
||||||
"kwin"."Walk Through Windows of Current Application" = "Alt+`";
|
|
||||||
"kwin"."Walk Through Windows of Current Application (Reverse)" = "Alt+~";
|
|
||||||
"kwin"."Walk Through Windows of Current Application Alternative" = "none,,Walk Through Windows of Current Application Alternative";
|
|
||||||
"kwin"."Walk Through Windows of Current Application Alternative (Reverse)" = "none,,Walk Through Windows of Current Application Alternative (Reverse)";
|
|
||||||
"kwin"."Window Above Other Windows" = "none,,Keep Window Above Others";
|
|
||||||
"kwin"."Window Below Other Windows" = "none,,Keep Window Below Others";
|
|
||||||
"kwin"."Window Close" = "Alt+F4";
|
|
||||||
"kwin"."Window Fullscreen" = "none,,Make Window Fullscreen";
|
|
||||||
"kwin"."Window Grow Horizontal" = "none,,Expand Window Horizontally";
|
|
||||||
"kwin"."Window Grow Vertical" = "none,,Expand Window Vertically";
|
|
||||||
"kwin"."Window Lower" = "none,,Lower Window";
|
|
||||||
"kwin"."Window Maximize" = "Meta+PgUp";
|
|
||||||
"kwin"."Window Maximize Horizontal" = "none,,Maximize Window Horizontally";
|
|
||||||
"kwin"."Window Maximize Vertical" = "none,,Maximize Window Vertically";
|
|
||||||
"kwin"."Window Minimize" = "Meta+PgDown";
|
|
||||||
"kwin"."Window Move" = "none,,Move Window";
|
|
||||||
"kwin"."Window Move Center" = "none,,Move Window to the Center";
|
|
||||||
"kwin"."Window No Border" = "none,,Toggle Window Titlebar and Frame";
|
|
||||||
"kwin"."Window On All Desktops" = "none,,Keep Window on All Desktops";
|
|
||||||
"kwin"."Window One Desktop Down" = "Meta+Ctrl+Shift+Down";
|
|
||||||
"kwin"."Window One Desktop Up" = "Meta+Ctrl+Shift+Up";
|
|
||||||
"kwin"."Window One Desktop to the Left" = "Meta+Ctrl+Shift+Left";
|
|
||||||
"kwin"."Window One Desktop to the Right" = "Meta+Ctrl+Shift+Right";
|
|
||||||
"kwin"."Window One Screen Down" = "none,,Move Window One Screen Down";
|
|
||||||
"kwin"."Window One Screen Up" = "none,,Move Window One Screen Up";
|
|
||||||
"kwin"."Window One Screen to the Left" = "none,,Move Window One Screen to the Left";
|
|
||||||
"kwin"."Window One Screen to the Right" = "none,,Move Window One Screen to the Right";
|
|
||||||
"kwin"."Window Operations Menu" = "Alt+F3";
|
|
||||||
"kwin"."Window Pack Down" = "none,,Move Window Down";
|
|
||||||
"kwin"."Window Pack Left" = "none,,Move Window Left";
|
|
||||||
"kwin"."Window Pack Right" = "none,,Move Window Right";
|
|
||||||
"kwin"."Window Pack Up" = "none,,Move Window Up";
|
|
||||||
"kwin"."Window Quick Tile Bottom" = "Meta+Down";
|
|
||||||
"kwin"."Window Quick Tile Bottom Left" = "none,,Quick Tile Window to the Bottom Left";
|
|
||||||
"kwin"."Window Quick Tile Bottom Right" = "none,,Quick Tile Window to the Bottom Right";
|
|
||||||
"kwin"."Window Quick Tile Left" = "Meta+Left";
|
|
||||||
"kwin"."Window Quick Tile Right" = "Meta+Right";
|
|
||||||
"kwin"."Window Quick Tile Top" = "Meta+Up";
|
|
||||||
"kwin"."Window Quick Tile Top Left" = "none,,Quick Tile Window to the Top Left";
|
|
||||||
"kwin"."Window Quick Tile Top Right" = "none,,Quick Tile Window to the Top Right";
|
|
||||||
"kwin"."Window Raise" = "none,,Raise Window";
|
|
||||||
"kwin"."Window Resize" = "none,,Resize Window";
|
|
||||||
"kwin"."Window Shade" = "none,,Shade Window";
|
|
||||||
"kwin"."Window Shrink Horizontal" = "none,,Shrink Window Horizontally";
|
|
||||||
"kwin"."Window Shrink Vertical" = "none,,Shrink Window Vertically";
|
|
||||||
"kwin"."Window to Desktop 1" = "Meta+!,,Window to Desktop 1";
|
|
||||||
"kwin"."Window to Desktop 10" = "none,,Window to Desktop 10";
|
|
||||||
"kwin"."Window to Desktop 11" = "none,,Window to Desktop 11";
|
|
||||||
"kwin"."Window to Desktop 12" = "none,,Window to Desktop 12";
|
|
||||||
"kwin"."Window to Desktop 13" = "none,,Window to Desktop 13";
|
|
||||||
"kwin"."Window to Desktop 14" = "none,,Window to Desktop 14";
|
|
||||||
"kwin"."Window to Desktop 15" = "none,,Window to Desktop 15";
|
|
||||||
"kwin"."Window to Desktop 16" = "none,,Window to Desktop 16";
|
|
||||||
"kwin"."Window to Desktop 17" = "none,,Window to Desktop 17";
|
|
||||||
"kwin"."Window to Desktop 18" = "none,,Window to Desktop 18";
|
|
||||||
"kwin"."Window to Desktop 19" = "none,,Window to Desktop 19";
|
|
||||||
"kwin"."Window to Desktop 2" = "Meta+@,,Window to Desktop 2";
|
|
||||||
"kwin"."Window to Desktop 20" = "none,,Window to Desktop 20";
|
|
||||||
"kwin"."Window to Desktop 3" = "Meta+#,,Window to Desktop 3";
|
|
||||||
"kwin"."Window to Desktop 4" = "Meta+$,,Window to Desktop 4";
|
|
||||||
"kwin"."Window to Desktop 5" = "Meta+%,,Window to Desktop 5";
|
|
||||||
"kwin"."Window to Desktop 6" = "none,,Window to Desktop 6";
|
|
||||||
"kwin"."Window to Desktop 7" = "none,,Window to Desktop 7";
|
|
||||||
"kwin"."Window to Desktop 8" = "none,,Window to Desktop 8";
|
|
||||||
"kwin"."Window to Desktop 9" = "none,,Window to Desktop 9";
|
|
||||||
"kwin"."Window to Next Desktop" = "none,,Window to Next Desktop";
|
|
||||||
"kwin"."Window to Next Screen" = "Meta+Shift+Right";
|
|
||||||
"kwin"."Window to Previous Desktop" = "none,,Window to Previous Desktop";
|
|
||||||
"kwin"."Window to Previous Screen" = "Meta+Shift+Left";
|
|
||||||
"kwin"."Window to Screen 0" = "none,,Move Window to Screen 0";
|
|
||||||
"kwin"."Window to Screen 1" = "none,,Move Window to Screen 1";
|
|
||||||
"kwin"."Window to Screen 2" = "none,,Move Window to Screen 2";
|
|
||||||
"kwin"."Window to Screen 3" = "none,,Move Window to Screen 3";
|
|
||||||
"kwin"."Window to Screen 4" = "none,,Move Window to Screen 4";
|
|
||||||
"kwin"."Window to Screen 5" = "none,,Move Window to Screen 5";
|
|
||||||
"kwin"."Window to Screen 6" = "none,,Move Window to Screen 6";
|
|
||||||
"kwin"."Window to Screen 7" = "none,,Move Window to Screen 7";
|
|
||||||
"kwin"."view_actual_size" = "Meta+0";
|
|
||||||
"kwin"."view_zoom_in" = ["Meta++" "Meta+=,Meta++" "Meta+=,Zoom In"];
|
|
||||||
"kwin"."view_zoom_out" = "Meta+-";
|
|
||||||
"mediacontrol"."mediavolumedown" = "none,,Media volume down";
|
|
||||||
"mediacontrol"."mediavolumeup" = "none,,Media volume up";
|
|
||||||
"mediacontrol"."nextmedia" = "Media Next";
|
|
||||||
"mediacontrol"."pausemedia" = "Media Pause";
|
|
||||||
"mediacontrol"."playmedia" = "none,,Play media playback";
|
|
||||||
"mediacontrol"."playpausemedia" = "Media Play";
|
|
||||||
"mediacontrol"."previousmedia" = "Media Previous";
|
|
||||||
"mediacontrol"."stopmedia" = "Media Stop";
|
|
||||||
"org_kde_powerdevil"."Decrease Keyboard Brightness" = "Keyboard Brightness Down";
|
"org_kde_powerdevil"."Decrease Keyboard Brightness" = "Keyboard Brightness Down";
|
||||||
"org_kde_powerdevil"."Decrease Screen Brightness" = "Monitor Brightness Down";
|
"org_kde_powerdevil"."Decrease Screen Brightness" = "Monitor Brightness Down";
|
||||||
"org_kde_powerdevil"."Decrease Screen Brightness Small" = "Shift+Monitor Brightness Down";
|
"org_kde_powerdevil"."Decrease Screen Brightness Small" = "Shift+Monitor Brightness Down";
|
||||||
@@ -233,219 +88,40 @@
|
|||||||
"org_kde_powerdevil"."Toggle Keyboard Backlight" = "Keyboard Light On/Off";
|
"org_kde_powerdevil"."Toggle Keyboard Backlight" = "Keyboard Light On/Off";
|
||||||
"org_kde_powerdevil"."Turn Off Screen" = [ ];
|
"org_kde_powerdevil"."Turn Off Screen" = [ ];
|
||||||
"org_kde_powerdevil"."powerProfile" = ["Battery" "Meta+B,Battery" "Meta+B,Switch Power Profile"];
|
"org_kde_powerdevil"."powerProfile" = ["Battery" "Meta+B,Battery" "Meta+B,Switch Power Profile"];
|
||||||
"plasmashell"."activate application launcher" = ["Meta" "Alt+F1,Meta" "Alt+F1,Activate Application Launcher"];
|
|
||||||
"plasmashell"."activate task manager entry 1" = "none,Meta+1,Activate Task Manager Entry 1";
|
plasmashell = {
|
||||||
"plasmashell"."activate task manager entry 10" = "none,Meta+0,Activate Task Manager Entry 10";
|
"activate application launcher" = ["Meta" "Alt+F1,Meta" "Alt+F1,Activate Application Launcher"];
|
||||||
"plasmashell"."activate task manager entry 2" = "none,Meta+2,Activate Task Manager Entry 2";
|
"activate task manager entry 1" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 3" = "none,Meta+3,Activate Task Manager Entry 3";
|
"activate task manager entry 2" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 4" = "none,Meta+4,Activate Task Manager Entry 4";
|
"activate task manager entry 3" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 5" = "none,Meta+5,Activate Task Manager Entry 5";
|
"activate task manager entry 4" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 6" = "Meta+6";
|
"activate task manager entry 5" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 7" = "Meta+7";
|
"activate task manager entry 6" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 8" = "Meta+8";
|
"activate task manager entry 7" = "none,,";
|
||||||
"plasmashell"."activate task manager entry 9" = "Meta+9";
|
"activate task manager entry 8" = "none,,";
|
||||||
"plasmashell"."clear-history" = "none,,Clear Clipboard History";
|
"activate task manager entry 9" = "none,,";
|
||||||
"plasmashell"."clipboard_action" = "Meta+Ctrl+X";
|
"activate task manager entry 10" = "none,,";
|
||||||
"plasmashell"."cycle-panels" = "Meta+Alt+P";
|
"show activity switcher" = "none,,";
|
||||||
"plasmashell"."cycleNextAction" = "none,,Next History Item";
|
|
||||||
"plasmashell"."cyclePrevAction" = "none,,Previous History Item";
|
|
||||||
"plasmashell"."manage activities" = "Meta+Q";
|
|
||||||
"plasmashell"."next activity" = "Meta+A,none,Walk through activities";
|
|
||||||
"plasmashell"."previous activity" = "Meta+Shift+A,none,Walk through activities (Reverse)";
|
|
||||||
"plasmashell"."repeat_action" = "none,Meta+Ctrl+R,Manually Invoke Action on Current Clipboard";
|
|
||||||
"plasmashell"."show dashboard" = "Ctrl+F12";
|
|
||||||
"plasmashell"."show-barcode" = "none,,Show Barcode…";
|
|
||||||
"plasmashell"."show-on-mouse-pos" = "Meta+V";
|
|
||||||
"plasmashell"."stop current activity" = "Meta+S";
|
|
||||||
"plasmashell"."switch to next activity" = "none,,Switch to Next Activity";
|
|
||||||
"plasmashell"."switch to previous activity" = "none,,Switch to Previous Activity";
|
|
||||||
"plasmashell"."toggle do not disturb" = "none,,Toggle do not disturb";
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
configFile = {
|
configFile = {
|
||||||
"baloofilerc"."General"."dbVersion" = 2;
|
kwinrc.Desktops.Number = {
|
||||||
"baloofilerc"."General"."exclude filters" = "*~,*.part,*.o,*.la,*.lo,*.loT,*.moc,moc_*.cpp,qrc_*.cpp,ui_*.h,cmake_install.cmake,CMakeCache.txt,CTestTestfile.cmake,libtool,config.status,confdefs.h,autom4te,conftest,confstat,Makefile.am,*.gcode,.ninja_deps,.ninja_log,build.ninja,*.csproj,*.m4,*.rej,*.gmo,*.pc,*.omf,*.aux,*.tmp,*.po,*.vm*,*.nvram,*.rcore,*.swp,*.swap,lzo,litmain.sh,*.orig,.histfile.*,.xsession-errors*,*.map,*.so,*.a,*.db,*.qrc,*.ini,*.init,*.img,*.vdi,*.vbox*,vbox.log,*.qcow2,*.vmdk,*.vhd,*.vhdx,*.sql,*.sql.gz,*.ytdl,*.tfstate*,*.class,*.pyc,*.pyo,*.elc,*.qmlc,*.jsc,*.fastq,*.fq,*.gb,*.fasta,*.fna,*.gbff,*.faa,po,CVS,.svn,.git,_darcs,.bzr,.hg,CMakeFiles,CMakeTmp,CMakeTmpQmake,.moc,.obj,.pch,.uic,.npm,.yarn,.yarn-cache,__pycache__,node_modules,node_packages,nbproject,.terraform,.venv,venv,core-dumps,lost+found";
|
value = 10;
|
||||||
"baloofilerc"."General"."exclude filters version" = 9;
|
immutable = true;
|
||||||
"dolphinrc"."KFileDialog Settings"."Places Icons Auto-resize" = false;
|
|
||||||
"dolphinrc"."KFileDialog Settings"."Places Icons Static Size" = 22;
|
|
||||||
"katerc"."General"."Days Meta Infos" = 30;
|
|
||||||
"katerc"."General"."Save Meta Infos" = true;
|
|
||||||
"katerc"."General"."Show Full Path in Title" = false;
|
|
||||||
"katerc"."General"."Show Menu Bar" = true;
|
|
||||||
"katerc"."General"."Show Status Bar" = true;
|
|
||||||
"katerc"."General"."Show Tab Bar" = true;
|
|
||||||
"katerc"."General"."Show Url Nav Bar" = true;
|
|
||||||
"katerc"."KTextEditor Renderer"."Animate Bracket Matching" = false;
|
|
||||||
"katerc"."KTextEditor Renderer"."Auto Color Theme Selection" = true;
|
|
||||||
"katerc"."KTextEditor Renderer"."Color Theme" = "Breeze Light";
|
|
||||||
"katerc"."KTextEditor Renderer"."Line Height Multiplier" = 1;
|
|
||||||
"katerc"."KTextEditor Renderer"."Show Indentation Lines" = false;
|
|
||||||
"katerc"."KTextEditor Renderer"."Show Whole Bracket Expression" = false;
|
|
||||||
"katerc"."KTextEditor Renderer"."Text Font" = "Hack,10,-1,7,400,0,0,0,0,0,0,0,0,0,0,1";
|
|
||||||
"katerc"."KTextEditor Renderer"."Word Wrap Marker" = false;
|
|
||||||
"katerc"."filetree"."editShade" = "183,220,246";
|
|
||||||
"katerc"."filetree"."listMode" = false;
|
|
||||||
"katerc"."filetree"."middleClickToClose" = false;
|
|
||||||
"katerc"."filetree"."shadingEnabled" = true;
|
|
||||||
"katerc"."filetree"."showCloseButton" = false;
|
|
||||||
"katerc"."filetree"."showFullPathOnRoots" = false;
|
|
||||||
"katerc"."filetree"."showToolbar" = true;
|
|
||||||
"katerc"."filetree"."sortRole" = 0;
|
|
||||||
"katerc"."filetree"."viewShade" = "211,190,222";
|
|
||||||
"kcminputrc"."Mouse"."X11LibInputXAccelProfileFlat" = true;
|
|
||||||
"kded5rc"."Module-browserintegrationreminder"."autoload" = false;
|
|
||||||
"kded5rc"."Module-device_automounter"."autoload" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Allow Expansion" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Automatically select filename extension" = true;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Breadcrumb Navigation" = true;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Decoration position" = 2;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."LocationCombo Completionmode" = 5;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."PathCombo Completionmode" = 5;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Show Bookmarks" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Show Full Path" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Show Inline Previews" = true;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Show Preview" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Show Speedbar" = true;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Show hidden files" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Sort by" = "Name";
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Sort directories first" = true;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Sort hidden files last" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Sort reversed" = false;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."Speedbar Width" = 131;
|
|
||||||
"kdeglobals"."KFileDialog Settings"."View Style" = "DetailTree";
|
|
||||||
"kdeglobals"."WM"."activeBackground" = "227,229,231";
|
|
||||||
"kdeglobals"."WM"."activeBlend" = "227,229,231";
|
|
||||||
"kdeglobals"."WM"."activeForeground" = "35,38,41";
|
|
||||||
"kdeglobals"."WM"."inactiveBackground" = "239,240,241";
|
|
||||||
"kdeglobals"."WM"."inactiveBlend" = "239,240,241";
|
|
||||||
"kdeglobals"."WM"."inactiveForeground" = "112,125,138";
|
|
||||||
"kiorc"."Confirmations"."ConfirmDelete" = true;
|
|
||||||
"kscreenlockerrc"."Daemon"."LockOnResume" = false;
|
|
||||||
"kwalletrc"."Wallet"."First Use" = false;
|
|
||||||
"kwinrc"."Desktops"."Id_1" = "48e67529-9a58-4caa-bc27-a02ddf746389";
|
|
||||||
"kwinrc"."Desktops"."Id_2" = "da76cc12-2e22-4fb4-87aa-3c17d7be63b0";
|
|
||||||
"kwinrc"."Desktops"."Id_3" = "a6cb23ae-3d6a-4609-b593-d956f16f125c";
|
|
||||||
"kwinrc"."Desktops"."Id_4" = "6e61e508-b5f1-4053-a9d3-34b80a155a10";
|
|
||||||
"kwinrc"."Desktops"."Number" = 4;
|
|
||||||
"kwinrc"."Desktops"."Rows" = 1;
|
|
||||||
"kwinrc"."Plugins"."poloniumEnabled" = true;
|
|
||||||
"kwinrc"."Tiling"."padding" = 4;
|
|
||||||
"kwinrc"."Xwayland"."Scale" = 1.25;
|
|
||||||
"plasma-localerc"."Formats"."LANG" = "en_US.UTF-8";
|
|
||||||
"plasmarc"."Wallpapers"."usersWallpapers" = "";
|
|
||||||
"spectaclerc"."ImageSave"."translatedScreenshotsFolder" = "Screenshots";
|
|
||||||
"spectaclerc"."VideoSave"."translatedScreencastsFolder" = "Screencasts";
|
|
||||||
};
|
};
|
||||||
dataFile = {
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."cmaketoolsplugin" = false;
|
kcminputrc.Libinput = {
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."compilerexplorer" = false;
|
AccelerationProfile = "adaptive";
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."eslintplugin" = false;
|
PointerAcceleration = 0.5;
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."externaltoolsplugin" = true;
|
};
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."formatplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katebacktracebrowserplugin" = false;
|
kcminputrc.Mouse = {
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katebuildplugin" = false;
|
X11LibInputXAccelProfileFlat = false;
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katecloseexceptplugin" = false;
|
XLbInptAccelProfileFlat = false;
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katecolorpickerplugin" = false;
|
};
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katectagsplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katefilebrowserplugin" = false;
|
kdeglobals.KDE.LookAndFeelPackage = "org.kde.breezedark.desktop";
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katefiletreeplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."kategdbplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."kategitblameplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katekonsoleplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."kateprojectplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katereplicodeplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katesearchplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katesnippetsplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katesymbolviewerplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katexmlcheckplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."katexmltoolsplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."keyboardmacrosplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."ktexteditorpreviewplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."latexcompletionplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."lspclientplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."openlinkplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."rainbowparens" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."rbqlplugin" = false;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."tabswitcherplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."Kate Plugins"."textfilterplugin" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Active ViewSpace" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-H-Splitter" = "0,594,0";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-0-Bar-0-TvList" = "kate_private_plugin_katefiletreeplugin,kateproject,kateprojectgit,lspclient_symbol_outline";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-0-LastSize" = 200;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-0-SectSizes" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-0-Splitter" = 371;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-1-Bar-0-TvList" = "";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-1-LastSize" = 200;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-1-SectSizes" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-1-Splitter" = 371;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-2-Bar-0-TvList" = "";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-2-LastSize" = 200;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-2-SectSizes" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-2-Splitter" = 594;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-3-Bar-0-TvList" = "output,diagnostics,kate_plugin_katesearch,kateprojectinfo,kate_private_plugin_katekonsoleplugin";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-3-LastSize" = 200;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-3-SectSizes" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-3-Splitter" = 209;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-Style" = 2;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-Sidebar-Visible" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-diagnostics-Position" = 3;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-diagnostics-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-diagnostics-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_plugin_katesearch-Position" = 3;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_plugin_katesearch-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_plugin_katesearch-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_private_plugin_katefiletreeplugin-Position" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_private_plugin_katefiletreeplugin-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_private_plugin_katefiletreeplugin-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_private_plugin_katekonsoleplugin-Position" = 3;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_private_plugin_katekonsoleplugin-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kate_private_plugin_katekonsoleplugin-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateproject-Position" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateproject-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateproject-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateprojectgit-Position" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateprojectgit-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateprojectgit-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateprojectinfo-Position" = 3;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateprojectinfo-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-kateprojectinfo-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-lspclient_symbol_outline-Position" = 0;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-lspclient_symbol_outline-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-lspclient_symbol_outline-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-output-Position" = 3;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-output-Show-Button-In-Sidebar" = true;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-ToolView-output-Visible" = false;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."Kate-MDI-V-Splitter" = "0,369,0";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0"."ToolBarsMovable" = "Disabled";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0 Settings"."ToolBarsMovable" = "Disabled";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0 Settings"."WindowState" = 8;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0-Splitter 0"."Children" = "MainWindow0-ViewSpace 0";
|
|
||||||
"kate/anonymous.katesession"."MainWindow0-Splitter 0"."Orientation" = 1;
|
|
||||||
"kate/anonymous.katesession"."MainWindow0-Splitter 0"."Sizes" = 594;
|
|
||||||
"kate/anonymous.katesession"."Open Documents"."Count" = 1;
|
|
||||||
"kate/anonymous.katesession"."Open MainWindows"."Count" = 1;
|
|
||||||
"kate/anonymous.katesession"."Plugin:kateprojectplugin:"."projects" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."BinaryFiles" = false;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."CurrentExcludeFilter" = "-1";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."CurrentFilter" = "-1";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."ExcludeFilters" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."ExpandSearchResults" = false;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."Filters" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."FollowSymLink" = false;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."HiddenFiles" = false;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."MatchCase" = false;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."Place" = 1;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."Recursive" = true;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."Replaces" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."Search" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchAsYouTypeAllProjects" = true;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchAsYouTypeCurrentFile" = true;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchAsYouTypeFolder" = true;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchAsYouTypeOpenFiles" = true;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchAsYouTypeProject" = true;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchDiskFiles" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SearchDiskFiless" = "";
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."SizeLimit" = 128;
|
|
||||||
"kate/anonymous.katesession"."Plugin:katesearchplugin:MainWindow:0"."UseRegExp" = false;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
52
home/modules/tmux/default.nix
Normal file
52
home/modules/tmux/default.nix
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
tokyo-night = pkgs.tmuxPlugins.mkTmuxPlugin {
|
||||||
|
pluginName = "tokyo-night";
|
||||||
|
rtpFilePath = "tokyo-night.tmux";
|
||||||
|
version = "1.6.1";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "janoamaral";
|
||||||
|
repo = "tokyo-night-tmux";
|
||||||
|
rev = "d610ced20d5f602a7995854931440e4a1e0ab780";
|
||||||
|
sha256 = "sha256-17vEgkL7C51p/l5gpT9dkOy0bY9n8l0/LV51mR1k+V8=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.tmux.enable = true;
|
||||||
|
programs.tmux.terminal = "tmux-direct";
|
||||||
|
programs.tmux.keyMode = "vi";
|
||||||
|
programs.tmux.escapeTime = 0;
|
||||||
|
programs.tmux.mouse = true;
|
||||||
|
programs.tmux.newSession = true;
|
||||||
|
programs.tmux.historyLimit = 50000;
|
||||||
|
programs.tmux.clock24 = true;
|
||||||
|
programs.tmux.baseIndex = 1;
|
||||||
|
programs.tmux.prefix = "M-\\\\";
|
||||||
|
|
||||||
|
programs.tmux.plugins = with pkgs; [
|
||||||
|
tmuxPlugins.cpu
|
||||||
|
tmuxPlugins.battery
|
||||||
|
tmuxPlugins.better-mouse-mode
|
||||||
|
tmuxPlugins.net-speed
|
||||||
|
tmuxPlugins.online-status
|
||||||
|
tmuxPlugins.pain-control
|
||||||
|
tmuxPlugins.tilish
|
||||||
|
tmuxPlugins.yank
|
||||||
|
|
||||||
|
{
|
||||||
|
plugin = tmuxPlugins.resurrect;
|
||||||
|
extraConfig = "set -g @resurrect-strategy-nvim 'session'";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
plugin = tmuxPlugins.continuum;
|
||||||
|
extraConfig = ''
|
||||||
|
set -g @continuum-restore 'on'
|
||||||
|
set -g @continuum-save-interval '15' # minutes
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
||||||
|
tokyo-night
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
# your system. Help is available in the configuration.nix(5) man page, on
|
# your system. Help is available in the configuration.nix(5) man page, on
|
||||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
|
|
||||||
{ lib, ... }:
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
@@ -14,9 +14,17 @@ with lib;
|
|||||||
|
|
||||||
roles = {
|
roles = {
|
||||||
audio.enable = true;
|
audio.enable = true;
|
||||||
|
bluetooth.enable = true;
|
||||||
|
desktop = {
|
||||||
|
enable = true;
|
||||||
|
gaming = true;
|
||||||
|
kde = true;
|
||||||
|
sddm = true;
|
||||||
|
wayland = true;
|
||||||
|
};
|
||||||
kodi = {
|
kodi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autologin = true;
|
autologin = false;
|
||||||
wayland = true;
|
wayland = true;
|
||||||
};
|
};
|
||||||
users.enable = true;
|
users.enable = true;
|
||||||
@@ -28,9 +36,15 @@ with lib;
|
|||||||
|
|
||||||
networking.hostName = "boxy"; # Define your hostname.
|
networking.hostName = "boxy"; # Define your hostname.
|
||||||
|
|
||||||
|
services.xserver.videoDrivers = [ "amdgpu" ];
|
||||||
hardware.graphics.enable = true;
|
hardware.graphics.enable = true;
|
||||||
|
hardware.graphics.enable32Bit = true;
|
||||||
services.displayManager.enable = mkForce false;
|
hardware.graphics.extraPackages = with pkgs; [
|
||||||
|
amdvlk
|
||||||
|
];
|
||||||
|
hardware.graphics.extraPackages32 = with pkgs; [
|
||||||
|
driversi686Linux.amdvlk
|
||||||
|
];
|
||||||
|
|
||||||
# This option defines the first version of NixOS you have installed on this particular machine,
|
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||||
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "thunderbolt" "usb_storage" "usbhid" "sd_mod" ];
|
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "thunderbolt" "usb_storage" "usbhid" "sd_mod" ];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ "amdgpu" ];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,13 @@
|
|||||||
roles = {
|
roles = {
|
||||||
audio.enable = true;
|
audio.enable = true;
|
||||||
bluetooth.enable = true;
|
bluetooth.enable = true;
|
||||||
desktop.enable = true;
|
desktop = {
|
||||||
|
enable = true;
|
||||||
|
wayland = true;
|
||||||
|
gaming = false;
|
||||||
|
kde = true;
|
||||||
|
sddm = true;
|
||||||
|
};
|
||||||
nfs-mounts.enable = true;
|
nfs-mounts.enable = true;
|
||||||
printing.enable = true;
|
printing.enable = true;
|
||||||
spotifyd.enable = true;
|
spotifyd.enable = true;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
swapDevices =
|
swapDevices =
|
||||||
[ { device = "/dev/disk/by-uuid/ec1f70ea-27b6-4646-ad3b-eac41bd83e3e"; }
|
[ { device = "/dev/disk/by-uuid/ec1f70ea-27b6-4646-ad3b-eac41bd83e3e"; }
|
||||||
];
|
];
|
||||||
|
zramSwap.enable = true;
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|||||||
62
machines/wixos/configuration.nix
Normal file
62
machines/wixos/configuration.nix
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page, on
|
||||||
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
|
|
||||||
|
# NixOS-WSL specific options are documented on the NixOS-WSL repository:
|
||||||
|
# https://github.com/nix-community/NixOS-WSL
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
];
|
||||||
|
|
||||||
|
roles = {
|
||||||
|
audio.enable = true;
|
||||||
|
desktop = {
|
||||||
|
enable = true;
|
||||||
|
wayland = true;
|
||||||
|
};
|
||||||
|
users.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.hostName = "wixos";
|
||||||
|
|
||||||
|
wsl.enable = true;
|
||||||
|
wsl.defaultUser = "johno";
|
||||||
|
wsl.startMenuLaunchers = true;
|
||||||
|
wsl.useWindowsDriver = true;
|
||||||
|
wsl.wslConf.network.hostname = "wixos";
|
||||||
|
wsl.wslConf.user.default = "johno";
|
||||||
|
|
||||||
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
hardware.graphics = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
mesa
|
||||||
|
libvdpau-va-gl
|
||||||
|
vaapiVdpau
|
||||||
|
];
|
||||||
|
};
|
||||||
|
environment.sessionVariables = {
|
||||||
|
LD_LIBRARY_PATH = [
|
||||||
|
"/usr/lib/wsl/lib"
|
||||||
|
"/run/opengl-driver/lib"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
hardware.nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
open = true;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.latest;
|
||||||
|
};
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It's perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "24.05"; # Did you read the comment?
|
||||||
|
}
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
# Edit this configuration file to define what should be installed on
|
|
||||||
# your system. Help is available in the configuration.nix(5) man page
|
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
|
||||||
|
|
||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports =
|
|
||||||
[ # Include the results of the hardware scan.
|
|
||||||
./hardware-configuration.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
roles = {
|
|
||||||
audio.enable = true;
|
|
||||||
desktop = {
|
|
||||||
enable = true;
|
|
||||||
x11Only = true;
|
|
||||||
};
|
|
||||||
kodi.enable = true;
|
|
||||||
nfs-mounts.enable = true;
|
|
||||||
printing.enable = true;
|
|
||||||
spotifyd.enable = true;
|
|
||||||
users = {
|
|
||||||
enable = true;
|
|
||||||
extraGroups = [ "input" "libvirtd" ];
|
|
||||||
kids = true;
|
|
||||||
};
|
|
||||||
virtualisation.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Use the systemd-boot EFI boot loader.
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
boot.loader.grub.useOSProber = true;
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "z790prors-nix"; # Define your hostname.
|
|
||||||
domain = "oglehome";
|
|
||||||
defaultGateway = "10.0.0.1";
|
|
||||||
nameservers = [ "10.0.0.1" ];
|
|
||||||
|
|
||||||
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
|
|
||||||
# Per-interface useDHCP will be mandatory in the future, so this generated config
|
|
||||||
# replicates the default behaviour.
|
|
||||||
useDHCP = false;
|
|
||||||
|
|
||||||
interfaces.enp3s0.ipv4.addresses = [{
|
|
||||||
address = "10.0.0.37";
|
|
||||||
prefixLength = 24;
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
|
|
||||||
# TODO: Figure out something with this
|
|
||||||
nix.settings.secret-key-files = /root/cache-priv-key.pem;
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "21.11"; # Did you read the comment?
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
|
||||||
# and may be overwritten by future invocations. Please make changes
|
|
||||||
# to /etc/nixos/configuration.nix instead.
|
|
||||||
{ config, lib, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports =
|
|
||||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
|
||||||
boot.initrd.kernelModules = [
|
|
||||||
"nvidia"
|
|
||||||
"nvidia_modeset"
|
|
||||||
"nvidia_uvm"
|
|
||||||
"nvidia_drm"
|
|
||||||
];
|
|
||||||
boot.kernelParams = [
|
|
||||||
"nvidia_drm.fbdev=1"
|
|
||||||
"nvidia_drm.modeset=1"
|
|
||||||
];
|
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
|
||||||
boot.extraModulePackages = [ ];
|
|
||||||
|
|
||||||
hardware.graphics.enable = true;
|
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
|
||||||
services.xserver.screenSection = ''Option "metamodes" "3440x1440_165 +0+0"'';
|
|
||||||
services.xserver.enableTearFree = true;
|
|
||||||
hardware.nvidia = {
|
|
||||||
modesetting.enable = true;
|
|
||||||
powerManagement.enable = false;
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
open = false;
|
|
||||||
nvidiaSettings = true;
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.production;
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/" =
|
|
||||||
{ device = "/dev/disk/by-uuid/8d996d13-6d55-4524-83a2-6f6fb47a09ea";
|
|
||||||
fsType = "btrfs";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" =
|
|
||||||
{ device = "/dev/disk/by-uuid/7445-C336";
|
|
||||||
fsType = "vfat";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/arch" =
|
|
||||||
{ device = "/dev/disk/by-label/endeavouros";
|
|
||||||
fsType = "btrfs";
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [ ];
|
|
||||||
|
|
||||||
services.beesd.filesystems = {
|
|
||||||
root = {
|
|
||||||
spec = "LABEL=nixos";
|
|
||||||
hashTableSizeMB = 4096;
|
|
||||||
verbosity = "crit";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
||||||
333
nixos-steam-dual-boot-plan.md
Normal file
333
nixos-steam-dual-boot-plan.md
Normal file
@@ -0,0 +1,333 @@
|
|||||||
|
# NixOS Steam Dual Boot Implementation Plan (Btrfs + Beesd Edition)
|
||||||
|
|
||||||
|
## Goals & Motivations
|
||||||
|
|
||||||
|
### Primary Goals
|
||||||
|
1. **Eliminate storage waste**: Avoid duplicating terabytes of Steam games across Windows and NixOS
|
||||||
|
2. **Minimize maintenance overhead**: Create a solution that works reliably without constant tweaking
|
||||||
|
3. **Preserve Windows stability**: Ensure Windows Steam functionality remains unaffected by the dual-boot setup
|
||||||
|
4. **Maintain gaming performance**: No significant performance degradation on either OS
|
||||||
|
|
||||||
|
### Secondary Goals
|
||||||
|
- **Seamless game access**: Games should be available on both OSes without manual intervention
|
||||||
|
- **Update compatibility**: Game updates from either OS should be usable by both
|
||||||
|
- **Future-proof architecture**: Solution should be extensible and maintainable
|
||||||
|
- **Multi-user support**: Handle 3 Windows users sharing libraries, with 1 user also using Linux
|
||||||
|
|
||||||
|
## Architectural Overview
|
||||||
|
|
||||||
|
### The Problem with Previous Approaches
|
||||||
|
|
||||||
|
**Shared NTFS Library (Traditional)**:
|
||||||
|
- ❌ Proton creates files with colons, corrupting NTFS
|
||||||
|
- ❌ Requires fragile symlinks that Windows can break
|
||||||
|
- ❌ Permission issues plague the setup
|
||||||
|
- ❌ Valve officially discourages this approach
|
||||||
|
|
||||||
|
**Complex Symlink Management**:
|
||||||
|
- ❌ Requires custom scripts and maintenance
|
||||||
|
- ❌ Fragile edge cases with Steam updates
|
||||||
|
- ❌ Potential compatibility issues with Proton and anti-cheat
|
||||||
|
|
||||||
|
**Separate Libraries**:
|
||||||
|
- ❌ Wastes terabytes of storage
|
||||||
|
- ❌ Games must be installed twice
|
||||||
|
- ❌ No benefit from either OS's installations
|
||||||
|
|
||||||
|
### Our Solution: Btrfs + Beesd Automatic Deduplication
|
||||||
|
|
||||||
|
```
|
||||||
|
Windows Steam → /steam/windows/ (btrfs via WinBtrfs driver)
|
||||||
|
↓
|
||||||
|
Linux Steam → /steam/linux/ (native btrfs)
|
||||||
|
↓
|
||||||
|
[beesd automatically deduplicates identical files]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key Insight**: Let each Steam installation work independently, rely on proven btrfs deduplication technology to eliminate duplicate storage automatically.
|
||||||
|
|
||||||
|
## Architecture Deep Dive
|
||||||
|
|
||||||
|
### Component 1: Shared Btrfs Filesystem
|
||||||
|
|
||||||
|
**Purpose**: Single high-performance filesystem for all game storage
|
||||||
|
- **Location**: `/steam` (dedicated btrfs partition)
|
||||||
|
- **Contents**:
|
||||||
|
- `/steam/windows/` - Windows Steam library
|
||||||
|
- `/steam/linux/` - Linux Steam library
|
||||||
|
- **Access**: Native on Linux, WinBtrfs driver on Windows
|
||||||
|
|
||||||
|
**Why this satisfies our goals**:
|
||||||
|
- ✅ **Automatic deduplication**: Beesd handles duplicate elimination transparently
|
||||||
|
- ✅ **No maintenance**: Zero custom scripts or symlink management
|
||||||
|
- ✅ **Independent operation**: Each Steam installation works normally
|
||||||
|
- ✅ **Performance**: Optimized mount options for gaming workloads
|
||||||
|
|
||||||
|
### Component 2: Beesd Deduplication Service
|
||||||
|
|
||||||
|
**Purpose**: Automatic background deduplication of game files
|
||||||
|
|
||||||
|
**Core Functionality**:
|
||||||
|
- Continuously scans `/steam` for duplicate blocks
|
||||||
|
- Automatically deduplicates identical files between `/steam/windows/` and `/steam/linux/`
|
||||||
|
- Operates transparently - games never know deduplication is happening
|
||||||
|
- Handles common duplicates: DirectX runtimes, Visual C++ redistributables, game engines, shared assets
|
||||||
|
|
||||||
|
**Expected Efficiency**:
|
||||||
|
- **40-70% storage savings** for typical game libraries
|
||||||
|
- **Common targets**: Unity/Unreal engine files, shared libraries, identical texture assets
|
||||||
|
- **Real-time operation**: New duplicates eliminated automatically
|
||||||
|
|
||||||
|
### Component 3: WinBtrfs Driver Integration
|
||||||
|
|
||||||
|
**Purpose**: Provide Windows with native btrfs read/write access
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# No special configuration needed - standard btrfs mount
|
||||||
|
fileSystems."/steam" = {
|
||||||
|
device = "/dev/disk/by-uuid/YOUR-BTRFS-UUID";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"noatime" # Don't update access times - major gaming performance boost
|
||||||
|
"ssd" # SSD optimizations
|
||||||
|
];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows Requirements**:
|
||||||
|
- Install WinBtrfs driver (https://github.com/maharmstone/btrfs)
|
||||||
|
- Configure Steam library path to point to `/steam/windows/`
|
||||||
|
- No special configuration needed - works like any other drive
|
||||||
|
|
||||||
|
### Component 4: Beesd Configuration
|
||||||
|
|
||||||
|
**Purpose**: Optimized deduplication for gaming workloads
|
||||||
|
|
||||||
|
```nix
|
||||||
|
services.beesd.filesystems = {
|
||||||
|
steam = {
|
||||||
|
spec = "/steam";
|
||||||
|
hashTableSizeMB = 512; # Sized for ~4TB of game data (128MB per TB)
|
||||||
|
verbosity = "err"; # Only show actual problems
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Hash Table Storage**:
|
||||||
|
- Stored as file: `/steam/.beeshash`
|
||||||
|
- 512MB handles up to 4TB of game data efficiently (beesd recommends 128MB per TB)
|
||||||
|
- Loaded into RAM on-demand, not all resident simultaneously
|
||||||
|
- Smaller hash table = better performance and less disk usage
|
||||||
|
|
||||||
|
## Partition Strategy
|
||||||
|
|
||||||
|
### 4-Partition Architecture
|
||||||
|
|
||||||
|
1. **Windows Boot Partition** (NTFS) - *Existing*
|
||||||
|
- Standard Windows system drive
|
||||||
|
- Unchanged from current setup
|
||||||
|
|
||||||
|
2. **Linux Boot Partition** (btrfs/ext4) - *New*
|
||||||
|
- NixOS system installation
|
||||||
|
- Standard Linux root filesystem
|
||||||
|
|
||||||
|
3. **Shared Steam Library** (btrfs) - *New*
|
||||||
|
- `/steam/windows/` - Windows Steam library
|
||||||
|
- `/steam/linux/` - Linux Steam library
|
||||||
|
- Automatic beesd deduplication
|
||||||
|
|
||||||
|
4. **Legacy Windows Steam** (NTFS) - *Existing, Optional*
|
||||||
|
- Keep for anti-cheat games that may not work on btrfs
|
||||||
|
- Can be eliminated if all games work on btrfs
|
||||||
|
- Provides fallback option during testing
|
||||||
|
|
||||||
|
### Multi-User Considerations
|
||||||
|
|
||||||
|
**Current Setup**: 3 Windows users sharing Steam libraries
|
||||||
|
**Migration Strategy**:
|
||||||
|
- Other Windows users continue using existing NTFS library
|
||||||
|
- Primary user (johno) experiments with btrfs library
|
||||||
|
- Easy rollback: point Steam back to NTFS if issues arise
|
||||||
|
- Gradual migration as confidence builds
|
||||||
|
|
||||||
|
## Implementation Strategy
|
||||||
|
|
||||||
|
### Phase 1: Base Setup
|
||||||
|
|
||||||
|
1. **Partition Creation**:
|
||||||
|
- Create new btrfs partition for `/steam` (recommend 2TB+ for modern libraries)
|
||||||
|
- Install NixOS on separate Linux boot partition
|
||||||
|
- Keep existing Windows partitions untouched
|
||||||
|
|
||||||
|
2. **NixOS Configuration**:
|
||||||
|
```nix
|
||||||
|
fileSystems."/steam" = {
|
||||||
|
device = "/dev/disk/by-uuid/YOUR-BTRFS-UUID";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [ "noatime" "ssd" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.beesd.filesystems = {
|
||||||
|
steam = {
|
||||||
|
spec = "/steam";
|
||||||
|
hashTableSizeMB = 512; # 128MB per TB recommended
|
||||||
|
verbosity = "err";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Windows Setup**:
|
||||||
|
- Install WinBtrfs driver
|
||||||
|
- Add Steam library pointing to `/steam/windows/`
|
||||||
|
- Test with a few small games initially
|
||||||
|
|
||||||
|
### Phase 2: Gradual Migration
|
||||||
|
|
||||||
|
1. **Safe Game Testing**:
|
||||||
|
- Start with single-player games
|
||||||
|
- Test save game compatibility
|
||||||
|
- Verify performance matches NTFS installation
|
||||||
|
|
||||||
|
2. **Anti-Cheat Evaluation**:
|
||||||
|
- Test multiplayer games progressively
|
||||||
|
- Document which games work on btrfs vs require NTFS
|
||||||
|
- Keep problematic games on legacy NTFS partition
|
||||||
|
|
||||||
|
3. **Deduplication Verification**:
|
||||||
|
- Monitor beesd logs for successful deduplication
|
||||||
|
- Use `btrfs filesystem du /steam` to verify space savings
|
||||||
|
- Benchmark game loading times vs separate installations
|
||||||
|
|
||||||
|
### Phase 3: Optimization
|
||||||
|
|
||||||
|
1. **Performance Tuning**:
|
||||||
|
- Monitor btrfs performance under gaming workloads
|
||||||
|
- Adjust mount options if needed
|
||||||
|
- Optimize beesd parameters based on actual usage
|
||||||
|
|
||||||
|
2. **Monitoring Setup**:
|
||||||
|
- SystemD service monitoring for beesd
|
||||||
|
- Disk space alerts for `/steam` partition
|
||||||
|
- Basic health checks for WinBtrfs stability
|
||||||
|
|
||||||
|
## Trade-offs and Considerations
|
||||||
|
|
||||||
|
### Advantages
|
||||||
|
|
||||||
|
**Storage Efficiency**:
|
||||||
|
- ✅ 40-70% storage savings through automatic deduplication
|
||||||
|
- ✅ No manual intervention required
|
||||||
|
- ✅ Works with any game installation method
|
||||||
|
|
||||||
|
**Simplicity**:
|
||||||
|
- ✅ No custom scripts to maintain
|
||||||
|
- ✅ No symlink complexity
|
||||||
|
- ✅ Standard Steam library management on both OSes
|
||||||
|
|
||||||
|
**Reliability**:
|
||||||
|
- ✅ Each Steam installation completely independent
|
||||||
|
- ✅ Btrfs and beesd are mature, proven technologies
|
||||||
|
- ✅ Graceful degradation if deduplication fails
|
||||||
|
|
||||||
|
**Performance**:
|
||||||
|
- ✅ Optimized mount options for gaming
|
||||||
|
- ✅ No compression overhead
|
||||||
|
- ✅ Native filesystem performance on both OSes
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
|
||||||
|
**Windows Dependencies**:
|
||||||
|
- ⚠️ Requires WinBtrfs third-party driver
|
||||||
|
- ⚠️ Driver updates needed with major Windows releases
|
||||||
|
- ⚠️ Potential compatibility issues with some anti-cheat systems
|
||||||
|
|
||||||
|
**Complexity Trade-offs**:
|
||||||
|
- ⚠️ More partitions to manage than single-filesystem approach
|
||||||
|
- ⚠️ Beesd adds background CPU/disk usage (minimal but present)
|
||||||
|
- ⚠️ Hash table requires disk space (512MB for large libraries)
|
||||||
|
|
||||||
|
**Platform Compatibility**:
|
||||||
|
- ⚠️ Some games may prefer NTFS for maximum compatibility
|
||||||
|
- ⚠️ Anti-cheat systems may flag non-NTFS installations
|
||||||
|
- ⚠️ WinBtrfs stability depends on third-party development
|
||||||
|
|
||||||
|
### Risk Mitigation
|
||||||
|
|
||||||
|
**Backup Strategy**:
|
||||||
|
- Regular btrfs snapshots of `/steam` partition
|
||||||
|
- Keep legacy NTFS Steam library as fallback
|
||||||
|
- Steam's built-in backup/restore for critical games
|
||||||
|
|
||||||
|
**Fallback Options**:
|
||||||
|
- Easy to revert games to NTFS library if needed
|
||||||
|
- Linux can install games locally if `/steam` partition fails
|
||||||
|
- Independent operation means failure in one OS doesn't affect the other
|
||||||
|
|
||||||
|
**Monitoring**:
|
||||||
|
- SystemD service status for beesd
|
||||||
|
- Disk space monitoring for early warning
|
||||||
|
- Game launch testing after major updates
|
||||||
|
|
||||||
|
## Expected Outcomes
|
||||||
|
|
||||||
|
### Immediate Benefits
|
||||||
|
- **40-70% storage savings** for typical game libraries
|
||||||
|
- **Zero maintenance** after initial setup
|
||||||
|
- **Identical performance** to native installations
|
||||||
|
- **Future-proof** architecture using standard technologies
|
||||||
|
|
||||||
|
### Long-term Benefits
|
||||||
|
- **Automatic optimization**: New games deduplicated without intervention
|
||||||
|
- **Simplified management**: One shared library instead of separate installations
|
||||||
|
- **Technology leverage**: Benefits from ongoing btrfs and beesd improvements
|
||||||
|
|
||||||
|
### Success Metrics
|
||||||
|
- ✅ Games launch successfully from both OSes
|
||||||
|
- ✅ Save games work correctly on both platforms
|
||||||
|
- ✅ Updates from either OS don't break the other
|
||||||
|
- ✅ Storage usage 40-70% less than separate libraries
|
||||||
|
- ✅ No performance degradation vs native installations
|
||||||
|
- ✅ Anti-cheat compatibility acceptable for target games
|
||||||
|
|
||||||
|
### Monitoring and Maintenance
|
||||||
|
|
||||||
|
**Automated Monitoring**:
|
||||||
|
```nix
|
||||||
|
# Add to NixOS configuration for basic monitoring
|
||||||
|
systemd.services.steam-health-check = {
|
||||||
|
description = "Check Steam partition and beesd health";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = pkgs.writeScript "steam-health" ''
|
||||||
|
#!/bin/bash
|
||||||
|
# Check beesd service status
|
||||||
|
systemctl is-active beesd-steam >/dev/null || echo "WARN: beesd not running"
|
||||||
|
|
||||||
|
# Check disk space
|
||||||
|
USAGE=$(df /steam | tail -1 | awk '{print $5}' | sed 's/%//')
|
||||||
|
[ "$USAGE" -gt 90 ] && echo "WARN: Steam partition >90% full"
|
||||||
|
|
||||||
|
# Verify both directories exist
|
||||||
|
[ ! -d "/steam/windows" ] && echo "ERROR: Windows Steam directory missing"
|
||||||
|
[ ! -d "/steam/linux" ] && echo "ERROR: Linux Steam directory missing"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.steam-health-check = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "daily";
|
||||||
|
Persistent = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Implementation Files Needed
|
||||||
|
|
||||||
|
1. **NixOS Configuration Addition** - Add to existing machine config
|
||||||
|
2. **WinBtrfs Installation Guide** - Windows setup instructions
|
||||||
|
3. **Migration Checklist** - Step-by-step game migration process
|
||||||
|
4. **Troubleshooting Guide** - Common issues and solutions
|
||||||
|
|
||||||
|
This architecture provides maximum storage efficiency with minimal complexity, leveraging proven technologies instead of custom solutions. The automatic nature of btrfs deduplication eliminates the maintenance overhead of complex symlink management while providing excellent storage savings.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
nextcloudTalkDesktop = pkgs.callPackage ./nextcloud-talk-desktop {};
|
vulkanHDRLayer = pkgs.callPackage ./vulkan-hdr-layer {};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, stdenv
|
|
||||||
, fetchzip
|
|
||||||
, autoPatchelfHook
|
|
||||||
|
|
||||||
, nss
|
|
||||||
, cairo
|
|
||||||
, xorg
|
|
||||||
, libxkbcommon
|
|
||||||
, alsa-lib
|
|
||||||
, at-spi2-core
|
|
||||||
, mesa
|
|
||||||
, pango
|
|
||||||
, libdrm
|
|
||||||
, vivaldi-ffmpeg-codecs
|
|
||||||
, gtk3
|
|
||||||
, libGL
|
|
||||||
, libglvnd
|
|
||||||
, systemd
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "nextcloud-talk-desktop";
|
|
||||||
version = "0.29.0";
|
|
||||||
|
|
||||||
# Building from source would require building also building Server and Talk components
|
|
||||||
# See https://github.com/nextcloud/talk-desktop?tab=readme-ov-file#%EF%B8%8F-prerequisites
|
|
||||||
src = fetchzip {
|
|
||||||
url = "https://github.com/nextcloud-releases/talk-desktop/releases/download/v${finalAttrs.version}/Nextcloud.Talk-linux-x64-${finalAttrs.version}.zip";
|
|
||||||
hash = "sha256-fBIeNv8tfrVTFExLQDBPhIazvbsJ7a76+W9G0cuQDlw=";
|
|
||||||
stripRoot = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [ autoPatchelfHook ];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
nss
|
|
||||||
cairo
|
|
||||||
alsa-lib
|
|
||||||
at-spi2-core
|
|
||||||
pango
|
|
||||||
libdrm
|
|
||||||
libxkbcommon
|
|
||||||
gtk3
|
|
||||||
vivaldi-ffmpeg-codecs
|
|
||||||
mesa
|
|
||||||
libGL
|
|
||||||
libglvnd
|
|
||||||
] ++ (with xorg; [libX11 libXcomposite libXdamage libXrandr libXfixes libXcursor]);
|
|
||||||
|
|
||||||
# Required to launch the application and proceed past the zygote_linux fork() process
|
|
||||||
# Fixes `Zygote could not fork`
|
|
||||||
runtimeDependencies = [ systemd ];
|
|
||||||
|
|
||||||
preInstall = ''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
mkdir -p $out/opt
|
|
||||||
|
|
||||||
cp -r $src/* $out/opt/
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
# Link the application in $out/bin away from contents of `preInstall`
|
|
||||||
ln -s "$out/opt/Nextcloud Talk-linux-x64/Nextcloud Talk" $out/bin/${finalAttrs.pname}
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Nextcloud Talk Desktop Client Preview";
|
|
||||||
homepage = "https://github.com/nextcloud/talk-desktop";
|
|
||||||
changelog = "https://github.com/nextcloud/talk-desktop/blob/${finalAttrs.version}/CHANGELOG.md";
|
|
||||||
license = licenses.agpl3Only;
|
|
||||||
maintainers = with maintainers; [ kashw2 ];
|
|
||||||
mainProgram = finalAttrs.pname;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
34
packages/vulkan-hdr-layer/default.nix
Normal file
34
packages/vulkan-hdr-layer/default.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{ lib, stdenv, fetchFromGitHub, meson, pkg-config, vulkan-loader, ninja, writeText, vulkan-headers, vulkan-utility-libraries, jq, libX11, libXrandr, libxcb, wayland, wayland-scanner }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "vulkan-hdr-layer";
|
||||||
|
version = "63d2eec";
|
||||||
|
|
||||||
|
src = (fetchFromGitHub {
|
||||||
|
owner = "Zamundaaa";
|
||||||
|
repo = "VK_hdr_layer";
|
||||||
|
rev = "869199cd2746e7f69cf19955153080842b6dacfc";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
hash = "sha256-xfVYI+Aajmnf3BTaY2Ysg5fyDO6SwDFGyU0L+F+E3is=";
|
||||||
|
}).overrideAttrs (_: {
|
||||||
|
GIT_CONFIG_COUNT = 1;
|
||||||
|
GIT_CONFIG_KEY_0 = "url.https://github.com/.insteadOf";
|
||||||
|
GIT_CONFIG_VALUE_0 = "git@github.com:";
|
||||||
|
});
|
||||||
|
|
||||||
|
nativeBuildInputs = [ vulkan-headers meson ninja pkg-config jq ];
|
||||||
|
|
||||||
|
buildInputs = [ vulkan-headers vulkan-loader vulkan-utility-libraries libX11 libXrandr libxcb wayland wayland-scanner ];
|
||||||
|
|
||||||
|
# Help vulkan-loader find the validation layers
|
||||||
|
setupHook = writeText "setup-hook" ''
|
||||||
|
addToSearchPath XDG_DATA_DIRS @out@/share
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Layers providing Vulkan HDR";
|
||||||
|
homepage = "https://github.com/Zamundaaa/VK_hdr_layer";
|
||||||
|
platforms = platforms.linux;
|
||||||
|
license = licenses.mit;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -22,11 +22,19 @@ in
|
|||||||
enable = true;
|
enable = true;
|
||||||
pulse.enable = true;
|
pulse.enable = true;
|
||||||
};
|
};
|
||||||
hardware.pulseaudio.package = pkgs.pulseaudioFull;
|
|
||||||
hardware.pulseaudio.extraConfig = "
|
services.pulseaudio = {
|
||||||
|
package = pkgs.pulseaudioFull;
|
||||||
|
extraConfig = ''
|
||||||
load-module module-combine-sink
|
load-module module-combine-sink
|
||||||
load-module module-switch-on-connect
|
load-module module-switch-on-connect
|
||||||
";
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.squeezelite = {
|
||||||
|
#enable = true;
|
||||||
|
pulseAudio = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ with lib;
|
|||||||
./kodi
|
./kodi
|
||||||
./nfs-mounts
|
./nfs-mounts
|
||||||
./printing
|
./printing
|
||||||
./secrets
|
|
||||||
./spotifyd
|
./spotifyd
|
||||||
./users
|
./users
|
||||||
./virtualisation
|
./virtualisation
|
||||||
@@ -31,34 +30,56 @@ with lib;
|
|||||||
};
|
};
|
||||||
time.timeZone = "America/Los_Angeles";
|
time.timeZone = "America/Los_Angeles";
|
||||||
|
|
||||||
|
services.xserver.xkb = {
|
||||||
|
layout = "us";
|
||||||
|
variant = "";
|
||||||
|
options = "caps:escape";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Don't go to emergency mode if we aren't able to mount filesystems.
|
||||||
|
# This is silly if you have multiple hard drives or partitions
|
||||||
|
# configured on a machine and then one goes away intentionally or
|
||||||
|
# unintentionally. If the system is already booting, let it continue
|
||||||
|
# to try and boot.
|
||||||
|
systemd.enableEmergencyMode = false;
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
|
||||||
git
|
git
|
||||||
|
glances
|
||||||
|
pciutils
|
||||||
|
tree
|
||||||
|
usbutils
|
||||||
|
vim
|
||||||
];
|
];
|
||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
package = pkgs.nixFlakes;
|
package = pkgs.nix;
|
||||||
distributedBuilds = true;
|
# distributedBuilds = true;
|
||||||
buildMachines = [{
|
# buildMachines = [{
|
||||||
hostName = "z790prors.oglehome";
|
# hostName = "z790prors.oglehome";
|
||||||
system = "x86_64-linux";
|
# system = "x86_64-linux";
|
||||||
protocol = "ssh-ng";
|
# protocol = "ssh-ng";
|
||||||
sshUser = "johno";
|
# sshUser = "johno";
|
||||||
sshKey = "/root/.ssh/id_ed25519";
|
# sshKey = "/root/.ssh/id_ed25519";
|
||||||
maxJobs = 3;
|
# maxJobs = 3;
|
||||||
speedFactor = 2;
|
# speedFactor = 2;
|
||||||
}];
|
# }];
|
||||||
settings = {
|
settings = {
|
||||||
experimental-features = [ "nix-command" "flakes" ];
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
max-jobs = "auto";
|
max-jobs = "auto";
|
||||||
trusted-users = [ "johno" ];
|
trusted-users = [ "johno" ];
|
||||||
substituters = [
|
substituters = [
|
||||||
"https://hyprland.cachix.org"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
randomizedDelaySec = "14m";
|
||||||
|
options = "--delete-older-than 10d";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|||||||
@@ -2,133 +2,23 @@
|
|||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
|
|
||||||
basePackages = with pkgs; [
|
|
||||||
brightnessctl
|
|
||||||
mangohud # Should probably get refactored with steam/gamescope out to a gaming role
|
|
||||||
polonium # auto tiling kwin addon
|
|
||||||
];
|
|
||||||
|
|
||||||
x11BasePackages = with pkgs; [
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
x11OnlyPackages = with pkgs; [
|
|
||||||
emacs
|
|
||||||
];
|
|
||||||
|
|
||||||
waylandBasePackages = with pkgs; [
|
|
||||||
grim
|
|
||||||
slurp
|
|
||||||
wl-clipboard
|
|
||||||
mako
|
|
||||||
];
|
|
||||||
|
|
||||||
waylandOnlyPackages = with pkgs; [
|
|
||||||
emacs-gtk
|
|
||||||
];
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
options.roles.desktop = {
|
options.roles.desktop = {
|
||||||
enable = mkEnableOption "Enable the desktop role";
|
enable = mkEnableOption "Enable the desktop role.";
|
||||||
x11Only = mkOption {
|
|
||||||
type = types.bool;
|
x11 = mkOption { type = types.bool; default = false; description = "Enable X11 support."; };
|
||||||
default = false;
|
wayland = mkOption { type = types.bool; default = false; description = "Enable Wayland support."; };
|
||||||
};
|
kde = mkOption { type = types.bool; default = false; description = "Enable KDE."; };
|
||||||
|
gaming = mkOption { type = types.bool; default = false; description = "Enable gaming support."; };
|
||||||
|
sddm = mkOption { type = types.bool; default = false; description = "Enable SDDM greeter."; };
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable
|
imports = [
|
||||||
{
|
./x11.nix
|
||||||
services.xserver.xkb = {
|
./wayland.nix
|
||||||
layout = "us";
|
./gaming.nix
|
||||||
variant = "";
|
./kde.nix
|
||||||
options = "caps:escape";
|
./programs.nix
|
||||||
};
|
./sddm.nix
|
||||||
services.xserver.enable = true;
|
|
||||||
|
|
||||||
services.displayManager.sddm = {
|
|
||||||
enable = true;
|
|
||||||
wayland.enable = !cfg.x11Only;
|
|
||||||
};
|
|
||||||
services.desktopManager.plasma6.enable = true;
|
|
||||||
|
|
||||||
services.xserver.windowManager.i3 = {
|
|
||||||
enable = true;
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
dmenu
|
|
||||||
i3status
|
|
||||||
i3lock
|
|
||||||
];
|
];
|
||||||
};
|
|
||||||
programs.dconf.enable = true;
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
|
||||||
|
|
||||||
programs.sway = mkIf (!cfg.x11Only) {
|
|
||||||
enable = true;
|
|
||||||
wrapperFeatures.gtk = true;
|
|
||||||
};
|
|
||||||
programs.light.enable = mkIf (!cfg.x11Only) true;
|
|
||||||
|
|
||||||
programs.kdeconnect.enable = true;
|
|
||||||
programs.java.enable = true;
|
|
||||||
programs.gamemode = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
};
|
|
||||||
programs.gamescope = {
|
|
||||||
enable = true;
|
|
||||||
#capSysNice = true;
|
|
||||||
args = [
|
|
||||||
#"--adaptive-sync"
|
|
||||||
#"--nested-refresh 165"
|
|
||||||
#"--backend wayland"
|
|
||||||
"--hdr-enabled"
|
|
||||||
"--hdr-itm-enable"
|
|
||||||
"--hdr-debug-force-output"
|
|
||||||
"--mangoapp"
|
|
||||||
"--rt"
|
|
||||||
"--steam"
|
|
||||||
#"--xwayland-count 2"
|
|
||||||
];
|
|
||||||
env = {
|
|
||||||
#PROTON_DISABLE_NVAPI = "1";
|
|
||||||
MANGOHUD = "1";
|
|
||||||
#MANGOHUD_CONFIG = "cpu_temp gpu_temp ram vram";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
programs.steam = {
|
|
||||||
enable = true;
|
|
||||||
remotePlay.openFirewall = true;
|
|
||||||
localNetworkGameTransfers.openFirewall = true;
|
|
||||||
gamescopeSession = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
#package = pkgs.steam.override {
|
|
||||||
#withJava = true;
|
|
||||||
#withPrimus = true;
|
|
||||||
#extraPkgs = pkgs: [ bumblebee glxinfo ];
|
|
||||||
#};
|
|
||||||
};
|
|
||||||
services.sunshine = {
|
|
||||||
enable = true;
|
|
||||||
autoStart = true;
|
|
||||||
capSysAdmin = true;
|
|
||||||
openFirewall = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
|
||||||
users.extraGroups.docker.members = [ "johno" ];
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; mkMerge [
|
|
||||||
basePackages
|
|
||||||
x11BasePackages
|
|
||||||
(mkIf cfg.x11Only x11OnlyPackages)
|
|
||||||
# TODO: Do we need a "wayland only" mode?
|
|
||||||
(mkIf (!cfg.x11Only) waylandBasePackages)
|
|
||||||
(mkIf (!cfg.x11Only) waylandOnlyPackages)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
18
roles/desktop/gaming.nix
Normal file
18
roles/desktop/gaming.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.roles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = mkIf (cfg.enable && cfg.gaming) {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
steam
|
||||||
|
lutris
|
||||||
|
moonlight
|
||||||
|
];
|
||||||
|
|
||||||
|
# Possibly other gaming specific services or settings
|
||||||
|
};
|
||||||
|
}
|
||||||
12
roles/desktop/kde.nix
Normal file
12
roles/desktop/kde.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.roles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = mkIf (cfg.enable && cfg.kde) {
|
||||||
|
services.desktopManager.plasma6.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
20
roles/desktop/programs.nix
Normal file
20
roles/desktop/programs.nix
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.roles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
brightnessctl
|
||||||
|
emacs-nox
|
||||||
|
moonlight-qt
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.dconf.enable = true;
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
programs.kdeconnect.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
15
roles/desktop/sddm.nix
Normal file
15
roles/desktop/sddm.nix
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.roles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = mkIf (cfg.enable && cfg.sddm) {
|
||||||
|
services.displayManager.sddm = {
|
||||||
|
enable = true;
|
||||||
|
wayland.enable = (!cfg.x11 && cfg.wayland);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
23
roles/desktop/wayland.nix
Normal file
23
roles/desktop/wayland.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.roles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = mkIf (cfg.enable && cfg.wayland) {
|
||||||
|
programs.sway = {
|
||||||
|
enable = true;
|
||||||
|
wrapperFeatures.gtk = true;
|
||||||
|
};
|
||||||
|
programs.light.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
wl-clipboard
|
||||||
|
mako
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
19
roles/desktop/x11.nix
Normal file
19
roles/desktop/x11.nix
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.roles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = mkIf (cfg.enable && cfg.x11) {
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
windowManager.i3 = {
|
||||||
|
enable = true;
|
||||||
|
extraPackages = with pkgs; [ dmenu i3status i3lock ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -27,45 +27,30 @@ in
|
|||||||
]);
|
]);
|
||||||
in mkIf cfg.enable
|
in mkIf cfg.enable
|
||||||
{
|
{
|
||||||
users.extraUsers.kodi.isNormalUser = true;
|
users.extraUsers.kodi = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" "networkmanager" "audio" "video" ];
|
||||||
|
};
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
allowedTCPPorts = [ 8080 ];
|
allowedTCPPorts = [ 8080 ];
|
||||||
allowedUDPPorts = [ 8080 ];
|
allowedUDPPorts = [ 8080 ];
|
||||||
};
|
};
|
||||||
|
|
||||||
services = if cfg.autologin then mkMerge [
|
environment.systemPackages = with pkgs; [
|
||||||
(mkIf cfg.wayland {
|
kodiPkg
|
||||||
cage = mkIf cfg.wayland {
|
wget
|
||||||
user = "kodi";
|
];
|
||||||
program = "${kodiPkg}/bin/kodi-standalone";
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
xserver = {
|
|
||||||
enable = false;
|
|
||||||
autorun = false;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf (!cfg.wayland) {
|
programs.kdeconnect.enable = true;
|
||||||
xserver = {
|
|
||||||
enable = true;
|
services = if cfg.autologin then {
|
||||||
desktopManager.kodi = {
|
|
||||||
enable = true;
|
|
||||||
package = kodiPkg;
|
|
||||||
};
|
|
||||||
displayManager.lightdm = {
|
|
||||||
enable = true;
|
|
||||||
greeter.enable = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
displayManager = {
|
displayManager = {
|
||||||
autoLogin.enable = true;
|
autoLogin.enable = true;
|
||||||
autoLogin.user = "kodi";
|
autoLogin.user = "kodi";
|
||||||
defaultSession = "kodi";
|
defaultSession = "kodi";
|
||||||
sessionData.autologinSession = "kodi";
|
sessionData.autologinSession = "plasma";
|
||||||
};
|
};
|
||||||
})
|
} else {};
|
||||||
] else {};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,5 +19,12 @@ in
|
|||||||
nssmdns4 = true;
|
nssmdns4 = true;
|
||||||
openFirewall = true;
|
openFirewall = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
hardware.printers.ensurePrinters = [{
|
||||||
|
name = "MFC-L8900CDW_series";
|
||||||
|
deviceUri = "dnssd://Brother%20MFC-L8900CDW%20series._ipp._tcp.local/?uuid=e3248000-80ce-11db-8000-b422006699d8";
|
||||||
|
model = "everywhere";
|
||||||
|
}];
|
||||||
|
hardware.printers.ensureDefaultPrinter = "MFC-L8900CDW_series";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
{ config, lib, pkgs, inputs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
sops.defaultSopsFile = ../../secrets/secrets.yaml;
|
|
||||||
sops.defaultSopsFormat = "yaml";
|
|
||||||
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" "/home/johno/.ssh/id_ed25519" ];
|
|
||||||
sops.secrets.example_key = {};
|
|
||||||
}
|
|
||||||
@@ -25,7 +25,7 @@ in
|
|||||||
users.users.johno = {
|
users.users.johno = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "John Ogle";
|
description = "John Ogle";
|
||||||
extraGroups = [ "wheel" "networkmanager" "audio" ] ++ cfg.extraGroups;
|
extraGroups = [ "wheel" "networkmanager" "audio" "video" ] ++ cfg.extraGroups;
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.eli = mkIf cfg.kids {
|
users.users.eli = mkIf cfg.kids {
|
||||||
|
|||||||
@@ -14,5 +14,7 @@ in
|
|||||||
{
|
{
|
||||||
virtualisation.libvirtd.enable = true;
|
virtualisation.libvirtd.enable = true;
|
||||||
programs.virt-manager.enable = true;
|
programs.virt-manager.enable = true;
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
users.extraGroups.docker.members = [ "johno" ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
hello: ENC[AES256_GCM,data:5ZpbPx3D8gQc1fOhViUqiCr0zLWYotB+vIBixqTbqP9XLS52y6tr5DXus0aV9mTgka5deqc=,iv:yPJaCqDD9WD56swfBjSm7A62ZTTIQDqyAKOgP1ese+U=,tag:bo8+7Ne2f9aEZSvpkt1fzA==,type:str]
|
|
||||||
example_key: ENC[AES256_GCM,data:v15bEcb0H3vaj13blg==,iv:9P3IA7ChBamo41VE8G8tj46sZqeijsO1LcvwLtEPVPA=,tag:o/lAyAYYGNLP9EjQNa/K8Q==,type:str]
|
|
||||||
example_array:
|
|
||||||
- ENC[AES256_GCM,data:3Vwa7dfNfKzRc/xpk6I=,iv:IevBgxwWdaBvZY1ywteWcfWwDIA8lK3FTWs67lLBKxw=,tag:Mx5lzUeNZ/3wJBWAl5XSBw==,type:str]
|
|
||||||
- ENC[AES256_GCM,data:epkT6WPGW5Oe/S+4HtU=,iv:N0yoDuieAaEi+NuCoCL4zrkhaDDdkttboI89m+UccjQ=,tag:OoERRByb0OM4un9oGLJQgA==,type:str]
|
|
||||||
#ENC[AES256_GCM,data:YzMFXxn3sbbHpGB4jPRtRw==,iv:TN6ogQuH7c6xtDoWt0Ew9B2f7wuaipJynvscZmaJYoU=,tag:No0UwEktEyMNBg/46P+Zmg==,type:comment]
|
|
||||||
example_number: ENC[AES256_GCM,data:jmLoVC+8YIlB2A==,iv:u9GztD/aE9UN5zWq3Am2nhYwmYt3sf8sy65MHbhVoD0=,tag:wKuf1mMr5XBJveJrz0uHPA==,type:float]
|
|
||||||
example_booleans:
|
|
||||||
- ENC[AES256_GCM,data:ZacILA==,iv:xo+7aFFQXzbJzKDY0mYTeFLf10AlnHkywDRAMHeprEM=,tag:F/OnJdqjrZP02sTLWLmnbg==,type:bool]
|
|
||||||
- ENC[AES256_GCM,data:NaFrvrs=,iv:kKDmGs9u/w5qrZ/379Jlx8AotUVADvH+eHwHCqykmkE=,tag:nD9TsmkXUm4ABaT1ABWmcg==,type:bool]
|
|
||||||
sops:
|
|
||||||
kms: []
|
|
||||||
gcp_kms: []
|
|
||||||
azure_kv: []
|
|
||||||
hc_vault: []
|
|
||||||
age:
|
|
||||||
- recipient: age1ls6a033d4p4u8h4rwazjwt8w4c4xg73wq0mdnm64jajxzcz4k9asvjnks3
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjak9vRVJtVmJoanhEZ0hQ
|
|
||||||
MFJwMEE4UDcrRkdPRmZ6R09FSDY1aTk3Y1dNClZJYXRLNU5senR3Qzh6VmZGMlhu
|
|
||||||
bnl6VjlaUEFISnBtSTVrcEd0ZjI5Q2MKLS0tIFl1b3A5ZWVqc1gvWVZnZis0ZHFk
|
|
||||||
bWhnNVB2TUJ4YzY4NHdSVXhPc3dReTgKWRYBbBE3+oGsRNw1CROhFY+btENbShfv
|
|
||||||
gw3IdW7OoZV6JpJBOcI82eOuOkIxrmgSGDGeyy10/a5MA/cB1umm+w==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
- recipient: age12l5u7sw59u5pkwp83qm8t3ff7uv0ld2c9k3zh5j4ame9k2szcynqu7ftqe
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGcmV3TDlNL2Zxb0h5QTYx
|
|
||||||
QkVmczA0MDc2ZnpNNU1YeFVzSXJwc3RWUmk4CjF4bHIrVU9VM3htTUxGZ2FUR256
|
|
||||||
UEovdVV2cmNIbkloS1VobTNFSDVyRG8KLS0tIEFhUk5kL3hCNGs4MGJBTmNJaVFm
|
|
||||||
b2ZBUGJ1K0lKTitKYTRUMWszQzhBU0UKBaM6t6JmWfiG+wPorGea1gqvV5RSIPyw
|
|
||||||
6yb2PcH2oZ0HrjJM5sjfu7XOWY3KneiZZikR1BpD5KvevfagWTSR/w==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
- recipient: age1fa3zqavfmqk4ssa22yne9td90gyqv9q5a8y0s8jp3xak8q7p3yjqyn7rkg
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaMFJiNjVOb0lTcmJ3VnhH
|
|
||||||
WlRKZERRZFM3TFZBZGNSZC9GdHlHakMza21zClJ3SDdFUkVRc3oyVVU3WEtDQzBu
|
|
||||||
OEFqS3NwbHZFUlpCYlN6RW84N0F1amcKLS0tIHFZK21aTHdwZ2dWbVRrWEZDWFZj
|
|
||||||
aU1IQzdTMVhnbHhsNENwMG05dXhOU2MK8fEJea9sL5JLgltVlTI6mRDb+Tl83Iz7
|
|
||||||
4wPYvo68cn8vimXqSk45ldHRrNa3zhYai3CalQaGtDT3fkWGvSq0zQ==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2024-09-28T15:44:39Z"
|
|
||||||
mac: ENC[AES256_GCM,data:YUi+AbS6DQTmrSyOXsbkZWfWaMyKGR8fYm/MHcxmqChi8hng+UWHBZjsLBe6ef/FLH3rnP6bhfwK8KYnVS6fHvHahoqIq/BHydTsqrclnSgRAGl8Lh0yuhwISNRvP1AuW5pd50sdQaS0uGOtzOCharI/pZ9H+cmt2SB5WOCdeLs=,iv:2nBG6it3tNSLSia8hGzCcesuK9QwzB9EzfjWegjQ2kw=,tag:RGGPAPw/rQKhWA2OqLjTJw==,type:str]
|
|
||||||
pgp: []
|
|
||||||
unencrypted_suffix: _unencrypted
|
|
||||||
version: 3.9.0
|
|
||||||
Reference in New Issue
Block a user