Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
33385d5275 | ||
|
|
19bf815be8 | ||
|
|
0152438472 | ||
|
|
f9b07deb19 | ||
|
|
6e55d375d2 | ||
|
|
0e066cb4d7 | ||
|
|
bd64283f04 | ||
|
|
6025b6c4f1 | ||
|
|
92b04773b2 | ||
|
|
783a7a3390 | ||
|
|
0ef4354c1a | ||
|
|
192a978d46 | ||
|
|
a4519904b6 | ||
|
|
83a6e45bf4 | ||
|
|
2ba6f3466f | ||
|
|
b3f5b4b406 | ||
|
|
2e680f2519 | ||
|
|
445183f826 | ||
|
|
aec980e6fe | ||
|
|
68f732ec4b | ||
|
|
dc382dcfcc | ||
|
|
b1a06034f1 | ||
|
|
aa3e8cc263 | ||
|
|
b680255bc5 | ||
|
|
a3f7af4e39 | ||
|
|
cd5c8a0034 | ||
|
|
1f14f020ed | ||
|
|
05affb6b1f | ||
|
|
2623efc997 | ||
|
|
c053da2e30 | ||
|
|
533d6a4170 | ||
|
|
5b3e01820b | ||
| 5cef58ade0 | |||
|
|
981b41f4c2 | ||
|
|
ae8039dba0 | ||
|
|
54f56c3f83 | ||
|
|
ce142bb64a | ||
|
|
fd3f61a0ac | ||
|
|
d0ac22c211 | ||
|
|
caa326d496 | ||
|
|
04ef2a4b8c | ||
|
|
7e35a27b2e | ||
|
|
48108e693a | ||
|
|
8e3d3e4281 | ||
|
|
c7c99b339b | ||
|
|
c8f5547727 | ||
|
|
6f5e592d8c | ||
|
|
5ae3f1a9ef | ||
|
|
1a3b091588 | ||
|
|
5b34456571 | ||
|
|
5918611469 | ||
|
|
f3aafffcaa | ||
|
|
3d213c8769 | ||
|
|
f05972d6ae | ||
|
|
b77dda0e6f | ||
|
|
3c1a956c81 | ||
|
|
5dc1a96f6d |
122
.sops.yaml
122
.sops.yaml
@@ -10,81 +10,81 @@ keys:
|
|||||||
- &pi5 age1t2d5scrukk0guva5sr97a8tge5j8kd865adezrcru7p269pzwvpsamkgje
|
- &pi5 age1t2d5scrukk0guva5sr97a8tge5j8kd865adezrcru7p269pzwvpsamkgje
|
||||||
- &deck age1c8qw59ffcq9l77gfmtyc3djtvt3md0u6dwhrjcgsm98ntyf72ufqugj7cg
|
- &deck age1c8qw59ffcq9l77gfmtyc3djtvt3md0u6dwhrjcgsm98ntyf72ufqugj7cg
|
||||||
- &steamdeck age1er5qucsc2mugrzrr7n3xhzv7kemkrqrw4m84r544fkk7nkg5g5eswxkqj0
|
- &steamdeck age1er5qucsc2mugrzrr7n3xhzv7kemkrqrw4m84r544fkk7nkg5g5eswxkqj0
|
||||||
- &matt_macbook-pro age1xg6mvj3x6s3t8058c6rsk3q4kskvm6nsffwckxkkjzhyn7r6tczqgkj23p
|
- &matt_macbook-pro age19daqsncuzeh3j6cwk8uxp6yfj8h0qtz02jxlwwy4v8j0mfgznsvq30440g
|
||||||
- &macbook-pro age1rdn39ywgzmc8wlsl5lrfe77e652wzjmjx58gx4k2ydghd35kdqvqscrf3h
|
- &macbook-pro age19w4zafpwnq9yhzuf8r5te2yhq7xlqj76rcgzcz935hllyrz4yvws4jn6ca
|
||||||
- &nuc age1wurzgc20e6ye79wsg85vvqk4aj3mmc0llxshcy9532ex8f4c6dqql76c78
|
- &nuc age1wurzgc20e6ye79wsg85vvqk4aj3mmc0llxshcy9532ex8f4c6dqql76c78
|
||||||
- &admin_nuc age1luyejgmqjj0esydlr2jxqkg48vexmx57gdz7cy5gq7rz8kf5cups2rnfa9
|
- &admin_nuc age1luyejgmqjj0esydlr2jxqkg48vexmx57gdz7cy5gq7rz8kf5cups2rnfa9
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *matt_pi4
|
- *matt_pi4
|
||||||
- *matt_pi5
|
- *matt_pi5
|
||||||
- *desktop
|
- *desktop
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- *pi4
|
- *pi4
|
||||||
- *pi5
|
- *pi5
|
||||||
- *deck
|
- *deck
|
||||||
- *steamdeck
|
- *steamdeck
|
||||||
- *matt_macbook-pro
|
- *matt_macbook-pro
|
||||||
- *macbook-pro
|
- *macbook-pro
|
||||||
- *admin_nuc
|
- *admin_nuc
|
||||||
- *nuc
|
- *nuc
|
||||||
- path_regex: nas-secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: nas-secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *desktop
|
- *desktop
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- path_regex: desktop-secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: desktop-secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *desktop
|
- *desktop
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- path_regex: steamdeck-secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: steamdeck-secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *desktop
|
- *desktop
|
||||||
- *deck
|
- *deck
|
||||||
- *steamdeck
|
- *steamdeck
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- path_regex: pi4-secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: pi4-secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *matt_pi4
|
- *matt_pi4
|
||||||
- *matt_pi5
|
- *matt_pi5
|
||||||
- *desktop
|
- *desktop
|
||||||
- *pi4
|
- *pi4
|
||||||
- *pi5
|
- *pi5
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- path_regex: pi5-secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: pi5-secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *matt_pi4
|
- *matt_pi4
|
||||||
- *matt_pi5
|
- *matt_pi5
|
||||||
- *desktop
|
- *desktop
|
||||||
- *pi4
|
- *pi4
|
||||||
- *pi5
|
- *pi5
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- path_regex: mac-secrets/[^/]+\.(yaml|json|env|ini)$
|
- path_regex: mac-secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *matt
|
- *matt
|
||||||
- *matt_pi5
|
- *matt_pi5
|
||||||
- *desktop
|
- *desktop
|
||||||
- *pi5
|
- *pi5
|
||||||
- *admin
|
- *admin
|
||||||
- *jallen-nas
|
- *jallen-nas
|
||||||
- *matt_macbook-pro
|
- *matt_macbook-pro
|
||||||
- *macbook-pro
|
- *macbook-pro
|
||||||
|
|||||||
156
README.md
156
README.md
@@ -1,50 +1,118 @@
|
|||||||
# nixOS Config
|
# NixOS Configuration Repository
|
||||||
|
|
||||||
### Common Files
|
This repository contains my personal NixOS configurations for multiple systems, managed using [Snowfall Lib](https://github.com/snowfallorg/lib) and the Nix Flakes system.
|
||||||
* [flake.nix](./flake.nix)
|
|
||||||
* [impermenance.nix](./share/impermanence/default.nix)
|
## Overview
|
||||||
* [share](./share)
|
|
||||||
* [overlays](./overlays)
|
This repository provides a centralized, declarative configuration for all my systems, including:
|
||||||
|
|
||||||
|
- Desktop PC (AMD)
|
||||||
|
- NAS server
|
||||||
|
- Steam Deck
|
||||||
|
- Intel NUC
|
||||||
|
- Raspberry Pi 4
|
||||||
|
- Raspberry Pi 5
|
||||||
|
- MacBook Pro (NixOS on Apple Silicon)
|
||||||
|
- MacBook Pro (Darwin/macOS)
|
||||||
|
|
||||||
|
## Repository Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── checks/ # Pre-commit hooks and other checks
|
||||||
|
├── flake.nix # Main flake configuration
|
||||||
|
├── homes/ # Home-manager configurations for users
|
||||||
|
│ ├── aarch64-darwin/ # macOS home configurations
|
||||||
|
│ ├── aarch64-linux/ # ARM Linux home configurations
|
||||||
|
│ └── x86_64-linux/ # x86 Linux home configurations
|
||||||
|
├── modules/ # Reusable configuration modules
|
||||||
|
│ ├── home/ # Home-manager modules
|
||||||
|
│ └── nixos/ # NixOS system modules
|
||||||
|
├── overlays/ # Nixpkgs overlays
|
||||||
|
├── packages/ # Custom package definitions
|
||||||
|
├── secrets/ # Encrypted secrets (managed with sops-nix)
|
||||||
|
└── systems/ # System-specific configurations
|
||||||
|
├── aarch64-darwin/ # macOS system configurations
|
||||||
|
├── aarch64-linux/ # ARM Linux system configurations
|
||||||
|
└── x86_64-linux/ # x86 Linux system configurations
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
|
||||||
|
- **Modular Design**: Reusable modules for various system components
|
||||||
|
- **Multi-System Support**: Configurations for different hardware platforms
|
||||||
|
- **Home Manager Integration**: User environment management
|
||||||
|
- **Secret Management**: Encrypted secrets with sops-nix
|
||||||
|
- **Disk Management**: Declarative disk partitioning with disko
|
||||||
|
- **State Management**: Persistent state management with impermanence
|
||||||
|
- **Desktop Environments**: Support for GNOME, Hyprland, and COSMIC
|
||||||
|
- **Hardware-Specific Optimizations**: Tailored configurations for different hardware
|
||||||
|
|
||||||
|
## Key Technologies
|
||||||
|
|
||||||
|
- [Nix](https://nixos.org/) and [NixOS](https://nixos.org/)
|
||||||
|
- [Nix Flakes](https://nixos.wiki/wiki/Flakes)
|
||||||
|
- [Snowfall Lib](https://github.com/snowfallorg/lib)
|
||||||
|
- [Home Manager](https://github.com/nix-community/home-manager)
|
||||||
|
- [sops-nix](https://github.com/Mic92/sops-nix)
|
||||||
|
- [disko](https://github.com/nix-community/disko)
|
||||||
|
- [impermanence](https://github.com/nix-community/impermanence)
|
||||||
|
- [lanzaboote](https://github.com/nix-community/lanzaboote) (Secure Boot)
|
||||||
|
|
||||||
|
## Notable System Configurations
|
||||||
|
|
||||||
### Desktop
|
### Desktop
|
||||||
* [boot.nix](./hosts/desktop/boot.nix)
|
|
||||||
* [configuration.nix](./hosts/desktop/configuration.nix)
|
A powerful AMD-based desktop with gaming capabilities, featuring:
|
||||||
* [hardware-configuration.nix](./hosts/desktop/hardware-configuration.nix)
|
- AMD CPU and GPU optimizations
|
||||||
* [filesystems.nix](./hosts/desktop/filesystems.nix)
|
- Multiple desktop environment options (GNOME, Hyprland, COSMIC)
|
||||||
* [home.nix](./hosts/desktop/home.nix)
|
- Gaming setup with Steam and related tools
|
||||||
* [sops.nix](./hosts/desktop/sops.nix)
|
|
||||||
* [specialisations.hyprland](./hosts/desktop/hyprland)
|
|
||||||
* [specialisations.gnome](./hosts/desktop/gnome)
|
|
||||||
* [specialisations.cosmic](./hosts/desktop/cosmic)
|
|
||||||
|
|
||||||
### NAS
|
### NAS
|
||||||
* [boot.nix](./hosts/nas/boot.nix)
|
|
||||||
* [configuration.nix](./hosts/nas/configuration.nix)
|
|
||||||
* [hardware-configuration.nix](./hosts/nas/hardware-configuration.nix)
|
|
||||||
* [impermenance.nix](./hosts/nas/impermenance.nix)
|
|
||||||
* [apps.nix](./hosts/desktop/apps.nix)
|
|
||||||
* [home.nix](./hosts/desktop/home.nix)
|
|
||||||
* [networking.nix](./hosts/desktop/networking.nix)
|
|
||||||
* [services.nix](./hosts/desktop/services.nix)
|
|
||||||
* [sops.nix](./hosts/desktop/sops.nix)
|
|
||||||
* [ups.nix](./hosts/desktop/ups.nix)
|
|
||||||
* [samba](./modules/samba)
|
|
||||||
* nas-apps
|
|
||||||
* [arrs](./hosts/nas/apps/arrs/default.nix)
|
|
||||||
* [free-games-claimer](./modules/apps/free-games-claimer)
|
|
||||||
* [jackett](./modules/apps/jackett)
|
|
||||||
* [jellyfin](./hosts/nas/apps/jellyfin/default.nix)
|
|
||||||
* [jellyseerr](./hosts/nas/apps/jellyseerr/default.nix)
|
|
||||||
* [jackett](./modules/apps/manyfold)
|
|
||||||
* [mariadb](./modules/apps/mariadb)
|
|
||||||
* [mealie](./modules/apps/mealie)
|
|
||||||
* [nextcloud+onlyoffice](./hosts/nas/apps/nextcloud/default.nix)
|
|
||||||
* [ollama](./hosts/nas/apps/ollama/default.nix)
|
|
||||||
* [paperless](./hosts/nas/apps/paperless/default.nix)
|
|
||||||
* [tdarr](./modules/apps/tdarr)
|
|
||||||
* [traefik](./hosts/nas/apps/traefik/default.nix)
|
|
||||||
* [wireguard](./modules/apps/your-spotify)
|
|
||||||
|
|
||||||
### Raspberry Pi 4
|
A home server with various self-hosted services:
|
||||||
* [configuration.nix](./hosts/pi4/configuration.nix)
|
- Media management (Jellyfin, Jellyseerr)
|
||||||
* [hardware-configuration.nix](./hosts/pi4/hardware-configuration.nix)
|
- Download automation (Sonarr, Radarr, etc.)
|
||||||
|
- Document management (Paperless)
|
||||||
|
- File sharing (Samba, Nextcloud)
|
||||||
|
- AI services (Ollama)
|
||||||
|
|
||||||
|
### Raspberry Pi
|
||||||
|
|
||||||
|
Configurations for both Pi 4 and Pi 5:
|
||||||
|
- Hardware-specific optimizations
|
||||||
|
- Disk partitioning suitable for ARM devices
|
||||||
|
- Bluetooth and wireless support
|
||||||
|
|
||||||
|
### Steam Deck
|
||||||
|
|
||||||
|
Custom NixOS configuration for the Steam Deck:
|
||||||
|
- Integration with Jovian for Steam Deck compatibility
|
||||||
|
- Gaming optimizations
|
||||||
|
- Steam ROM Manager
|
||||||
|
|
||||||
|
### MacBook Pro
|
||||||
|
|
||||||
|
Configurations for both:
|
||||||
|
- NixOS on Apple Silicon
|
||||||
|
- nix-darwin for macOS
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Building a System Configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build and activate a system configuration
|
||||||
|
sudo nixos-rebuild switch --flake .#hostname
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building a Home Configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build and activate a home configuration
|
||||||
|
home-manager switch --flake .#username@hostname
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License - see the LICENSE file for details.
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
{
|
{
|
||||||
inputs,
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (inputs) git-hooks-nix;
|
inherit (inputs) pre-commit-hooks-nix;
|
||||||
in
|
in
|
||||||
git-hooks-nix.lib.${pkgs.system}.run {
|
pre-commit-hooks-nix.lib.${pkgs.system}.run {
|
||||||
src = ../..;
|
src = ../..;
|
||||||
hooks = {
|
hooks = {
|
||||||
pre-commit-hook-ensure-sops.enable = true;
|
pre-commit-hook-ensure-sops.enable = true;
|
||||||
treefmt = {
|
treefmt = {
|
||||||
enable = true;
|
enable = lib.mkForce true;
|
||||||
settings.fail-on-change = false;
|
settings.fail-on-change = lib.mkForce false;
|
||||||
packageOverrides.treefmt = inputs.treefmt-nix.lib.mkWrapper pkgs ../../treefmt.nix;
|
packageOverrides.treefmt = inputs.treefmt-nix.lib.mkWrapper pkgs (
|
||||||
|
lib.snowfall.fs.get-file "treefmt.nix"
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
249
flake.lock
generated
249
flake.lock
generated
@@ -30,11 +30,11 @@
|
|||||||
"uv2nix": "uv2nix"
|
"uv2nix": "uv2nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751033152,
|
"lastModified": 1753369162,
|
||||||
"narHash": "sha256-0ANu9OLQJszcEyvnfDB7G957uqskZwCrTzRXz/yfAmE=",
|
"narHash": "sha256-pSAsUVueht3WyyFJ3K+QJKWqFZNbyvsXijHOAHApeLk=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "authentik-nix",
|
"repo": "authentik-nix",
|
||||||
"rev": "1a4d6a5dd6fef39b99eb7ea4db79c5d5c7d7f1bf",
|
"rev": "1361d269fe10c527528264185567a053252e22b0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -46,16 +46,16 @@
|
|||||||
"authentik-src": {
|
"authentik-src": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751031262,
|
"lastModified": 1753187012,
|
||||||
"narHash": "sha256-SNgRMQUjL3DTlWkMyRMan+pY1FfIV+DMeq5BiTM0N0k=",
|
"narHash": "sha256-bs/ThY3YixwBObahcS7BrOWj0gsaUXI664ldUQlJul8=",
|
||||||
"owner": "goauthentik",
|
"owner": "goauthentik",
|
||||||
"repo": "authentik",
|
"repo": "authentik",
|
||||||
"rev": "b34665fabd8d938d81ce871a4e86ca528c5f253b",
|
"rev": "23ffad1c6be80bea223caf5f1cf265b984b76328",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "goauthentik",
|
"owner": "goauthentik",
|
||||||
"ref": "version/2025.4.3",
|
"ref": "version/2025.6.4",
|
||||||
"repo": "authentik",
|
"repo": "authentik",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -63,16 +63,16 @@
|
|||||||
"brew-src": {
|
"brew-src": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751910772,
|
"lastModified": 1753461463,
|
||||||
"narHash": "sha256-jQNdIkq2iRDNWskd5f8kX6q9BO/CBSXhMH41WNRft8E=",
|
"narHash": "sha256-kGc7pRH0diLzKmOHsEFA8sZ9NJpgT+tqxAMsuqNd5Po=",
|
||||||
"owner": "Homebrew",
|
"owner": "Homebrew",
|
||||||
"repo": "brew",
|
"repo": "brew",
|
||||||
"rev": "700d67a85e0129ab8a893ff69246943479e33df1",
|
"rev": "4d14be89e99a45181c18e96a5f19a5b43343cc0f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "Homebrew",
|
"owner": "Homebrew",
|
||||||
"ref": "4.5.9",
|
"ref": "4.5.13",
|
||||||
"repo": "brew",
|
"repo": "brew",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -86,11 +86,11 @@
|
|||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753146705,
|
"lastModified": 1755444192,
|
||||||
"narHash": "sha256-WzmXODUzg8jeEsAhpmp55zk5I2fmv3kv+RofZ/+FYlg=",
|
"narHash": "sha256-9eVUtk3ces32aJpHnsrO49UJNvMKNMxlV7NeNSAADLo=",
|
||||||
"owner": "chaotic-cx",
|
"owner": "chaotic-cx",
|
||||||
"repo": "nyx",
|
"repo": "nyx",
|
||||||
"rev": "02b3c2a45f6ddbd704f797c5730bc2d161f10ce0",
|
"rev": "958ba486ee73019e3820b9ebd97a38660f736f40",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -160,11 +160,11 @@
|
|||||||
"nixpkgs": "nixpkgs_5"
|
"nixpkgs": "nixpkgs_5"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751313918,
|
"lastModified": 1755275010,
|
||||||
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
|
"narHash": "sha256-lEApCoWUEWh0Ifc3k1JdVjpMtFFXeL2gG1qvBnoRc2I=",
|
||||||
"owner": "LnL7",
|
"owner": "LnL7",
|
||||||
"repo": "nix-darwin",
|
"repo": "nix-darwin",
|
||||||
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
|
"rev": "7220b01d679e93ede8d7b25d6f392855b81dd475",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -180,16 +180,15 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742690494,
|
"lastModified": 1755519972,
|
||||||
"narHash": "sha256-SFacEbSRMoTyWG5VXh4ieofJGge+cLq9lH8ifB+zjBg=",
|
"narHash": "sha256-bU4nqi3IpsUZJeyS8Jk85ytlX61i4b0KCxXX9YcOgVc=",
|
||||||
"owner": "nvmd",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "9dc58d4d49c9f74623a06e2fc20cdfd8bb3cbe8b",
|
"rev": "4073ff2f481f9ef3501678ff479ed81402caae6d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nvmd",
|
"owner": "nix-community",
|
||||||
"ref": "gpt-attrs",
|
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -244,11 +243,11 @@
|
|||||||
},
|
},
|
||||||
"flake-compat_4": {
|
"flake-compat_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1688025799,
|
"lastModified": 1746162366,
|
||||||
"narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=",
|
"narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c",
|
"rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -260,11 +259,11 @@
|
|||||||
"flake-compat_5": {
|
"flake-compat_5": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1696426674,
|
"lastModified": 1747046372,
|
||||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -504,11 +503,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753132348,
|
"lastModified": 1755313937,
|
||||||
"narHash": "sha256-0i3jU9AHuNXb0wYGzImnVwaw+miE0yW13qfjC0F+fIE=",
|
"narHash": "sha256-pQb7bNcolxYGRiylUCrTddiF+qW2wsUiM9+eRIDUrVU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "e4bf85da687027cfc4a8853ca11b6b86ce41d732",
|
"rev": "2a749f4790a14f7168be67cdf6e548ef1c944e10",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -524,11 +523,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753180535,
|
"lastModified": 1755442500,
|
||||||
"narHash": "sha256-KEtlzMs2O7FDvciFtjk9W4hyau013Pj9qZNK9a0PxEc=",
|
"narHash": "sha256-RHK4H6SWzkAtW/5WBHsyugaXJX25yr5y7FAZznxcBJs=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "847711c7ffa9944b0c5c39a8342ac8eb6a9f9abc",
|
"rev": "d2ffdedfc39c591367b1ddf22b4ce107f029dcc3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -540,11 +539,11 @@
|
|||||||
"homebrew-cask": {
|
"homebrew-cask": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753192390,
|
"lastModified": 1755480455,
|
||||||
"narHash": "sha256-B/MI7F4IliXNY6QEKCmIEsO4A0Qt9jUZXfMfrX9/5hE=",
|
"narHash": "sha256-cIMlCE5M5Zq1DjfS9mV4AepUv/hn9nrFj0klK7C784c=",
|
||||||
"owner": "homebrew",
|
"owner": "homebrew",
|
||||||
"repo": "homebrew-cask",
|
"repo": "homebrew-cask",
|
||||||
"rev": "4f64bf7953d412b473d1f459208c725861646a6d",
|
"rev": "e1e54f7a14ae909bfefc1f0928c1f70fbfb31c84",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -556,11 +555,11 @@
|
|||||||
"homebrew-core": {
|
"homebrew-core": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753194897,
|
"lastModified": 1755480844,
|
||||||
"narHash": "sha256-jo7SLfGCgQbLKK9kbHXgLJY8bbzESn1K6Sr2x7EFzKY=",
|
"narHash": "sha256-4Uz2TZckTG5dh2CPCj577BsmrGIEV8Ji3o/B8nv1tVE=",
|
||||||
"owner": "homebrew",
|
"owner": "homebrew",
|
||||||
"repo": "homebrew-core",
|
"repo": "homebrew-core",
|
||||||
"rev": "a427a5a802b98591899d4bda471a7a14ed5ff2fd",
|
"rev": "be6e3ae8531ba128ec039d057f76078b1a1513be",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -593,11 +592,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752755091,
|
"lastModified": 1755151620,
|
||||||
"narHash": "sha256-H/k35QJLyQxkFnXR5ckMv/Z+ElNa5f22qNKdyGBMAn4=",
|
"narHash": "sha256-fVMalQZ+tRXR8oue2SdWu4CdlsS2NII+++rI40XQ8rU=",
|
||||||
"owner": "Jovian-Experiments",
|
"owner": "Jovian-Experiments",
|
||||||
"repo": "Jovian-NixOS",
|
"repo": "Jovian-NixOS",
|
||||||
"rev": "0d09755fe1df1886e5f07dbb16f7ed373080f86a",
|
"rev": "16e12d22754d97064867006acae6e16da7a142a6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -612,11 +611,11 @@
|
|||||||
"nixpkgs": "nixpkgs_6"
|
"nixpkgs": "nixpkgs_6"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752755091,
|
"lastModified": 1755151620,
|
||||||
"narHash": "sha256-H/k35QJLyQxkFnXR5ckMv/Z+ElNa5f22qNKdyGBMAn4=",
|
"narHash": "sha256-fVMalQZ+tRXR8oue2SdWu4CdlsS2NII+++rI40XQ8rU=",
|
||||||
"owner": "Jovian-Experiments",
|
"owner": "Jovian-Experiments",
|
||||||
"repo": "Jovian-NixOS",
|
"repo": "Jovian-NixOS",
|
||||||
"rev": "0d09755fe1df1886e5f07dbb16f7ed373080f86a",
|
"rev": "16e12d22754d97064867006acae6e16da7a142a6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -649,6 +648,27 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lsfg-vk": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1753837013,
|
||||||
|
"narHash": "sha256-+kBJhOSS5S6gPp/pbTk1B3EL9Xr08yFuQoGGQ+SoQwQ=",
|
||||||
|
"owner": "mjallen18",
|
||||||
|
"repo": "lsfg-vk-flake",
|
||||||
|
"rev": "f7fc5f9d421d64d3cf24c8d0955a80718ef70bac",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "mjallen18",
|
||||||
|
"ref": "main",
|
||||||
|
"repo": "lsfg-vk-flake",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"napalm": {
|
"napalm": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": [
|
"flake-utils": [
|
||||||
@@ -725,11 +745,11 @@
|
|||||||
"brew-src": "brew-src"
|
"brew-src": "brew-src"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752160973,
|
"lastModified": 1754250993,
|
||||||
"narHash": "sha256-BCC8KB7TEtwv7vZN1WDu870tRbXtzUcmF9xNr6ws5Wc=",
|
"narHash": "sha256-MEin+qoQKtFC1b0f4tnQ+Z82BQWSCgh6Ef7rpmH9gig=",
|
||||||
"owner": "zhaofengli",
|
"owner": "zhaofengli",
|
||||||
"repo": "nix-homebrew",
|
"repo": "nix-homebrew",
|
||||||
"rev": "69c1aa2f136f3c3326d9b6770e0eb54f12832971",
|
"rev": "314d057294e79bc2596972126b84c6f9f144499a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -745,11 +765,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752985182,
|
"lastModified": 1755404379,
|
||||||
"narHash": "sha256-sX8Neff8lp3TCHai6QmgLr5AD8MdsQQX3b52C1DVXR8=",
|
"narHash": "sha256-Q6ZxZDBmD/B988Jjbx7/NchxOKIpOKBBrx9Yb0zMzpQ=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "fafdcb505ba605157ff7a7eeea452bc6d6cbc23c",
|
"rev": "ebbc1c05f786ae39bb5e04e57bf2c10c44a649e3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -764,11 +784,11 @@
|
|||||||
"nixpkgs": "nixpkgs_8"
|
"nixpkgs": "nixpkgs_8"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753150460,
|
"lastModified": 1755396877,
|
||||||
"narHash": "sha256-q2dkvuIfEb5fWBF6TJePJbcP1hqxARAUddfPGVGvD38=",
|
"narHash": "sha256-92gZRDz3zEsodraI0ZxPzZrpjSqc2qjxTW9HOflzKFw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-vscode-extensions",
|
"repo": "nix-vscode-extensions",
|
||||||
"rev": "d13827556415f4050b510e9cfb9873c1ce9aaec4",
|
"rev": "0cf076c0bafbe7cbd33a3b7377ed24827674e8be",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -783,11 +803,11 @@
|
|||||||
"nixpkgs": "nixpkgs_9"
|
"nixpkgs": "nixpkgs_9"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751669768,
|
"lastModified": 1755154580,
|
||||||
"narHash": "sha256-/WSZcdPwng24i8Z3LgrpZTBt94fvDknidtLQjohAnHg=",
|
"narHash": "sha256-ADGapM7FrEgA3tDSYADtfy2EPeAmBzbL3pFvXNhD0D0=",
|
||||||
"owner": "olafkfreund",
|
"owner": "olafkfreund",
|
||||||
"repo": "nix-ai-help",
|
"repo": "nix-ai-help",
|
||||||
"rev": "b79e8cc14623d7ba5f6beea64cec32512997cd5a",
|
"rev": "e71204cb39358ad1dc4c09202c3a17ede541c2d9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -799,14 +819,15 @@
|
|||||||
"nixos-apple-silicon": {
|
"nixos-apple-silicon": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat_4",
|
"flake-compat": "flake-compat_4",
|
||||||
"nixpkgs": "nixpkgs_10"
|
"nixpkgs": "nixpkgs_10",
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753175937,
|
"lastModified": 1755124568,
|
||||||
"narHash": "sha256-DtDt87Gld0RCI2qHb7uUb1eWB16FFC4aNDfxZpic/Nw=",
|
"narHash": "sha256-8fXTYruAwE6OiIz/99P5qknQYag7ZX985pNT+jhIIrU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixos-apple-silicon",
|
"repo": "nixos-apple-silicon",
|
||||||
"rev": "5ddfff8387edf7c92ce36effb06fb2c52624fece",
|
"rev": "2f873fc3ef373e59cd3a7dad4087685fc8ce02ca",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -817,11 +838,11 @@
|
|||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753122741,
|
"lastModified": 1755330281,
|
||||||
"narHash": "sha256-nFxE8lk9JvGelxClCmwuJYftbHqwnc01dRN4DVLUroM=",
|
"narHash": "sha256-aJHFJWP9AuI8jUGzI77LYcSlkA9wJnOIg4ZqftwNGXA=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "cc66fddc6cb04ab479a1bb062f4d4da27c936a22",
|
"rev": "3dac8a872557e0ca8c083cdcfc2f218d18e113b0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -864,11 +885,11 @@
|
|||||||
"nixpkgs": "nixpkgs_11"
|
"nixpkgs": "nixpkgs_11"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753141210,
|
"lastModified": 1755008580,
|
||||||
"narHash": "sha256-yV7+cv0q5XL7uv9gvSG7R0jktgXgB+forv3c7TfY2T8=",
|
"narHash": "sha256-rh4OhOutko9W9COhhxQnqt9J22ZPj7gSZN7wrX0cYEs=",
|
||||||
"owner": "mjallen18",
|
"owner": "mjallen18",
|
||||||
"repo": "nixos-raspberrypi",
|
"repo": "nixos-raspberrypi",
|
||||||
"rev": "e0f487998cb4409408f03e019c71c21011edb84c",
|
"rev": "7b5cf1ef3cf48ac1b43730eb366225f3dd0791cb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -942,11 +963,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-stable_3": {
|
"nixpkgs-stable_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753115646,
|
"lastModified": 1755274400,
|
||||||
"narHash": "sha256-yLuz5cz5Z+sn8DRAfNkrd2Z1cV6DaYO9JMrEz4KZo/c=",
|
"narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "92c2e04a475523e723c67ef872d8037379073681",
|
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -958,11 +979,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_10": {
|
"nixpkgs_10": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748460289,
|
"lastModified": 1754725699,
|
||||||
"narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=",
|
"narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102",
|
"rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -974,11 +995,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_11": {
|
"nixpkgs_11": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752372066,
|
"lastModified": 1754432582,
|
||||||
"narHash": "sha256-d1oy2MNitnWBkIX/WedzG/WB8jCaqGjtIebQuVIlqSg=",
|
"narHash": "sha256-oebayZREKV/4Fgy6drsj4M7URut4kQVics78DxL2imk=",
|
||||||
"owner": "nvmd",
|
"owner": "nvmd",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "3699bec87ab236af2c45aa6d4539140a6342a77a",
|
"rev": "81f9846bc3c9edbd2d4c92783e7bfb4b55db14c4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -990,11 +1011,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_12": {
|
"nixpkgs_12": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752427638,
|
"lastModified": 1755186698,
|
||||||
"narHash": "sha256-ANNyaXW/cnZLszjXB4LXGxaWZ2cRz7Ar06WjYoawgFo=",
|
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "b2e5044b3e79793df83d01c9983c054cae5ea6ff",
|
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1006,11 +1027,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_13": {
|
"nixpkgs_13": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1730768919,
|
"lastModified": 1754340878,
|
||||||
"narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=",
|
"narHash": "sha256-lgmUyVQL9tSnvvIvBp7x1euhkkCho7n3TMzgjdvgPoU=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc",
|
"rev": "cab778239e705082fe97bb4990e0d24c50924c04",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1038,11 +1059,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752950548,
|
"lastModified": 1755186698,
|
||||||
"narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=",
|
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "c87b95e25065c028d31a94f06a62927d18763fdf",
|
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1101,11 +1122,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_6": {
|
"nixpkgs_6": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751984180,
|
"lastModified": 1755027561,
|
||||||
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
|
"narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
|
"rev": "005433b926e16227259a1843015b5b2b7f7d1fc3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1197,11 +1218,11 @@
|
|||||||
"nixpkgs": "nixpkgs_13"
|
"nixpkgs": "nixpkgs_13"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1750779888,
|
"lastModified": 1755446520,
|
||||||
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
|
"narHash": "sha256-I0Ok1OGDwc1jPd8cs2VvAYZsHriUVFGIUqW+7uSsOUM=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "pre-commit-hooks.nix",
|
"repo": "pre-commit-hooks.nix",
|
||||||
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
|
"rev": "4b04db83821b819bbbe32ed0a025b31e7971f22e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1274,6 +1295,7 @@
|
|||||||
"impermanence": "impermanence",
|
"impermanence": "impermanence",
|
||||||
"jovian": "jovian_2",
|
"jovian": "jovian_2",
|
||||||
"lanzaboote": "lanzaboote",
|
"lanzaboote": "lanzaboote",
|
||||||
|
"lsfg-vk": "lsfg-vk",
|
||||||
"nix-homebrew": "nix-homebrew",
|
"nix-homebrew": "nix-homebrew",
|
||||||
"nix-index-database": "nix-index-database",
|
"nix-index-database": "nix-index-database",
|
||||||
"nix-vscode-extensions": "nix-vscode-extensions",
|
"nix-vscode-extensions": "nix-vscode-extensions",
|
||||||
@@ -1287,7 +1309,7 @@
|
|||||||
"snowfall-lib": "snowfall-lib",
|
"snowfall-lib": "snowfall-lib",
|
||||||
"sops-nix": "sops-nix",
|
"sops-nix": "sops-nix",
|
||||||
"steam-rom-manager": "steam-rom-manager",
|
"steam-rom-manager": "steam-rom-manager",
|
||||||
"treefmt-nix": "treefmt-nix"
|
"treefmt-nix": "treefmt-nix_2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rust-overlay": {
|
"rust-overlay": {
|
||||||
@@ -1298,11 +1320,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753066249,
|
"lastModified": 1755311859,
|
||||||
"narHash": "sha256-j2UBrfDRIePGx3532Bbb9UeosNX2F73hfOAHtmACfnM=",
|
"narHash": "sha256-NspGtm0ZpihxlFD628pvh5ZEhL/Q6/Z9XBpe3n6ZtEw=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "0751b65633a1785743ca44fd7c14a633c54c1f91",
|
"rev": "07619500e5937cc4669f24fec355d18a8fec0165",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1380,11 +1402,11 @@
|
|||||||
"nixpkgs": "nixpkgs_14"
|
"nixpkgs": "nixpkgs_14"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752544651,
|
"lastModified": 1754988908,
|
||||||
"narHash": "sha256-GllP7cmQu7zLZTs9z0J2gIL42IZHa9CBEXwBY9szT0U=",
|
"narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "2c8def626f54708a9c38a5861866660395bb3461",
|
"rev": "3223c7a92724b5d804e9988c6b447a0d09017d48",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1494,15 +1516,36 @@
|
|||||||
"treefmt-nix": {
|
"treefmt-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
"nixos-apple-silicon",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753006367,
|
"lastModified": 1754847726,
|
||||||
"narHash": "sha256-tzbhc4XttkyEhswByk5R38l+ztN9UDbnj0cTcP6Hp9A=",
|
"narHash": "sha256-2vX8QjO5lRsDbNYvN9hVHXLU6oMl+V/PsmIiJREG4rE=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "treefmt-nix",
|
"repo": "treefmt-nix",
|
||||||
"rev": "421b56313c65a0815a52b424777f55acf0b56ddf",
|
"rev": "7d81f6fb2e19bf84f1c65135d1060d829fae2408",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1754847726,
|
||||||
|
"narHash": "sha256-2vX8QjO5lRsDbNYvN9hVHXLU6oMl+V/PsmIiJREG4rE=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "7d81f6fb2e19bf84f1c65135d1060d829fae2408",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
42
flake.nix
42
flake.nix
@@ -6,8 +6,8 @@
|
|||||||
# The name "snowfall-lib" is required due to how Snowfall Lib processes your
|
# The name "snowfall-lib" is required due to how Snowfall Lib processes your
|
||||||
# flake's inputs.
|
# flake's inputs.
|
||||||
snowfall-lib = {
|
snowfall-lib = {
|
||||||
url = "github:snowfallorg/lib";
|
url = "github:snowfallorg/lib";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
impermanence.url = "github:nix-community/impermanence";
|
impermanence.url = "github:nix-community/impermanence";
|
||||||
|
|
||||||
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2";
|
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2";
|
||||||
|
|
||||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
@@ -43,8 +43,8 @@
|
|||||||
|
|
||||||
disko = {
|
disko = {
|
||||||
# the fork is needed for partition attributes support
|
# the fork is needed for partition attributes support
|
||||||
url = "github:nvmd/disko/gpt-attrs";
|
# url = "github:nvmd/disko/gpt-attrs";
|
||||||
# url = "github:nix-community/disko";
|
url = "github:nix-community/disko";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -81,12 +81,17 @@
|
|||||||
nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lsfg-vk = {
|
||||||
|
url = "github:mjallen18/lsfg-vk-flake/main";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# We will handle this in the next section.
|
# We will handle this in the next section.
|
||||||
outputs = inputs:
|
outputs =
|
||||||
let
|
inputs:
|
||||||
snowfall = inputs.snowfall-lib.mkFlake {
|
inputs.snowfall-lib.mkFlake {
|
||||||
# You must provide our flake inputs to Snowfall Lib.
|
# You must provide our flake inputs to Snowfall Lib.
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
|
|
||||||
@@ -129,6 +134,7 @@
|
|||||||
nixos-hardware.nixosModules.common-gpu-amd
|
nixos-hardware.nixosModules.common-gpu-amd
|
||||||
nixos-hardware.nixosModules.common-hidpi
|
nixos-hardware.nixosModules.common-hidpi
|
||||||
nixos-hardware.nixosModules.common-pc
|
nixos-hardware.nixosModules.common-pc
|
||||||
|
lsfg-vk.nixosModules.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -150,7 +156,7 @@
|
|||||||
# ######################################################
|
# ######################################################
|
||||||
# Steamdeck #
|
# Steamdeck #
|
||||||
# ######################################################
|
# ######################################################
|
||||||
deck = {
|
steamdeck = {
|
||||||
modules = with inputs; [
|
modules = with inputs; [
|
||||||
disko.nixosModules.disko
|
disko.nixosModules.disko
|
||||||
jovian.nixosModules.jovian
|
jovian.nixosModules.jovian
|
||||||
@@ -160,6 +166,7 @@
|
|||||||
nixos-hardware.nixosModules.common-gpu-amd
|
nixos-hardware.nixosModules.common-gpu-amd
|
||||||
nixos-hardware.nixosModules.common-hidpi
|
nixos-hardware.nixosModules.common-hidpi
|
||||||
nixos-hardware.nixosModules.common-pc
|
nixos-hardware.nixosModules.common-pc
|
||||||
|
lsfg-vk.nixosModules.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -209,6 +216,7 @@
|
|||||||
macbook-pro-nixos = {
|
macbook-pro-nixos = {
|
||||||
modules = with inputs; [
|
modules = with inputs; [
|
||||||
nixos-apple-silicon.nixosModules.default
|
nixos-apple-silicon.nixosModules.default
|
||||||
|
lsfg-vk.nixosModules.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -231,7 +239,7 @@
|
|||||||
# sops-nix.homeManagerModules.sops
|
# sops-nix.homeManagerModules.sops
|
||||||
# ];
|
# ];
|
||||||
# };
|
# };
|
||||||
"deck@deck" = {
|
"deck@steamdeck" = {
|
||||||
modules = with inputs; [
|
modules = with inputs; [
|
||||||
steam-rom-manager.homeManagerModules.default
|
steam-rom-manager.homeManagerModules.default
|
||||||
];
|
];
|
||||||
@@ -248,11 +256,11 @@
|
|||||||
|
|
||||||
# Add flake metadata that can be processed by tools like Snowfall Frost.
|
# Add flake metadata that can be processed by tools like Snowfall Frost.
|
||||||
meta = {
|
meta = {
|
||||||
# A slug to use in documentation when displaying things like file paths.
|
# A slug to use in documentation when displaying things like file paths.
|
||||||
name = "mjallen";
|
name = "mjallen";
|
||||||
|
|
||||||
# A title to show for your flake, typically the name.
|
# A title to show for your flake, typically the name.
|
||||||
title = "mjallen Flake";
|
title = "mjallen Flake";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -260,8 +268,4 @@
|
|||||||
formatter = inputs.treefmt-nix.lib.mkWrapper channels.nixpkgs ./treefmt.nix;
|
formatter = inputs.treefmt-nix.lib.mkWrapper channels.nixpkgs ./treefmt.nix;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
}
|
||||||
snowfall // {
|
|
||||||
nixosConfigurations = snowfall.nixosConfigurations;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ lib, pkgs, home, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
home,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
update-switch = "darwin-rebuild switch --flake ~/nix-config";
|
update-switch = "darwin-rebuild switch --flake ~/nix-config";
|
||||||
@@ -17,12 +22,6 @@ let
|
|||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# imports = [
|
|
||||||
# ../../modules/home/defaults.nix
|
|
||||||
# ../../modules/home/git.nix
|
|
||||||
# ../../modules/home/shell.nix
|
|
||||||
# ../../modules/home/vscode.nix
|
|
||||||
# ];
|
|
||||||
# Home Manager needs a bit of information about you and the
|
# Home Manager needs a bit of information about you and the
|
||||||
# paths it should manage.
|
# paths it should manage.
|
||||||
home = {
|
home = {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ in
|
|||||||
home.stateVersion = "23.11";
|
home.stateVersion = "23.11";
|
||||||
|
|
||||||
mjallen = {
|
mjallen = {
|
||||||
desktop.hyprland = {
|
desktop.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
primaryDisplay = "eDP-1";
|
primaryDisplay = "eDP-1";
|
||||||
|
|
||||||
@@ -41,7 +41,6 @@ in
|
|||||||
"name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)"
|
"name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
windowRule = [
|
windowRule = [
|
||||||
"size 2160 3356, tag:horizonrdp"
|
"size 2160 3356, tag:horizonrdp"
|
||||||
];
|
];
|
||||||
@@ -76,7 +75,6 @@ in
|
|||||||
layer = "bottom";
|
layer = "bottom";
|
||||||
|
|
||||||
modules-right = [
|
modules-right = [
|
||||||
"tray"
|
|
||||||
"temperature"
|
"temperature"
|
||||||
"temperature#gpu"
|
"temperature#gpu"
|
||||||
"keyboard-state#capslock"
|
"keyboard-state#capslock"
|
||||||
@@ -95,7 +93,7 @@ in
|
|||||||
tooltip = false;
|
tooltip = false;
|
||||||
exec = "waybar-hass --get_light light.living_room_lights";
|
exec = "waybar-hass --get_light light.living_room_lights";
|
||||||
interval = "once";
|
interval = "once";
|
||||||
format = "{text}";#"";
|
format = "{text}"; # "";
|
||||||
on-click = "waybar-hass --toggle_light light.living_room_lights";
|
on-click = "waybar-hass --toggle_light light.living_room_lights";
|
||||||
return-type = "json";
|
return-type = "json";
|
||||||
};
|
};
|
||||||
@@ -113,6 +111,8 @@ in
|
|||||||
background: ${theme.polarNight.nord3};
|
background: ${theme.polarNight.nord3};
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
windowOffset = 75;
|
||||||
};
|
};
|
||||||
wlogout.enable = true;
|
wlogout.enable = true;
|
||||||
wofi.enable = true;
|
wofi.enable = true;
|
||||||
|
|||||||
@@ -1,65 +1,66 @@
|
|||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
let
|
|
||||||
shellAliases = {
|
|
||||||
ll = "ls -alh";
|
|
||||||
update-boot = "sudo nixos-rebuild boot --max-jobs 10 --build-host admin@10.0.1.3";
|
|
||||||
update-switch = "sudo nixos-rebuild switch --max-jobs 10 --build-host admin@10.0.1.3";
|
|
||||||
update-flake = "nix flake update pi4-nixpkgs pi4-home-manager pi4-impermanence pi4-sops-nix pi4-nixos-hardware pi4-nixos-raspberrypi pi4-disko --flake /etc/nixos";
|
|
||||||
update-nas = "nixos-rebuild switch --use-remote-sudo --target-host admin@10.0.1.3 --build-host admin@10.0.1.3 --flake ~/nix-config#jallen-nas";
|
|
||||||
nas-ssh = "kitten ssh admin@10.0.1.3";
|
|
||||||
ducks = "du -cksh * | sort -hr | head -n 15";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [
|
|
||||||
../../../modules/home/home
|
|
||||||
../../../modules/home/programs/git
|
|
||||||
../../../modules/home/programs/zsh
|
|
||||||
];
|
|
||||||
|
|
||||||
home.username = "matt";
|
home.username = "matt";
|
||||||
|
|
||||||
sops = {
|
mjallen = {
|
||||||
age.keyFile = "/home/matt/.config/sops/age/keys.txt";
|
shell-aliases = {
|
||||||
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
|
enable = true;
|
||||||
validateSopsFiles = false;
|
flakeInputs = [
|
||||||
secrets = {
|
"pi4-nixpkgs"
|
||||||
"ssh-keys-public/pi4" = {
|
"pi4-home-manager"
|
||||||
path = "/home/matt/.ssh/id_ed25519.pub";
|
"pi4-impermanence"
|
||||||
mode = "0644";
|
"pi4-sops-nix"
|
||||||
};
|
"pi4-nixos-hardware"
|
||||||
"ssh-keys-private/pi4" = {
|
"pi4-nixos-raspberrypi"
|
||||||
path = "/home/matt/.ssh/id_ed25519";
|
"pi4-disko"
|
||||||
mode = "0600";
|
];
|
||||||
};
|
};
|
||||||
# "ssh-keys-public/desktop-nixos" = {
|
};
|
||||||
# path = "/home/matt/.ssh/authorized_keys";
|
|
||||||
# mode = "0600";
|
|
||||||
# };
|
|
||||||
|
|
||||||
# "ssh-keys-public/desktop-nixos-root" = {
|
sops = {
|
||||||
# path = "/home/matt/.ssh/authorized_keys2";
|
age.keyFile = "/home/matt/.config/sops/age/keys.txt";
|
||||||
# mode = "0600";
|
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
|
||||||
# };
|
validateSopsFiles = false;
|
||||||
|
secrets = {
|
||||||
|
"ssh-keys-public/pi4" = {
|
||||||
|
path = "/home/matt/.ssh/id_ed25519.pub";
|
||||||
|
mode = "0644";
|
||||||
|
};
|
||||||
|
"ssh-keys-private/pi4" = {
|
||||||
|
path = "/home/matt/.ssh/id_ed25519";
|
||||||
|
mode = "0600";
|
||||||
|
};
|
||||||
|
# "ssh-keys-public/desktop-nixos" = {
|
||||||
|
# path = "/home/matt/.ssh/authorized_keys";
|
||||||
|
# mode = "0600";
|
||||||
|
# };
|
||||||
|
|
||||||
# "ssh-keys-public/desktop-windows" = {
|
# "ssh-keys-public/desktop-nixos-root" = {
|
||||||
# path = "/home/matt/.ssh/authorized_keys3";
|
# path = "/home/matt/.ssh/authorized_keys2";
|
||||||
# mode = "0600";
|
# mode = "0600";
|
||||||
# };
|
# };
|
||||||
|
|
||||||
# "ssh-keys-public/macbook-macos" = {
|
# "ssh-keys-public/desktop-windows" = {
|
||||||
# path = "/home/matt/.ssh/authorized_keys4";
|
# path = "/home/matt/.ssh/authorized_keys3";
|
||||||
# mode = "0600";
|
# mode = "0600";
|
||||||
# };
|
# };
|
||||||
};
|
|
||||||
};
|
# "ssh-keys-public/macbook-macos" = {
|
||||||
|
# path = "/home/matt/.ssh/authorized_keys4";
|
||||||
|
# mode = "0600";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
mangohud.enable = lib.mkForce true;
|
mangohud.enable = lib.mkForce true;
|
||||||
zsh.shellAliases = shellAliases;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
nextcloud-client.enable = lib.mkForce true;
|
nextcloud-client.enable = lib.mkForce false;
|
||||||
|
kdeconnect = {
|
||||||
|
enable = false;
|
||||||
|
indicator = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
{ pkgs, lib, config, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
update-boot = "sudo nixos-rebuild boot --max-jobs 10 --build-host admin@10.0.1.3";
|
update-boot = "sudo nixos-rebuild boot --max-jobs 10 --build-host admin@10.0.1.3";
|
||||||
@@ -54,4 +57,12 @@ in
|
|||||||
programs = {
|
programs = {
|
||||||
zsh.shellAliases = shellAliases;
|
zsh.shellAliases = shellAliases;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
nextcloud-client.enable = false;
|
||||||
|
kdeconnect = {
|
||||||
|
enable = false;
|
||||||
|
indicator = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,12 @@ in
|
|||||||
programs = {
|
programs = {
|
||||||
zsh.shellAliases = shellAliases;
|
zsh.shellAliases = shellAliases;
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
services = {
|
||||||
|
nextcloud-client.enable = lib.mkForce false;
|
||||||
|
kdeconnect = {
|
||||||
|
enable = false;
|
||||||
|
indicator = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,16 +1,27 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
let
|
|
||||||
shellAliases = {
|
|
||||||
update-boot = "sudo nixos-rebuild boot --max-jobs 10";
|
|
||||||
update-switch = "sudo nixos-rebuild switch --max-jobs 10";
|
|
||||||
update-flake = "nix flake update nas-nixpkgs nas-authentik-nix nas-cosmic nas-crowdsec nas-home-manager nas-impermanence nas-lanzaboote nas-nixos-hardware nas-sops-nix --flake /etc/nixos";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
home.username = "admin";
|
home.username = "admin";
|
||||||
|
|
||||||
# mjallen.home.enable = true;
|
# mjallen.home.enable = true;
|
||||||
|
|
||||||
|
mjallen = {
|
||||||
|
shell-aliases = {
|
||||||
|
enable = true;
|
||||||
|
buildHost = ""; # NAS builds locally
|
||||||
|
flakeInputs = [
|
||||||
|
"nas-nixpkgs"
|
||||||
|
"nas-authentik-nix"
|
||||||
|
"nas-cosmic"
|
||||||
|
"nas-crowdsec"
|
||||||
|
"nas-home-manager"
|
||||||
|
"nas-impermanence"
|
||||||
|
"nas-lanzaboote"
|
||||||
|
"nas-nixos-hardware"
|
||||||
|
"nas-sops-nix"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
sops = {
|
sops = {
|
||||||
age.keyFile = "/home/admin/.config/sops/age/keys.txt";
|
age.keyFile = "/home/admin/.config/sops/age/keys.txt";
|
||||||
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
|
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
|
||||||
@@ -60,8 +71,6 @@ in
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
zsh.shellAliases = shellAliases;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# services.nixai = {
|
# services.nixai = {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ pkgs,... }:
|
{ ... }:
|
||||||
let
|
let
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
update-boot = "sudo nixos-rebuild boot --max-jobs 10";
|
update-boot = "sudo nixos-rebuild boot --max-jobs 10";
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ in
|
|||||||
{
|
{
|
||||||
home.username = "deck";
|
home.username = "deck";
|
||||||
|
|
||||||
|
mjallen.desktop.gnome.enable = true;
|
||||||
|
|
||||||
sops = {
|
sops = {
|
||||||
age.keyFile = "/home/deck/.config/sops/age/keys.txt";
|
age.keyFile = "/home/deck/.config/sops/age/keys.txt";
|
||||||
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
|
defaultSopsFile = "/etc/nixos/secrets/secrets.yaml";
|
||||||
@@ -30,13 +32,13 @@ in
|
|||||||
steam-rom-manager = {
|
steam-rom-manager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
steamUsername = "mjallen18";
|
steamUsername = "mjallen18";
|
||||||
|
|
||||||
# Optional: override default paths if needed
|
# Optional: override default paths if needed
|
||||||
environmentVariables = {
|
environmentVariables = {
|
||||||
romsDirectory = "/home/deck/Emulation/roms";
|
romsDirectory = "/home/deck/Emulation/roms";
|
||||||
steamDirectory = "/home/deck/.local/share/Steam";
|
steamDirectory = "/home/deck/.local/share/Steam";
|
||||||
};
|
};
|
||||||
|
|
||||||
emulators = {
|
emulators = {
|
||||||
ryujinx.enable = true;
|
ryujinx.enable = true;
|
||||||
|
|
||||||
@@ -44,13 +46,21 @@ in
|
|||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.dolphin-emu;
|
package = pkgs.dolphin-emu;
|
||||||
romFolder = "gc";
|
romFolder = "gc";
|
||||||
fileTypes = [ ".iso" ".ISO" ".gcm" ".GCM" ".ciso" ".CISO" "rvz" ];
|
fileTypes = [
|
||||||
|
".iso"
|
||||||
|
".ISO"
|
||||||
|
".gcm"
|
||||||
|
".GCM"
|
||||||
|
".ciso"
|
||||||
|
".CISO"
|
||||||
|
"rvz"
|
||||||
|
];
|
||||||
extraArgs = "-b -e \"\${filePath}\"";
|
extraArgs = "-b -e \"\${filePath}\"";
|
||||||
};
|
};
|
||||||
|
|
||||||
pcsx2.enable = true;
|
pcsx2.enable = true;
|
||||||
mgba.enable = true;
|
mgba.enable = true;
|
||||||
|
|
||||||
"Non-SRM Shortcuts" = {
|
"Non-SRM Shortcuts" = {
|
||||||
enable = true;
|
enable = true;
|
||||||
parserType = "Non-SRM Shortcuts";
|
parserType = "Non-SRM Shortcuts";
|
||||||
@@ -68,6 +78,6 @@ in
|
|||||||
mgba
|
mgba
|
||||||
prismlauncher
|
prismlauncher
|
||||||
ryujinx-greemdev
|
ryujinx-greemdev
|
||||||
vmware-horizon-client
|
omnissa-horizon-client
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,26 @@
|
|||||||
{ pkgs, namespace, ... }:
|
{ pkgs, ... }:
|
||||||
let
|
|
||||||
shellAliases = {
|
|
||||||
update-boot = "sudo nixos-rebuild boot --max-jobs 10 --build-host admin@10.0.1.3";
|
|
||||||
update-switch = "sudo nixos-rebuild switch --max-jobs 10 --build-host admin@10.0.1.3";
|
|
||||||
update-flake = "nix flake update desktop-nixpkgs desktop-chaotic desktop-home-manager desktop-impermanence desktop-lanzaboote desktop-nixos-hardware desktop-sops-nix desktop-steam-rom-manager --flake /etc/nixos";
|
|
||||||
update-nas = "nixos-rebuild switch --use-remote-sudo --target-host admin@10.0.1.3 --build-host admin@10.0.1.3 --flake ~/nix-config#jallen-nas";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
home.username = "matt";
|
home.username = "matt";
|
||||||
|
|
||||||
|
mjallen = {
|
||||||
|
sops = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
shell-aliases = {
|
||||||
|
enable = true;
|
||||||
|
flakeInputs = [
|
||||||
|
"desktop-nixpkgs"
|
||||||
|
"desktop-chaotic"
|
||||||
|
"desktop-home-manager"
|
||||||
|
"desktop-impermanence"
|
||||||
|
"desktop-lanzaboote"
|
||||||
|
"desktop-nixos-hardware"
|
||||||
|
"desktop-sops-nix"
|
||||||
|
"desktop-steam-rom-manager"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
remmina = {
|
remmina = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -19,8 +30,6 @@ in
|
|||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
password-store.enable = true;
|
password-store.enable = true;
|
||||||
|
|
||||||
zsh.shellAliases = shellAliases;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
@@ -29,7 +38,7 @@ in
|
|||||||
discord
|
discord
|
||||||
distrobox
|
distrobox
|
||||||
heroic
|
heroic
|
||||||
stable.vmware-horizon-client
|
omnissa-horizon-client
|
||||||
jq
|
jq
|
||||||
lutris
|
lutris
|
||||||
lzip
|
lzip
|
||||||
@@ -40,6 +49,7 @@ in
|
|||||||
protontricks
|
protontricks
|
||||||
protonvpn-gui
|
protonvpn-gui
|
||||||
python3
|
python3
|
||||||
|
runelite
|
||||||
smile
|
smile
|
||||||
unigine-heaven
|
unigine-heaven
|
||||||
via
|
via
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ in
|
|||||||
programs = {
|
programs = {
|
||||||
zsh.shellAliases = shellAliases;
|
zsh.shellAliases = shellAliases;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.desktop.gnome;
|
cfg = config.mjallen.desktop.gnome;
|
||||||
in
|
in
|
||||||
@@ -66,4 +71,4 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.mjallen.desktop.gnome = {
|
options.mjallen.desktop.gnome = {
|
||||||
enable = mkEnableOption "enable gnome settings";
|
enable = mkEnableOption "enable gnome settings";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.desktop.hyprland;
|
cfg = config.mjallen.desktop.hyprland;
|
||||||
@@ -6,7 +11,7 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./options.nix
|
./options.nix
|
||||||
./packages.nix
|
./packages.nix
|
||||||
./theme.nix
|
./theme.nix
|
||||||
./variables.nix
|
./variables.nix
|
||||||
@@ -21,7 +26,7 @@ in
|
|||||||
programs = {
|
programs = {
|
||||||
vscode.profiles.default.userSettings."window"."titleBarStyle" = "custom";
|
vscode.profiles.default.userSettings."window"."titleBarStyle" = "custom";
|
||||||
};
|
};
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
xwayland.enable = true;
|
xwayland.enable = true;
|
||||||
@@ -151,7 +156,7 @@ in
|
|||||||
render = {
|
render = {
|
||||||
cm_fs_passthrough = 1;
|
cm_fs_passthrough = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
misc = {
|
misc = {
|
||||||
vrr = 1;
|
vrr = 1;
|
||||||
};
|
};
|
||||||
@@ -231,7 +236,7 @@ in
|
|||||||
|
|
||||||
"float, class:(.*nm-connection-editor.*)"
|
"float, class:(.*nm-connection-editor.*)"
|
||||||
"move onscreen cursor 0% 0%, class:(.*nm-connection-editor.*)"
|
"move onscreen cursor 0% 0%, class:(.*nm-connection-editor.*)"
|
||||||
|
|
||||||
"float, title:(Media viewer)"
|
"float, title:(Media viewer)"
|
||||||
"float, class:(it.mijorus.smile),title:(Smile)"
|
"float, class:(it.mijorus.smile),title:(Smile)"
|
||||||
"float, class:(.blueman-manager-wrapped)$,title:(Bluetooth Devices)"
|
"float, class:(.blueman-manager-wrapped)$,title:(Bluetooth Devices)"
|
||||||
@@ -265,7 +270,7 @@ in
|
|||||||
# this tag will set the below options to the vdi window
|
# this tag will set the below options to the vdi window
|
||||||
# this will have it auto open as a 2160x7680 window
|
# this will have it auto open as a 2160x7680 window
|
||||||
# and makes multi-monitor work
|
# and makes multi-monitor work
|
||||||
"tag +horizonrdp, class:(.*[Vv][Mm]ware-view),title:(USPS Next VDI)"
|
"tag +horizonrdp, class:(.*[Hh]orizon-client),title:(USPS Next VDI)"
|
||||||
|
|
||||||
"noanim, tag:horizonrdp"
|
"noanim, tag:horizonrdp"
|
||||||
"noblur, tag:horizonrdp"
|
"noblur, tag:horizonrdp"
|
||||||
@@ -282,12 +287,13 @@ in
|
|||||||
# "size 2160 7680, tag:horizonrdp"
|
# "size 2160 7680, tag:horizonrdp"
|
||||||
# "move onscreen 0 0, tag:horizonrdp"
|
# "move onscreen 0 0, tag:horizonrdp"
|
||||||
# float the vmware window cause its annoying to use in fullscreen
|
# float the vmware window cause its annoying to use in fullscreen
|
||||||
"float, class:(.*[Vv][Mm]ware-view),title:([Vv][Mm]ware [Hh]orizon [Cc]lient)"
|
"float, class:(.*[Hh]orizon-client),title:([Oo]mnissa [Hh]orizon [Cc]lient)"
|
||||||
|
|
||||||
"tag +waydroid, class:([Ww]aydroid.*)"
|
"tag +waydroid, class:([Ww]aydroid.*)"
|
||||||
"float, tag:waydroid"
|
"float, tag:waydroid"
|
||||||
"pin, tag:waydroid"
|
"pin, tag:waydroid"
|
||||||
] ++ cfg.windowRule;
|
]
|
||||||
|
++ cfg.windowRule;
|
||||||
|
|
||||||
plugin = {
|
plugin = {
|
||||||
touch_gestures = {
|
touch_gestures = {
|
||||||
@@ -326,7 +332,7 @@ in
|
|||||||
# NOT recommended as it crashed a few times, once it's stabilized I'll make it the default
|
# NOT recommended as it crashed a few times, once it's stabilized I'll make it the default
|
||||||
send_cancel = "0";
|
send_cancel = "0";
|
||||||
};
|
};
|
||||||
|
|
||||||
hyprgrass-bind = [
|
hyprgrass-bind = [
|
||||||
# swipe left from right edge
|
# swipe left from right edge
|
||||||
", edge:r:l, workspace, +1"
|
", edge:r:l, workspace, +1"
|
||||||
@@ -345,7 +351,7 @@ in
|
|||||||
", swipe:3:ld, exec, foot"
|
", swipe:3:ld, exec, foot"
|
||||||
|
|
||||||
# tap with 3 fingers
|
# tap with 3 fingers
|
||||||
", tap:3, exec, foot"
|
", tap:3, exec, foot"
|
||||||
|
|
||||||
# longpress can trigger mouse binds:
|
# longpress can trigger mouse binds:
|
||||||
", longpress:2, movewindow"
|
", longpress:2, movewindow"
|
||||||
@@ -397,7 +403,8 @@ in
|
|||||||
exec-once = xhost +SI:localuser:root
|
exec-once = xhost +SI:localuser:root
|
||||||
exec-once = nwg-look -a
|
exec-once = nwg-look -a
|
||||||
exec-once = nwg-dock-hyprland -d
|
exec-once = nwg-dock-hyprland -d
|
||||||
'' + cfg.extraConfig or '''';
|
''
|
||||||
|
+ cfg.extraConfig or '''';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,31 +45,31 @@ with lib;
|
|||||||
|
|
||||||
wallpaper = mkOption {
|
wallpaper = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [ ];
|
||||||
description = "list of hyprland wallpaper configs";
|
description = "list of hyprland wallpaper configs";
|
||||||
};
|
};
|
||||||
|
|
||||||
monitor = mkOption {
|
monitor = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [ ];
|
||||||
description = "list of hyprland monitor configs";
|
description = "list of hyprland monitor configs";
|
||||||
};
|
};
|
||||||
|
|
||||||
monitorv2 = mkOption {
|
monitorv2 = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [ ];
|
||||||
description = "list of hyprland monitorv2 configs";
|
description = "list of hyprland monitorv2 configs";
|
||||||
};
|
};
|
||||||
|
|
||||||
workspace = mkOption {
|
workspace = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [ ];
|
||||||
description = "list of hyprland workspace definitions";
|
description = "list of hyprland workspace definitions";
|
||||||
};
|
};
|
||||||
|
|
||||||
windowRule = mkOption {
|
windowRule = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [ ];
|
||||||
description = "list of hyprland window rules";
|
description = "list of hyprland window rules";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -79,12 +79,12 @@ with lib;
|
|||||||
description = "any extra options";
|
description = "any extra options";
|
||||||
};
|
};
|
||||||
|
|
||||||
iconThemeName = mkOption {
|
iconThemeName = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "Colloid-Dark";
|
default = "Colloid-Dark";
|
||||||
};
|
};
|
||||||
|
|
||||||
gtkThemeName = mkOption {
|
gtkThemeName = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "Colloid-Dark";
|
default = "Colloid-Dark";
|
||||||
};
|
};
|
||||||
@@ -92,14 +92,38 @@ with lib;
|
|||||||
defaultApps = mkOption {
|
defaultApps = mkOption {
|
||||||
type = types.submodule {
|
type = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
browser = mkOption { type = types.package; default = pkgs.firefox; };
|
browser = mkOption {
|
||||||
editor = mkOption { type = types.package; default = pkgs.micro; };
|
type = types.package;
|
||||||
fileExplorer = mkOption { type = types.package; default = pkgs.nemo; };
|
default = pkgs.firefox;
|
||||||
visual = mkOption { type = types.package; default = pkgs.vscodium; };
|
};
|
||||||
terminal = mkOption { type = types.package; default = pkgs.kitty; };
|
editor = mkOption {
|
||||||
office = mkOption { type = types.package; default = pkgs.onlyoffice-bin_latest; };
|
type = types.package;
|
||||||
video = mkOption { type = types.package; default = pkgs.vlc; };
|
default = pkgs.micro;
|
||||||
imageViewer = mkOption { type = types.package; default = pkgs.nomacs; };
|
};
|
||||||
|
fileExplorer = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.nemo;
|
||||||
|
};
|
||||||
|
visual = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.vscodium;
|
||||||
|
};
|
||||||
|
terminal = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.kitty;
|
||||||
|
};
|
||||||
|
office = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.onlyoffice-bin_latest;
|
||||||
|
};
|
||||||
|
video = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.vlc;
|
||||||
|
};
|
||||||
|
imageViewer = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.nomacs;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
description = "Default applications used across the system.";
|
description = "Default applications used across the system.";
|
||||||
@@ -108,16 +132,16 @@ with lib;
|
|||||||
hyprIdle = {
|
hyprIdle = {
|
||||||
lockScreenTimer = mkOption {
|
lockScreenTimer = mkOption {
|
||||||
type = with types; int;
|
type = with types; int;
|
||||||
default = 5;
|
default = 300;
|
||||||
};
|
};
|
||||||
screenOffTimer = mkOption {
|
screenOffTimer = mkOption {
|
||||||
type = with types; int;
|
type = with types; int;
|
||||||
default = 15;
|
default = 900;
|
||||||
};
|
};
|
||||||
suspendTimer = mkOption {
|
suspendTimer = mkOption {
|
||||||
type = with types; int;
|
type = with types; int;
|
||||||
default = 30;
|
default = 1800;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.desktop.hyprland;
|
cfg = config.mjallen.desktop.hyprland;
|
||||||
@@ -62,6 +67,8 @@ in
|
|||||||
xorg.xhost
|
xorg.xhost
|
||||||
xsettingsd
|
xsettingsd
|
||||||
xwayland
|
xwayland
|
||||||
|
|
||||||
|
pkgs.mjallen.pipewire-python
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.desktop.hyprland;
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
in
|
in
|
||||||
@@ -7,7 +12,7 @@ in
|
|||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
services.hypridle = {
|
services.hypridle = {
|
||||||
enable = false;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
general = {
|
general = {
|
||||||
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.desktop.hyprland;
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
in
|
in
|
||||||
@@ -7,41 +12,41 @@ in
|
|||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
programs.hyprlock = {
|
programs.hyprlock = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
background = [
|
background = [
|
||||||
{
|
{
|
||||||
monitor = "";
|
monitor = "";
|
||||||
path = cfg.wallpaper; # supports png, jpg, webp (no animations, though)
|
path = cfg.wallpaper; # supports png, jpg, webp (no animations, though)
|
||||||
color = "rgba(25, 20, 20, 1.0)";
|
color = "rgba(25, 20, 20, 1.0)";
|
||||||
|
|
||||||
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
||||||
blur_passes = "3"; # 0 disables blurring
|
blur_passes = "3"; # 0 disables blurring
|
||||||
blur_size = "7";
|
blur_size = "7";
|
||||||
noise = "0.0117";
|
noise = "0.0117";
|
||||||
contrast = "0.8916";
|
contrast = "0.8916";
|
||||||
brightness = "0.8172";
|
brightness = "0.8172";
|
||||||
vibrancy = "0.1696";
|
vibrancy = "0.1696";
|
||||||
vibrancy_darkness = "0.0";
|
vibrancy_darkness = "0.0";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
input-field = [
|
input-field = [
|
||||||
{
|
{
|
||||||
size = "200, 50";
|
size = "200, 50";
|
||||||
position = "0, -80";
|
position = "0, -80";
|
||||||
monitor = cfg.primaryDisplay;
|
monitor = cfg.primaryDisplay;
|
||||||
dots_center = true;
|
dots_center = true;
|
||||||
fade_on_empty = true;
|
fade_on_empty = true;
|
||||||
font_color = "rgb(202, 211, 245)";
|
font_color = "rgb(202, 211, 245)";
|
||||||
inner_color = "rgb(91, 96, 120)";
|
inner_color = "rgb(91, 96, 120)";
|
||||||
outer_color = "rgb(24, 25, 38)";
|
outer_color = "rgb(24, 25, 38)";
|
||||||
bothlock_color = -1;
|
bothlock_color = -1;
|
||||||
outline_thickness = 5;
|
outline_thickness = 5;
|
||||||
placeholder_text = ''<span foreground="##cad3f5">Password...</span>'';
|
placeholder_text = ''<span foreground="##cad3f5">Password...</span>'';
|
||||||
shadow_passes = 2;
|
shadow_passes = 2;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.desktop.hyprland;
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
in
|
in
|
||||||
@@ -15,4 +20,4 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.desktop.hyprland;
|
cfg = config.mjallen.desktop.hyprland;
|
||||||
|
|
||||||
themeSize = "compact"; # [ "standard" "compact" ]
|
themeSize = "compact"; # [ "standard" "compact" ]
|
||||||
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
||||||
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
|
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
|
||||||
themeColor = "dark"; # [ "standard" "light" "dark" ]
|
themeColor = "dark"; # [ "standard" "light" "dark" ]
|
||||||
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
||||||
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]
|
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]
|
||||||
|
|
||||||
@@ -95,4 +100,4 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,34 +6,34 @@ in
|
|||||||
{
|
{
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
BROWSER = "${cfg.defaultApps.browser.pname}";
|
BROWSER = "${cfg.defaultApps.browser.pname}";
|
||||||
CLUTTER_BACKEND = "wayland";
|
CLUTTER_BACKEND = "wayland";
|
||||||
EDITOR = "${cfg.defaultApps.editor.pname}";
|
EDITOR = "${cfg.defaultApps.editor.pname}";
|
||||||
VISUAL = "${cfg.defaultApps.visual.pname}";
|
VISUAL = "${cfg.defaultApps.visual.pname}";
|
||||||
ICON_THEME = cfg.iconThemeName;
|
ICON_THEME = cfg.iconThemeName;
|
||||||
GTK_CSD = "0";
|
GTK_CSD = "0";
|
||||||
GTK_THEME = cfg.gtkThemeName;
|
GTK_THEME = cfg.gtkThemeName;
|
||||||
GTK_USE_PORTAL = "1";
|
GTK_USE_PORTAL = "1";
|
||||||
HYPRCURSOR_THEME = config.home.pointerCursor.name;
|
HYPRCURSOR_THEME = config.home.pointerCursor.name;
|
||||||
HYPRCURSOR_SIZE = config.home.pointerCursor.size;
|
HYPRCURSOR_SIZE = config.home.pointerCursor.size;
|
||||||
MOZ_ENABLE_WAYLAND = "1";
|
MOZ_ENABLE_WAYLAND = "1";
|
||||||
NIXOS_OZONE_WL = "1";
|
NIXOS_OZONE_WL = "1";
|
||||||
NIXOS_XDG_OPEN_USE_PORTAL = "1";
|
NIXOS_XDG_OPEN_USE_PORTAL = "1";
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
|
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
|
||||||
QT_QPA_PLATFORM = "wayland-egl";
|
QT_QPA_PLATFORM = "wayland-egl";
|
||||||
QT_QPA_PLATFORMTHEME = "gtk3";
|
QT_QPA_PLATFORMTHEME = "gtk3";
|
||||||
QT_SCALE_FACTOR = "1";
|
QT_SCALE_FACTOR = "1";
|
||||||
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
||||||
SDL_VIDEODRIVER = "wayland";
|
SDL_VIDEODRIVER = "wayland";
|
||||||
TERMINAL = "${cfg.defaultApps.terminal.pname}";
|
TERMINAL = "${cfg.defaultApps.terminal.pname}";
|
||||||
XCURSOR_THEME = config.home.pointerCursor.name;
|
XCURSOR_THEME = config.home.pointerCursor.name;
|
||||||
XCURSOR_SIZE = config.home.pointerCursor.size;
|
XCURSOR_SIZE = config.home.pointerCursor.size;
|
||||||
XDG_CACHE_HOME = "\${HOME}/.cache";
|
XDG_CACHE_HOME = "\${HOME}/.cache";
|
||||||
XDG_CONFIG_HOME = "\${HOME}/.config";
|
XDG_CONFIG_HOME = "\${HOME}/.config";
|
||||||
XDG_CURRENT_DESKTOP = "Hyprland";
|
XDG_CURRENT_DESKTOP = "Hyprland";
|
||||||
XDG_DATA_HOME = "\${HOME}/.local/share";
|
XDG_DATA_HOME = "\${HOME}/.local/share";
|
||||||
XDG_SESSION_DESKTOP = "Hyprland";
|
XDG_SESSION_DESKTOP = "Hyprland";
|
||||||
XDG_SESSION_TYPE = "wayland";
|
XDG_SESSION_TYPE = "wayland";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,4 +59,4 @@
|
|||||||
border-radius: 1rem 0rem 0rem 1rem;
|
border-radius: 1rem 0rem 0rem 1rem;
|
||||||
margin-left: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
home = {
|
home = {
|
||||||
enableNixpkgsReleaseCheck = lib.mkDefault false;
|
enableNixpkgsReleaseCheck = lib.mkDefault false;
|
||||||
@@ -47,10 +52,14 @@
|
|||||||
nh = {
|
nh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
flake = "/etc/nixos";
|
flake = "/etc/nixos";
|
||||||
|
clean = {
|
||||||
|
enable = true;
|
||||||
|
extraArgs = "--keep 5";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
micro = {
|
micro = {
|
||||||
enable = true;
|
enable = lib.mkDefault true;
|
||||||
settings = {
|
settings = {
|
||||||
autoindent = true;
|
autoindent = true;
|
||||||
autosu = true;
|
autosu = true;
|
||||||
@@ -61,7 +70,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
tmux = {
|
tmux = {
|
||||||
enable = true;
|
enable = lib.mkDefault true;
|
||||||
terminal = "screen-256color";
|
terminal = "screen-256color";
|
||||||
sensibleOnTop = true;
|
sensibleOnTop = true;
|
||||||
focusEvents = true;
|
focusEvents = true;
|
||||||
@@ -104,8 +113,8 @@
|
|||||||
nextcloud-client.enable = lib.mkDefault true;
|
nextcloud-client.enable = lib.mkDefault true;
|
||||||
pass-secret-service.enable = lib.mkDefault true;
|
pass-secret-service.enable = lib.mkDefault true;
|
||||||
kdeconnect = {
|
kdeconnect = {
|
||||||
enable = true;
|
enable = lib.mkDefault true;
|
||||||
indicator = true;
|
indicator = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.btop;
|
cfg = config.mjallen.programs.btop;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.mjallen.programs.btop = {
|
options.mjallen.programs.btop = {
|
||||||
enable = mkEnableOption "enable btop";
|
enable = mkEnableOption "enable btop";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,16 @@
|
|||||||
{ config, lib, pkgs, system, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
system,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
isArm = "aarch64-linux" == system;
|
isArm = "aarch64-linux" == system;
|
||||||
open-remote-ssh = pkgs.vscode-utils.buildVscodeExtension {
|
|
||||||
pname = "open-remote-ssh";
|
|
||||||
version = "0.0.49";
|
|
||||||
vscodeExtPublisher = "jeanp413";
|
|
||||||
vscodeExtName = "open-remote-ssh";
|
|
||||||
vscodeExtUniqueId = "jeanp413.open-remote-ssh";
|
|
||||||
src = pkgs.fetchurl {
|
|
||||||
url = "https://open-vsx.org/api/jeanp413/open-remote-ssh/0.0.49/file/jeanp413.open-remote-ssh-0.0.49.vsix";
|
|
||||||
sha256 = "sha256-QfJnAAx+kO2iJ1EzWoO5HLogJKg3RiC3hg1/u2Jm6t4";
|
|
||||||
name = "open-remote-ssh.zip";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
x86_only = with pkgs; [
|
x86_only = with pkgs; [
|
||||||
vscode-extensions.redhat.vscode-xml
|
vscode-extensions.redhat.vscode-xml
|
||||||
];
|
];
|
||||||
|
open-remote-ssh = pkgs.${namespace}.open-remote-ssh;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
programs = {
|
programs = {
|
||||||
@@ -27,44 +22,48 @@ in
|
|||||||
default = {
|
default = {
|
||||||
enableUpdateCheck = false;
|
enableUpdateCheck = false;
|
||||||
enableExtensionUpdateCheck = false;
|
enableExtensionUpdateCheck = false;
|
||||||
extensions = with pkgs; [
|
extensions =
|
||||||
vscode-extensions.arrterian.nix-env-selector
|
with pkgs;
|
||||||
vscode-extensions.bbenoist.nix
|
[
|
||||||
vscode-extensions.brettm12345.nixfmt-vscode
|
vscode-extensions.arrterian.nix-env-selector
|
||||||
vscode-extensions.cweijan.vscode-database-client2
|
vscode-extensions.bbenoist.nix
|
||||||
vscode-extensions.dendron.dendron-markdown-preview-enhanced
|
vscode-extensions.brettm12345.nixfmt-vscode
|
||||||
vscode-extensions.jnoortheen.nix-ide
|
vscode-extensions.cweijan.vscode-database-client2
|
||||||
vscode-extensions.mkhl.direnv
|
vscode-extensions.dendron.dendron-markdown-preview-enhanced
|
||||||
vscode-extensions.ms-python.debugpy
|
vscode-extensions.jnoortheen.nix-ide
|
||||||
vscode-extensions.ms-python.pylint
|
vscode-extensions.mkhl.direnv
|
||||||
vscode-extensions.ms-python.python
|
vscode-extensions.ms-python.debugpy
|
||||||
# vscode-extensions.ms-python.vscode-pylance
|
vscode-extensions.ms-python.pylint
|
||||||
vscode-extensions.redhat.vscode-yaml
|
vscode-extensions.ms-python.python
|
||||||
vscode-extensions.yy0931.vscode-sqlite3-editor
|
# vscode-extensions.ms-python.vscode-pylance
|
||||||
|
vscode-extensions.redhat.vscode-yaml
|
||||||
|
vscode-extensions.yy0931.vscode-sqlite3-editor
|
||||||
|
|
||||||
# open-remote-ssh
|
# open-remote-ssh
|
||||||
# nix-vscode-extensions.open-vsx.jeanp413.open-remote-ssh
|
# nix-vscode-extensions.open-vsx.jeanp413.open-remote-ssh
|
||||||
# open-vsx.jeanp413.open-remote-ssh
|
open-remote-ssh
|
||||||
] ++ ( if !isArm then x86_only else [ ] ) ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
|
]
|
||||||
{
|
++ (if !isArm then x86_only else [ ])
|
||||||
name = "copilot-mcp";
|
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
|
||||||
publisher = "automatalabs";
|
{
|
||||||
version = "0.0.49";
|
name = "copilot-mcp";
|
||||||
sha256 = "sha256-+G2OQl5SCN7bh7MzGdYiRclIZefBE7lWnGg1kNpCvnA=";
|
publisher = "automatalabs";
|
||||||
}
|
version = "0.0.49";
|
||||||
{
|
sha256 = "sha256-+G2OQl5SCN7bh7MzGdYiRclIZefBE7lWnGg1kNpCvnA=";
|
||||||
name = "mcp-server-runner";
|
}
|
||||||
publisher = "zebradev";
|
{
|
||||||
version = "0.1.0";
|
name = "mcp-server-runner";
|
||||||
sha256 = "sha256-StydVt3VzQUSS/pYp76jnIwtZlEj8gWAGzOARs93J+E=";
|
publisher = "zebradev";
|
||||||
}
|
version = "0.1.0";
|
||||||
{
|
sha256 = "sha256-StydVt3VzQUSS/pYp76jnIwtZlEj8gWAGzOARs93J+E=";
|
||||||
name = "claude-dev";
|
}
|
||||||
publisher = "saoudrizwan";
|
{
|
||||||
version = "3.17.9";
|
name = "claude-dev";
|
||||||
sha256 = "sha256-y3bFtMe5vZrO3DFb31KDvkzjD2jM76wK89mKhgJXC70=";
|
publisher = "saoudrizwan";
|
||||||
}
|
version = "3.17.9";
|
||||||
];
|
sha256 = "sha256-y3bFtMe5vZrO3DFb31KDvkzjD2jM76wK89mKhgJXC70=";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
userSettings = {
|
userSettings = {
|
||||||
|
|
||||||
@@ -79,7 +78,7 @@ in
|
|||||||
"confirmDelete" = false;
|
"confirmDelete" = false;
|
||||||
"confirmDragAndDrop" = false;
|
"confirmDragAndDrop" = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
"git" = {
|
"git" = {
|
||||||
"confirmSync" = false;
|
"confirmSync" = false;
|
||||||
"enableSmartCommit" = true;
|
"enableSmartCommit" = true;
|
||||||
@@ -110,10 +109,12 @@ in
|
|||||||
# You can write arbitary Nix expressions here, to produce valid "options" declaration result.
|
# You can write arbitary Nix expressions here, to produce valid "options" declaration result.
|
||||||
# Tip: for flake-based configuration, utilize `builtins.getFlake`
|
# Tip: for flake-based configuration, utilize `builtins.getFlake`
|
||||||
"nixos" = {
|
"nixos" = {
|
||||||
"expr" = "(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").nixosConfigurations.<name>.options";
|
"expr" =
|
||||||
|
"(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").nixosConfigurations.<name>.options";
|
||||||
};
|
};
|
||||||
"home-manager" = {
|
"home-manager" = {
|
||||||
"expr" = "(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").homeConfigurations.<name>.options";
|
"expr" =
|
||||||
|
"(builtins.getFlake \"${config.home.homeDirectory}/nix-config\").homeConfigurations.<name>.options";
|
||||||
};
|
};
|
||||||
# # Tip: use ${workspaceFolder} variable to define path
|
# # Tip: use ${workspaceFolder} variable to define path
|
||||||
# "nix-darwin" = {
|
# "nix-darwin" = {
|
||||||
@@ -139,6 +140,8 @@ in
|
|||||||
"*.db" = "default";
|
"*.db" = "default";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
"enable-proposed-api" = [ "jeanp413.open-remote-ssh" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -149,4 +152,4 @@ in
|
|||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,4 +18,4 @@ in
|
|||||||
userEmail = "matt.l.jallen@gmail.com";
|
userEmail = "matt.l.jallen@gmail.com";
|
||||||
aliases = gitAliases;
|
aliases = gitAliases;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.kitty;
|
cfg = config.mjallen.programs.kitty;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
@@ -29,33 +29,33 @@ in
|
|||||||
background_opacity = "0.85";
|
background_opacity = "0.85";
|
||||||
|
|
||||||
# The basic colors
|
# The basic colors
|
||||||
foreground = nord.snowStorm.nord6;
|
foreground = nord.snowStorm.nord6;
|
||||||
background = nord.polarNight.nord0;
|
background = nord.polarNight.nord0;
|
||||||
selection_foreground = nord.polarNight.nord0;
|
selection_foreground = nord.polarNight.nord0;
|
||||||
selection_background = nord.aurora.nord15;
|
selection_background = nord.aurora.nord15;
|
||||||
|
|
||||||
# Cursor colors
|
# Cursor colors
|
||||||
cursor = nord.aurora.nord15;
|
cursor = nord.aurora.nord15;
|
||||||
cursor_text_color = nord.polarNight.nord0;
|
cursor_text_color = nord.polarNight.nord0;
|
||||||
|
|
||||||
# URL underline color when hovering with mouse
|
# URL underline color when hovering with mouse
|
||||||
url_color = nord.aurora.nord15;
|
url_color = nord.aurora.nord15;
|
||||||
|
|
||||||
# Kitty window border colors
|
# Kitty window border colors
|
||||||
active_border_color = nord.frost.nord10;
|
active_border_color = nord.frost.nord10;
|
||||||
inactive_border_color = nord.polarNight.nord1;
|
inactive_border_color = nord.polarNight.nord1;
|
||||||
bell_border_color = nord.aurora.nord13;
|
bell_border_color = nord.aurora.nord13;
|
||||||
|
|
||||||
# OS Window titlebar colors
|
# OS Window titlebar colors
|
||||||
wayland_titlebar_color = nord.polarNight.nord0;
|
wayland_titlebar_color = nord.polarNight.nord0;
|
||||||
macos_titlebar_color = nord.polarNight.nord0;
|
macos_titlebar_color = nord.polarNight.nord0;
|
||||||
|
|
||||||
# Tab bar colors
|
# Tab bar colors
|
||||||
active_tab_foreground = nord.polarNight.nord3;
|
active_tab_foreground = nord.polarNight.nord3;
|
||||||
active_tab_background = nord.aurora.nord15;
|
active_tab_background = nord.aurora.nord15;
|
||||||
inactive_tab_foreground = nord.snowStorm.nord6;
|
inactive_tab_foreground = nord.snowStorm.nord6;
|
||||||
inactive_tab_background = nord.polarNight.nord1;
|
inactive_tab_background = nord.polarNight.nord1;
|
||||||
tab_bar_background = nord.polarNight.nord3;
|
tab_bar_background = nord.polarNight.nord3;
|
||||||
|
|
||||||
# Colors for marks (marked text in the terminal)
|
# Colors for marks (marked text in the terminal)
|
||||||
mark1_foreground = nord.polarNight.nord0;
|
mark1_foreground = nord.polarNight.nord0;
|
||||||
@@ -86,11 +86,11 @@ in
|
|||||||
color11 = nord.aurora.nord13;
|
color11 = nord.aurora.nord13;
|
||||||
|
|
||||||
# blue
|
# blue
|
||||||
color4 = nord.frost.nord10;
|
color4 = nord.frost.nord10;
|
||||||
color12 = nord.frost.nord10;
|
color12 = nord.frost.nord10;
|
||||||
|
|
||||||
# magenta
|
# magenta
|
||||||
color5 = nord.aurora.nord15;
|
color5 = nord.aurora.nord15;
|
||||||
color13 = nord.aurora.nord15;
|
color13 = nord.aurora.nord15;
|
||||||
|
|
||||||
# cyan
|
# cyan
|
||||||
@@ -98,7 +98,7 @@ in
|
|||||||
color14 = nord.frost.nord8;
|
color14 = nord.frost.nord8;
|
||||||
|
|
||||||
# white
|
# white
|
||||||
color7 = nord.snowStorm.nord5;
|
color7 = nord.snowStorm.nord5;
|
||||||
color15 = nord.snowStorm.nord4;
|
color15 = nord.snowStorm.nord4;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ with lib;
|
|||||||
};
|
};
|
||||||
size = mkOption {
|
size = mkOption {
|
||||||
type = with types; int;
|
type = with types; int;
|
||||||
default = 8;
|
default = 12;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
theme = mkOption {
|
theme = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = import ../../desktop/theme/nord.nix;
|
default = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@
|
|||||||
"browser.newtabpage.activity-stream.topSitesRows" = 3; # Set number of rows for top sites on new tab page
|
"browser.newtabpage.activity-stream.topSitesRows" = 3; # Set number of rows for top sites on new tab page
|
||||||
"layout.css.light-dark.enabled" = true; # Enable light/dark theme support
|
"layout.css.light-dark.enabled" = true; # Enable light/dark theme support
|
||||||
"extensions.activeThemeID" = "default-theme@mozilla.org"; # Set active theme
|
"extensions.activeThemeID" = "default-theme@mozilla.org"; # Set active theme
|
||||||
"extensions.webextensions.uuids" = "{\"formautofill@mozilla.org\" =\"851c83b7-26d5-449c-8cc9-d8951a0ce78d\",\"pictureinpicture@mozilla.org\" =\"42fa2650-5134-4bef-bafa-b73f9ae51bad\",\"screenshots@mozilla.org\" =\"efd2b692-43c4-433a-aea5-0cb79f8312d4\",\"webcompat-reporter@mozilla.org\" =\"c43a6be2-fb56-4253-b384-ce8e09a89999\",\"webcompat@mozilla.org\" =\"e25fd1bb-7c53-413f-9528-bb922c322a56\",\"default-theme@mozilla.org\" =\"610b67c3-9145-46f7-814f-d8ee2cc8edff\",\"addons-search-detection@mozilla.com\:\"caedb3ca-5cf5-4e23-a251-d742f23e6fc8\",\"uBlock0@raymondhill.net\" =\"7e7d9fd9-12bf-42d3-9c7c-9ffd05420ec7\",\"78272b6fa58f4a1abaac99321d503a20@proton.me\" =\"7242a067-06d8-430b-94a3-00d264cdd57b\",\"addon@darkreader.org\" =\"2f02b112-6acd-4bdc-af2c-1432eb527339\",\"jid1-xUfzOsOFlzSOXg@jetpack\" =\"d0c72046-9903-4118-8160-a028840bf928\",\"chrome-gnome-shell@gnome.org\" =\"a1ab53e6-b765-4f25-8349-383cc04682a0\",\"user-agent-switcher@ninetailed.ninja\" =\"259d07cc-bb32-4ed5-b90f-6d73abdeb7bb\",\"firefoxdav@icloud.com\" =\"110e6e2c-18f8-461d-9f26-b8f04482b6f1\",\"ciscowebexstart1@cisco.com\" =\"a4062240-e73a-4353-bddb-d608d84881f7\",\"{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}\" =\"9164e437-812b-4a07-8dfd-2fd73b39329b\",\"{036a55b4-5e72-4d05-a06c-cba2dfcc134a}\" =\"648fc678-a6fb-47cd-9792-fb9520678c17\",\"{446900e4-71c2-419f-a6a7-df9c091e268b}\" =\"f0b43422-070e-466e-85c9-6543f209f075\",\"jid1-MnnxcxisBPnSXQ@jetpack\" =\"4c448202-c843-4cae-b5c3-d11f2da58fa3\",\"soundfixer@unrelenting.technology\" =\"59b35eb8-1c85-4919-a905-80d120993ddc\",\"floccus@handmadeideas.org\" =\"8ad2956c-8091-41af-a689-7d2108f5958d\",\"{79b9dbcf-cc5a-4cda-89ef-c4ab097eb074}\" =\"c2a223a7-32e0-4726-9f20-17236702b1f5\",\"linkgopher@oooninja.com\" =\"a257858c-0dce-415b-b123-6222876cf843\"}";
|
"extensions.webextensions.uuids" =
|
||||||
|
"{\"formautofill@mozilla.org\" =\"851c83b7-26d5-449c-8cc9-d8951a0ce78d\",\"pictureinpicture@mozilla.org\" =\"42fa2650-5134-4bef-bafa-b73f9ae51bad\",\"screenshots@mozilla.org\" =\"efd2b692-43c4-433a-aea5-0cb79f8312d4\",\"webcompat-reporter@mozilla.org\" =\"c43a6be2-fb56-4253-b384-ce8e09a89999\",\"webcompat@mozilla.org\" =\"e25fd1bb-7c53-413f-9528-bb922c322a56\",\"default-theme@mozilla.org\" =\"610b67c3-9145-46f7-814f-d8ee2cc8edff\",\"addons-search-detection@mozilla.com\:\"caedb3ca-5cf5-4e23-a251-d742f23e6fc8\",\"uBlock0@raymondhill.net\" =\"7e7d9fd9-12bf-42d3-9c7c-9ffd05420ec7\",\"78272b6fa58f4a1abaac99321d503a20@proton.me\" =\"7242a067-06d8-430b-94a3-00d264cdd57b\",\"addon@darkreader.org\" =\"2f02b112-6acd-4bdc-af2c-1432eb527339\",\"jid1-xUfzOsOFlzSOXg@jetpack\" =\"d0c72046-9903-4118-8160-a028840bf928\",\"chrome-gnome-shell@gnome.org\" =\"a1ab53e6-b765-4f25-8349-383cc04682a0\",\"user-agent-switcher@ninetailed.ninja\" =\"259d07cc-bb32-4ed5-b90f-6d73abdeb7bb\",\"firefoxdav@icloud.com\" =\"110e6e2c-18f8-461d-9f26-b8f04482b6f1\",\"ciscowebexstart1@cisco.com\" =\"a4062240-e73a-4353-bddb-d608d84881f7\",\"{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}\" =\"9164e437-812b-4a07-8dfd-2fd73b39329b\",\"{036a55b4-5e72-4d05-a06c-cba2dfcc134a}\" =\"648fc678-a6fb-47cd-9792-fb9520678c17\",\"{446900e4-71c2-419f-a6a7-df9c091e268b}\" =\"f0b43422-070e-466e-85c9-6543f209f075\",\"jid1-MnnxcxisBPnSXQ@jetpack\" =\"4c448202-c843-4cae-b5c3-d11f2da58fa3\",\"soundfixer@unrelenting.technology\" =\"59b35eb8-1c85-4919-a905-80d120993ddc\",\"floccus@handmadeideas.org\" =\"8ad2956c-8091-41af-a689-7d2108f5958d\",\"{79b9dbcf-cc5a-4cda-89ef-c4ab097eb074}\" =\"c2a223a7-32e0-4726-9f20-17236702b1f5\",\"linkgopher@oooninja.com\" =\"a257858c-0dce-415b-b123-6222876cf843\"}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.mako;
|
cfg = config.mjallen.programs.mako;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ with lib;
|
|||||||
default = "DejaVu Sans";
|
default = "DejaVu Sans";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.nwg-dock;
|
cfg = config.mjallen.programs.nwg-dock;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = with pkgs; [ nwg-dock-hyprland ];
|
home.packages = with pkgs; [ nwg-dock-hyprland ];
|
||||||
|
|
||||||
home.file = {
|
home.file = {
|
||||||
".config/nwg-dock-hyprland/drawer.css".text = ''
|
".config/nwg-dock-hyprland/drawer.css".text = ''
|
||||||
window {
|
window {
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.mjallen.programs.nwg-dock = {
|
options.mjallen.programs.nwg-dock = {
|
||||||
enable = mkEnableOption "enable nwg-dock";
|
enable = mkEnableOption "enable nwg-dock";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +1,57 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.nwg-drawer;
|
cfg = config.mjallen.programs.nwg-drawer;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = with pkgs; [ nwg-drawer ];
|
home.packages = with pkgs; [ nwg-drawer ];
|
||||||
|
|
||||||
home.file = {
|
home.file = {
|
||||||
".config/nwg-drawer/drawer.css".text = ''
|
".config/nwg-drawer/drawer.css".text = ''
|
||||||
window {
|
window {
|
||||||
background-color: ${nord.polarNight.nord0}bf;
|
background-color: ${nord.polarNight.nord0}bf;
|
||||||
color: ${nord.snowStorm.nord5}00
|
color: ${nord.snowStorm.nord5}00
|
||||||
}
|
}
|
||||||
|
|
||||||
/* search entry */
|
/* search entry */
|
||||||
entry {
|
entry {
|
||||||
background-color: ${nord.polarNight.nord1}0f
|
background-color: ${nord.polarNight.nord1}0f
|
||||||
}
|
}
|
||||||
|
|
||||||
button, image {
|
button, image {
|
||||||
background: none;
|
background: none;
|
||||||
border: none
|
border: none
|
||||||
}
|
}
|
||||||
|
|
||||||
button:hover {
|
button:hover {
|
||||||
background-color: ${nord.frost.nord10}1a
|
background-color: ${nord.frost.nord10}1a
|
||||||
}
|
}
|
||||||
|
|
||||||
/* in case you wanted to give category buttons a different look */
|
/* in case you wanted to give category buttons a different look */
|
||||||
#category-button {
|
#category-button {
|
||||||
margin: 0 10px 0 10px
|
margin: 0 10px 0 10px
|
||||||
}
|
}
|
||||||
|
|
||||||
#pinned-box {
|
#pinned-box {
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
border-bottom: 1px dotted ${nord.polarNight.nord3}
|
border-bottom: 1px dotted ${nord.polarNight.nord3}
|
||||||
}
|
}
|
||||||
|
|
||||||
#files-box {
|
#files-box {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
border: 1px dotted ${nord.polarNight.nord3};
|
border: 1px dotted ${nord.polarNight.nord3};
|
||||||
border-radius: 15px
|
border-radius: 15px
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.mjallen.programs.nwg-drawer = {
|
options.mjallen.programs.nwg-drawer = {
|
||||||
enable = mkEnableOption "enable nwg-drawer";
|
enable = mkEnableOption "enable nwg-drawer";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.nwg-panel;
|
cfg = config.mjallen.programs.nwg-panel;
|
||||||
@@ -12,15 +12,15 @@ in
|
|||||||
|
|
||||||
'';
|
'';
|
||||||
".config/nwg-panel/preferred-apps.json".text = ''
|
".config/nwg-panel/preferred-apps.json".text = ''
|
||||||
{
|
{
|
||||||
"\\.pdf$": "${cfg.defaultApps.browser.pname}",
|
"\\.pdf$": "${cfg.defaultApps.browser.pname}",
|
||||||
"\\.svg$": "inkscape",
|
"\\.svg$": "inkscape",
|
||||||
"\\.(jpg|png|tiff|gif)$": "${cfg.defaultApps.imageViewer.pname}",
|
"\\.(jpg|png|tiff|gif)$": "${cfg.defaultApps.imageViewer.pname}",
|
||||||
"\\.(mp3|ogg|flac|wav|wma)$": "audacious",
|
"\\.(mp3|ogg|flac|wav|wma)$": "audacious",
|
||||||
"\\.(avi|mp4|mkv|mov|wav)$": "${cfg.defaultApps.video.pname}",
|
"\\.(avi|mp4|mkv|mov|wav)$": "${cfg.defaultApps.video.pname}",
|
||||||
"\\.(doc|docx|xls|xlsx)$": "${cfg.defaultApps.office.pname}"
|
"\\.(doc|docx|xls|xlsx)$": "${cfg.defaultApps.office.pname}"
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,17 +7,41 @@ with lib;
|
|||||||
defaultApps = mkOption {
|
defaultApps = mkOption {
|
||||||
type = types.submodule {
|
type = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
browser = mkOption { type = types.package; default = pkgs.firefox; };
|
browser = mkOption {
|
||||||
editor = mkOption { type = types.package; default = pkgs.micro; };
|
type = types.package;
|
||||||
fileExplorer = mkOption { type = types.package; default = pkgs.nemo; };
|
default = pkgs.firefox;
|
||||||
visual = mkOption { type = types.package; default = pkgs.vscodium; };
|
};
|
||||||
terminal = mkOption { type = types.package; default = pkgs.kitty; };
|
editor = mkOption {
|
||||||
office = mkOption { type = types.package; default = pkgs.onlyoffice-bin_latest; };
|
type = types.package;
|
||||||
video = mkOption { type = types.package; default = pkgs.vlc; };
|
default = pkgs.micro;
|
||||||
imageViewer = mkOption { type = types.package; default = pkgs.gnome-photos; };
|
};
|
||||||
|
fileExplorer = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.nemo;
|
||||||
|
};
|
||||||
|
visual = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.vscodium;
|
||||||
|
};
|
||||||
|
terminal = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.kitty;
|
||||||
|
};
|
||||||
|
office = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.onlyoffice-bin_latest;
|
||||||
|
};
|
||||||
|
video = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.vlc;
|
||||||
|
};
|
||||||
|
imageViewer = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = pkgs.gnome-photos;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
description = "Default applications used across the system.";
|
description = "Default applications used across the system.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,4 +11,4 @@ in
|
|||||||
maximized = true;
|
maximized = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.waybar;
|
cfg = config.mjallen.programs.waybar;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
|
|
||||||
defaultOpacity = "opacity: 0.85;";
|
defaultOpacity = "opacity: 0.85;";
|
||||||
defaultBorderRadius = "border-radius: 1rem;";
|
defaultBorderRadius = "border-radius: 1rem;";
|
||||||
@@ -33,7 +33,7 @@ let
|
|||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./options.nix
|
./options.nix
|
||||||
./scripts/hass.nix
|
./scripts/hass.nix
|
||||||
./scripts/weather.nix
|
./scripts/weather.nix
|
||||||
@@ -61,7 +61,30 @@ in
|
|||||||
|
|
||||||
modules-center = [ "hyprland/window" ];
|
modules-center = [ "hyprland/window" ];
|
||||||
|
|
||||||
modules-right = cfg.modules-right;
|
modules-right = [
|
||||||
|
"tray"
|
||||||
|
"custom/left-end"
|
||||||
|
"temperature"
|
||||||
|
"temperature#gpu"
|
||||||
|
"keyboard-state#capslock"
|
||||||
|
"keyboard-state#numlock"
|
||||||
|
"wireplumber#sink"
|
||||||
|
"bluetooth"
|
||||||
|
"network"
|
||||||
|
"idle_inhibitor"
|
||||||
|
"custom/right-end"
|
||||||
|
"custom/left-end"
|
||||||
|
"clock"
|
||||||
|
"battery"
|
||||||
|
"custom/weather"
|
||||||
|
"custom/right-end"
|
||||||
|
];
|
||||||
|
|
||||||
|
# modules-right = [
|
||||||
|
# "tray"
|
||||||
|
# "custom/left-end" ] ++
|
||||||
|
# cfg.modules-right ++
|
||||||
|
# [ "custom/right-end" ];
|
||||||
|
|
||||||
# Module Definitions
|
# Module Definitions
|
||||||
# Left
|
# Left
|
||||||
@@ -91,7 +114,7 @@ in
|
|||||||
critical-threshold = 110;
|
critical-threshold = 110;
|
||||||
format-critical = "{temperatureC}°C ";
|
format-critical = "{temperatureC}°C ";
|
||||||
format = "{temperatureC}°C {icon}";
|
format = "{temperatureC}°C {icon}";
|
||||||
format-icons = [
|
format-icons = [
|
||||||
"" # fa-temperature-empty
|
"" # fa-temperature-empty
|
||||||
"" # fa-temperature-quarter
|
"" # fa-temperature-quarter
|
||||||
"" # fa-temperature-half
|
"" # fa-temperature-half
|
||||||
@@ -106,7 +129,7 @@ in
|
|||||||
critical-threshold = 110;
|
critical-threshold = 110;
|
||||||
format-critical = "{temperatureC}°C ";
|
format-critical = "{temperatureC}°C ";
|
||||||
format = "{temperatureC}°C {icon}";
|
format = "{temperatureC}°C {icon}";
|
||||||
format-icons = [
|
format-icons = [
|
||||||
"" # fa-temperature-empty
|
"" # fa-temperature-empty
|
||||||
"" # fa-temperature-quarter
|
"" # fa-temperature-quarter
|
||||||
"" # fa-temperature-half
|
"" # fa-temperature-half
|
||||||
@@ -193,7 +216,7 @@ in
|
|||||||
connected = "";
|
connected = "";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
network = {
|
network = {
|
||||||
interface = cfg.networkInterface;
|
interface = cfg.networkInterface;
|
||||||
on-click = "nm-connection-editor";
|
on-click = "nm-connection-editor";
|
||||||
@@ -234,10 +257,10 @@ in
|
|||||||
calendar = {
|
calendar = {
|
||||||
mode = "month";
|
mode = "month";
|
||||||
format = {
|
format = {
|
||||||
months = "<span color='${nord.frost.nord9}'><b>{}</b></span>";
|
months = "<span color='${nord.frost.nord9}'><b>{}</b></span>";
|
||||||
days = "<span color='${nord.frost.nord10}'><b>{}</b></span>";
|
days = "<span color='${nord.frost.nord10}'><b>{}</b></span>";
|
||||||
weekdays = "<span color='${nord.frost.nord8}'><b>{}</b></span>";
|
weekdays = "<span color='${nord.frost.nord8}'><b>{}</b></span>";
|
||||||
today = "<span color='${nord.aurora.nord14}'><b><u>{}</u></b></span>";
|
today = "<span color='${nord.aurora.nord14}'><b><u>{}</u></b></span>";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -247,8 +270,8 @@ in
|
|||||||
interval = 60;
|
interval = 60;
|
||||||
# statuses: 'Charging', 'Discharging'
|
# statuses: 'Charging', 'Discharging'
|
||||||
states = {
|
states = {
|
||||||
warning = 30;
|
warning = 30;
|
||||||
critical = 15;
|
critical = 15;
|
||||||
};
|
};
|
||||||
format = "{capacity}% {icon}";
|
format = "{capacity}% {icon}";
|
||||||
format-icons = {
|
format-icons = {
|
||||||
@@ -290,7 +313,18 @@ in
|
|||||||
return-type = "json";
|
return-type = "json";
|
||||||
markup = "pango";
|
markup = "pango";
|
||||||
};
|
};
|
||||||
} // cfg.extraModules;
|
|
||||||
|
"custom/left-end" = {
|
||||||
|
format = " ";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/right-end" = {
|
||||||
|
format = " ";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// cfg.extraModules;
|
||||||
};
|
};
|
||||||
|
|
||||||
# * { font-size: 13px; }
|
# * { font-size: 13px; }
|
||||||
@@ -306,7 +340,7 @@ in
|
|||||||
color: ${nord.aurora.nord11};
|
color: ${nord.aurora.nord11};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
font-family:
|
font-family:
|
||||||
Jetbrains Mono Nerd Font,
|
Jetbrains Mono Nerd Font,
|
||||||
@@ -372,7 +406,7 @@ in
|
|||||||
${defaultBorderRadius}
|
${defaultBorderRadius}
|
||||||
${defaultCenterOptions}
|
${defaultCenterOptions}
|
||||||
margin-left: 4rem;
|
margin-left: 4rem;
|
||||||
margin-right: 4rem;
|
margin-right: ${toString cfg.windowOffset}rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make window module transparent when no windows present */
|
/* make window module transparent when no windows present */
|
||||||
@@ -384,7 +418,8 @@ in
|
|||||||
color: ${nord.frost.nord10};
|
color: ${nord.frost.nord10};
|
||||||
background-color: ${nord.polarNight.nord0};
|
background-color: ${nord.polarNight.nord0};
|
||||||
${defaultOpacity}
|
${defaultOpacity}
|
||||||
${borderRight}
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery {
|
#battery {
|
||||||
@@ -400,7 +435,8 @@ in
|
|||||||
color: ${nord.frost.nord9};
|
color: ${nord.frost.nord9};
|
||||||
background-color: ${nord.polarNight.nord0};
|
background-color: ${nord.polarNight.nord0};
|
||||||
${defaultOpacity}
|
${defaultOpacity}
|
||||||
${borderLeft}
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------- */
|
/* ------------- */
|
||||||
@@ -409,7 +445,8 @@ in
|
|||||||
color: ${nord.frost.nord10};
|
color: ${nord.frost.nord10};
|
||||||
background-color: ${nord.polarNight.nord0};
|
background-color: ${nord.polarNight.nord0};
|
||||||
${defaultOpacity}
|
${defaultOpacity}
|
||||||
${borderRight}
|
${defaultCenterOptions}
|
||||||
|
border-radius: 0;
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,7 +565,20 @@ in
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ------------- */
|
/* ------------- */
|
||||||
'' + cfg.extraModulesStyle or '''';
|
|
||||||
|
#custom-left-end {
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${borderLeft}
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-right-end {
|
||||||
|
background-color: ${nord.polarNight.nord0};
|
||||||
|
${defaultOpacity}
|
||||||
|
${borderRight}
|
||||||
|
}
|
||||||
|
''
|
||||||
|
+ cfg.extraModulesStyle or '''';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ with lib;
|
|||||||
|
|
||||||
modules-right = mkOption {
|
modules-right = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
networkInterface = mkOption {
|
networkInterface = mkOption {
|
||||||
@@ -28,5 +28,42 @@ with lib;
|
|||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
windowOffset = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Waybar modules config
|
||||||
|
# modules = mkOption {
|
||||||
|
# type = types.submodule {
|
||||||
|
# options = {
|
||||||
|
# # Modules
|
||||||
|
# window = mkOption {
|
||||||
|
# type = types.submodule {
|
||||||
|
# options = {
|
||||||
|
# # Waybar Module CSS
|
||||||
|
# margin-right = mkOption {
|
||||||
|
# type = types.str;
|
||||||
|
# default = "4";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# temperature = mkOption {
|
||||||
|
# type = types.submodule {
|
||||||
|
# options = {
|
||||||
|
# # Waybar Module CSS
|
||||||
|
# margin-right = mkOption {
|
||||||
|
# type = types.str;
|
||||||
|
# default = "4";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# default = { };
|
||||||
|
# };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
{ config, lib, namespace, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.waybar;
|
cfg = config.mjallen.programs.waybar;
|
||||||
|
|
||||||
pythonEnv = pkgs.python3.withPackages (ps: [
|
pythonEnv = pkgs.python3.withPackages (_ps: [
|
||||||
pkgs.${namespace}.homeassistant-api
|
pkgs.${namespace}.homeassistant-api
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.waybar;
|
cfg = config.mjallen.programs.waybar;
|
||||||
|
|
||||||
@@ -7,7 +12,6 @@ let
|
|||||||
#! nix-shell -i python3 --pure
|
#! nix-shell -i python3 --pure
|
||||||
#! nix-shell -p python3 python3Packages.requests
|
#! nix-shell -p python3 python3Packages.requests
|
||||||
|
|
||||||
"""get waybar weather"""
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import shutil
|
import shutil
|
||||||
@@ -93,12 +97,16 @@ let
|
|||||||
WIND_DIRECTION = {
|
WIND_DIRECTION = {
|
||||||
"S": "↓",
|
"S": "↓",
|
||||||
"SW": "↙",
|
"SW": "↙",
|
||||||
|
"SSW": "↙",
|
||||||
"W": "←",
|
"W": "←",
|
||||||
"NW": "↖",
|
"NW": "↖",
|
||||||
|
"NNW": "↖",
|
||||||
"N": "↑",
|
"N": "↑",
|
||||||
"NE": "↗",
|
"NE": "↗",
|
||||||
|
"NNE": "↗",
|
||||||
"E": "→",
|
"E": "→",
|
||||||
"SE": "↘",
|
"SE": "↘",
|
||||||
|
"SSE": "↘",
|
||||||
}
|
}
|
||||||
|
|
||||||
MOON_PHASES = (
|
MOON_PHASES = (
|
||||||
@@ -334,11 +342,13 @@ let
|
|||||||
moon_phase = astronomy['moon_phase']
|
moon_phase = astronomy['moon_phase']
|
||||||
wego = WEATHER_CODES_WEGO[current_condition['weatherCode']]
|
wego = WEATHER_CODES_WEGO[current_condition['weatherCode']]
|
||||||
|
|
||||||
tooltip = f"{wego[0]}{weather_description} {temp_f}°\n"
|
current = f"{wego[0]}{weather_description} {temp_f}°\n"
|
||||||
tooltip += f"{wego[1]}Feels like: {feels_like_f}°\n"
|
feels = f"{wego[1]}Feels like: {feels_like_f}°\n"
|
||||||
tooltip += f"{wego[2]}Wind: {wind_speed}mph {WIND_DIRECTION[wind_dir]}\n"
|
wind = f"{wego[2]}Wind: {wind_speed}mph {WIND_DIRECTION[wind_dir]}\n"
|
||||||
tooltip += f"{wego[3]}Humidity: {humidity}%\n"
|
humidityl = f"{wego[3]}Humidity: {humidity}%\n"
|
||||||
tooltip += f"{wego[4]}Moon phase: {moon_phase} " + moon_icon + "\n"
|
moon = f"{wego[4]}Moon phase: {moon_phase} " + moon_icon + "\n"
|
||||||
|
|
||||||
|
tooltip = current + feels + wind + humidityl + moon
|
||||||
|
|
||||||
return tooltip
|
return tooltip
|
||||||
|
|
||||||
@@ -414,9 +424,12 @@ let
|
|||||||
current_condition = weather["current_condition"][0]
|
current_condition = weather["current_condition"][0]
|
||||||
astronomy = weather["weather"][0]['astronomy'][0]
|
astronomy = weather["weather"][0]['astronomy'][0]
|
||||||
|
|
||||||
data["text"] = build_text(current_condition)
|
text = build_text(current_condition)
|
||||||
data["tooltip"] = build_tooltip(current_condition, astronomy, moon_icon)
|
|
||||||
data["tooltip"] += build_forecast(weather["weather"])
|
tooltip = build_tooltip(current_condition, astronomy, moon_icon) + build_forecast(weather["weather"])
|
||||||
|
|
||||||
|
data["text"] = text
|
||||||
|
data["tooltip"] = tooltip
|
||||||
|
|
||||||
return json.dumps(data)
|
return json.dumps(data)
|
||||||
|
|
||||||
@@ -425,6 +438,7 @@ let
|
|||||||
try:
|
try:
|
||||||
print(get_wttr_json())
|
print(get_wttr_json())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
print("error")
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.wlogout;
|
cfg = config.mjallen.programs.wlogout;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
programs.wlogout = {
|
programs.wlogout = {
|
||||||
enable = false;
|
enable = false;
|
||||||
@@ -101,4 +101,4 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ with lib;
|
|||||||
default = "Deja Vu Sans";
|
default = "Deja Vu Sans";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.programs.wofi;
|
cfg = config.mjallen.programs.wofi;
|
||||||
nord = import ../../desktop/theme/nord.nix;
|
nord = import (lib.snowfall.fs.get-file "modules/home/desktop/theme/nord.nix");
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ with lib;
|
|||||||
default = "Deja Vu Sans";
|
default = "Deja Vu Sans";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,4 +26,4 @@ in
|
|||||||
# fi
|
# fi
|
||||||
# '';
|
# '';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
57
modules/home/shell-aliases/default.nix
Normal file
57
modules/home/shell-aliases/default.nix
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.mjallen.shell-aliases;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.mjallen.shell-aliases = {
|
||||||
|
enable = lib.mkEnableOption "Common shell aliases";
|
||||||
|
|
||||||
|
buildHost = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "admin@10.0.1.3";
|
||||||
|
description = "Build host for nixos-rebuild commands";
|
||||||
|
};
|
||||||
|
|
||||||
|
flakeInputs = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.str;
|
||||||
|
default = [ ];
|
||||||
|
description = "List of flake inputs to update";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraAliases = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
default = { };
|
||||||
|
description = "Additional host-specific aliases";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
programs.zsh.shellAliases = {
|
||||||
|
# Common file operations
|
||||||
|
ll = "ls -alh";
|
||||||
|
ducks = "du -cksh * | sort -hr | head -n 15";
|
||||||
|
|
||||||
|
# NixOS rebuild commands
|
||||||
|
update-boot =
|
||||||
|
"sudo nixos-rebuild boot --max-jobs 10"
|
||||||
|
+ lib.optionalString (cfg.buildHost != "") " --build-host ${cfg.buildHost}";
|
||||||
|
update-switch =
|
||||||
|
"sudo nixos-rebuild switch --max-jobs 10"
|
||||||
|
+ lib.optionalString (cfg.buildHost != "") " --build-host ${cfg.buildHost}";
|
||||||
|
|
||||||
|
# Flake update command
|
||||||
|
update-flake = lib.mkIf (
|
||||||
|
cfg.flakeInputs != [ ]
|
||||||
|
) "nix flake update ${lib.concatStringsSep " " cfg.flakeInputs} --flake /etc/nixos";
|
||||||
|
|
||||||
|
# NAS management
|
||||||
|
update-nas = "nixos-rebuild switch --use-remote-sudo --target-host admin@10.0.1.3 --build-host admin@10.0.1.3 --flake ~/nix-config#jallen-nas";
|
||||||
|
nas-ssh = "kitten ssh admin@10.0.1.3";
|
||||||
|
}
|
||||||
|
// cfg.extraAliases;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
{ config, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mjallen.sops;
|
cfg = config.mjallen.sops;
|
||||||
|
|
||||||
user = config.${namespace}.user.name;
|
user = config.${namespace}.user.name;
|
||||||
hostname = config.${namespace}.network.hostname;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
@@ -25,4 +29,4 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ with lib;
|
|||||||
default = null;
|
default = null;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ in
|
|||||||
default = "Austin Horstman";
|
default = "Austin Horstman";
|
||||||
description = "The full name of the user.";
|
description = "The full name of the user.";
|
||||||
};
|
};
|
||||||
home = mkOption {
|
home = mkOption {
|
||||||
type = (types.nullOr types.str);
|
type = (types.nullOr types.str);
|
||||||
default = home-directory;
|
default = home-directory;
|
||||||
description = "The user's home directory.";
|
description = "The user's home directory.";
|
||||||
@@ -65,20 +65,19 @@ in
|
|||||||
];
|
];
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
file =
|
file = {
|
||||||
{
|
"Desktop/.keep".text = "";
|
||||||
"Desktop/.keep".text = "";
|
"Documents/.keep".text = "";
|
||||||
"Documents/.keep".text = "";
|
"Downloads/.keep".text = "";
|
||||||
"Downloads/.keep".text = "";
|
"Music/.keep".text = "";
|
||||||
"Music/.keep".text = "";
|
"Pictures/.keep".text = "";
|
||||||
"Pictures/.keep".text = "";
|
"Videos/.keep".text = "";
|
||||||
"Videos/.keep".text = "";
|
}
|
||||||
}
|
// lib.optionalAttrs (cfg.icon != null) {
|
||||||
// lib.optionalAttrs (cfg.icon != null) {
|
".face".source = cfg.icon;
|
||||||
".face".source = cfg.icon;
|
".face.icon".source = cfg.icon;
|
||||||
".face.icon".source = cfg.icon;
|
"Pictures/${cfg.icon.fileName or (builtins.baseNameOf cfg.icon)}".source = cfg.icon;
|
||||||
"Pictures/${cfg.icon.fileName or (builtins.baseNameOf cfg.icon)}".source = cfg.icon;
|
};
|
||||||
};
|
|
||||||
|
|
||||||
homeDirectory = mkDefault cfg.home;
|
homeDirectory = mkDefault cfg.home;
|
||||||
|
|
||||||
@@ -154,4 +153,4 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.actual;
|
cfg = config.${namespace}.services.actual;
|
||||||
dataDir = "/data";
|
dataDir = "/data";
|
||||||
hostAddress = "10.0.1.3";
|
hostAddress = "10.0.1.3";
|
||||||
actualUserId = config.users.users.nix-apps.uid;
|
actualUserId = config.users.users.nix-apps.uid;
|
||||||
@@ -24,7 +30,8 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = { lib, ... }:
|
config =
|
||||||
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
services.actual = {
|
services.actual = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -63,13 +70,13 @@ in
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
systemd.services = {
|
systemd.services = {
|
||||||
actual = {
|
actual = {
|
||||||
environment.ACTUAL_CONFIG_PATH = lib.mkForce "${dataDir}/config.json";
|
environment.ACTUAL_CONFIG_PATH = lib.mkForce "${dataDir}/config.json";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = lib.mkForce "${pkgs.actual-server}/bin/actual-server --config ${dataDir}/config.json";
|
ExecStart = lib.mkForce "${pkgs.actual-server}/bin/actual-server --config ${dataDir}/config.json";
|
||||||
WorkingDirectory = lib.mkForce dataDir;
|
WorkingDirectory = lib.mkForce dataDir;
|
||||||
StateDirectory = lib.mkForce dataDir;
|
StateDirectory = lib.mkForce dataDir;
|
||||||
StateDirectoryMode = lib.mkForce 0700;
|
StateDirectoryMode = lib.mkForce 700;
|
||||||
DynamicUser = lib.mkForce false;
|
DynamicUser = lib.mkForce false;
|
||||||
ProtectSystem = lib.mkForce null;
|
ProtectSystem = lib.mkForce null;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.actual = {
|
options.${namespace}.services.actual = {
|
||||||
enable = mkEnableOption "actual service";
|
enable = mkEnableOption "actual service";
|
||||||
|
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.share.hardware.amd;
|
cfg = config.share.hardware.amd;
|
||||||
pkgsVersion = pkgs;#.unstable;
|
pkgsVersion = pkgs; # .unstable;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -11,4 +11,4 @@
|
|||||||
magicOrExtension = "\\x7fELF....AI\\x02";
|
magicOrExtension = "\\x7fELF....AI\\x02";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
{ lib, config, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.free-games-claimer;
|
cfg = config.${namespace}.services.free-games-claimer;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.free-games-claimer = {
|
options.${namespace}.services.free-games-claimer = {
|
||||||
enable = mkEnableOption "free-games-claimer docker service";
|
enable = mkEnableOption "free-games-claimer docker service";
|
||||||
|
|
||||||
autoStart = mkOption {
|
autoStart = mkOption {
|
||||||
@@ -26,7 +26,7 @@ with lib;
|
|||||||
|
|
||||||
dataPath = mkOption {
|
dataPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/free-games-claimer";
|
default = "/media/nas/main/nix-app-data/free-games-claimer";
|
||||||
};
|
};
|
||||||
|
|
||||||
puid = mkOption {
|
puid = mkOption {
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
{ lib, config, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.manyfold;
|
cfg = config.${namespace}.services.manyfold;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.manyfold = {
|
options.${namespace}.services.manyfold = {
|
||||||
enable = mkEnableOption "manyfold docker service";
|
enable = mkEnableOption "manyfold docker service";
|
||||||
|
|
||||||
autoStart = mkOption {
|
autoStart = mkOption {
|
||||||
@@ -26,7 +26,7 @@ with lib;
|
|||||||
|
|
||||||
configPath = mkOption {
|
configPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/manyfold";
|
default = "/media/nas/main/nix-app-data/manyfold";
|
||||||
};
|
};
|
||||||
|
|
||||||
dataPath = mkOption {
|
dataPath = mkOption {
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
{ lib, config, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.mongodb;
|
cfg = config.${namespace}.services.mongodb;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.mongodb = {
|
options.${namespace}.services.mongodb = {
|
||||||
enable = mkEnableOption "mongodb docker service";
|
enable = mkEnableOption "mongodb docker service";
|
||||||
|
|
||||||
autoStart = mkOption {
|
autoStart = mkOption {
|
||||||
@@ -26,7 +26,7 @@ with lib;
|
|||||||
|
|
||||||
configPath = mkOption {
|
configPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/mongodb";
|
default = "/media/nas/main/mongodb";
|
||||||
};
|
};
|
||||||
|
|
||||||
puid = mkOption {
|
puid = mkOption {
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
{ lib, config, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.tdarr;
|
cfg = config.${namespace}.services.tdarr;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.tdarr = {
|
options.${namespace}.services.tdarr = {
|
||||||
enable = mkEnableOption "tdarr docker service";
|
enable = mkEnableOption "tdarr docker service";
|
||||||
|
|
||||||
autoStart = mkOption {
|
autoStart = mkOption {
|
||||||
@@ -31,22 +31,22 @@ with lib;
|
|||||||
|
|
||||||
configPath = mkOption {
|
configPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/tdarr/config";
|
default = "/media/nas/main/nix-app-data/tdarr/config";
|
||||||
};
|
};
|
||||||
|
|
||||||
serverPath = mkOption {
|
serverPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/tdarr/server";
|
default = "/media/nas/main/nix-app-data/tdarr/server";
|
||||||
};
|
};
|
||||||
|
|
||||||
logPath = mkOption {
|
logPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/tdarr/logs";
|
default = "/media/nas/main/nix-app-data/tdarr/logs";
|
||||||
};
|
};
|
||||||
|
|
||||||
transcodePath = mkOption {
|
transcodePath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/tdarr/transcode";
|
default = "/media/nas/main/nix-app-data/tdarr/transcode";
|
||||||
};
|
};
|
||||||
|
|
||||||
moviesPath = mkOption {
|
moviesPath = mkOption {
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
{ lib, config, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.your_spotify;
|
cfg = config.${namespace}.services.your_spotify;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.your_spotify = {
|
options.${namespace}.services.your_spotify = {
|
||||||
enable = mkEnableOption "your_spotify docker service";
|
enable = mkEnableOption "your_spotify docker service";
|
||||||
|
|
||||||
autoStart = mkOption {
|
autoStart = mkOption {
|
||||||
@@ -36,7 +36,7 @@ with lib;
|
|||||||
|
|
||||||
configPath = mkOption {
|
configPath = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "/media/nas/ssd/nix-app-data/your_spotify";
|
default = "/media/nas/main/nix-app-data/your_spotify";
|
||||||
};
|
};
|
||||||
|
|
||||||
puid = mkOption {
|
puid = mkOption {
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
|
namespace,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.arrs;
|
cfg = config.${namespace}.services.arrs;
|
||||||
radarrDataDir = "/var/lib/radarr";
|
radarrDataDir = "/var/lib/radarr";
|
||||||
downloadDir = "/downloads";
|
downloadDir = "/downloads";
|
||||||
incompleteDir = "/downloads-incomplete";
|
incompleteDir = "/downloads-incomplete";
|
||||||
@@ -40,9 +41,11 @@ in
|
|||||||
{
|
{
|
||||||
nixpkgs.config = {
|
nixpkgs.config = {
|
||||||
allowUnfree = lib.mkForce true;
|
allowUnfree = lib.mkForce true;
|
||||||
allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
allowUnfreePredicate =
|
||||||
"unrar"
|
pkg:
|
||||||
];
|
builtins.elem (lib.getName pkg) [
|
||||||
|
"unrar"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Enable radarr service
|
# Enable radarr service
|
||||||
@@ -207,7 +210,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
nat = {
|
nat = {
|
||||||
forwardPorts = [
|
forwardPorts = [
|
||||||
{
|
{
|
||||||
destination = "${cfg.localAddress}:${toString cfg.radarr.port}";
|
destination = "${cfg.localAddress}:${toString cfg.radarr.port}";
|
||||||
@@ -232,8 +235,22 @@ in
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
firewall = {
|
firewall = {
|
||||||
allowedTCPPorts = [ cfg.radarr.port cfg.sonarr.port cfg.sabnzbd.port 8080 cfg.deluge.port cfg.jackett.port ];
|
allowedTCPPorts = [
|
||||||
allowedUDPPorts = [ cfg.radarr.port cfg.sonarr.port cfg.sabnzbd.port 8080 cfg.deluge.port cfg.jackett.port ];
|
cfg.radarr.port
|
||||||
|
cfg.sonarr.port
|
||||||
|
cfg.sabnzbd.port
|
||||||
|
8080
|
||||||
|
cfg.deluge.port
|
||||||
|
cfg.jackett.port
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
cfg.radarr.port
|
||||||
|
cfg.sonarr.port
|
||||||
|
cfg.sabnzbd.port
|
||||||
|
8080
|
||||||
|
cfg.deluge.port
|
||||||
|
cfg.jackett.port
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.arrs = {
|
options.${namespace}.services.arrs = {
|
||||||
enable = mkEnableOption "arrs services";
|
enable = mkEnableOption "arrs services";
|
||||||
|
|
||||||
radarr = {
|
radarr = {
|
||||||
|
|||||||
@@ -1,10 +1,32 @@
|
|||||||
{ ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
system,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
isArm = ("aarch64-linux" == system);
|
||||||
|
in
|
||||||
{
|
{
|
||||||
boot = {
|
boot = {
|
||||||
kernelParams = [
|
kernelParams = [
|
||||||
"quiet"
|
"quiet"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
binfmt = lib.mkIf isArm {
|
||||||
|
registrations."x86_64-linux" = {
|
||||||
|
magicOrExtension = ''\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00'';
|
||||||
|
mask = ''\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'';
|
||||||
|
openBinary = true;
|
||||||
|
interpreter = "${pkgs.box64}/bin/box64";
|
||||||
|
preserveArgvZero = true;
|
||||||
|
matchCredentials = true;
|
||||||
|
fixBinary = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
supportedFilesystems = [ "bcachefs" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
zramSwap.enable = true;
|
zramSwap.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, namespace, inputs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.bootloader.lanzaboote;
|
cfg = config.${namespace}.bootloader.lanzaboote;
|
||||||
@@ -15,4 +20,4 @@ in
|
|||||||
configurationLimit = cfg.configLimit;
|
configurationLimit = cfg.configLimit;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ with lib;
|
|||||||
default = 10;
|
default = 10;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
boot.plymouth = {
|
boot.plymouth = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +1,37 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.crowdsec;
|
cfg = config.${namespace}.services.crowdsec;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
services = {
|
services = {
|
||||||
crowdsec = let
|
crowdsec =
|
||||||
yaml = (pkgs.formats.yaml {}).generate;
|
let
|
||||||
acquisitions_file = yaml "acquisitions.yaml" {
|
yaml = (pkgs.formats.yaml { }).generate;
|
||||||
source = "journalctl";
|
acquisitions_file = yaml "acquisitions.yaml" {
|
||||||
journalctl_filter = ["_SYSTEMD_UNIT=sshd.service"];
|
source = "journalctl";
|
||||||
labels.type = "syslog";
|
journalctl_filter = [ "_SYSTEMD_UNIT=sshd.service" ];
|
||||||
};
|
labels.type = "syslog";
|
||||||
in {
|
};
|
||||||
enable = true;
|
in
|
||||||
enrollKeyFile = "${cfg.dataDir}/enroll.key";
|
{
|
||||||
settings = {
|
enable = true;
|
||||||
crowdsec_service.acquisition_path = acquisitions_file;
|
enrollKeyFile = "${cfg.dataDir}/enroll.key";
|
||||||
api.server = {
|
settings = {
|
||||||
listen_uri = "0.0.0.0:${toString cfg.port}";
|
crowdsec_service.acquisition_path = acquisitions_file;
|
||||||
|
api.server = {
|
||||||
|
listen_uri = "0.0.0.0:${toString cfg.port}";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
crowdsec-firewall-bouncer = {
|
crowdsec-firewall-bouncer = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -35,17 +43,19 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.crowdsec.serviceConfig = {
|
systemd.services.crowdsec.serviceConfig = {
|
||||||
ExecStartPre = let
|
ExecStartPre =
|
||||||
script = pkgs.writeScriptBin "register-bouncer" ''
|
let
|
||||||
#!${pkgs.runtimeShell}
|
script = pkgs.writeScriptBin "register-bouncer" ''
|
||||||
set -eu
|
#!${pkgs.runtimeShell}
|
||||||
set -o pipefail
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
if ! cscli bouncers list | grep -q "nas-bouncer"; then
|
if ! cscli bouncers list | grep -q "nas-bouncer"; then
|
||||||
cscli bouncers add "nas-bouncer" --key "${cfg.apiKey}"
|
cscli bouncers add "nas-bouncer" --key "${cfg.apiKey}"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
in ["${script}/bin/register-bouncer"];
|
in
|
||||||
|
[ "${script}/bin/register-bouncer" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
@@ -55,4 +65,4 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.crowdsec = {
|
options.${namespace}.services.crowdsec = {
|
||||||
enable = mkEnableOption "crowdsec service";
|
enable = mkEnableOption "crowdsec service";
|
||||||
|
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.desktop.cosmic;
|
cfg = config.${namespace}.desktop.cosmic;
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.${namespace}.desktop.cosmic = {
|
options.${namespace}.desktop.cosmic = {
|
||||||
enable = mkEnableOption "enable cosmic settings";
|
enable = mkEnableOption "enable cosmic settings";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
{ config, lib, pkgs, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.desktop.gnome;
|
cfg = config.${namespace}.desktop.gnome;
|
||||||
in
|
in
|
||||||
@@ -17,14 +23,14 @@ in
|
|||||||
|
|
||||||
gnome.gnome-remote-desktop.enable = true;
|
gnome.gnome-remote-desktop.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
kdeconnect = {
|
kdeconnect = {
|
||||||
enable = true;
|
enable = lib.mkDefault true;
|
||||||
package = pkgs.gnomeExtensions.gsconnect;
|
package = pkgs.gnomeExtensions.gsconnect;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
{ config, pkgs, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.desktop.hyprland;
|
cfg = config.${namespace}.desktop.hyprland;
|
||||||
|
|
||||||
@@ -26,7 +32,10 @@ in
|
|||||||
imports = [ ../../../home/desktop/hyprland/options.nix ];
|
imports = [ ../../../home/desktop/hyprland/options.nix ];
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
environment.systemPackages = [ bing-wallpaper pkgs.jq ];
|
environment.systemPackages = [
|
||||||
|
bing-wallpaper
|
||||||
|
pkgs.jq
|
||||||
|
];
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
displayManager = {
|
displayManager = {
|
||||||
@@ -66,7 +75,7 @@ in
|
|||||||
xwayland.enable = true;
|
xwayland.enable = true;
|
||||||
portalPackage = lib.mkDefault pkgs.xdg-desktop-portal-hyprland;
|
portalPackage = lib.mkDefault pkgs.xdg-desktop-portal-hyprland;
|
||||||
};
|
};
|
||||||
|
|
||||||
nm-applet.enable = true;
|
nm-applet.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -121,19 +130,16 @@ in
|
|||||||
reload-bing-wallpaper = {
|
reload-bing-wallpaper = {
|
||||||
description = "Timer for reload-bing-wallpaper";
|
description = "Timer for reload-bing-wallpaper";
|
||||||
wantedBy = [ "timers.target" ];
|
wantedBy = [ "timers.target" ];
|
||||||
|
|
||||||
# Timer configuration
|
# Timer configuration
|
||||||
timerConfig = {
|
timerConfig = {
|
||||||
OnCalendar = "daily"; # Check every day
|
OnCalendar = "daily"; # Check every day
|
||||||
Persistent = true; # Run immediately if last run was missed
|
Persistent = true; # Run immediately if last run was missed
|
||||||
Unit = "reload-bing-wallpaper.service";
|
Unit = "reload-bing-wallpaper.service";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
extraConfig = ''
|
|
||||||
DefaultTimeoutStopSec=10s
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
security = {
|
security = {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
let
|
let
|
||||||
nord = import ./theme.nix;
|
nord = import ./theme.nix;
|
||||||
themeSize = "compact"; # [ "standard" "compact" ]
|
themeSize = "compact"; # [ "standard" "compact" ]
|
||||||
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
themeAccent = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
||||||
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
|
themeVariant = "nord"; # [ "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" "black" "rimless" "normal" "float" ]
|
||||||
themeColor = "dark"; # [ "standard" "light" "dark" ]
|
themeColor = "dark"; # [ "standard" "light" "dark" ]
|
||||||
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
iconThemeVariant = "all"; # [ "default" "purple" "pink" "red" "orange" "yellow" "green" "teal" "grey" "all" ]
|
||||||
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]
|
iconScheme = "nord"; # [ "default" "nord" "dracula" "gruvbox" "everforest" "catppuccin" "all" ]
|
||||||
|
|
||||||
@@ -105,4 +105,4 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
theme = nord;
|
theme = nord;
|
||||||
}
|
}
|
||||||
|
|||||||
92
modules/nixos/development/default.nix
Normal file
92
modules/nixos/development/default.nix
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.development;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.${namespace}.development = {
|
||||||
|
enable = lib.mkEnableOption "Common development tools and packages";
|
||||||
|
|
||||||
|
includeLanguages = lib.mkOption {
|
||||||
|
type = lib.types.listOf (
|
||||||
|
lib.types.enum [
|
||||||
|
"python"
|
||||||
|
"c"
|
||||||
|
"rust"
|
||||||
|
"nodejs"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
default = [
|
||||||
|
"python"
|
||||||
|
"c"
|
||||||
|
];
|
||||||
|
description = "Programming languages to include tools for";
|
||||||
|
};
|
||||||
|
|
||||||
|
includeContainers = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Include container development tools";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
environment.systemPackages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
# Version control
|
||||||
|
git
|
||||||
|
|
||||||
|
# Build tools
|
||||||
|
cmake
|
||||||
|
ninja
|
||||||
|
binutils
|
||||||
|
|
||||||
|
# System utilities
|
||||||
|
jq
|
||||||
|
|
||||||
|
# Text processing
|
||||||
|
|
||||||
|
]
|
||||||
|
++ lib.optionals (builtins.elem "python" cfg.includeLanguages) [
|
||||||
|
python3
|
||||||
|
python3Packages.pip
|
||||||
|
]
|
||||||
|
++ lib.optionals (builtins.elem "c" cfg.includeLanguages) [
|
||||||
|
gcc
|
||||||
|
gdb
|
||||||
|
]
|
||||||
|
++ lib.optionals (builtins.elem "rust" cfg.includeLanguages) [
|
||||||
|
rustc
|
||||||
|
cargo
|
||||||
|
]
|
||||||
|
++ lib.optionals (builtins.elem "nodejs" cfg.includeLanguages) [
|
||||||
|
nodejs
|
||||||
|
npm
|
||||||
|
]
|
||||||
|
++ lib.optionals cfg.includeContainers [
|
||||||
|
docker-compose
|
||||||
|
podman-compose
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enable container support if requested
|
||||||
|
virtualisation.podman = lib.mkIf cfg.includeContainers {
|
||||||
|
enable = true;
|
||||||
|
dockerCompat = true;
|
||||||
|
autoPrune.enable = true;
|
||||||
|
defaultNetwork.settings = {
|
||||||
|
dns_enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Common development programs
|
||||||
|
programs = {
|
||||||
|
nix-ld.enable = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,19 +1,79 @@
|
|||||||
{ config, lib, system, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
system,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
|
cfg = config.${namespace}.hardware.disko;
|
||||||
isArm = builtins.match "aarch64*" system != null;
|
isArm = builtins.match "aarch64*" system != null;
|
||||||
rootDisk = "/dev/nvme0n1";
|
rootDisk = "/dev/nvme0n1";
|
||||||
|
|
||||||
|
# BTRFS root partition configuration
|
||||||
|
btrfsRoot = {
|
||||||
|
name = "btrfs-root";
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
extraArgs = [ "-f" ]; # Override existing partition
|
||||||
|
# Subvolumes must set a mountpoint in order to be mounted,
|
||||||
|
# unless their parent is mounted
|
||||||
|
subvolumes = {
|
||||||
|
"home" = {
|
||||||
|
mountOptions = [ "compress=zstd" ];
|
||||||
|
mountpoint = "/home";
|
||||||
|
};
|
||||||
|
"root" = {
|
||||||
|
mountOptions = [
|
||||||
|
"compress=zstd"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
mountpoint = "/root";
|
||||||
|
};
|
||||||
|
"nix" = {
|
||||||
|
mountOptions = [
|
||||||
|
"compress=zstd"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
mountpoint = "/nix";
|
||||||
|
};
|
||||||
|
"etc" = {
|
||||||
|
mountOptions = [
|
||||||
|
"compress=zstd"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
mountpoint = "/etc";
|
||||||
|
};
|
||||||
|
"log" = {
|
||||||
|
mountOptions = [
|
||||||
|
"compress=zstd"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
mountpoint = "/var/log";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# BCacheFS root partition configuration
|
||||||
|
bcachefsRoot = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "bcachefs";
|
||||||
|
# This refers to a filesystem in the `bcachefs_filesystems` attrset below.
|
||||||
|
filesystem = "mounted_subvolumes_in_multi";
|
||||||
|
label = "ssd.ssd1";
|
||||||
|
extraFormatArgs = [
|
||||||
|
"--discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = lib.mkIf isArm {
|
imports = [ ../options.nix ];
|
||||||
|
config = lib.mkIf (isArm && cfg.enable) {
|
||||||
disko.devices = {
|
disko.devices = {
|
||||||
nodev."/" = {
|
|
||||||
fsType = "tmpfs";
|
|
||||||
mountOptions = [
|
|
||||||
"mode=755"
|
|
||||||
"defaults"
|
|
||||||
"size=2G"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
# root disk setup
|
# root disk setup
|
||||||
disk.main = {
|
disk.main = {
|
||||||
type = "disk";
|
type = "disk";
|
||||||
@@ -53,58 +113,33 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
root = {
|
root = if cfg.filesystem == "btrfs" then btrfsRoot else bcachefsRoot;
|
||||||
name = "btrfs-root";
|
};
|
||||||
size = "100%";
|
};
|
||||||
content = {
|
};
|
||||||
type = "btrfs";
|
|
||||||
extraArgs = [ "-f" ]; # Override existing partition
|
bcachefs_filesystems = lib.mkIf (cfg.filesystem == "bcachefs") {
|
||||||
# Subvolumes must set a mountpoint in order to be mounted,
|
mounted_subvolumes_in_multi = {
|
||||||
# unless their parent is mounted
|
type = "bcachefs_filesystem";
|
||||||
subvolumes = {
|
# passwordFile = "/etc/nixos/pool.jwe";
|
||||||
"home" = {
|
extraFormatArgs = [
|
||||||
mountOptions = [ "compress=zstd" ];
|
"--compression=zstd"
|
||||||
mountpoint = "/home";
|
];
|
||||||
};
|
subvolumes = {
|
||||||
"root" = {
|
"/root" = {
|
||||||
mountOptions = [
|
mountpoint = "/";
|
||||||
"compress=zstd"
|
};
|
||||||
"noatime"
|
"/persistent" = {
|
||||||
];
|
mountpoint = "/persistent";
|
||||||
mountpoint = "/root";
|
};
|
||||||
};
|
"/nix" = {
|
||||||
"nix" = {
|
mountOptions = [
|
||||||
mountOptions = [
|
"noatime"
|
||||||
"compress=zstd"
|
];
|
||||||
"noatime"
|
mountpoint = "/nix";
|
||||||
];
|
|
||||||
mountpoint = "/nix";
|
|
||||||
};
|
|
||||||
"etc" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/etc";
|
|
||||||
};
|
|
||||||
"tmp" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/tmp";
|
|
||||||
};
|
|
||||||
"log" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/var/log";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
mountpoint = "/partition-root";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,5 +3,13 @@ with lib;
|
|||||||
{
|
{
|
||||||
options.${namespace}.hardware.disko = {
|
options.${namespace}.hardware.disko = {
|
||||||
enable = mkEnableOption "enable disko";
|
enable = mkEnableOption "enable disko";
|
||||||
|
filesystem = mkOption {
|
||||||
|
type = types.enum [
|
||||||
|
"bcachefs"
|
||||||
|
"btrfs"
|
||||||
|
];
|
||||||
|
default = "btrfs";
|
||||||
|
description = "Filesystem to use for the root partition";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,93 +1,142 @@
|
|||||||
{ config, lib, system, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
system,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.hardware.disko;
|
cfg = config.${namespace}.hardware.disko;
|
||||||
isArm = builtins.match "aarch64*" system != null;
|
isArm = builtins.match "aarch64*" system != null;
|
||||||
rootDisk = "/dev/nvme0n1";
|
rootDisk = "/dev/nvme0n1";
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [ ../options.nix ];
|
|
||||||
|
|
||||||
config = lib.mkIf (cfg.enable && !isArm) {
|
# BTRFS root partition configuration
|
||||||
disko.devices = {
|
btrfsRoot = {
|
||||||
nodev."/" = {
|
name = "btrfs-root";
|
||||||
fsType = "tmpfs";
|
size = "100%";
|
||||||
mountOptions = [
|
content = {
|
||||||
"mode=755"
|
type = "btrfs";
|
||||||
"defaults"
|
extraArgs = [ "-f" ]; # Override existing partition
|
||||||
"size=25%"
|
# Subvolumes must set a mountpoint in order to be mounted,
|
||||||
];
|
# unless their parent is mounted
|
||||||
};
|
subvolumes = {
|
||||||
# root disk setup
|
"home" = {
|
||||||
disk.main = {
|
mountOptions = [ "compress=zstd" ];
|
||||||
type = "disk";
|
mountpoint = "/home";
|
||||||
device = rootDisk;
|
};
|
||||||
imageSize = "32G";
|
"root" = {
|
||||||
content = {
|
mountOptions = [
|
||||||
type = "gpt";
|
"compress=zstd"
|
||||||
# specify partitions
|
"noatime"
|
||||||
partitions = {
|
];
|
||||||
# /boot
|
mountpoint = "/root";
|
||||||
ESP = {
|
};
|
||||||
priority = 1;
|
"nix" = {
|
||||||
name = "ESP";
|
mountOptions = [
|
||||||
start = "1M";
|
"compress=zstd"
|
||||||
end = "1G";
|
"noatime"
|
||||||
type = "EF00";
|
];
|
||||||
content = {
|
mountpoint = "/nix";
|
||||||
type = "filesystem";
|
};
|
||||||
format = "vfat";
|
"etc" = {
|
||||||
mountpoint = "/boot";
|
mountOptions = [
|
||||||
mountOptions = [ "umask=0077" ];
|
"compress=zstd"
|
||||||
};
|
"noatime"
|
||||||
};
|
];
|
||||||
|
mountpoint = "/etc";
|
||||||
root = {
|
};
|
||||||
name = "btrfs-root";
|
"log" = {
|
||||||
size = "100%";
|
mountOptions = [
|
||||||
content = {
|
"compress=zstd"
|
||||||
type = "btrfs";
|
"noatime"
|
||||||
extraArgs = [ "-f" ]; # Override existing partition
|
];
|
||||||
# Subvolumes must set a mountpoint in order to be mounted,
|
mountpoint = "/var/log";
|
||||||
# unless their parent is mounted
|
|
||||||
subvolumes = {
|
|
||||||
"home" = {
|
|
||||||
mountOptions = [ "compress=zstd" ];
|
|
||||||
mountpoint = "/home";
|
|
||||||
};
|
|
||||||
"root" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/root";
|
|
||||||
};
|
|
||||||
"nix" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/nix";
|
|
||||||
};
|
|
||||||
"etc" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/etc";
|
|
||||||
};
|
|
||||||
"log" = {
|
|
||||||
mountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
];
|
|
||||||
mountpoint = "/var/log";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# BCacheFS root partition configuration
|
||||||
|
bcachefsRoot = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "bcachefs";
|
||||||
|
# This refers to a filesystem in the `bcachefs_filesystems` attrset below.
|
||||||
|
filesystem = "mounted_subvolumes_in_multi";
|
||||||
|
label = "ssd.ssd1";
|
||||||
|
extraFormatArgs = [
|
||||||
|
"--discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ../options.nix ];
|
||||||
|
config = lib.mkIf (!isArm && cfg.enable) {
|
||||||
|
disko.devices = lib.mkMerge [
|
||||||
|
{
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
device = rootDisk;
|
||||||
|
type = "disk";
|
||||||
|
imageSize = "32G";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
type = "EF00";
|
||||||
|
size = "100M";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
root = if cfg.filesystem == "btrfs" then btrfsRoot else bcachefsRoot;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
bcachefs_filesystems = lib.mkIf (cfg.filesystem == "bcachefs") {
|
||||||
|
mounted_subvolumes_in_multi = {
|
||||||
|
type = "bcachefs_filesystem";
|
||||||
|
# passwordFile = "/etc/nixos/pool.jwe";
|
||||||
|
extraFormatArgs = [
|
||||||
|
"--compression=zstd"
|
||||||
|
];
|
||||||
|
subvolumes = {
|
||||||
|
"subvolumes/root" = {
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [
|
||||||
|
"verbose"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"subvolumes/persistent" = {
|
||||||
|
mountpoint = "/persistent";
|
||||||
|
};
|
||||||
|
"subvolumes/nix" = {
|
||||||
|
mountOptions = [
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
mountpoint = "/nix";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
(lib.mkIf (cfg.filesystem == "btrfs") {
|
||||||
|
nodev."/" = {
|
||||||
|
fsType = "tmpfs";
|
||||||
|
mountOptions = [
|
||||||
|
"mode=755"
|
||||||
|
"defaults"
|
||||||
|
"size=25%"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
{ lib, pkgs, ... }:
|
{ lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
fonts.packages = with pkgs; [
|
fonts.packages =
|
||||||
font-awesome
|
with pkgs;
|
||||||
noto-fonts
|
[
|
||||||
noto-fonts-color-emoji
|
font-awesome
|
||||||
meslo-lgs-nf
|
noto-fonts
|
||||||
] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
noto-fonts-color-emoji
|
||||||
|
meslo-lgs-nf
|
||||||
|
]
|
||||||
|
++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
||||||
|
|
||||||
fonts.fontconfig.defaultFonts = {
|
fonts.fontconfig.defaultFonts = {
|
||||||
emoji = [
|
emoji = [
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.share.gaming;
|
cfg = config.share.gaming;
|
||||||
pkgsVersion = pkgs; #.unstable;
|
pkgsVersion = pkgs; # .unstable;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
@@ -17,7 +22,7 @@ in
|
|||||||
remotePlay.openFirewall = true;
|
remotePlay.openFirewall = true;
|
||||||
# Open ports in the firewall for Source Dedicated Server
|
# Open ports in the firewall for Source Dedicated Server
|
||||||
dedicatedServer.openFirewall = true;
|
dedicatedServer.openFirewall = true;
|
||||||
extraCompatPackages = with pkgsVersion; [ proton-ge-bin];
|
extraCompatPackages = with pkgsVersion; [ proton-ge-bin ];
|
||||||
gamescopeSession = {
|
gamescopeSession = {
|
||||||
enable = true;
|
enable = true;
|
||||||
args = [
|
args = [
|
||||||
@@ -57,7 +62,7 @@ in
|
|||||||
nixpkgs.config.packageOverrides = pkgs: {
|
nixpkgs.config.packageOverrides = pkgs: {
|
||||||
steam = pkgs.steam.override {
|
steam = pkgs.steam.override {
|
||||||
extraPkgs =
|
extraPkgs =
|
||||||
pkgs: with pkgsVersion; [
|
_pkgs: with pkgsVersion; [
|
||||||
xorg.libXcursor
|
xorg.libXcursor
|
||||||
xorg.libXi
|
xorg.libXi
|
||||||
xorg.libXinerama
|
xorg.libXinerama
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
{ config, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.nas-apps.gitea;
|
cfg = config.${namespace}.services.gitea;
|
||||||
hostAddress = "10.0.1.3";
|
hostAddress = "10.0.1.3";
|
||||||
# localAddress = "10.0.4.18";
|
# localAddress = "10.0.4.18";
|
||||||
# httpPort = 3000;
|
# httpPort = 3000;
|
||||||
# sshPort = 2222;
|
# sshPort = 2222;
|
||||||
rootUrl = "https://gitea.mjallen.dev/";
|
rootUrl = "https://gitea.mjallen.dev/";
|
||||||
# stateDir = "/media/nas/ssd/nix-app-data/gitea";
|
# stateDir = "/media/nas/main/nix-app-data/gitea";
|
||||||
dataDir = "/var/lib/gitea";
|
dataDir = "/var/lib/gitea";
|
||||||
secretsDir = "/run/secrets/jallen-nas/gitea";
|
secretsDir = "/run/secrets/jallen-nas/gitea";
|
||||||
mailerPasswordFile = config.sops.secrets."jallen-nas/gitea/mail-key".path;
|
mailerPasswordFile = config.sops.secrets."jallen-nas/gitea/mail-key".path;
|
||||||
@@ -34,7 +39,8 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = { lib, ... }:
|
config =
|
||||||
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -71,7 +77,10 @@ in
|
|||||||
networking = {
|
networking = {
|
||||||
firewall = {
|
firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
allowedTCPPorts = [ cfg.httpPort cfg.sshPort ];
|
allowedTCPPorts = [
|
||||||
|
cfg.httpPort
|
||||||
|
cfg.sshPort
|
||||||
|
];
|
||||||
};
|
};
|
||||||
# Use systemd-resolved inside the container
|
# Use systemd-resolved inside the container
|
||||||
# Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686
|
# Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686
|
||||||
@@ -122,8 +131,14 @@ in
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
firewall = {
|
firewall = {
|
||||||
allowedTCPPorts = [ cfg.httpPort cfg.sshPort ];
|
allowedTCPPorts = [
|
||||||
allowedUDPPorts = [ cfg.httpPort cfg.sshPort ];
|
cfg.httpPort
|
||||||
|
cfg.sshPort
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
cfg.httpPort
|
||||||
|
cfg.sshPort
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{ lib, ... }:
|
{ lib, namespace, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
options.nas-apps.gitea = {
|
options.${namespace}.services.gitea = {
|
||||||
enable = mkEnableOption "gitea service";
|
enable = mkEnableOption "gitea service";
|
||||||
|
|
||||||
httpPort = mkOption {
|
httpPort = mkOption {
|
||||||
|
|||||||
@@ -11,4 +11,4 @@
|
|||||||
"/home"
|
"/home"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{ lib, system, ... }:
|
{ lib, system, ... }:
|
||||||
let
|
let
|
||||||
isArm = "aarch64-linux" == system;
|
isArm = "aarch64-linux" == system;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
hardware = {
|
hardware = {
|
||||||
|
|||||||
@@ -4,8 +4,12 @@
|
|||||||
options,
|
options,
|
||||||
namespace,
|
namespace,
|
||||||
inputs,
|
inputs,
|
||||||
|
system,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
let
|
||||||
|
isArm = ("aarch64-linux" == system);
|
||||||
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
options.${namespace}.home = with lib.types; {
|
options.${namespace}.home = with lib.types; {
|
||||||
@@ -41,22 +45,26 @@
|
|||||||
useGlobalPkgs = true;
|
useGlobalPkgs = true;
|
||||||
useUserPackages = true;
|
useUserPackages = true;
|
||||||
|
|
||||||
# Pass inputs so external modules can access them
|
# Pass inputs so external modules can access them
|
||||||
extraSpecialArgs = {
|
extraSpecialArgs = {
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Make ALL external HM modules available globally
|
|
||||||
sharedModules = with inputs; [
|
|
||||||
sops-nix.homeManagerModules.sops
|
|
||||||
steam-rom-manager.homeManagerModules.default
|
|
||||||
# Add any other external HM modules here
|
|
||||||
];
|
|
||||||
|
|
||||||
users.${config.${namespace}.user.name} = lib.mkAliasDefinitions options.${namespace}.home.extraOptions;
|
# Make ALL external HM modules available globally
|
||||||
|
sharedModules =
|
||||||
|
with inputs;
|
||||||
|
[
|
||||||
|
sops-nix.homeManagerModules.sops
|
||||||
|
# Add any other external HM modules here
|
||||||
|
]
|
||||||
|
++ (if (!isArm) then with inputs; [ steam-rom-manager.homeManagerModules.default ] else [ ]);
|
||||||
|
|
||||||
|
users.${config.${namespace}.user.name} =
|
||||||
|
lib.mkAliasDefinitions
|
||||||
|
options.${namespace}.home.extraOptions;
|
||||||
# users.admin = lib.mkAliasDefinitions options.${namespace}.home.extraOptions;
|
# users.admin = lib.mkAliasDefinitions options.${namespace}.home.extraOptions;
|
||||||
|
|
||||||
verbose = true;
|
verbose = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,14 @@
|
|||||||
{ config, lib, pkgs, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.services.home-assistant;
|
cfg = config.${namespace}.services.home-assistant;
|
||||||
mosquittoPort = 1883;
|
mosquittoPort = 1883;
|
||||||
zigbee2mqttPort = 8080;
|
zigbee2mqttPort = 8080;
|
||||||
|
|
||||||
# In configuration.nix or a separate file
|
|
||||||
python-steam = pkgs.python3Packages.buildPythonPackage rec {
|
|
||||||
pname = "steam";
|
|
||||||
version = "1.4.4";
|
|
||||||
pyproject = false;
|
|
||||||
src = pkgs.fetchPypi {
|
|
||||||
inherit pname version;
|
|
||||||
sha256 = "sha256-K1vWkRwNSnMS9EG40WK52NR8i+u478bIhnOTsDI/pS4=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = with pkgs.python3Packages; [ setuptools ];
|
|
||||||
|
|
||||||
doCheck = false; # no tests in the PyPI tarball
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
@@ -60,6 +51,7 @@ in
|
|||||||
"nws"
|
"nws"
|
||||||
"ollama"
|
"ollama"
|
||||||
"onedrive"
|
"onedrive"
|
||||||
|
"open_router"
|
||||||
"ping"
|
"ping"
|
||||||
"radio_browser"
|
"radio_browser"
|
||||||
"samsungtv"
|
"samsungtv"
|
||||||
@@ -74,7 +66,7 @@ in
|
|||||||
"wyoming"
|
"wyoming"
|
||||||
"zha"
|
"zha"
|
||||||
];
|
];
|
||||||
|
|
||||||
customComponents = with pkgs.home-assistant-custom-components; [
|
customComponents = with pkgs.home-assistant-custom-components; [
|
||||||
# nixpkgs
|
# nixpkgs
|
||||||
auth-header
|
auth-header
|
||||||
@@ -87,6 +79,7 @@ in
|
|||||||
pkgs.${namespace}.ha-icloud3
|
pkgs.${namespace}.ha-icloud3
|
||||||
pkgs.${namespace}.ha-mail-and-packages
|
pkgs.${namespace}.ha-mail-and-packages
|
||||||
pkgs.${namespace}.ha-nanokvm
|
pkgs.${namespace}.ha-nanokvm
|
||||||
|
pkgs.${namespace}.ha-openhasp
|
||||||
pkgs.${namespace}.ha-overseerr
|
pkgs.${namespace}.ha-overseerr
|
||||||
pkgs.${namespace}.ha-petlibro
|
pkgs.${namespace}.ha-petlibro
|
||||||
pkgs.${namespace}.ha-wyzeapi
|
pkgs.${namespace}.ha-wyzeapi
|
||||||
@@ -106,113 +99,114 @@ in
|
|||||||
zigbee2mqtt-networkmap
|
zigbee2mqtt-networkmap
|
||||||
];
|
];
|
||||||
# use postgresql instead of sqlite
|
# use postgresql instead of sqlite
|
||||||
extraPackages = ps: with ps; [
|
extraPackages =
|
||||||
# Core functionality
|
ps: with ps; [
|
||||||
aiohttp
|
# Core functionality
|
||||||
aiodns
|
aiohttp
|
||||||
paho-mqtt
|
aiodns
|
||||||
pillow
|
paho-mqtt
|
||||||
pytz
|
pillow
|
||||||
pyyaml
|
pytz
|
||||||
sqlalchemy
|
pyyaml
|
||||||
|
sqlalchemy
|
||||||
# Discovery & networking
|
|
||||||
zeroconf
|
|
||||||
netdisco
|
|
||||||
ifaddr
|
|
||||||
ssdp
|
|
||||||
|
|
||||||
# Device protocols
|
|
||||||
pyserial # Serial communications
|
|
||||||
bluepy # Bluetooth LE
|
|
||||||
|
|
||||||
# Smart home ecosystems
|
|
||||||
mutagen # Media file metadata
|
|
||||||
pysonos # Sonos
|
|
||||||
pywemo # Belkin WeMo
|
|
||||||
python-miio # Xiaomi devices
|
|
||||||
python-kasa # TP-Link
|
|
||||||
|
|
||||||
# Sensors & monitoring
|
|
||||||
meteocalc # Weather calculations
|
|
||||||
speedtest-cli # Internet speed
|
|
||||||
|
|
||||||
# Visualization & UI
|
|
||||||
matplotlib # Graphing
|
|
||||||
|
|
||||||
# Security
|
|
||||||
bcrypt
|
|
||||||
cryptography
|
|
||||||
pyjwt
|
|
||||||
|
|
||||||
# Media
|
|
||||||
ha-ffmpeg # Camera streams
|
|
||||||
|
|
||||||
# Specialized integrations
|
|
||||||
python-matter-server # Matter protocol
|
|
||||||
|
|
||||||
# System integrations
|
|
||||||
psutil # System monitoring
|
|
||||||
|
|
||||||
psycopg2
|
|
||||||
numpy
|
|
||||||
hassil
|
|
||||||
pyturbojpeg
|
|
||||||
paho-mqtt
|
|
||||||
pychromecast
|
|
||||||
pyatv
|
|
||||||
python-otbr-api
|
|
||||||
brother
|
|
||||||
pyipp
|
|
||||||
govee-ble
|
|
||||||
adguardhome
|
|
||||||
nextcord
|
|
||||||
aiogithubapi
|
|
||||||
jellyfin-apiclient-python
|
|
||||||
pylitterbot
|
|
||||||
dateparser
|
|
||||||
aionut
|
|
||||||
nextcloudmonitor
|
|
||||||
ollama
|
|
||||||
pynecil
|
|
||||||
aiopyarr
|
|
||||||
pysabnzbd
|
|
||||||
getmac
|
|
||||||
zigpy
|
|
||||||
bellows # For Zigbee EmberZNet-based adapters
|
|
||||||
zigpy-xbee # For XBee adapters
|
|
||||||
zigpy-deconz # For ConBee/RaspBee adapters
|
|
||||||
pyicloud # iCloud
|
|
||||||
pyatv # Apple TV
|
|
||||||
opencv-python
|
|
||||||
face-recognition
|
|
||||||
ibeacon-ble
|
|
||||||
gehomesdk
|
|
||||||
onedrive-personal-sdk
|
|
||||||
python-roborock
|
|
||||||
python-steam
|
|
||||||
apple-weatherkit
|
|
||||||
|
|
||||||
samsungctl
|
# Discovery & networking
|
||||||
samsungtvws
|
zeroconf
|
||||||
|
netdisco
|
||||||
|
ifaddr
|
||||||
|
ssdp
|
||||||
|
|
||||||
aiohomekit
|
# Device protocols
|
||||||
|
pyserial # Serial communications
|
||||||
|
bluepy # Bluetooth LE
|
||||||
|
|
||||||
|
# Smart home ecosystems
|
||||||
|
mutagen # Media file metadata
|
||||||
|
pysonos # Sonos
|
||||||
|
pywemo # Belkin WeMo
|
||||||
|
python-miio # Xiaomi devices
|
||||||
|
python-kasa # TP-Link
|
||||||
|
|
||||||
|
# Sensors & monitoring
|
||||||
|
meteocalc # Weather calculations
|
||||||
|
speedtest-cli # Internet speed
|
||||||
|
|
||||||
|
# Visualization & UI
|
||||||
|
matplotlib # Graphing
|
||||||
|
|
||||||
|
# Security
|
||||||
|
bcrypt
|
||||||
|
cryptography
|
||||||
|
pyjwt
|
||||||
|
|
||||||
|
# Media
|
||||||
|
ha-ffmpeg # Camera streams
|
||||||
|
|
||||||
|
# Specialized integrations
|
||||||
|
python-matter-server # Matter protocol
|
||||||
|
|
||||||
|
# System integrations
|
||||||
|
psutil # System monitoring
|
||||||
|
|
||||||
|
psycopg2
|
||||||
|
numpy
|
||||||
|
hassil
|
||||||
|
pyturbojpeg
|
||||||
|
paho-mqtt
|
||||||
|
pychromecast
|
||||||
|
pyatv
|
||||||
|
python-otbr-api
|
||||||
|
brother
|
||||||
|
pyipp
|
||||||
|
govee-ble
|
||||||
|
adguardhome
|
||||||
|
nextcord
|
||||||
|
aiogithubapi
|
||||||
|
jellyfin-apiclient-python
|
||||||
|
pylitterbot
|
||||||
|
dateparser
|
||||||
|
aionut
|
||||||
|
nextcloudmonitor
|
||||||
|
ollama
|
||||||
|
pynecil
|
||||||
|
aiopyarr
|
||||||
|
pysabnzbd
|
||||||
|
getmac
|
||||||
|
zigpy
|
||||||
|
bellows # For Zigbee EmberZNet-based adapters
|
||||||
|
zigpy-xbee # For XBee adapters
|
||||||
|
zigpy-deconz # For ConBee/RaspBee adapters
|
||||||
|
pyicloud # iCloud
|
||||||
|
pyatv # Apple TV
|
||||||
|
opencv-python
|
||||||
|
face-recognition
|
||||||
|
ibeacon-ble
|
||||||
|
gehomesdk
|
||||||
|
onedrive-personal-sdk
|
||||||
|
python-roborock
|
||||||
|
pkgs.${namespace}.python-steam
|
||||||
|
apple-weatherkit
|
||||||
|
|
||||||
|
samsungctl
|
||||||
|
samsungtvws
|
||||||
|
|
||||||
|
aiohomekit
|
||||||
|
|
||||||
|
icmplib
|
||||||
|
aioelectricitymaps
|
||||||
|
wyoming
|
||||||
|
pysmartthings
|
||||||
|
wakeonlan
|
||||||
|
ephem
|
||||||
|
];
|
||||||
|
|
||||||
icmplib
|
|
||||||
aioelectricitymaps
|
|
||||||
wyoming
|
|
||||||
pysmartthings
|
|
||||||
wakeonlan
|
|
||||||
ephem
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
# Includes dependencies for a basic setup
|
# Includes dependencies for a basic setup
|
||||||
# https://www.home-assistant.io/integrations/default_config/
|
# https://www.home-assistant.io/integrations/default_config/
|
||||||
default_config = {};
|
default_config = { };
|
||||||
|
|
||||||
cloud = false;
|
cloud = false;
|
||||||
|
|
||||||
frontend = {
|
frontend = {
|
||||||
themes = "!include_dir_merge_named themes";
|
themes = "!include_dir_merge_named themes";
|
||||||
};
|
};
|
||||||
@@ -226,7 +220,7 @@ in
|
|||||||
trusted_proxies = [
|
trusted_proxies = [
|
||||||
"172.30.33.0/24"
|
"172.30.33.0/24"
|
||||||
"10.0.1.4"
|
"10.0.1.4"
|
||||||
"10.0.4.2"
|
"10.0.1.3"
|
||||||
"10.0.1.18"
|
"10.0.1.18"
|
||||||
"10.0.1.0/24"
|
"10.0.1.0/24"
|
||||||
];
|
];
|
||||||
@@ -244,6 +238,43 @@ in
|
|||||||
|
|
||||||
# https://www.home-assistant.io/integrations/ota_updater/
|
# https://www.home-assistant.io/integrations/ota_updater/
|
||||||
zha.zigpy_config.ota.z2m_remote_index = "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/index.json";
|
zha.zigpy_config.ota.z2m_remote_index = "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/index.json";
|
||||||
|
|
||||||
|
openhasp = {
|
||||||
|
plate = {
|
||||||
|
objects = [
|
||||||
|
{
|
||||||
|
obj = "p0b1"; # temperature label on all pages
|
||||||
|
properties = {
|
||||||
|
"text" = ''{{ states("sensor.thermostat_current_temperature") }}°F'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
obj = "p1b2"; # light-switch toggle button
|
||||||
|
properties = {
|
||||||
|
"val" = ''{{ 1 if states("light.living_room_lights") == "on" else 0 }}'';
|
||||||
|
"text" = ''{{ "\uE6E8" if is_state("light.living_room_lights", "on") else "\uE335" | e }}'';
|
||||||
|
};
|
||||||
|
event = {
|
||||||
|
"up" = {
|
||||||
|
service = "homeassistant.toggle";
|
||||||
|
entity_id = "light.living_room_lights";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
obj = "p1b3"; # dropdown
|
||||||
|
event = {
|
||||||
|
"changed" = {
|
||||||
|
service = "persistent_notification.create";
|
||||||
|
data = {
|
||||||
|
message = "I like {{ text }}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -262,10 +293,12 @@ in
|
|||||||
postgresql = {
|
postgresql = {
|
||||||
enable = true;
|
enable = true;
|
||||||
ensureDatabases = [ "hass" ];
|
ensureDatabases = [ "hass" ];
|
||||||
ensureUsers = [{
|
ensureUsers = [
|
||||||
name = "hass";
|
{
|
||||||
ensureDBOwnership = true;
|
name = "hass";
|
||||||
}];
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Enable and configure Mosquitto MQTT broker
|
# Enable and configure Mosquitto MQTT broker
|
||||||
@@ -303,7 +336,7 @@ in
|
|||||||
permit_join = true;
|
permit_join = true;
|
||||||
# Web interface
|
# Web interface
|
||||||
frontend = {
|
frontend = {
|
||||||
port = zigbee2mqttPort; # Choose an available port
|
port = zigbee2mqttPort; # Choose an available port
|
||||||
};
|
};
|
||||||
# MQTT configuration
|
# MQTT configuration
|
||||||
mqtt = {
|
mqtt = {
|
||||||
@@ -380,24 +413,24 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Enable required hardware support for the Zigbee adapter
|
# Enable required hardware support for the Zigbee adapter
|
||||||
hardware.bluetooth.enable = true; # Some adapters use Bluetooth
|
hardware.bluetooth.enable = true; # Some adapters use Bluetooth
|
||||||
|
|
||||||
# Ensure proper permissions for Zigbee USB devices
|
# Ensure proper permissions for Zigbee USB devices
|
||||||
# services.udev.extraRules = ''
|
# services.udev.extraRules = ''
|
||||||
# # For CC2531, CC2530, CC1352P-2, CC2538 and similar adapters
|
# # For CC2531, CC2530, CC1352P-2, CC2538 and similar adapters
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="zigbee", MODE="0666"
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", SYMLINK+="zigbee", MODE="0666"
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
||||||
|
|
||||||
# # For ConBee/RaspBee by Dresden Elektronik
|
# # For ConBee/RaspBee by Dresden Elektronik
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1cf1", ATTRS{idProduct}=="0030", SYMLINK+="zigbee", MODE="0666"
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1cf1", ATTRS{idProduct}=="0030", SYMLINK+="zigbee", MODE="0666"
|
||||||
|
|
||||||
# # For Electrolama zig-a-zig-ah (zzh!)
|
# # For Electrolama zig-a-zig-ah (zzh!)
|
||||||
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
# SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="zigbee", MODE="0666"
|
||||||
# '';
|
# '';
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
mosquitto # MQTT command-line tools
|
mosquitto # MQTT command-line tools
|
||||||
usbutils # For lsusb to help identify your adapter
|
usbutils # For lsusb to help identify your adapter
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.${namespace}.services.home-assistant = {
|
options.${namespace}.services.home-assistant = {
|
||||||
enable = mkEnableOption "enable home-assistant";
|
enable = mkEnableOption "enable home-assistant";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, namespace, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.${namespace}.services.immich;
|
cfg = config.${namespace}.services.immich;
|
||||||
@@ -8,7 +13,7 @@ let
|
|||||||
dbPassword = config.sops.secrets."jallen-nas/immich/db-password".path;
|
dbPassword = config.sops.secrets."jallen-nas/immich/db-password".path;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./options.nix ];
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
# Enable immich service
|
# Enable immich service
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ with lib;
|
|||||||
options.${namespace}.services.immich = {
|
options.${namespace}.services.immich = {
|
||||||
enable = mkEnableOption "enable immich";
|
enable = mkEnableOption "enable immich";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,73 +1,196 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
{
|
||||||
# Set up impernance configuration for things like bluetooth
|
config,
|
||||||
# In this configuration with /etc and /var/log being persistent, only directories outside of that need to be done here. See hardware configuration for all mountpoints.
|
lib,
|
||||||
|
namespace,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.${namespace}.impermanence;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ ./options.nix ];
|
||||||
|
|
||||||
environment.persistence."/nix/persist/system" = {
|
config = mkIf cfg.enable {
|
||||||
hideMounts = true;
|
security.sudo.extraConfig = ''
|
||||||
directories = [
|
# rollback results in sudo lectures after each reboot
|
||||||
"/var/lib/bluetooth"
|
Defaults lecture = never
|
||||||
"/var/lib/iwd"
|
'';
|
||||||
"/var/lib/nixos"
|
|
||||||
"/var/lib/libvirt"
|
system.activationScripts = {
|
||||||
"/var/lib/waydroid"
|
"var-lib-private-permissions" = {
|
||||||
"/var/lib/systemd/coredump"
|
deps = [ "createPersistentStorageDirs" ];
|
||||||
"/etc/NetworkManager/system-connections"
|
text = ''
|
||||||
"/var/lib/tailscale"
|
mkdir -p /var/lib/private
|
||||||
"/var/lib/homeassistant"
|
chmod 0700 /var/lib/private
|
||||||
"/var/lib/mosquitto"
|
'';
|
||||||
"/var/lib/music-assistant"
|
};
|
||||||
"/var/lib/postgresql"
|
};
|
||||||
"/var/lib/zigbee2mqtt"
|
|
||||||
|
boot.initrd.systemd.services.rootfs-cleanup = {
|
||||||
|
description = "Clean file system root";
|
||||||
|
wantedBy = [
|
||||||
|
"initrd.target"
|
||||||
|
];
|
||||||
|
after = [
|
||||||
|
"initrd-root-device.target"
|
||||||
|
];
|
||||||
|
before = [
|
||||||
|
"sysroot.mount"
|
||||||
|
];
|
||||||
|
unitConfig.DefaultDependencies = "no";
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
script =
|
||||||
|
if (hasAttr "/" config.fileSystems) && (config.fileSystems."/".fsType == "btrfs") then
|
||||||
|
''
|
||||||
|
# workaround for machines without working rtc battery
|
||||||
|
# The time may not yet be correctly set, so wait until it is
|
||||||
|
if [[ $(date '+%s') -lt 1730469314 ]]; then
|
||||||
|
sleep 30 # this should hopefully be enough
|
||||||
|
fi
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount ${config.fileSystems."/".device} -t btrfs /btrfs_tmp
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
timestamp=$(date --date="@$(stat -c %X /btrfs_tmp/root)" "+%Y-%m-%d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1" || rm -rf "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -atime +30); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
''
|
||||||
|
else if (hasAttr "/" config.fileSystems) && (config.fileSystems."/".fsType == "bcachefs") then
|
||||||
|
''
|
||||||
|
# workaround for machines without working rtc battery
|
||||||
|
# The time may not yet be correctly set, so wait until it is
|
||||||
|
if [[ $(date '+%s') -lt 1730469314 ]]; then
|
||||||
|
sleep 30 # this should hopefully be enough
|
||||||
|
fi
|
||||||
|
if [[ -e /root_tmp/root ]]; then
|
||||||
|
mkdir -p /root_tmp/old_roots
|
||||||
|
timestamp=$(date --date="@$(stat -c %X /root_tmp/root)" "+%Y-%m-%d_%H:%M:%S")
|
||||||
|
mv /root_tmp/root "/root_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in $(find /root_tmp/old_roots/ -maxdepth 1 -atime +30); do
|
||||||
|
bcachefs subvolume delete $i
|
||||||
|
done
|
||||||
|
|
||||||
|
bcachefs subvolume create /root_tmp/root
|
||||||
|
''
|
||||||
|
else
|
||||||
|
# For tmpfs or other filesystems, do nothing
|
||||||
|
"";
|
||||||
|
};
|
||||||
|
|
||||||
|
assertions = [
|
||||||
{
|
{
|
||||||
directory = "/var/lib/colord";
|
assertion = hasAttr "/" config.fileSystems;
|
||||||
user = "colord";
|
message = "To use impermanence, you need to define a root volume";
|
||||||
group = "colord";
|
}
|
||||||
mode = "u=rwx,g=rx,o=";
|
|
||||||
|
{
|
||||||
|
assertion =
|
||||||
|
if hasAttr "/" config.fileSystems then
|
||||||
|
config.fileSystems."/".fsType == "btrfs"
|
||||||
|
|| config.fileSystems."/".fsType == "bcachefs"
|
||||||
|
|| config.fileSystems."/".fsType == "tmpfs"
|
||||||
|
else
|
||||||
|
false;
|
||||||
|
message = "rootfs must be btrfs, bcachefs, or tmpfs; not " + config.fileSystems."/".fsType;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
assertion =
|
||||||
|
if
|
||||||
|
hasAttr "/" config.fileSystems
|
||||||
|
&& (config.fileSystems."/".fsType == "btrfs" || config.fileSystems."/".fsType == "bcachefs")
|
||||||
|
then
|
||||||
|
any (
|
||||||
|
t: t == "subvol=root" || t == "subvol=/root" || t == "X-mount.subdir=subvolumes/root"
|
||||||
|
) config.fileSystems."/".options
|
||||||
|
else
|
||||||
|
true;
|
||||||
|
message = "btrfs or bcachefs rootfs must mount subvolume root";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
directory = "/etc/nix";
|
assertion = !config.boot.isContainer;
|
||||||
user = "root";
|
message = "impermanence is not supported in containers";
|
||||||
group = "root";
|
|
||||||
mode = "u=rwx,g=rx,o=rx";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
directory = "/var/lib/private/authentik/media";
|
|
||||||
user = "authentik";
|
|
||||||
group = "authentik";
|
|
||||||
mode = "u=rwx,g=,o=";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
directory = "/var/lib/private";
|
|
||||||
mode = "u=rwx,g=rx,o=";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
directory = "/media/nas";
|
|
||||||
user = "nas-apps";
|
|
||||||
group = "jallen-nas";
|
|
||||||
mode = "u=rwx,g=rx,o=rx";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
directory = "/var/lib/crowdsec";
|
|
||||||
user = "crowdsec";
|
|
||||||
group = "crowdsec";
|
|
||||||
mode = "u=rwx,g=rwx,o=rx";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
directory = "/plugins-storage";
|
|
||||||
user = "traefik";
|
|
||||||
group = "traefik";
|
|
||||||
mode = "u=rwx,g=rwx,o=rx";
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
files = [
|
|
||||||
"/etc/machine-id"
|
environment.persistence.${cfg.persistencePath} = {
|
||||||
];
|
hideMounts = true;
|
||||||
|
directories = [
|
||||||
|
"/var/lib/bluetooth"
|
||||||
|
"/var/lib/iwd"
|
||||||
|
"/var/lib/nixos"
|
||||||
|
"/var/lib/libvirt"
|
||||||
|
"/var/lib/waydroid"
|
||||||
|
"/var/lib/systemd/coredump"
|
||||||
|
"/etc/NetworkManager/system-connections"
|
||||||
|
"/var/lib/tailscale"
|
||||||
|
"/var/lib/homeassistant"
|
||||||
|
"/var/lib/mosquitto"
|
||||||
|
"/var/lib/music-assistant"
|
||||||
|
"/var/lib/postgresql"
|
||||||
|
"/var/lib/zigbee2mqtt"
|
||||||
|
{
|
||||||
|
directory = "/var/lib/colord";
|
||||||
|
user = "colord";
|
||||||
|
group = "colord";
|
||||||
|
mode = "u=rwx,g=rx,o=";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
directory = "/etc/nix";
|
||||||
|
user = "root";
|
||||||
|
group = "root";
|
||||||
|
mode = "u=rwx,g=rx,o=rx";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
directory = "/var/lib/private/authentik/media";
|
||||||
|
user = "authentik";
|
||||||
|
group = "authentik";
|
||||||
|
mode = "u=rwx,g=,o=";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
directory = "/var/lib/private";
|
||||||
|
mode = "u=rwx,g=rx,o=";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
directory = "/media/nas";
|
||||||
|
user = "nas-apps";
|
||||||
|
group = "jallen-nas";
|
||||||
|
mode = "u=rwx,g=rx,o=rx";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
directory = "/var/lib/crowdsec";
|
||||||
|
user = "crowdsec";
|
||||||
|
group = "crowdsec";
|
||||||
|
mode = "u=rwx,g=rwx,o=rx";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
directory = "/plugins-storage";
|
||||||
|
user = "traefik";
|
||||||
|
group = "traefik";
|
||||||
|
mode = "u=rwx,g=rwx,o=rx";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
files = [
|
||||||
|
"/etc/machine-id"
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
security.sudo.extraConfig = ''
|
|
||||||
# rollback results in sudo lectures after each reboot
|
|
||||||
Defaults lecture = never
|
|
||||||
'';
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
12
modules/nixos/impermanence/options.nix
Normal file
12
modules/nixos/impermanence/options.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{ lib, namespace, ... }:
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
options.${namespace}.impermanence = {
|
||||||
|
enable = mkEnableOption "enable impermanence";
|
||||||
|
persistencePath = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "/nix/persist/system";
|
||||||
|
description = "Path to the persistence directory";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user