Compare commits
1 Commits
94e74ffd8a
...
temp-small
| Author | SHA1 | Date | |
|---|---|---|---|
| aad01c1271 |
33
.mcp.json
33
.mcp.json
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"nixpkgs-options": {
|
|
||||||
"command": "nix",
|
|
||||||
"args": ["run", "git+https://git.t-juice.club/torjus/labmcp#nixpkgs-search", "--", "options", "serve"],
|
|
||||||
"env": {
|
|
||||||
"NIXPKGS_SEARCH_DATABASE": "sqlite:///run/user/1000/labmcp/nixpkgs-search.db"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-packages": {
|
|
||||||
"command": "nix",
|
|
||||||
"args": ["run", "git+https://git.t-juice.club/torjus/labmcp#nixpkgs-search", "--", "packages", "serve"],
|
|
||||||
"env": {
|
|
||||||
"NIXPKGS_SEARCH_DATABASE": "sqlite:///run/user/1000/labmcp/nixpkgs-search.db"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hm-options": {
|
|
||||||
"command": "nix",
|
|
||||||
"args": ["run", "git+https://git.t-juice.club/torjus/labmcp#hm-options", "--", "serve"],
|
|
||||||
"env": {
|
|
||||||
"HM_OPTIONS_DATABASE": "sqlite:///run/user/1000/labmcp/hm-options.db"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"git-explorer": {
|
|
||||||
"command": "nix",
|
|
||||||
"args": ["run", "git+https://git.t-juice.club/torjus/labmcp#git-explorer", "--", "serve"],
|
|
||||||
"env": {
|
|
||||||
"GIT_REPO_PATH": "/home/torjus/git/nixos-servers"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2,12 +2,12 @@ keys:
|
|||||||
- &admin_torjus age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u
|
- &admin_torjus age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u
|
||||||
- &server_gunter age1whxf34vjdndqzwgm7yyaexdm46gdnv9sf3nal7qqyjr0nyhhndlsrmc0g3
|
- &server_gunter age1whxf34vjdndqzwgm7yyaexdm46gdnv9sf3nal7qqyjr0nyhhndlsrmc0g3
|
||||||
- &server_magicman age1stlqqspmt5fepyz35udrwr5avf9zuju79f787p26pu2d2j08yqps2q2t2c
|
- &server_magicman age1stlqqspmt5fepyz35udrwr5avf9zuju79f787p26pu2d2j08yqps2q2t2c
|
||||||
|
- &server_prismo age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini|toml)
|
- path_regex: secrets/[^/]+\.(yaml|json|env|ini|toml)
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *admin_torjus
|
- *admin_torjus
|
||||||
- *server_magicman
|
|
||||||
- path_regex: secrets/gunter/[^/]+\.(yaml|json|env|ini|toml)
|
- path_regex: secrets/gunter/[^/]+\.(yaml|json|env|ini|toml)
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
@@ -18,8 +18,12 @@ creation_rules:
|
|||||||
- age:
|
- age:
|
||||||
- *admin_torjus
|
- *admin_torjus
|
||||||
- *server_magicman
|
- *server_magicman
|
||||||
|
- path_regex: secrets/prismo/[^/]+\.(yaml|json|env|ini|toml)
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *admin_torjus
|
||||||
|
- *server_prismo
|
||||||
- path_regex: secrets/torjus/[^/]+\.(yaml|json|env|ini|toml)
|
- path_regex: secrets/torjus/[^/]+\.(yaml|json|env|ini|toml)
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *admin_torjus
|
- *admin_torjus
|
||||||
- *server_magicman
|
|
||||||
|
|||||||
147
CLAUDE.md
147
CLAUDE.md
@@ -1,147 +0,0 @@
|
|||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## Repository Overview
|
|
||||||
|
|
||||||
This is a NixOS configuration repository using flakes for managing multiple machines (gunter, magicman). It uses home-manager for user configurations and sops-nix for secrets management. Custom packages from private git repositories are integrated via flake inputs and overlays.
|
|
||||||
|
|
||||||
## Essential Commands
|
|
||||||
|
|
||||||
### Formatting
|
|
||||||
```bash
|
|
||||||
nix fmt # Format all Nix files (uses nixfmt-tree)
|
|
||||||
nix fmt . # Same as above
|
|
||||||
```
|
|
||||||
|
|
||||||
### Building & Testing
|
|
||||||
```bash
|
|
||||||
# Test build a specific host configuration
|
|
||||||
nix build .#nixosConfigurations.gunter.config.system.build.toplevel
|
|
||||||
nix build .#nixosConfigurations.magicman.config.system.build.toplevel
|
|
||||||
|
|
||||||
# Enter development shell (includes act, actionlint, yamllint)
|
|
||||||
nix develop
|
|
||||||
```
|
|
||||||
|
|
||||||
If config clearly only affects one host, building for just the relevant host is enough.
|
|
||||||
Otherwise, build both. **Always ask before building gunter** — it takes a long time.
|
|
||||||
|
|
||||||
If moving things around, you can use `nix eval` before and after changes to check that things remain the same.
|
|
||||||
```
|
|
||||||
nix eval .#nixosConfigurations.magicman.config.nix.settings.substituters --json | jq
|
|
||||||
```
|
|
||||||
|
|
||||||
### Comparing with Running System
|
|
||||||
```bash
|
|
||||||
# Build and compare against currently running system
|
|
||||||
nixos-rebuild build --flake . && nvd diff /run/current-system result
|
|
||||||
```
|
|
||||||
This shows package version changes, added/removed packages, and closure size differences between what's currently running and the repo configuration.
|
|
||||||
|
|
||||||
### Common Operations
|
|
||||||
```bash
|
|
||||||
# Check flake without building
|
|
||||||
nix flake check
|
|
||||||
|
|
||||||
# Show flake outputs
|
|
||||||
nix flake show
|
|
||||||
```
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
### Flake Structure
|
|
||||||
- **Inputs**: Uses both stable (nixos-25.05) and unstable nixpkgs channels
|
|
||||||
- **Overlays**: `overlay-stable` provides `pkgs.stable` for stable packages; custom overlays integrate private packages (ghettoptt, huecli, nixprstatus, natstonotify, nix-packages)
|
|
||||||
- **System**: x86_64-linux primary, with multi-platform devShell support
|
|
||||||
|
|
||||||
### Directory Organization
|
|
||||||
```
|
|
||||||
├── flake.nix # Main entrypoint with overlays and host definitions
|
|
||||||
├── hosts/ # Per-host system configurations
|
|
||||||
│ ├── gunter/ # Desktop with multi-monitor, nvidia, steam
|
|
||||||
│ └── magicman/ # Laptop configuration
|
|
||||||
├── home/ # Home-manager user configurations
|
|
||||||
│ ├── hosts/ # Per-host user settings (imports packages + programs)
|
|
||||||
│ ├── editor/ # Neovim configuration
|
|
||||||
│ ├── hyprland/ # Wayland compositor with custom options
|
|
||||||
│ ├── packages/ # Simple packages (no options)
|
|
||||||
│ ├── programs/ # Programs with home-manager options (dunst, git, firefox, etc.)
|
|
||||||
│ ├── services/ # User services (backup, ghettoptt, natstonotify)
|
|
||||||
│ ├── scripts/ # User scripts
|
|
||||||
│ ├── sops/ # User secrets configuration
|
|
||||||
│ ├── ssh/ # SSH configuration
|
|
||||||
│ └── zsh/ # Shell configuration
|
|
||||||
├── system/ # Shared system-level modules
|
|
||||||
│ ├── monitoring/ # logs.nix, metrics.nix
|
|
||||||
│ ├── fonts.nix # Font configuration
|
|
||||||
│ ├── locale.nix # Localization settings
|
|
||||||
│ ├── users.nix # User account definitions
|
|
||||||
│ └── ... # Other system modules
|
|
||||||
└── secrets/ # SOPS-encrypted secrets (don't modify)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Configuration Pattern
|
|
||||||
- Each host's `default.nix` imports: `configuration.nix`, `hardware-configuration.nix`, host-specific modules, `../../system`, and `../../home/hosts/<hostname>`
|
|
||||||
- Home-manager imports are in `home/hosts/<hostname>/default.nix` which imports editor, hyprland, packages, programs, services, etc.
|
|
||||||
- Shared system config goes in `system/`, host-specific overrides in `hosts/<hostname>/`
|
|
||||||
|
|
||||||
### Hyprland Custom Options
|
|
||||||
The hyprland module in `home/hyprland/default.nix` provides custom options:
|
|
||||||
- `hyprland.monitors`: List of monitor configurations
|
|
||||||
- `hyprland.extraEnv`: Environment variables
|
|
||||||
- `hyprland.extraKeybinds`: Additional keybindings
|
|
||||||
- `hyprland.extraWorkspaces`: Named workspace definitions
|
|
||||||
- `hyprland.monitorVariables`: Monitor name variables (e.g., `$mon_left`)
|
|
||||||
- `hyprland.enableGrimblast`, `hyprland.enableWacom`, `hyprland.cursorNoHardware`: Feature flags
|
|
||||||
|
|
||||||
## Critical Workflow Rules
|
|
||||||
|
|
||||||
### Git Tracking for New Files
|
|
||||||
**CRITICAL**: Nix flakes ignore untracked files. When adding new files, run `git add <newfile>` BEFORE attempting to build. Builds will fail with "file not found" errors until files are git-tracked.
|
|
||||||
|
|
||||||
### Branching
|
|
||||||
Always create a new branch for changes. Never work directly on master branch.
|
|
||||||
|
|
||||||
### Formatting
|
|
||||||
Always run `nix fmt` before committing. Formatted Nix code is required.
|
|
||||||
|
|
||||||
### Commit Messages
|
|
||||||
Format: `topic: description`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
- `hyprland: convert deprecated windowrules`
|
|
||||||
- `packages: nixfmt-rfc-style renamed`
|
|
||||||
- `gunter: use beta nvidia driver`
|
|
||||||
|
|
||||||
Keep summaries concise. Only add commit body if needed for context.
|
|
||||||
|
|
||||||
### Forbidden Operations
|
|
||||||
- Don't run `nix flake update` (user manages input updates)
|
|
||||||
- Don't edit files in `secrets/` directory
|
|
||||||
- Don't modify `.sops.yaml`
|
|
||||||
- Don't use `nix-shell` (use `nix develop` instead)
|
|
||||||
- Don't mix stable/unstable packages arbitrarily
|
|
||||||
- Don't skip builds after configuration changes
|
|
||||||
|
|
||||||
### Adding Programs
|
|
||||||
- If no NixOS/home-manager options needed: add to `home/packages`
|
|
||||||
- If using options: create subdirectory in `home/programs/`
|
|
||||||
- Remember to `git add` new files before building
|
|
||||||
|
|
||||||
## Package Management
|
|
||||||
|
|
||||||
### Using Stable Packages
|
|
||||||
The `overlay-stable` provides access to stable nixpkgs via `pkgs.stable`:
|
|
||||||
```nix
|
|
||||||
environment.systemPackages = [ pkgs.stable.somePackage ];
|
|
||||||
```
|
|
||||||
Do not use packages from stable unless explicitly requested.
|
|
||||||
|
|
||||||
### Custom Packages
|
|
||||||
Custom packages from private repos are available via overlays:
|
|
||||||
- `pkgs.ghettoptt`
|
|
||||||
- `pkgs.huecli`
|
|
||||||
- `pkgs.nixprstatus`
|
|
||||||
- `pkgs.natstonotify`
|
|
||||||
- Plus packages from `nix-packages` overlay
|
|
||||||
@@ -4,4 +4,5 @@ Configurations for:
|
|||||||
|
|
||||||
* gunter
|
* gunter
|
||||||
* magicman
|
* magicman
|
||||||
|
* prismo
|
||||||
|
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
# Gunter Monitor Boot Issues
|
|
||||||
|
|
||||||
## Problem Description
|
|
||||||
|
|
||||||
Two of the four monitors on gunter (desktop) intermittently fail to work on startup. The affected monitors are always the two Samsung LS27A600U displays, which are connected via DisplayPort daisy-chaining (MST - Multi-Stream Transport). Power cycling the monitors typically resolves the issue until the next reboot.
|
|
||||||
|
|
||||||
## System Configuration
|
|
||||||
|
|
||||||
- **GPU**: NVIDIA GeForce RTX 3080 Ti
|
|
||||||
- **Driver**: NVIDIA open driver 590.48.01 (beta)
|
|
||||||
- **Kernel**: 6.18.8
|
|
||||||
- **Compositor**: Hyprland
|
|
||||||
|
|
||||||
### Monitor Setup
|
|
||||||
|
|
||||||
| Port | Monitor | Resolution | Connection |
|
|
||||||
|-------|--------------------------|----------------|---------------|
|
|
||||||
| DP-1 | Acer XB271HU (center) | 2560x1440@120Hz | Direct |
|
|
||||||
| DP-3 | BenQ G2420HDBL (top) | 1920x1080@60Hz | Direct |
|
|
||||||
| DP-4 | Samsung LS27A600U (right)| 2560x1440@75Hz | Daisy-chained |
|
|
||||||
| DP-5 | Samsung LS27A600U (left) | 2560x1440@75Hz | Daisy-chained |
|
|
||||||
|
|
||||||
The GPU only has 3 DisplayPort outputs, so one Samsung monitor is connected to the other via DP daisy-chaining (MST).
|
|
||||||
|
|
||||||
## Diagnostic Findings
|
|
||||||
|
|
||||||
### Kernel Errors
|
|
||||||
|
|
||||||
The following errors appear in the kernel log during boot (17-27 seconds after boot start):
|
|
||||||
|
|
||||||
```
|
|
||||||
[drm:nv_drm_dev_load [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000100] Failed to add connector for NvKmsKapiDisplay 0x00000800
|
|
||||||
[drm:nv_drm_dev_load [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000100] Failed to get dynamic displays
|
|
||||||
```
|
|
||||||
|
|
||||||
"Dynamic displays" in NVIDIA terminology refers to MST-connected monitors. These errors indicate the driver is failing to enumerate the daisy-chained displays during initialization.
|
|
||||||
|
|
||||||
### Root Cause Analysis
|
|
||||||
|
|
||||||
1. **MST timing issues** - The downstream Samsung monitor isn't ready when the driver tries to enumerate the daisy chain during boot
|
|
||||||
2. **NVIDIA open driver MST bugs** - The open-source driver (`hardware.nvidia.open = true`) has historically had more MST issues than the proprietary one
|
|
||||||
3. **Power sequencing** - The monitors may need more time to negotiate the MST link during cold boot
|
|
||||||
|
|
||||||
## Potential Solutions
|
|
||||||
|
|
||||||
1. **Switch to proprietary driver** - Change `hardware.nvidia.open = false` in `hosts/gunter/configuration.nix`
|
|
||||||
|
|
||||||
2. **Add boot delay for nvidia-drm** - Add kernel parameter `nvidia-drm.load_on_init=0` to defer initialization
|
|
||||||
|
|
||||||
3. **Try different nvidia module options** - Add to `boot.extraModprobeConfig`:
|
|
||||||
```nix
|
|
||||||
options nvidia-drm modeset=1 fbdev=1
|
|
||||||
options nvidia NVreg_PreserveVideoMemoryAllocations=1
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **Check monitor firmware** - Samsung LS27A600U monitors have had MST firmware updates
|
|
||||||
|
|
||||||
5. **Reduce link rate during boot** - Lower refresh rate to 60Hz initially to reduce bandwidth requirements
|
|
||||||
|
|
||||||
## Useful Diagnostic Commands
|
|
||||||
|
|
||||||
### Kernel logs for display/nvidia issues
|
|
||||||
```bash
|
|
||||||
journalctl -k --no-pager | grep -iE '(nvidia|drm|display|edid|dp|hdmi|monitor)'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Kernel errors and warnings
|
|
||||||
```bash
|
|
||||||
journalctl -k --no-pager | grep -iE '(error|fail|warn)'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Current monitor state (Hyprland)
|
|
||||||
```bash
|
|
||||||
hyprctl monitors all
|
|
||||||
```
|
|
||||||
|
|
||||||
### DRM connector status
|
|
||||||
```bash
|
|
||||||
cat /sys/class/drm/*/status
|
|
||||||
ls -la /sys/class/drm/
|
|
||||||
```
|
|
||||||
|
|
||||||
### GPU and driver info
|
|
||||||
```bash
|
|
||||||
nvidia-smi --query-gpu=name,driver_version --format=csv,noheader
|
|
||||||
```
|
|
||||||
|
|
||||||
### Check EDID data for each connector
|
|
||||||
```bash
|
|
||||||
for f in /sys/class/drm/card1-DP-*/; do
|
|
||||||
echo "=== $(basename $f) ===";
|
|
||||||
cat "$f/enabled" 2>/dev/null;
|
|
||||||
cat "$f/edid" 2>/dev/null | xxd | head -5;
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
## Related Configuration Files
|
|
||||||
|
|
||||||
- `hosts/gunter/configuration.nix` - NVIDIA driver settings
|
|
||||||
- `home/hosts/gunter/default.nix` - Hyprland monitor configuration
|
|
||||||
|
|
||||||
## Date Investigated
|
|
||||||
|
|
||||||
2025-02-06
|
|
||||||
449
flake.lock
generated
449
flake.lock
generated
@@ -1,5 +1,77 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710146030,
|
||||||
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710146030,
|
||||||
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_3": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_4"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726560853,
|
||||||
|
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_4": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_5"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726560853,
|
||||||
|
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ghettoptt": {
|
"ghettoptt": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -28,11 +100,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771188132,
|
"lastModified": 1732025103,
|
||||||
"narHash": "sha256-qLXxN/tPrZtnekaLBQuVtxQfvqqs5cT5WbyH4zZaTGI=",
|
"narHash": "sha256-qjEI64RKvDxRyEarY0jTzrZMa8ebezh2DEZmJJrpVdo=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "ae8003d8b61d0d373e7ca3da1a48f9c870d15df9",
|
"rev": "a46e702093a5c46e192243edbd977d5749e7f294",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -43,19 +115,18 @@
|
|||||||
},
|
},
|
||||||
"huecli": {
|
"huecli": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"pyproject-build-systems": "pyproject-build-systems",
|
"poetry2nix": "poetry2nix"
|
||||||
"pyproject-nix": "pyproject-nix",
|
|
||||||
"uv2nix": "uv2nix"
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757974387,
|
"lastModified": 1728336978,
|
||||||
"narHash": "sha256-vVFZTB3NxJCH91aaAtop3MEZcilPQ273epV1gcnQE4s=",
|
"narHash": "sha256-7FX4K8QBH/9jiYyCMs2JyCTzlx1/D5Cw6upaFThSVg4=",
|
||||||
"ref": "master",
|
"ref": "master",
|
||||||
"rev": "b341e613337b87cef7a0f4ea05d677288cafa3fb",
|
"rev": "700ece0bada9833fcfd3b6ce698cd74bc00e4493",
|
||||||
"revCount": 33,
|
"revCount": 22,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.t-juice.club/torjus/huecli"
|
"url": "https://git.t-juice.club/torjus/huecli"
|
||||||
},
|
},
|
||||||
@@ -65,25 +136,48 @@
|
|||||||
"url": "https://git.t-juice.club/torjus/huecli"
|
"url": "https://git.t-juice.club/torjus/huecli"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"natstonotify": {
|
"nix-github-actions": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
"huecli",
|
||||||
|
"poetry2nix",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1739302828,
|
"lastModified": 1703863825,
|
||||||
"narHash": "sha256-D6l5tAh1FDpdz9/tQC7kYhFPQzqI1HICwNh7fRejfrw=",
|
"narHash": "sha256-rXwqjtwiGKJheXB43ybM8NwWB8rO2dSRrEqes0S7F5Y=",
|
||||||
"ref": "master",
|
"owner": "nix-community",
|
||||||
"rev": "bfcf518fe0b2fe19075667f7b22227376d102509",
|
"repo": "nix-github-actions",
|
||||||
"revCount": 7,
|
"rev": "5163432afc817cf8bd1f031418d1869e4c9d5547",
|
||||||
"type": "git",
|
"type": "github"
|
||||||
"url": "https://git.t-juice.club/torjus/natstonotify"
|
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"ref": "master",
|
"owner": "nix-community",
|
||||||
"type": "git",
|
"repo": "nix-github-actions",
|
||||||
"url": "https://git.t-juice.club/torjus/natstonotify"
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-github-actions_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixprstatus",
|
||||||
|
"poetry2nix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1720066371,
|
||||||
|
"narHash": "sha256-uPlLYH2S0ACj0IcgaK9Lsf4spmJoGejR9DotXiXSBZQ=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix-github-actions",
|
||||||
|
"rev": "622f829f5fe69310a866c8a6cd07e747c44ef820",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix-github-actions",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix-packages": {
|
"nix-packages": {
|
||||||
@@ -93,11 +187,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757017925,
|
"lastModified": 1728153756,
|
||||||
"narHash": "sha256-QC1SkvyU5nQ32lju2GYK9ozuh/JYWXfWK/T7OC6dVls=",
|
"narHash": "sha256-kNpO8yC2MioSRc2SNxNM5egVvFjA2Ox0b4SAs6GnM8w=",
|
||||||
"ref": "master",
|
"ref": "master",
|
||||||
"rev": "7723cb45020e1f561f527779540faa5901d34e4d",
|
"rev": "2fc840c15280d2dd3da1aba7272243b4aa11e611",
|
||||||
"revCount": 31,
|
"revCount": 21,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.t-juice.club/torjus/nix-packages"
|
"url": "https://git.t-juice.club/torjus/nix-packages"
|
||||||
},
|
},
|
||||||
@@ -109,11 +203,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771008912,
|
"lastModified": 1731676054,
|
||||||
"narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=",
|
"narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "a82ccc39b39b621151d6732718e3e250109076fa",
|
"rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -123,37 +217,52 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-small": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1767313136,
|
"lastModified": 1732007104,
|
||||||
"narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=",
|
"narHash": "sha256-qaWPxgLAvtIHTDcm0qJuc+WNYjcy4ZKigOyn2ag4ihM=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d",
|
"rev": "0705964c881cea8896474610188905ba41b59b08",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-25.05",
|
"ref": "nixos-unstable-small",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731755305,
|
||||||
|
"narHash": "sha256-v5P3dk5JdiT+4x69ZaB18B8+Rcu3TIOrcdG4uEX7WZ8=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "057f63b6dc1a2c67301286152eb5af20747a9cb4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-24.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixprstatus": {
|
"nixprstatus": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_3",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"pyproject-build-systems": "pyproject-build-systems_2",
|
"poetry2nix": "poetry2nix_2"
|
||||||
"pyproject-nix": "pyproject-nix_2",
|
|
||||||
"uv2nix": "uv2nix_2"
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1767871861,
|
"lastModified": 1729118937,
|
||||||
"narHash": "sha256-Oh0Y9bTvvMm3JQH/C/8XLCeemgvMDbIgFh1NSYFyINY=",
|
"narHash": "sha256-7xYCJXTh92OpKwfshYYnxrWmfNjqaH9SzQ0stuBARVM=",
|
||||||
"ref": "master",
|
"ref": "master",
|
||||||
"rev": "b4e3e6de659bf8c96b84dd47249c71b357dd50c2",
|
"rev": "58b113d934f5d62f27dc50439b89fece4eb621f5",
|
||||||
"revCount": 62,
|
"revCount": 37,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.t-juice.club/torjus/nixprstatus"
|
"url": "https://git.t-juice.club/torjus/nixprstatus"
|
||||||
},
|
},
|
||||||
@@ -163,103 +272,53 @@
|
|||||||
"url": "https://git.t-juice.club/torjus/nixprstatus"
|
"url": "https://git.t-juice.club/torjus/nixprstatus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pyproject-build-systems": {
|
"poetry2nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nix-github-actions": "nix-github-actions",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"huecli",
|
"huecli",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"pyproject-nix": [
|
"systems": "systems_3",
|
||||||
"huecli",
|
"treefmt-nix": "treefmt-nix"
|
||||||
"pyproject-nix"
|
|
||||||
],
|
|
||||||
"uv2nix": [
|
|
||||||
"huecli",
|
|
||||||
"uv2nix"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757296493,
|
"lastModified": 1724208502,
|
||||||
"narHash": "sha256-6nzSZl28IwH2Vx8YSmd3t6TREHpDbKlDPK+dq1LKIZQ=",
|
"narHash": "sha256-TCRcEPSfgAw/t7kClmlr23s591N06mQCrhzlAO7cyFw=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-community",
|
||||||
"repo": "build-system-pkgs",
|
"repo": "poetry2nix",
|
||||||
"rev": "5b8e37fe0077db5c1df3a5ee90a651345f085d38",
|
"rev": "884b66152b0c625b8220b570a31dc7acc36749a3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-community",
|
||||||
"repo": "build-system-pkgs",
|
"repo": "poetry2nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pyproject-build-systems_2": {
|
"poetry2nix_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_4",
|
||||||
|
"nix-github-actions": "nix-github-actions_2",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixprstatus",
|
"nixprstatus",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"pyproject-nix": [
|
"systems": "systems_6",
|
||||||
"nixprstatus",
|
"treefmt-nix": "treefmt-nix_2"
|
||||||
"pyproject-nix"
|
|
||||||
],
|
|
||||||
"uv2nix": [
|
|
||||||
"nixprstatus",
|
|
||||||
"uv2nix"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1763662255,
|
"lastModified": 1729073785,
|
||||||
"narHash": "sha256-4bocaOyLa3AfiS8KrWjZQYu+IAta05u3gYZzZ6zXbT0=",
|
"narHash": "sha256-KaDC7emuamQblDdka+gkBUUdEjQf3YGYozMb+zomgSM=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-community",
|
||||||
"repo": "build-system-pkgs",
|
"repo": "poetry2nix",
|
||||||
"rev": "042904167604c681a090c07eb6967b4dd4dae88c",
|
"rev": "795fddefc9f910671c1cf0752c29802ce27322d6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-community",
|
||||||
"repo": "build-system-pkgs",
|
"repo": "poetry2nix",
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pyproject-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"huecli",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1757246327,
|
|
||||||
"narHash": "sha256-6pNlGhwOIMfhe/RLjHdpXveKS4FyLHvlGe+KtjDild4=",
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "pyproject.nix",
|
|
||||||
"rev": "8d77f342d66ad1601cdb9d97e9388b69f64d4c8e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "pyproject.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pyproject-nix_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixprstatus",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1764134915,
|
|
||||||
"narHash": "sha256-xaKvtPx6YAnA3HQVp5LwyYG1MaN4LLehpQI8xEdBvBY=",
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "pyproject.nix",
|
|
||||||
"rev": "2c8df1383b32e5443c921f61224b198a2282a657",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "pyproject.nix",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -268,9 +327,9 @@
|
|||||||
"ghettoptt": "ghettoptt",
|
"ghettoptt": "ghettoptt",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"huecli": "huecli",
|
"huecli": "huecli",
|
||||||
"natstonotify": "natstonotify",
|
|
||||||
"nix-packages": "nix-packages",
|
"nix-packages": "nix-packages",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixpkgs-small": "nixpkgs-small",
|
||||||
"nixpkgs-stable": "nixpkgs-stable",
|
"nixpkgs-stable": "nixpkgs-stable",
|
||||||
"nixprstatus": "nixprstatus",
|
"nixprstatus": "nixprstatus",
|
||||||
"sops-nix": "sops-nix"
|
"sops-nix": "sops-nix"
|
||||||
@@ -283,11 +342,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771166946,
|
"lastModified": 1731954233,
|
||||||
"narHash": "sha256-UFc4lfGBr+wJmwgDGJDn1cVD6DTr0/8TdronNUiyXlU=",
|
"narHash": "sha256-vvXx1m2Rsw7MkbKJdpcICzz4YPgZPApGKQGhNZfkhOI=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "2d0cf89b4404529778bc82de7e42b5754e0fe4fa",
|
"rev": "e39947d0ee8e341fa7108bd02a33cdfa24a1360e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -296,53 +355,135 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uv2nix": {
|
"systems": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"huecli",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"pyproject-nix": [
|
|
||||||
"huecli",
|
|
||||||
"pyproject-nix"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757925761,
|
"lastModified": 1681028828,
|
||||||
"narHash": "sha256-7Hwz0vfHuFqCo5v7Q07GQgLBWuPvZCuf/5/pk4NoADg=",
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-systems",
|
||||||
"repo": "uv2nix",
|
"repo": "default",
|
||||||
"rev": "780494c40895bb7419a73d942bee326291e80b3b",
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-systems",
|
||||||
"repo": "uv2nix",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uv2nix_2": {
|
"systems_2": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixprstatus",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"pyproject-nix": [
|
|
||||||
"nixprstatus",
|
|
||||||
"pyproject-nix"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1767701098,
|
"lastModified": 1681028828,
|
||||||
"narHash": "sha256-CJhKZnWb3gumR9oTRjFvCg/6lYTGbZRU7xtvcyWIRwU=",
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-systems",
|
||||||
"repo": "uv2nix",
|
"repo": "default",
|
||||||
"rev": "9d357f0d2ce6f5f35ec7959d7e704452352eb4da",
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "pyproject-nix",
|
"owner": "nix-systems",
|
||||||
"repo": "uv2nix",
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "systems",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_6": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "systems",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"huecli",
|
||||||
|
"poetry2nix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1719749022,
|
||||||
|
"narHash": "sha256-ddPKHcqaKCIFSFc/cvxS14goUhCOAwsM1PbMr0ZtHMg=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "8df5ff62195d4e67e2264df0b7f5e8c9995fd0bd",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixprstatus",
|
||||||
|
"poetry2nix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1727984844,
|
||||||
|
"narHash": "sha256-xpRqITAoD8rHlXQafYZOLvUXCF6cnZkPfoq67ThN0Hc=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "4446c7a6fc0775df028c5a3f6727945ba8400e64",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
48
flake.nix
48
flake.nix
@@ -2,8 +2,10 @@
|
|||||||
description = "Torjus nixos config flake";
|
description = "Torjus nixos config flake";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs-stable.url = "github:nixos/nixpkgs?ref=nixos-25.05";
|
nixpkgs-stable.url = "github:nixos/nixpkgs?ref=nixos-24.11";
|
||||||
|
#nixpkgs-master.url = "github:nixos/nixpkgs?ref=master";
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
|
nixpkgs-small.url = "github:nixos/nixpkgs?ref=nixos-unstable-small";
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -11,6 +13,7 @@
|
|||||||
sops-nix = {
|
sops-nix = {
|
||||||
url = "github:Mic92/sops-nix";
|
url = "github:Mic92/sops-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
#inputs.nixpkgs-stable.follows = "nixpkgs-stable";
|
||||||
};
|
};
|
||||||
ghettoptt = {
|
ghettoptt = {
|
||||||
url = "git+https://git.t-juice.club/torjus/ghettoptt?ref=master";
|
url = "git+https://git.t-juice.club/torjus/ghettoptt?ref=master";
|
||||||
@@ -28,22 +31,19 @@
|
|||||||
url = "git+https://git.t-juice.club/torjus/nixprstatus?ref=master";
|
url = "git+https://git.t-juice.club/torjus/nixprstatus?ref=master";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
natstonotify = {
|
|
||||||
url = "git+https://git.t-juice.club/torjus/natstonotify?ref=master";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{
|
{
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
|
# nixpkgs-master,
|
||||||
nixpkgs-stable,
|
nixpkgs-stable,
|
||||||
|
nixpkgs-small,
|
||||||
nixprstatus,
|
nixprstatus,
|
||||||
sops-nix,
|
sops-nix,
|
||||||
ghettoptt,
|
ghettoptt,
|
||||||
huecli,
|
huecli,
|
||||||
natstonotify,
|
|
||||||
nix-packages,
|
nix-packages,
|
||||||
...
|
...
|
||||||
}@inputs:
|
}@inputs:
|
||||||
@@ -56,6 +56,23 @@
|
|||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
overlay-pyside6 =
|
||||||
|
final: prev:
|
||||||
|
let
|
||||||
|
small = import nixpkgs-small {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
python312Packages = small.lib.warn "Using python312Packages from nixos-unstable-small #" small.python312Packages;
|
||||||
|
};
|
||||||
|
# overlay-master = final: prev: {
|
||||||
|
# master = import nixpkgs-master {
|
||||||
|
# inherit system;
|
||||||
|
# config.allowUnfree = true;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
allSystems = [
|
allSystems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
@@ -67,16 +84,31 @@
|
|||||||
commonOverlays = [
|
commonOverlays = [
|
||||||
overlay-stable
|
overlay-stable
|
||||||
# overlay-master
|
# overlay-master
|
||||||
|
overlay-pyside6
|
||||||
ghettoptt.overlays.default
|
ghettoptt.overlays.default
|
||||||
huecli.overlays.default
|
huecli.overlays.default
|
||||||
nix-packages.overlays.default
|
nix-packages.overlays.default
|
||||||
nixprstatus.overlays.default
|
nixprstatus.overlays.default
|
||||||
natstonotify.overlays.default
|
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
formatter.${system} = nixpkgs.legacyPackages.${system}.nixfmt-tree;
|
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
|
prismo = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs self user;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
(
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = commonOverlays;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
./hosts/prismo
|
||||||
|
sops-nix.nixosModules.sops
|
||||||
|
];
|
||||||
|
};
|
||||||
magicman = nixpkgs.lib.nixosSystem {
|
magicman = nixpkgs.lib.nixosSystem {
|
||||||
inherit system;
|
inherit system;
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
|
|||||||
@@ -5,28 +5,24 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
extraPackages = with pkgs; [
|
|
||||||
nodePackages_latest.nodejs
|
|
||||||
];
|
|
||||||
plugins = with pkgs.vimPlugins; [
|
plugins = with pkgs.vimPlugins; [
|
||||||
catppuccin-nvim
|
|
||||||
cmp-buffer
|
|
||||||
cmp-cmdline
|
|
||||||
cmp-nvim-lsp
|
|
||||||
cmp_luasnip
|
|
||||||
copilot-cmp
|
|
||||||
copilot-lua
|
|
||||||
lsp-zero-nvim
|
|
||||||
lualine-nvim
|
|
||||||
luasnip
|
|
||||||
nvim-cmp
|
|
||||||
nvim-lspconfig
|
|
||||||
plenary-nvim
|
|
||||||
telescope-nvim
|
|
||||||
undotree
|
|
||||||
vim-floaterm
|
|
||||||
vim-fugitive
|
vim-fugitive
|
||||||
|
undotree
|
||||||
|
telescope-nvim
|
||||||
|
nvim-cmp
|
||||||
|
cmp-nvim-lsp
|
||||||
|
nvim-lspconfig
|
||||||
|
lsp-zero-nvim
|
||||||
|
vim-floaterm
|
||||||
|
luasnip
|
||||||
|
cmp_luasnip
|
||||||
|
lualine-nvim
|
||||||
vim-sleuth
|
vim-sleuth
|
||||||
|
copilot-lua
|
||||||
|
copilot-cmp
|
||||||
|
cmp-cmdline
|
||||||
|
cmp-buffer
|
||||||
|
catppuccin-nvim
|
||||||
(nvim-treesitter.withPlugins (p: [
|
(nvim-treesitter.withPlugins (p: [
|
||||||
p.tree-sitter-yaml
|
p.tree-sitter-yaml
|
||||||
p.tree-sitter-nix
|
p.tree-sitter-nix
|
||||||
@@ -43,16 +39,16 @@
|
|||||||
p.tree-sitter-markdown-inline
|
p.tree-sitter-markdown-inline
|
||||||
]))
|
]))
|
||||||
];
|
];
|
||||||
initLua = ''
|
extraLuaConfig = ''
|
||||||
${builtins.readFile ./plugins.lua}
|
|
||||||
${builtins.readFile ./options.lua}
|
${builtins.readFile ./options.lua}
|
||||||
|
${builtins.readFile ./plugins.lua}
|
||||||
${builtins.readFile ./keybinds.lua}
|
${builtins.readFile ./keybinds.lua}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# nix stuff
|
# nix stuff
|
||||||
nixfmt
|
nixfmt-rfc-style
|
||||||
statix
|
statix
|
||||||
|
|
||||||
# LSPs
|
# LSPs
|
||||||
@@ -64,6 +60,7 @@
|
|||||||
yaml-language-server
|
yaml-language-server
|
||||||
lua-language-server
|
lua-language-server
|
||||||
clang-tools
|
clang-tools
|
||||||
|
zls
|
||||||
ruff
|
ruff
|
||||||
];
|
];
|
||||||
home.sessionVariables.EDITOR = "nvim";
|
home.sessionVariables.EDITOR = "nvim";
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
-- Keybinds
|
-- Keybinds
|
||||||
vim.keymap.set("n", "<Leader>ds", vim.diagnostic.open_float, { desc = "Show diagnostic" })
|
|
||||||
|
|
||||||
-- Term
|
-- Term
|
||||||
vim.g.floaterm_keymap_toggle = '<leader>ft'
|
vim.g.floaterm_keymap_toggle = '<leader>ft'
|
||||||
|
|||||||
@@ -11,8 +11,3 @@ vim.o.relativenumber = true
|
|||||||
vim.o.tabstop = 4
|
vim.o.tabstop = 4
|
||||||
vim.o.shiftwidth = 4
|
vim.o.shiftwidth = 4
|
||||||
vim.o.expandtab = true
|
vim.o.expandtab = true
|
||||||
|
|
||||||
vim.o.termguicolors = true
|
|
||||||
|
|
||||||
vim.o.list = true
|
|
||||||
vim.o.listchars = 'tab:» ,trail:·,extends:»,precedes:«,nbsp:␣'
|
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ lsp_zero.format_on_save({
|
|||||||
['gopls'] = { 'go' },
|
['gopls'] = { 'go' },
|
||||||
['nil_ls'] = { 'nix' },
|
['nil_ls'] = { 'nix' },
|
||||||
['lua_ls'] = { 'lua' },
|
['lua_ls'] = { 'lua' },
|
||||||
['ts_ls'] = { 'typescript', 'javascript', 'typescriptreact' },
|
['ts_ls'] = { 'typescript', 'javascript' },
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
-- LSP: go
|
-- LSP: go
|
||||||
vim.lsp.config("gopls", {
|
local lspconfig = require('lspconfig')
|
||||||
|
lspconfig.gopls.setup({
|
||||||
settings = {
|
settings = {
|
||||||
gopls = {
|
gopls = {
|
||||||
analyses = {
|
analyses = {
|
||||||
@@ -32,7 +33,6 @@ vim.lsp.config("gopls", {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
vim.lsp.enable({ "gopls" })
|
|
||||||
|
|
||||||
-- GO: Automatically organize imports on save
|
-- GO: Automatically organize imports on save
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
@@ -59,7 +59,7 @@ vim.api.nvim_create_autocmd("BufWritePre", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- LSP: nix
|
-- LSP: nix
|
||||||
vim.lsp.config("nil_ls", {
|
lspconfig.nil_ls.setup({
|
||||||
autostart = true,
|
autostart = true,
|
||||||
settings = {
|
settings = {
|
||||||
['nil'] = {
|
['nil'] = {
|
||||||
@@ -69,10 +69,9 @@ vim.lsp.config("nil_ls", {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
vim.lsp.enable({ "nil_ls" })
|
|
||||||
|
|
||||||
-- LSP: lua
|
-- LSP: lua
|
||||||
vim.lsp.config("lua_ls", {
|
lspconfig.lua_ls.setup({
|
||||||
on_init = function(client)
|
on_init = function(client)
|
||||||
local path = client.workspace_folders[1].name
|
local path = client.workspace_folders[1].name
|
||||||
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then
|
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then
|
||||||
@@ -111,11 +110,9 @@ vim.lsp.config("lua_ls", {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
vim.lsp.enable({ "lua_ls" })
|
|
||||||
|
|
||||||
|
|
||||||
-- LSP: ts/js
|
-- LSP: ts/js
|
||||||
vim.lsp.config("ts_ls", {
|
lspconfig.ts_ls.setup({
|
||||||
init_options = {
|
init_options = {
|
||||||
plugins = {
|
plugins = {
|
||||||
},
|
},
|
||||||
@@ -123,16 +120,18 @@ vim.lsp.config("ts_ls", {
|
|||||||
filetypes = {
|
filetypes = {
|
||||||
"typescript",
|
"typescript",
|
||||||
"javascript",
|
"javascript",
|
||||||
"typescriptreact",
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
vim.lsp.enable({ "ts_ls" })
|
|
||||||
|
-- LSP: rust
|
||||||
|
|
||||||
|
lspconfig.rust_analyzer.setup {
|
||||||
|
}
|
||||||
|
|
||||||
-- LSP: python
|
-- LSP: python
|
||||||
-- Ruff server
|
-- Ruff server
|
||||||
vim.lsp.config("ruff", {
|
lspconfig.ruff.setup({
|
||||||
})
|
})
|
||||||
vim.lsp.enable({ "ruff" })
|
|
||||||
|
|
||||||
-- Ruff: automatically format on save
|
-- Ruff: automatically format on save
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
@@ -159,7 +158,7 @@ vim.api.nvim_create_autocmd("LspAttach", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- Pyright
|
-- Pyright
|
||||||
vim.lsp.config("pyright", {
|
lspconfig.pyright.setup {
|
||||||
settings = {
|
settings = {
|
||||||
pyright = {
|
pyright = {
|
||||||
-- Using Ruff's import organizer
|
-- Using Ruff's import organizer
|
||||||
@@ -172,8 +171,13 @@ vim.lsp.config("pyright", {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
}
|
||||||
vim.lsp.enable({ "pyright" })
|
|
||||||
|
-- LSP: C/C++
|
||||||
|
lspconfig.clangd.setup({})
|
||||||
|
|
||||||
|
-- LSP: zig
|
||||||
|
lspconfig.zls.setup({})
|
||||||
|
|
||||||
-- Telescope
|
-- Telescope
|
||||||
require('telescope').setup({
|
require('telescope').setup({
|
||||||
@@ -188,7 +192,7 @@ require('telescope').setup({
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- Tresitter stuff
|
-- Tresitter stuff
|
||||||
require('nvim-treesitter').setup {
|
require('nvim-treesitter.configs').setup {
|
||||||
ensure_installed = {},
|
ensure_installed = {},
|
||||||
auto_install = false,
|
auto_install = false,
|
||||||
highlight = { enable = true },
|
highlight = { enable = true },
|
||||||
@@ -293,6 +297,6 @@ cmp.setup({
|
|||||||
|
|
||||||
|
|
||||||
-- Colorscheme
|
-- Colorscheme
|
||||||
require('catppuccin').setup {
|
require('catppuccin').setup({
|
||||||
}
|
})
|
||||||
vim.cmd.colorscheme "catppuccin"
|
vim.cmd.colorscheme "catppuccin"
|
||||||
|
|||||||
49
home/gunter.nix
Normal file
49
home/gunter.nix
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
user,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
||||||
|
home-manager = {
|
||||||
|
useUserPackages = true;
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit pkgs inputs user;
|
||||||
|
};
|
||||||
|
users.${user} =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
|
./editor/neovim
|
||||||
|
./hyprland/gunter.nix
|
||||||
|
./packages
|
||||||
|
./programs/dunst
|
||||||
|
./programs/git
|
||||||
|
./programs/firefox
|
||||||
|
./programs/kitty
|
||||||
|
./programs/obs-studio
|
||||||
|
./programs/rofi
|
||||||
|
./programs/tmux
|
||||||
|
./programs/vscode
|
||||||
|
./scripts
|
||||||
|
./services/backup-home.nix
|
||||||
|
./services/ghettoptt.nix
|
||||||
|
./sops
|
||||||
|
./ssh
|
||||||
|
./zsh
|
||||||
|
];
|
||||||
|
firefox.enable = true;
|
||||||
|
tmux.enable = true;
|
||||||
|
hyprland.enable = true;
|
||||||
|
home = {
|
||||||
|
username = "${user}";
|
||||||
|
homeDirectory = "/home/${user}";
|
||||||
|
stateVersion = "23.11";
|
||||||
|
};
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
user,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
|
||||||
home-manager = {
|
|
||||||
useUserPackages = true;
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
extraSpecialArgs = {
|
|
||||||
inherit pkgs inputs user;
|
|
||||||
};
|
|
||||||
users.${user} =
|
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
inputs.sops-nix.homeManagerModules.sops
|
|
||||||
../../editor/neovim
|
|
||||||
../../hyprland
|
|
||||||
../../packages
|
|
||||||
../../programs/dunst
|
|
||||||
../../programs/git
|
|
||||||
../../programs/firefox
|
|
||||||
../../programs/kitty
|
|
||||||
../../programs/obs-studio
|
|
||||||
../../programs/rofi
|
|
||||||
../../programs/streamcontroller
|
|
||||||
../../programs/tmux
|
|
||||||
../../programs/claude-code
|
|
||||||
../../programs/vscode
|
|
||||||
../../scripts
|
|
||||||
../../services/backup-home.nix
|
|
||||||
../../services/ghettoptt.nix
|
|
||||||
../../services/natstonotify.nix
|
|
||||||
../../services/labmcp.nix
|
|
||||||
../../sops
|
|
||||||
../../ssh
|
|
||||||
../../zsh
|
|
||||||
];
|
|
||||||
|
|
||||||
firefox.enable = true;
|
|
||||||
tmux.enable = true;
|
|
||||||
hyprland.enable = true;
|
|
||||||
|
|
||||||
hyprland.monitors = [
|
|
||||||
"$mon_top,1920x1080@60,2560x0,1"
|
|
||||||
"$mon_left,2560x1440@75,0x1080,1"
|
|
||||||
"$mon_center,2560x1440@120,2560x1080,1"
|
|
||||||
"$mon_right,2560x1440@75,5120x1080,1"
|
|
||||||
];
|
|
||||||
|
|
||||||
hyprland.extraEnv = [
|
|
||||||
"LIBVA_DRIVER_NAME,nvidia"
|
|
||||||
"GBM_BACKEND,nvidia-drm"
|
|
||||||
"WLR_NO_HARDWARE_CURSORS,1"
|
|
||||||
];
|
|
||||||
|
|
||||||
hyprland.enableGrimblast = true;
|
|
||||||
streamcontroller.enable = true;
|
|
||||||
hyprland.enableWacom = true;
|
|
||||||
hyprland.cursorNoHardware = true;
|
|
||||||
|
|
||||||
hyprland.extraWorkspaces = [
|
|
||||||
"name:T1, monitor:$mon_top, persistent:true, default:true"
|
|
||||||
"name:T2, monitor:$mon_top, persistent:true, default:false"
|
|
||||||
"name:L1, monitor:$mon_left, persistent:true, default:true"
|
|
||||||
"name:L2, monitor:$mon_left, persistent:true, default:false"
|
|
||||||
"name:R1, monitor:$mon_right, persistent:true, default:true"
|
|
||||||
"name:R2, monitor:$mon_right, persistent:true, default:false"
|
|
||||||
"name:c1, monitor:$mon_center, persistent:true, default:true"
|
|
||||||
"name:c2, monitor:$mon_center, persistent:true, default:false"
|
|
||||||
"name:c3, monitor:$mon_center, persistent:true, default:false"
|
|
||||||
"name:c4, monitor:$mon_center, persistent:true, default:false"
|
|
||||||
];
|
|
||||||
|
|
||||||
hyprland.monitorVariables = {
|
|
||||||
"$mon_top" = "desc:BNQ G2420HDBL T2B04424SL000";
|
|
||||||
"$mon_left" = "desc:Samsung Electric Company LS27A600U HNMT502389";
|
|
||||||
"$mon_center" = "desc:Acer Technologies XB271HU #ASPVEKfgZ8Dd";
|
|
||||||
"$mon_right" = "desc:Samsung Electric Company LS27A600U HNMT502390";
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprland.extraKeybinds = [
|
|
||||||
"$mainMod,Print,exec,grimblast save active ~/tmp/$(date -Iseconds).png"
|
|
||||||
"$shiftMainMod,Print,exec,grimblast copy area"
|
|
||||||
",Print,exec,grimblast copy active"
|
|
||||||
"$mainMod,v,exec,sleep 0.5s && wl-paste | wtype -"
|
|
||||||
# Workspace keybinds
|
|
||||||
"$mainMod,1,workspace,name:c1"
|
|
||||||
"$mainMod,2,workspace,name:c2"
|
|
||||||
"$mainMod,3,workspace,name:c3"
|
|
||||||
"$mainMod,4,workspace,name:c4"
|
|
||||||
"$mainMod,5,workspace,5"
|
|
||||||
"$mainMod,6,workspace,6"
|
|
||||||
"$shiftMainMod,1,movetoworkspace,name:c1"
|
|
||||||
"$shiftMainMod,2,movetoworkspace,name:c2"
|
|
||||||
"$shiftMainMod,3,movetoworkspace,name:c3"
|
|
||||||
"$shiftMainMod,4,movetoworkspace,name:c4"
|
|
||||||
"$shiftMainMod,5,movetoworkspace,5"
|
|
||||||
"$shiftMainMod,6,movetoworkspace,6"
|
|
||||||
];
|
|
||||||
home = {
|
|
||||||
username = "${user}";
|
|
||||||
homeDirectory = "/home/${user}";
|
|
||||||
stateVersion = "23.11";
|
|
||||||
};
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
|
|
||||||
# Custom options
|
|
||||||
torjus.home.obs = {
|
|
||||||
enable = true;
|
|
||||||
withCuda = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
user,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
|
||||||
home-manager = {
|
|
||||||
useUserPackages = true;
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
extraSpecialArgs = {
|
|
||||||
inherit pkgs inputs user;
|
|
||||||
};
|
|
||||||
users.${user} =
|
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
inputs.sops-nix.homeManagerModules.sops
|
|
||||||
../../sops
|
|
||||||
../../services/labmcp.nix
|
|
||||||
../../editor/neovim
|
|
||||||
../../programs/claude-code
|
|
||||||
../../programs/firefox
|
|
||||||
../../programs/tmux
|
|
||||||
../../programs/dunst
|
|
||||||
../../programs/kitty
|
|
||||||
../../programs/rofi
|
|
||||||
../../programs/obs-studio
|
|
||||||
../../programs/vscode
|
|
||||||
../../programs/pywal
|
|
||||||
../../scripts
|
|
||||||
../../scripts/batlvl.nix
|
|
||||||
../../zsh
|
|
||||||
../../packages
|
|
||||||
../../hyprland
|
|
||||||
../../ssh
|
|
||||||
];
|
|
||||||
firefox.enable = true;
|
|
||||||
tmux.enable = true;
|
|
||||||
hyprland.enable = true;
|
|
||||||
hyprland.monitors = [ "eDP-1,1920x1080@60,0x0,1" ];
|
|
||||||
hyprland.extraKeybinds = [
|
|
||||||
# Workspace keybinds
|
|
||||||
"$mainMod,1,workspace,1"
|
|
||||||
"$mainMod,2,workspace,2"
|
|
||||||
"$mainMod,3,workspace,3"
|
|
||||||
"$mainMod,4,workspace,4"
|
|
||||||
"$mainMod,5,workspace,5"
|
|
||||||
"$mainMod,6,workspace,6"
|
|
||||||
"$shiftMainMod,1,movetoworkspace,1"
|
|
||||||
"$shiftMainMod,2,movetoworkspace,2"
|
|
||||||
"$shiftMainMod,3,movetoworkspace,3"
|
|
||||||
"$shiftMainMod,4,movetoworkspace,4"
|
|
||||||
"$shiftMainMod,5,movetoworkspace,5"
|
|
||||||
"$shiftMainMod,6,movetoworkspace,6"
|
|
||||||
];
|
|
||||||
home = {
|
|
||||||
username = "${user}";
|
|
||||||
homeDirectory = "/home/${user}";
|
|
||||||
stateVersion = "23.11";
|
|
||||||
};
|
|
||||||
torjus.home.obs.enable = true;
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,297 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
cfg = config.hyprland;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [ ./waybar ];
|
|
||||||
|
|
||||||
options.hyprland = {
|
|
||||||
enable = mkEnableOption "Hyprland";
|
|
||||||
|
|
||||||
monitors = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [ ];
|
|
||||||
example = [ "eDP-1,1920x1080@60,0x0,1" ];
|
|
||||||
description = "Hyprland monitor configuration";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraEnv = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [ ];
|
|
||||||
example = [
|
|
||||||
"LIBVA_DRIVER_NAME,nvidia"
|
|
||||||
"GBM_BACKEND,nvidia-drm"
|
|
||||||
];
|
|
||||||
description = "Extra environment variables for Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
enableGrimblast = mkEnableOption "grimblast screenshot keybinds";
|
|
||||||
|
|
||||||
enableWacom = mkEnableOption "Wacom tablet device configuration";
|
|
||||||
|
|
||||||
extraKeybinds = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [ ];
|
|
||||||
example = [
|
|
||||||
"$mainMod,Print,exec,grimblast save active ~/tmp/screenshot.png"
|
|
||||||
];
|
|
||||||
description = "Extra keybinds for Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraWorkspaces = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [ ];
|
|
||||||
example = [
|
|
||||||
"1, monitor:eDP-1, persistent:true, default:true"
|
|
||||||
"2, monitor:eDP-1, persistent:true"
|
|
||||||
];
|
|
||||||
description = "Extra workspace definitions for Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
monitorVariables = mkOption {
|
|
||||||
type = types.attrsOf types.str;
|
|
||||||
default = { };
|
|
||||||
example = {
|
|
||||||
"$mon_top" = "desc:BNQ G2420HDBL T2B04424SL000";
|
|
||||||
"$mon_left" = "desc:Samsung Electric Company LS27A600U HNMT502389";
|
|
||||||
};
|
|
||||||
description = "Monitor name variables for workspace configuration";
|
|
||||||
};
|
|
||||||
|
|
||||||
cursorNoHardware = mkEnableOption "disable hardware cursors";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages =
|
|
||||||
with pkgs;
|
|
||||||
[
|
|
||||||
dunst
|
|
||||||
hyprpaper
|
|
||||||
rofi
|
|
||||||
slurp
|
|
||||||
swww
|
|
||||||
waybar
|
|
||||||
wl-clipboard
|
|
||||||
catppuccin-cursors.macchiatoLavender
|
|
||||||
bibata-cursors
|
|
||||||
libsForQt5.qt5.qtwayland
|
|
||||||
libsForQt5.qt5ct
|
|
||||||
]
|
|
||||||
++ optional cfg.enableGrimblast grimblast;
|
|
||||||
|
|
||||||
services.hyprpaper = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
splash = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.hypridle = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
general = {
|
|
||||||
lock_cmd = "${pkgs.hyprlock}/bin/hyprlock";
|
|
||||||
ignore_dbus_inhibit = false;
|
|
||||||
};
|
|
||||||
listener = {
|
|
||||||
timeout = 240;
|
|
||||||
on-timeout = config.services.hypridle.settings.general.lock_cmd;
|
|
||||||
before_sleep_cmd = config.services.hypridle.settings.general.lock_cmd;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.hyprlock = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
background = [
|
|
||||||
{
|
|
||||||
monitor = "";
|
|
||||||
path = "screenshot";
|
|
||||||
color = "rgba(17, 17, 17, 1.0)";
|
|
||||||
blur_passes = 3;
|
|
||||||
contrast = 0.8916;
|
|
||||||
brightness = 0.8172;
|
|
||||||
vibrancy = 0.1696;
|
|
||||||
vibrancy_darkness = 0.0;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
general = {
|
|
||||||
grace = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
input-field = [
|
|
||||||
{
|
|
||||||
size = "250, 60";
|
|
||||||
outline_thickness = 2;
|
|
||||||
dots_size = 0.2;
|
|
||||||
dots_spacing = 0.2;
|
|
||||||
dots_center = true;
|
|
||||||
outer_color = "rgba(0, 0, 0, 0)";
|
|
||||||
inner_color = "rgba(0, 0, 0, 0.5)";
|
|
||||||
font_color = "rgb(200, 200, 200)";
|
|
||||||
fade_on_empty = false;
|
|
||||||
font_family = "JetBrains Mono Nerd Font Mono";
|
|
||||||
placeholder_text = "<i><span foreground=\"##cdd6f4\">Input Password...</span></i>";
|
|
||||||
hide_input = false;
|
|
||||||
position = "0, -120";
|
|
||||||
halign = "center";
|
|
||||||
valign = "center";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
label = [
|
|
||||||
{
|
|
||||||
text = "cmd[update:2000] echo \"$(date +\"%b %d %H:%M\")\"";
|
|
||||||
color = "rgba(255, 255, 255, 0.6)";
|
|
||||||
font_size = 120;
|
|
||||||
font_family = "JetBrains Mono Nerd Font Mono ExtraBold";
|
|
||||||
position = "0, -300";
|
|
||||||
halign = "center";
|
|
||||||
valign = "top";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.hyprland;
|
|
||||||
systemd.enable = false;
|
|
||||||
settings = {
|
|
||||||
"$mainMod" = "SUPER";
|
|
||||||
"$shiftMainMod" = "SUPER_SHIFT";
|
|
||||||
"$term" = "kitty";
|
|
||||||
}
|
|
||||||
// cfg.monitorVariables
|
|
||||||
// {
|
|
||||||
monitor = cfg.monitors;
|
|
||||||
|
|
||||||
input = {
|
|
||||||
kb_layout = "no";
|
|
||||||
follow_mouse = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
device = optional cfg.enableWacom {
|
|
||||||
name = "wacom-one-by-wacom-m-pen";
|
|
||||||
};
|
|
||||||
|
|
||||||
cursor = optionalAttrs cfg.cursorNoHardware {
|
|
||||||
no_hardware_cursors = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
env = [ "XDG_SESSION_TYPE,wayland" ] ++ cfg.extraEnv;
|
|
||||||
|
|
||||||
decoration = {
|
|
||||||
rounding = 10;
|
|
||||||
blur = {
|
|
||||||
enabled = true;
|
|
||||||
size = 3;
|
|
||||||
passes = 1;
|
|
||||||
xray = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
general = {
|
|
||||||
gaps_in = 4;
|
|
||||||
gaps_out = 10;
|
|
||||||
border_size = 2;
|
|
||||||
layout = "dwindle";
|
|
||||||
};
|
|
||||||
|
|
||||||
animations = {
|
|
||||||
enabled = true;
|
|
||||||
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
|
||||||
animation = [
|
|
||||||
"windows, 1, 7, myBezier"
|
|
||||||
"windowsOut, 1, 7, default, popin 80%"
|
|
||||||
"border, 1, 10, default"
|
|
||||||
"borderangle, 1, 8, default"
|
|
||||||
"fade, 1, 7, default"
|
|
||||||
"workspaces, 1, 6, default"
|
|
||||||
"specialWorkspace, 1, 4, default, fade"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
dwindle = {
|
|
||||||
pseudotile = true;
|
|
||||||
preserve_split = true;
|
|
||||||
special_scale_factor = 0.85;
|
|
||||||
};
|
|
||||||
|
|
||||||
master = {
|
|
||||||
new_status = "master";
|
|
||||||
};
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
force_default_wallpaper = 0;
|
|
||||||
disable_hyprland_logo = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
ecosystem = {
|
|
||||||
no_update_news = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
windowrule = [
|
|
||||||
{
|
|
||||||
name = "terminal_opacity";
|
|
||||||
"match:class" = "kitty";
|
|
||||||
opacity = 0.9;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
workspace = [
|
|
||||||
"special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false"
|
|
||||||
]
|
|
||||||
++ cfg.extraWorkspaces;
|
|
||||||
|
|
||||||
bindm = [
|
|
||||||
"$mainMod,mouse:272,movewindow"
|
|
||||||
"$shiftMainMod,mouse:272,resizewindow"
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
# term
|
|
||||||
"$mainMod,Return,exec,$term"
|
|
||||||
# rofi
|
|
||||||
"$mainMod,D,exec,rofi-launcher"
|
|
||||||
"$mainMod,P,exec,rofi-rbw"
|
|
||||||
# hyprlock
|
|
||||||
"$shiftMainMod,l,exec,${pkgs.hyprlock}/bin/hyprlock"
|
|
||||||
# hyprland
|
|
||||||
"$mainMod,Q,killactive,"
|
|
||||||
"CTRLALT,Delete,exit,"
|
|
||||||
"$mainMod,Space,togglefloating,"
|
|
||||||
"$mainMod,F,fullscreen,"
|
|
||||||
# focus
|
|
||||||
"$mainMod,l,movefocus,l"
|
|
||||||
"$mainMod,h,movefocus,r"
|
|
||||||
"$mainMod,k,movefocus,u"
|
|
||||||
"$mainMod,j,movefocus,d"
|
|
||||||
# move
|
|
||||||
"$mainMod,h,movewindow,l"
|
|
||||||
"$mainMod,l,movewindow,r"
|
|
||||||
"$mainMod,k,movewindow,u"
|
|
||||||
"$mainMod,j,movewindow,d"
|
|
||||||
# Force opacity
|
|
||||||
"$shiftMainMod,o,exec, hl-no-opacity"
|
|
||||||
]
|
|
||||||
++ cfg.extraKeybinds
|
|
||||||
++ [
|
|
||||||
# Special workspace
|
|
||||||
"$mainMod,c,togglespecialworkspace"
|
|
||||||
"$shiftMainMod,c,movetoworkspace, special"
|
|
||||||
];
|
|
||||||
|
|
||||||
exec-once = [ ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
8
home/hyprland/gunter.nix
Normal file
8
home/hyprland/gunter.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprland_gunter.nix
|
||||||
|
./waybar
|
||||||
|
./xdg.nix
|
||||||
|
./cursor.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
16
home/hyprland/hypridle.nix
Normal file
16
home/hyprland/hypridle.nix
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
osConfig,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
home.packages = with pkgs; [ hypridle ];
|
||||||
|
xdg.configFile = {
|
||||||
|
"hypr/hypridle.conf" = {
|
||||||
|
source = config.lib.file.mkOutOfStoreSymlink ./. + "/hypridle_${osConfig.system.name}.conf";
|
||||||
|
target = "hypr/hypridle.conf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
12
home/hyprland/hypridle_gunter.conf
Normal file
12
home/hyprland/hypridle_gunter.conf
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = hyprlock # dbus/sysd lock command (loginctl lock-session)
|
||||||
|
# unlock_cmd = notify-send "unlock!" # same as above, but unlock
|
||||||
|
before_sleep_cmd = lockhelper # command ran before sleep
|
||||||
|
# after_sleep_cmd = # command ran after sleep
|
||||||
|
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 240 # in seconds
|
||||||
|
on-timeout = lockhelper # command to run when timeout has passed
|
||||||
|
}
|
||||||
19
home/hyprland/hypridle_magicman.conf
Normal file
19
home/hyprland/hypridle_magicman.conf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = lockhelper # dbus/sysd lock command (loginctl lock-session)
|
||||||
|
# unlock_cmd = notify-send "unlock!" # same as above, but unlock
|
||||||
|
before_sleep_cmd = lockhelper # command ran before sleep
|
||||||
|
# after_sleep_cmd = lockhelper # command ran after sleep
|
||||||
|
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 240 # in seconds
|
||||||
|
on-timeout = lockhelper # command to run when timeout has passed
|
||||||
|
# on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 900
|
||||||
|
on-timeout = systemctl suspend # command to run when timeout has passed
|
||||||
|
# on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
230
home/hyprland/hyprland_gunter.nix
Normal file
230
home/hyprland/hyprland_gunter.nix
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprlock.nix
|
||||||
|
./hypridle.nix
|
||||||
|
];
|
||||||
|
options.hyprland.enable = lib.mkEnableOption "Hyprland";
|
||||||
|
config = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dunst
|
||||||
|
# hyprlock
|
||||||
|
hyprpaper
|
||||||
|
rofi-wayland
|
||||||
|
slurp
|
||||||
|
swww
|
||||||
|
waybar
|
||||||
|
wl-clipboard
|
||||||
|
catppuccin-cursors.macchiatoLavender
|
||||||
|
bibata-cursors
|
||||||
|
# For potentially fixing some issues
|
||||||
|
libsForQt5.qt5.qtwayland
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.hyprland;
|
||||||
|
settings = {
|
||||||
|
"$mainMod" = "SUPER";
|
||||||
|
"$shiftMainMod" = "SUPER_SHIFT";
|
||||||
|
"$term" = "kitty";
|
||||||
|
|
||||||
|
# monitors
|
||||||
|
"$mon_top" = "desc:BNQ G2420HDBL T2B04424SL000";
|
||||||
|
"$mon_left" = "desc:Samsung Electric Company LS27A600U HNMT502389";
|
||||||
|
"$mon_center" = "desc:Acer Technologies XB271HU #ASPVEKfgZ8Dd";
|
||||||
|
"$mon_right" = "desc:Samsung Electric Company LS27A600U HNMT502390";
|
||||||
|
|
||||||
|
monitor = [
|
||||||
|
# "$mon_top,1920x1080@60,2560x0,1" # top T2B04424SL000
|
||||||
|
"DP-6,1920x1080@60,2560x0,1" # top T2B04424SL000 60
|
||||||
|
# "$mon_left,2560x1440@75,0x1080,1" # left
|
||||||
|
"DP-8,2560x1440@75,0x1080,1" # left 75hz
|
||||||
|
# "$mon_center,2560x1440@120,2560x1080,1" # main #ASPVEKfgZ8Dd
|
||||||
|
"DP-5,2560x1440@144,2560x1080,1" # main #ASPVEKfgZ8Dd 120hz
|
||||||
|
# "$mon_right,2560x1440@75,5120x1080,1" # right
|
||||||
|
"DP-7,2560x1440@75,5120x1080,1" # right 75hz
|
||||||
|
];
|
||||||
|
input = {
|
||||||
|
kb_layout = "no";
|
||||||
|
follow_mouse = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor = {
|
||||||
|
no_hardware_cursors = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
env = [
|
||||||
|
"LIBVA_DRIVER_NAME,nvidia"
|
||||||
|
"XDG_SESSION_TYPE,wayland"
|
||||||
|
"GBM_BACKEND,nvidia-drm"
|
||||||
|
# "__GLX_VENDOR_LIBRARY_NAME,nvidia"
|
||||||
|
"WLR_NO_HARDWARE_CURSORS,1"
|
||||||
|
];
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10;
|
||||||
|
drop_shadow = true;
|
||||||
|
shadow_range = 4;
|
||||||
|
shadow_render_power = 3;
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 3;
|
||||||
|
passes = 1;
|
||||||
|
xray = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_in = 4;
|
||||||
|
gaps_out = 10;
|
||||||
|
border_size = 2;
|
||||||
|
layout = "dwindle";
|
||||||
|
};
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
bezier = [
|
||||||
|
"myBezier, 0.05, 0.9, 0.1, 1.05"
|
||||||
|
"easeInB, 0.6, -0.28, 0.735, 0.045"
|
||||||
|
];
|
||||||
|
animation = [
|
||||||
|
"windows, 1, 7, myBezier"
|
||||||
|
"windowsOut, 1, 7, default, popin 80%"
|
||||||
|
"border, 1, 10, default"
|
||||||
|
"borderangle, 1, 8, default"
|
||||||
|
"fade, 1, 7, default"
|
||||||
|
"workspaces, 1, 6, easeInB, slidefadevert"
|
||||||
|
"specialWorkspace, 1, 4, default, fade"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
special_scale_factor = 0.85;
|
||||||
|
};
|
||||||
|
master = {
|
||||||
|
new_status = "master";
|
||||||
|
};
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = 0;
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
windowrulev2 = [
|
||||||
|
"opacity 0.95 override 0.7 override,class:^(Alacritty)$"
|
||||||
|
"opacity 0.95 override 0.7 override,class:^(kitty)$"
|
||||||
|
];
|
||||||
|
|
||||||
|
workspace = [
|
||||||
|
"name:T1, monitor:$mon_top, persistent:true, default:true"
|
||||||
|
"name:T2, monitor:$mon_top, persistent:true, default:false"
|
||||||
|
"name:L1, monitor:$mon_left, persistent:true, default:true"
|
||||||
|
"name:L2, monitor:$mon_left, persistent:true, default:false"
|
||||||
|
"name:R1, monitor:$mon_right, persistent:true, default:true"
|
||||||
|
"name:R2, monitor:$mon_right, persistent:true, default:false"
|
||||||
|
"name:c1, monitor:$mon_center, persistent:true, default:true"
|
||||||
|
"name:c2, monitor:$mon_center, persistent:true, default:false"
|
||||||
|
"name:c3, monitor:$mon_center, persistent:true, default:false"
|
||||||
|
"name:c4, monitor:$mon_center, persistent:true, default:false"
|
||||||
|
"special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindm = [
|
||||||
|
"$mainMod,mouse:272,movewindow"
|
||||||
|
"$shiftMainMod,mouse:272,resizewindow"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindr = [
|
||||||
|
# mumble ptt release
|
||||||
|
# ",code:202,exec,mumble rpc stoptalking"
|
||||||
|
# ",code:202,exec,pamixer --source 63 -m"
|
||||||
|
# ",code:202,exec,sleep 0.5 && pamixer --default-source -m"
|
||||||
|
];
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
# term
|
||||||
|
"$mainMod,Return,exec,$term"
|
||||||
|
|
||||||
|
# hyprlock
|
||||||
|
"$shiftMainMod,l,exec,lockhelper"
|
||||||
|
|
||||||
|
# rofi
|
||||||
|
"$mainMod,D,exec,rofi-launcher"
|
||||||
|
"$mainMod,P,exec,rofi-rbw"
|
||||||
|
|
||||||
|
# hyprland
|
||||||
|
"$mainMod,Q,killactive,"
|
||||||
|
"CTRLALT,Delete,exit,"
|
||||||
|
"$mainMod,Space,togglefloating,"
|
||||||
|
"$mainMod,F,fullscreen,"
|
||||||
|
|
||||||
|
# focus
|
||||||
|
"$mainMod,l,movefocus,l"
|
||||||
|
"$mainMod,h,movefocus,r"
|
||||||
|
"$mainMod,k,movefocus,u"
|
||||||
|
"$mainMod,j,movefocus,d"
|
||||||
|
|
||||||
|
# move
|
||||||
|
"$mainMod,h,movewindow,l"
|
||||||
|
"$mainMod,l,movewindow,r"
|
||||||
|
"$mainMod,k,movewindow,u"
|
||||||
|
"$mainMod,j,movewindow,d"
|
||||||
|
|
||||||
|
# Force opacity
|
||||||
|
"$shiftMainMod,o,exec, hl-no-opacity"
|
||||||
|
|
||||||
|
# grimblast
|
||||||
|
"$mainMod,Print,exec,grimblast save active ~/tmp/$(date -Iseconds).png"
|
||||||
|
"$shiftMainMod,Print,exec,grimblast copy area"
|
||||||
|
",Print,exec,grimblast copy active"
|
||||||
|
|
||||||
|
# mumble ptt click
|
||||||
|
# ",code:202,exec,mumble rpc starttalking"
|
||||||
|
#",code:202,pass,^(info\.mumble\.Mumble)$"
|
||||||
|
# ",code:202,exec,pamixer --default-source -u"
|
||||||
|
",code:202,pass,^discord$"
|
||||||
|
|
||||||
|
# Paste to wtype
|
||||||
|
"$mainMod,v,exec,sleep 0.5s && wl-paste | wtype -"
|
||||||
|
|
||||||
|
# worspace switching
|
||||||
|
"$mainMod,1,workspace,name:c1"
|
||||||
|
"$mainMod,2,workspace,name:c2"
|
||||||
|
"$mainMod,3,workspace,name:c3"
|
||||||
|
"$mainMod,4,workspace,name:c4"
|
||||||
|
"$mainMod,5,workspace,5"
|
||||||
|
"$mainMod,6,workspace,6"
|
||||||
|
|
||||||
|
# Move window to workspace
|
||||||
|
"$shiftMainMod,1,movetoworkspace,name:c1"
|
||||||
|
"$shiftMainMod,2,movetoworkspace,name:c2"
|
||||||
|
"$shiftMainMod,3,movetoworkspace,name:c3"
|
||||||
|
"$shiftMainMod,4,movetoworkspace,name:c4"
|
||||||
|
"$shiftMainMod,5,movetoworkspace,5"
|
||||||
|
"$shiftMainMod,6,movetoworkspace,6"
|
||||||
|
|
||||||
|
# Special workspace
|
||||||
|
"$mainMod,c,togglespecialworkspace"
|
||||||
|
"$shiftMainMod,c,movetoworkspace, special"
|
||||||
|
];
|
||||||
|
|
||||||
|
exec-once = [
|
||||||
|
"waybar"
|
||||||
|
"hyprpaper & sleep 10 && randomwp"
|
||||||
|
"easyeffects --gapplication-service"
|
||||||
|
"hypridle"
|
||||||
|
"streamcontroller -b"
|
||||||
|
# "dunst"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
171
home/hyprland/hyprland_magicman.nix
Normal file
171
home/hyprland/hyprland_magicman.nix
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprlock.nix
|
||||||
|
./hypridle.nix
|
||||||
|
];
|
||||||
|
options.hyprland.enable = lib.mkEnableOption "Hyprland";
|
||||||
|
config = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dunst
|
||||||
|
# hyprlock
|
||||||
|
hyprpaper
|
||||||
|
rofi-wayland
|
||||||
|
slurp
|
||||||
|
swww
|
||||||
|
waybar
|
||||||
|
wl-clipboard
|
||||||
|
catppuccin-cursors.macchiatoLavender
|
||||||
|
bibata-cursors
|
||||||
|
# For potentially fixing some issues
|
||||||
|
libsForQt5.qt5.qtwayland
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.hyprland;
|
||||||
|
settings = {
|
||||||
|
"$mainMod" = "SUPER";
|
||||||
|
"$shiftMainMod" = "SUPER_SHIFT";
|
||||||
|
"$term" = "kitty";
|
||||||
|
|
||||||
|
monitor = [ "eDP-1,1920x1080@60,0x0,1" ];
|
||||||
|
input = {
|
||||||
|
kb_layout = "no";
|
||||||
|
follow_mouse = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
env = [ "XDG_SESSION_TYPE,wayland" ];
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10;
|
||||||
|
drop_shadow = true;
|
||||||
|
shadow_range = 4;
|
||||||
|
shadow_render_power = 3;
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 3;
|
||||||
|
passes = 1;
|
||||||
|
xray = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_in = 4;
|
||||||
|
gaps_out = 10;
|
||||||
|
border_size = 2;
|
||||||
|
layout = "dwindle";
|
||||||
|
};
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||||
|
animation = [
|
||||||
|
"windows, 1, 7, myBezier"
|
||||||
|
"windowsOut, 1, 7, default, popin 80%"
|
||||||
|
"border, 1, 10, default"
|
||||||
|
"borderangle, 1, 8, default"
|
||||||
|
"fade, 1, 7, default"
|
||||||
|
"workspaces, 1, 6, default"
|
||||||
|
"specialWorkspace, 1, 4, default, fade"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
special_scale_factor = 0.85;
|
||||||
|
};
|
||||||
|
master = {
|
||||||
|
new_status = "master";
|
||||||
|
};
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = 0;
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
windowrulev2 = [
|
||||||
|
"opacity 0.95 override 0.7 override,class:^(Alacritty)$"
|
||||||
|
"opacity 0.95 override 0.7 override,class:^(kitty)$"
|
||||||
|
];
|
||||||
|
|
||||||
|
workspace = [
|
||||||
|
"special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindm = [ "ALT,mouse:272,movewindow" ];
|
||||||
|
|
||||||
|
bindr = [
|
||||||
|
# mumble ptt release
|
||||||
|
# ",code:202,exec,mumble rpc stoptalking"
|
||||||
|
# ",code:202,exec,pamixer --source 63 -m"
|
||||||
|
# ",code:202,exec,sleep 0.5 && pamixer --default-source -m"
|
||||||
|
];
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
# term
|
||||||
|
"$mainMod,Return,exec,$term"
|
||||||
|
|
||||||
|
# rofi
|
||||||
|
"$mainMod,D,exec,rofi-launcher"
|
||||||
|
"$mainMod,P,exec,rofi-rbw"
|
||||||
|
|
||||||
|
# hyprlock
|
||||||
|
"$shiftMainMod,l,exec,lockhelper"
|
||||||
|
|
||||||
|
# hyprland
|
||||||
|
"$mainMod,Q,killactive,"
|
||||||
|
"CTRLALT,Delete,exit,"
|
||||||
|
"$mainMod,Space,togglefloating,"
|
||||||
|
"$mainMod,F,fullscreen,"
|
||||||
|
|
||||||
|
# focus
|
||||||
|
"$mainMod,l,movefocus,l"
|
||||||
|
"$mainMod,h,movefocus,r"
|
||||||
|
"$mainMod,k,movefocus,u"
|
||||||
|
"$mainMod,j,movefocus,d"
|
||||||
|
|
||||||
|
# move
|
||||||
|
"$mainMod,h,movewindow,l"
|
||||||
|
"$mainMod,l,movewindow,r"
|
||||||
|
"$mainMod,k,movewindow,u"
|
||||||
|
"$mainMod,j,movewindow,d"
|
||||||
|
|
||||||
|
# Force opacity
|
||||||
|
"$shiftMainMod,o,exec, hl-no-opacity"
|
||||||
|
|
||||||
|
# mumble ptt click
|
||||||
|
# ",code:202,exec,mumble rpc starttalking"
|
||||||
|
#",code:202,pass,^(info\.mumble\.Mumble)$"
|
||||||
|
# ",code:202,exec,pamixer --default-source -u"
|
||||||
|
# ",code:202,pass,^discord$"
|
||||||
|
|
||||||
|
# worspace switching
|
||||||
|
"$mainMod,1,workspace,1"
|
||||||
|
"$mainMod,2,workspace,2"
|
||||||
|
"$mainMod,3,workspace,3"
|
||||||
|
"$mainMod,4,workspace,4"
|
||||||
|
"$mainMod,5,workspace,5"
|
||||||
|
"$mainMod,6,workspace,6"
|
||||||
|
|
||||||
|
# Special workspace
|
||||||
|
"$mainMod,c,togglespecialworkspace"
|
||||||
|
"$shiftMainMod,c,movetoworkspace, special"
|
||||||
|
];
|
||||||
|
|
||||||
|
exec-once = [
|
||||||
|
"waybar"
|
||||||
|
"hyprpaper & sleep 2 && randomwp"
|
||||||
|
"hypridle"
|
||||||
|
# "dunst"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
159
home/hyprland/hyprland_prismo.nix
Normal file
159
home/hyprland/hyprland_prismo.nix
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
options.hyprland.enable = lib.mkEnableOption "Hyprland";
|
||||||
|
config = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dunst
|
||||||
|
# hyprlock
|
||||||
|
hyprpaper
|
||||||
|
rofi-wayland
|
||||||
|
slurp
|
||||||
|
swww
|
||||||
|
waybar
|
||||||
|
wl-clipboard
|
||||||
|
catppuccin-cursors.macchiatoLavender
|
||||||
|
bibata-cursors
|
||||||
|
# For potentially fixing some issues
|
||||||
|
libsForQt5.qt5.qtwayland
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.hyprland;
|
||||||
|
settings = {
|
||||||
|
"$mainMod" = "SUPER";
|
||||||
|
"$shiftMainMod" = "SUPER_SHIFT";
|
||||||
|
"$term" = "kitty";
|
||||||
|
|
||||||
|
monitor = [ ];
|
||||||
|
input = {
|
||||||
|
kb_layout = "no";
|
||||||
|
follow_mouse = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
env = [ "XDG_SESSION_TYPE,wayland" ];
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 0;
|
||||||
|
drop_shadow = true;
|
||||||
|
shadow_range = 4;
|
||||||
|
shadow_render_power = 3;
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 3;
|
||||||
|
passes = 1;
|
||||||
|
xray = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_in = 4;
|
||||||
|
gaps_out = 10;
|
||||||
|
border_size = 2;
|
||||||
|
layout = "dwindle";
|
||||||
|
};
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||||
|
animation = [
|
||||||
|
"windows, 1, 7, myBezier"
|
||||||
|
"windowsOut, 1, 7, default, popin 80%"
|
||||||
|
"border, 1, 10, default"
|
||||||
|
"borderangle, 1, 8, default"
|
||||||
|
"fade, 1, 7, default"
|
||||||
|
"workspaces, 1, 6, default"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
};
|
||||||
|
master = {
|
||||||
|
new_status = "master";
|
||||||
|
};
|
||||||
|
misc.force_default_wallpaper = -1;
|
||||||
|
|
||||||
|
windowrulev2 = [
|
||||||
|
"opacity 0.95 override 0.7 override,class:^(Alacritty)$"
|
||||||
|
"opacity 0.95 override 0.7 override,class:^(kitty)$"
|
||||||
|
];
|
||||||
|
|
||||||
|
workspace = [
|
||||||
|
"name:mumble, monitor:$mon_top, persistent:true, default:true"
|
||||||
|
"name:left, monitor:$mon_left, persistent:true, default:true"
|
||||||
|
"name:right, monitor:$mon_right, persistent:true, default:true"
|
||||||
|
"name:main 1, monitor:$mon_center, persistent:true, default:true"
|
||||||
|
"name:main 2, monitor:$mon_center, persistent:true, default:true"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindm = [ "ALT,mouse:272,movewindow" ];
|
||||||
|
|
||||||
|
bindr = [
|
||||||
|
# mumble ptt release
|
||||||
|
# ",code:202,exec,mumble rpc stoptalking"
|
||||||
|
# ",code:202,exec,pamixer --source 63 -m"
|
||||||
|
# ",code:202,exec,sleep 0.5 && pamixer --default-source -m"
|
||||||
|
];
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
# term
|
||||||
|
"$mainMod,Return,exec,$term"
|
||||||
|
|
||||||
|
# rofi
|
||||||
|
"$mainMod,D,exec,rofi-launcher"
|
||||||
|
"$mainMod,P,exec,rofi-rbw"
|
||||||
|
|
||||||
|
# hyprland
|
||||||
|
"$mainMod,Q,killactive,"
|
||||||
|
"CTRLALT,Delete,exit,"
|
||||||
|
"$mainMod,Space,togglefloating,"
|
||||||
|
"$mainMod,F,fullscreen,"
|
||||||
|
|
||||||
|
# focus
|
||||||
|
"$mainMod,l,movefocus,l"
|
||||||
|
"$mainMod,h,movefocus,r"
|
||||||
|
"$mainMod,k,movefocus,u"
|
||||||
|
"$mainMod,j,movefocus,d"
|
||||||
|
|
||||||
|
# move
|
||||||
|
"$mainMod,h,movewindow,l"
|
||||||
|
"$mainMod,l,movewindow,r"
|
||||||
|
"$mainMod,k,movewindow,u"
|
||||||
|
"$mainMod,j,movewindow,d"
|
||||||
|
|
||||||
|
# Force opacity
|
||||||
|
"$shiftMainMod,o,exec, hl-no-opacity"
|
||||||
|
|
||||||
|
# mumble ptt click
|
||||||
|
# ",code:202,exec,mumble rpc starttalking"
|
||||||
|
#",code:202,pass,^(info\.mumble\.Mumble)$"
|
||||||
|
# ",code:202,exec,pamixer --default-source -u"
|
||||||
|
",code:202,pass,^discord$"
|
||||||
|
|
||||||
|
# worspace switching
|
||||||
|
"$mainMod,1,workspace,name:main 1"
|
||||||
|
"$mainMod,2,workspace,name:main 2"
|
||||||
|
"$mainMod,3,workspace,3"
|
||||||
|
"$mainMod,4,workspace,4"
|
||||||
|
"$mainMod,5,workspace,5"
|
||||||
|
"$mainMod,6,workspace,6"
|
||||||
|
];
|
||||||
|
|
||||||
|
exec-once = [
|
||||||
|
"waybar"
|
||||||
|
"hyprpaper & sleep 2 && randomwp"
|
||||||
|
"easyeffects --gapplication-service"
|
||||||
|
# "dunst"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
91
home/hyprland/hyprlock_gunter.conf
Normal file
91
home/hyprland/hyprlock_gunter.conf
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# BACKGROUND
|
||||||
|
background {
|
||||||
|
monitor = DP-5
|
||||||
|
path = /tmp/lockscreen/DP-5.png
|
||||||
|
blur_passes = 3
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor = DP-6
|
||||||
|
path = /tmp/lockscreen/DP-6.png
|
||||||
|
blur_passes = 3
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
background {
|
||||||
|
monitor = DP-7
|
||||||
|
path = /tmp/lockscreen/DP-7.png
|
||||||
|
blur_passes = 3
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
background {
|
||||||
|
monitor = DP-8
|
||||||
|
path = /tmp/lockscreen/DP-8.png
|
||||||
|
blur_passes = 3
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
# GENERAL
|
||||||
|
general {
|
||||||
|
no_fade_in = false
|
||||||
|
grace = 0
|
||||||
|
disable_loading_bar = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# INPUT FIELD
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 250, 60
|
||||||
|
outline_thickness = 2
|
||||||
|
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||||
|
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
|
dots_center = true
|
||||||
|
outer_color = rgba(0, 0, 0, 0)
|
||||||
|
inner_color = rgba(0, 0, 0, 0.5)
|
||||||
|
font_color = rgb(200, 200, 200)
|
||||||
|
fade_on_empty = false
|
||||||
|
font_family = JetBrains Mono Nerd Font Mono
|
||||||
|
placeholder_text = <i><span foreground="##cdd6f4">Input Password...</span></i>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -120
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# TIME
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:2000] echo "$(date +"%b %d %H:%M")"
|
||||||
|
#color = $foreground
|
||||||
|
color = rgba(255, 255, 255, 0.6)
|
||||||
|
font_size = 120
|
||||||
|
font_family = JetBrains Mono Nerd Font Mono ExtraBold
|
||||||
|
position = 0, -300
|
||||||
|
halign = center
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
|
|
||||||
|
## USER
|
||||||
|
#label {
|
||||||
|
# monitor =
|
||||||
|
# text = Hi there, $USER
|
||||||
|
# color = $foreground
|
||||||
|
# #color = rgba(255, 255, 255, 0.6)
|
||||||
|
# font_size = 25
|
||||||
|
# font_family = JetBrains Mono Nerd Font Mono
|
||||||
|
# position = 0, -40
|
||||||
|
# halign = center
|
||||||
|
# valign = center
|
||||||
|
#}
|
||||||
78
home/hyprland/hyprlock_magicman.conf
Normal file
78
home/hyprland/hyprlock_magicman.conf
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
source = ~/.cache/wal/colors-hyprland.conf
|
||||||
|
# BACKGROUND
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = /tmp/lockscreen/eDP-1.png
|
||||||
|
blur_passes = 3
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
# GENERAL
|
||||||
|
general {
|
||||||
|
no_fade_in = false
|
||||||
|
grace = 0
|
||||||
|
disable_loading_bar = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# INPUT FIELD
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 250, 60
|
||||||
|
outline_thickness = 2
|
||||||
|
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||||
|
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
|
dots_center = true
|
||||||
|
outer_color = rgba(0, 0, 0, 0)
|
||||||
|
inner_color = rgba(0, 0, 0, 0.5)
|
||||||
|
font_color = rgb(200, 200, 200)
|
||||||
|
fade_on_empty = false
|
||||||
|
font_family = JetBrains Mono Nerd Font Mono
|
||||||
|
placeholder_text = <i><span foreground="##cdd6f4">Input Password...</span></i>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -120
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# TIME
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +"%b %d %H:%M")"
|
||||||
|
color = $foreground
|
||||||
|
#color = rgba(255, 255, 255, 0.6)
|
||||||
|
font_size = 120
|
||||||
|
font_family = JetBrains Mono Nerd Font Mono ExtraBold
|
||||||
|
position = 0, -300
|
||||||
|
halign = center
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
|
|
||||||
|
## USER
|
||||||
|
#label {
|
||||||
|
# monitor =
|
||||||
|
# text = Hi there, $USER
|
||||||
|
# color = $foreground
|
||||||
|
# #color = rgba(255, 255, 255, 0.6)
|
||||||
|
# font_size = 25
|
||||||
|
# font_family = JetBrains Mono Nerd Font Mono
|
||||||
|
# position = 0, -40
|
||||||
|
# halign = center
|
||||||
|
# valign = center
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Battery level
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(batlvl)"
|
||||||
|
color = $foreground
|
||||||
|
#color = rgba(255, 255, 255, 0.6)
|
||||||
|
font_size = 18
|
||||||
|
# font_family = JetBrainsMono, Font Awesome 6 Free Solid
|
||||||
|
font_family = JetBrains Mono Nerd Font Mono
|
||||||
|
position = 0, -20
|
||||||
|
halign = center
|
||||||
|
valign = bottom
|
||||||
|
}
|
||||||
1
home/hyprland/hyprpaper.conf
Normal file
1
home/hyprland/hyprpaper.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
splash = false
|
||||||
8
home/hyprland/magicman.nix
Normal file
8
home/hyprland/magicman.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprland_magicman.nix
|
||||||
|
./waybar
|
||||||
|
./xdg.nix
|
||||||
|
./cursor.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
8
home/hyprland/prismo.nix
Normal file
8
home/hyprland/prismo.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprland_prismo.nix
|
||||||
|
./waybar
|
||||||
|
./xdg.nix
|
||||||
|
./cursor.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ from datetime import datetime, date, timedelta
|
|||||||
|
|
||||||
SECRET_DIR = "/home/torjus/.config/sops-nix/secrets"
|
SECRET_DIR = "/home/torjus/.config/sops-nix/secrets"
|
||||||
|
|
||||||
|
|
||||||
def sonarr_url():
|
def sonarr_url():
|
||||||
xdg_dir = os.environ["XDG_RUNTIME_DIR"]
|
xdg_dir = os.environ["XDG_RUNTIME_DIR"]
|
||||||
if not xdg_dir:
|
if not xdg_dir:
|
||||||
@@ -14,31 +13,26 @@ def sonarr_url():
|
|||||||
with open(f"{SECRET_DIR}/sonarr_base_url") as f:
|
with open(f"{SECRET_DIR}/sonarr_base_url") as f:
|
||||||
return f.read().strip()
|
return f.read().strip()
|
||||||
|
|
||||||
|
|
||||||
def radarr_url():
|
def radarr_url():
|
||||||
with open(f"{SECRET_DIR}/radarr_base_url") as f:
|
with open(f"{SECRET_DIR}/radarr_base_url") as f:
|
||||||
return f.read().strip()
|
return f.read().strip()
|
||||||
|
|
||||||
|
|
||||||
def make_header(api_key: str):
|
def make_header(api_key: str):
|
||||||
return {"X-Api-Key": api_key, "Accept": "application/json"}
|
return {"X-Api-Key": api_key, "Accept": "application/json"}
|
||||||
|
|
||||||
|
|
||||||
def get_sonarr_key():
|
def get_sonarr_key():
|
||||||
with open(f"{SECRET_DIR}/sonarr_api_key") as f:
|
with open(f"{SECRET_DIR}/sonarr_api_key") as f:
|
||||||
return f.read().strip()
|
return f.read().strip()
|
||||||
|
|
||||||
|
|
||||||
def get_radarr_key():
|
def get_radarr_key():
|
||||||
with open(f"{SECRET_DIR}/radarr_api_key") as f:
|
with open(f"{SECRET_DIR}/radarr_api_key") as f:
|
||||||
return f.read().strip()
|
return f.read().strip()
|
||||||
|
|
||||||
|
def get_sonarr_history(since: datetime|None=None):
|
||||||
def get_sonarr_history(since: datetime | None = None):
|
|
||||||
api_key = get_sonarr_key()
|
api_key = get_sonarr_key()
|
||||||
if not since:
|
if not since:
|
||||||
since = datetime.combine(date.today() - timedelta(days=1), datetime.min.time())
|
since = datetime.combine(date.today()-timedelta(days=1),datetime.min.time())
|
||||||
url = f"{sonarr_url()}/api/v3/history/since"
|
url = f"{sonarr_url()}/api/history/since"
|
||||||
url += f"?date={since.isoformat()}"
|
url += f"?date={since.isoformat()}"
|
||||||
response = requests.get(url, headers=make_header(api_key))
|
response = requests.get(url, headers=make_header(api_key))
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
@@ -50,11 +44,10 @@ def get_sonarr_history(since: datetime | None = None):
|
|||||||
items.append(item["sourceTitle"])
|
items.append(item["sourceTitle"])
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
def get_radarr_history(since: datetime|None=None):
|
||||||
def get_radarr_history(since: datetime | None = None):
|
|
||||||
api_key = get_radarr_key()
|
api_key = get_radarr_key()
|
||||||
if not since:
|
if not since:
|
||||||
since = datetime.combine(date.today() - timedelta(days=7), datetime.min.time())
|
since = datetime.combine(date.today()-timedelta(days=7),datetime.min.time())
|
||||||
url = f"{radarr_url()}/api/v3/history/since"
|
url = f"{radarr_url()}/api/v3/history/since"
|
||||||
url += f"?date={since.isoformat()}"
|
url += f"?date={since.isoformat()}"
|
||||||
response = requests.get(url, headers=make_header(api_key))
|
response = requests.get(url, headers=make_header(api_key))
|
||||||
@@ -67,17 +60,12 @@ def get_radarr_history(since: datetime | None = None):
|
|||||||
items.append(item["sourceTitle"])
|
items.append(item["sourceTitle"])
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sonarr_items = get_sonarr_history()
|
sonarr_items = get_sonarr_history()
|
||||||
radarr_items = get_radarr_history()
|
radarr_items = get_radarr_history()
|
||||||
|
|
||||||
output = {
|
output = {
|
||||||
"text": f"Son: {len(sonarr_items)}|Rad: {len(radarr_items)}",
|
"text": f"Son: {len(sonarr_items)}|Rad: {len(radarr_items)}",
|
||||||
"tooltip": "Radarr: \n"
|
"tooltip": "Radarr: \n" + "\n".join(radarr_items) + "\n" + "Sonarr: \n" + "\n".join(sonarr_items)
|
||||||
+ "\n".join(radarr_items)
|
|
||||||
+ "\n"
|
|
||||||
+ "Sonarr: \n"
|
|
||||||
+ "\n".join(sonarr_items),
|
|
||||||
}
|
}
|
||||||
print(json.dumps(output))
|
print(json.dumps(output))
|
||||||
|
|||||||
@@ -5,6 +5,14 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
flakestat = pkgs.writeShellApplication {
|
||||||
|
name = "flakestat";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
git
|
||||||
|
jq
|
||||||
|
];
|
||||||
|
text = builtins.readFile ./flakestat.sh;
|
||||||
|
};
|
||||||
arrhist = pkgs.stdenv.mkDerivation {
|
arrhist = pkgs.stdenv.mkDerivation {
|
||||||
name = "arrhist";
|
name = "arrhist";
|
||||||
propagatedBuildInputs = [
|
propagatedBuildInputs = [
|
||||||
@@ -14,9 +22,8 @@ let
|
|||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
installPhase = "install -Dm755 ${./arrhist.py} $out/bin/arrhist";
|
installPhase = "install -Dm755 ${./arrhist.py} $out/bin/arrhist";
|
||||||
};
|
};
|
||||||
cfg = osConfig.host.capabilities;
|
withArrhist = if (osConfig.system.name == "gunter") then true else false;
|
||||||
withArrhist = cfg.enableArrhist;
|
withBattery = if (osConfig.system.name == "magicman") then true else false;
|
||||||
withBattery = cfg.hasBattery;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sops.secrets."sonarr_base_url" = { };
|
sops.secrets."sonarr_base_url" = { };
|
||||||
@@ -38,7 +45,7 @@ in
|
|||||||
programs.waybar = {
|
programs.waybar = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemd = {
|
systemd = {
|
||||||
enable = true; # disable it,autostart it in hyprland conf
|
enable = false; # disable it,autostart it in hyprland conf
|
||||||
target = "graphical-session.target";
|
target = "graphical-session.target";
|
||||||
};
|
};
|
||||||
style = ''
|
style = ''
|
||||||
@@ -138,6 +145,7 @@ in
|
|||||||
#network,
|
#network,
|
||||||
#battery,
|
#battery,
|
||||||
#custom-powermenu,
|
#custom-powermenu,
|
||||||
|
#custom-flakestat,
|
||||||
#custom-arrhist {
|
#custom-arrhist {
|
||||||
padding-left: 12px;
|
padding-left: 12px;
|
||||||
padding-right: 12px;
|
padding-right: 12px;
|
||||||
@@ -154,11 +162,12 @@ in
|
|||||||
settings = [
|
settings = [
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
volInterval = toString cfg.volumeScrollStep;
|
volInterval = if (osConfig.system.name == "gunter") then "5" else "1";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
"layer" = "top";
|
"layer" = "top";
|
||||||
"position" = "top";
|
"position" = "top";
|
||||||
|
modules-left = [ "custom/flakestat" ];
|
||||||
modules-center = [ "hyprland/workspaces" ];
|
modules-center = [ "hyprland/workspaces" ];
|
||||||
modules-right = [
|
modules-right = [
|
||||||
(lib.mkIf (withArrhist) "custom/arrhist")
|
(lib.mkIf (withArrhist) "custom/arrhist")
|
||||||
@@ -236,6 +245,12 @@ in
|
|||||||
""
|
""
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
"custom/flakestat" = {
|
||||||
|
"exec" = "${flakestat}/bin/flakestat";
|
||||||
|
"format" = " {}";
|
||||||
|
"return-type" = "json";
|
||||||
|
"interval" = 600;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
// lib.optionalAttrs (withArrhist) {
|
// lib.optionalAttrs (withArrhist) {
|
||||||
"custom/arrhist" = {
|
"custom/arrhist" = {
|
||||||
|
|||||||
55
home/hyprland/waybar/flakestat.sh
Normal file
55
home/hyprland/waybar/flakestat.sh
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
# Args:
|
||||||
|
# $1 text
|
||||||
|
# $2 tooltip
|
||||||
|
# $3 error-code
|
||||||
|
print_output() {
|
||||||
|
local text="$1"
|
||||||
|
local tooltip="$2"
|
||||||
|
local error_code="$3"
|
||||||
|
|
||||||
|
if [ -z "$error_code" ]; then
|
||||||
|
output=$(jq -n \
|
||||||
|
--arg text "$text" \
|
||||||
|
--arg tooltip "$tooltip" \
|
||||||
|
--unbuffered \
|
||||||
|
--compact-output \
|
||||||
|
'{text: $text, tooltip: $tooltip}')
|
||||||
|
else
|
||||||
|
output=$(jq -n \
|
||||||
|
--arg text "$text" \
|
||||||
|
--arg tooltip "$tooltip" \
|
||||||
|
--unbuffered \
|
||||||
|
--compact-output \
|
||||||
|
'{text: $text, tooltip: $tooltip}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAKE_DIR="/home/torjus/nixos"
|
||||||
|
NIXPKGS_DIR="/home/torjus/git/nixpkgs"
|
||||||
|
|
||||||
|
flake_metadata=$(nix flake metadata --json "$FLAKE_DIR" 2>/dev/null)
|
||||||
|
|
||||||
|
unstable_input=$(echo "$flake_metadata" | jq '.locks.nodes.root.inputs.nixpkgs')
|
||||||
|
unstable_rev=$(echo "$flake_metadata" | jq -r ".locks.nodes.$unstable_input.locked.rev")
|
||||||
|
unstable_branch=$(echo "$flake_metadata" | jq -r ".locks.nodes.$unstable_input.original.ref")
|
||||||
|
|
||||||
|
cd "$NIXPKGS_DIR" || print_output "?" "Could not find git repo dir" 1
|
||||||
|
if ! git fetch -q --all; then
|
||||||
|
print_output "?" "Unable to fetch commits" 1
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! unstable_commit_count=$(git rev-list --count "$unstable_rev..origin/$unstable_branch"); then
|
||||||
|
print_output "?" "Unable to list commits" 1
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
text="$unstable_commit_count"
|
||||||
|
tooltip="${unstable_branch}: ${unstable_commit_count}"
|
||||||
|
|
||||||
|
print_output "$text" "$tooltip" 0
|
||||||
9
home/hyprland/xdg.nix
Normal file
9
home/hyprland/xdg.nix
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
xdg.configFile = {
|
||||||
|
"hypr/hyprpaper.conf" = {
|
||||||
|
source = config.lib.file.mkOutOfStoreSymlink ./. + "/hyprpaper.conf";
|
||||||
|
target = "hypr/hyprpaper.conf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
37
home/i3/default.nix
Normal file
37
home/i3/default.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
mod = "Mod4";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
xsession.windowManager.i3 = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
modifier = mod;
|
||||||
|
|
||||||
|
keybindings = lib.mkOptionDefault {
|
||||||
|
"${mod}+Enter" = "exec kitty";
|
||||||
|
|
||||||
|
# Focus
|
||||||
|
"${mod}+j" = "focus left";
|
||||||
|
"${mod}+k" = "focus down";
|
||||||
|
"${mod}+l" = "focus up";
|
||||||
|
"${mod}+semicolon" = "focus right";
|
||||||
|
|
||||||
|
# Move
|
||||||
|
"${mod}+Shift+j" = "move left";
|
||||||
|
"${mod}+Shift+k" = "move down";
|
||||||
|
"${mod}+Shift+l" = "move up";
|
||||||
|
"${mod}+Shift+semicolon" = "move right";
|
||||||
|
|
||||||
|
# My multi monitor setup
|
||||||
|
"${mod}+m" = "move workspace to output DP-2";
|
||||||
|
"${mod}+Shift+m" = "move workspace to output DP-5";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
49
home/magicman.nix
Normal file
49
home/magicman.nix
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
user,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
||||||
|
home-manager = {
|
||||||
|
useUserPackages = true;
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit pkgs inputs user;
|
||||||
|
};
|
||||||
|
users.${user} =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
|
./sops
|
||||||
|
./editor/neovim
|
||||||
|
./programs/firefox
|
||||||
|
./programs/tmux
|
||||||
|
./programs/dunst
|
||||||
|
./programs/kitty
|
||||||
|
./programs/rofi
|
||||||
|
./programs/obs-studio
|
||||||
|
./programs/vscode
|
||||||
|
./programs/pywal
|
||||||
|
./programs/zellij
|
||||||
|
./scripts
|
||||||
|
./scripts/batlvl.nix
|
||||||
|
./zsh
|
||||||
|
./packages
|
||||||
|
./hyprland/magicman.nix
|
||||||
|
./ssh
|
||||||
|
];
|
||||||
|
firefox.enable = true;
|
||||||
|
tmux.enable = true;
|
||||||
|
hyprland.enable = true;
|
||||||
|
home = {
|
||||||
|
username = "${user}";
|
||||||
|
homeDirectory = "/home/${user}";
|
||||||
|
stateVersion = "23.11";
|
||||||
|
};
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,18 +1,17 @@
|
|||||||
{ pkgs, osConfig, ... }:
|
{ pkgs, osConfig, ... }:
|
||||||
let
|
let
|
||||||
withCuda = osConfig.host.capabilities.hasCuda;
|
withCuda = if (osConfig.system.name == "gunter") then true else false;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./zoom.nix
|
./zoom.nix
|
||||||
./tacl.nix
|
|
||||||
];
|
];
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# CLI utils
|
# CLI utils
|
||||||
|
act
|
||||||
age
|
age
|
||||||
bat
|
bat
|
||||||
bzip2
|
bzip2
|
||||||
chromium
|
|
||||||
croc
|
croc
|
||||||
devenv
|
devenv
|
||||||
distrobox
|
distrobox
|
||||||
@@ -23,8 +22,10 @@ in
|
|||||||
ffmpeg
|
ffmpeg
|
||||||
file
|
file
|
||||||
fzf
|
fzf
|
||||||
|
glib
|
||||||
grimblast
|
grimblast
|
||||||
ijq
|
ijq
|
||||||
|
incus
|
||||||
jq
|
jq
|
||||||
kitty
|
kitty
|
||||||
kubectl
|
kubectl
|
||||||
@@ -34,22 +35,21 @@ in
|
|||||||
nvd
|
nvd
|
||||||
nurl
|
nurl
|
||||||
nwg-look
|
nwg-look
|
||||||
mosh
|
|
||||||
most
|
most
|
||||||
pinentry-gtk2
|
pinentry
|
||||||
|
pre-commit
|
||||||
pulseaudio
|
pulseaudio
|
||||||
pulsemixer
|
pulsemixer
|
||||||
rbw
|
rbw
|
||||||
restic
|
restic
|
||||||
ripgrep
|
ripgrep
|
||||||
sidequest
|
|
||||||
sops
|
sops
|
||||||
sshfs
|
sshfs
|
||||||
step-cli
|
|
||||||
tea
|
tea
|
||||||
tldr
|
tldr
|
||||||
tokei
|
tokei
|
||||||
unzip
|
unzip
|
||||||
|
ventoy
|
||||||
wtype
|
wtype
|
||||||
|
|
||||||
# Non-CLI stuff
|
# Non-CLI stuff
|
||||||
@@ -60,27 +60,30 @@ in
|
|||||||
mpv
|
mpv
|
||||||
mumble
|
mumble
|
||||||
pamixer
|
pamixer
|
||||||
pwvucontrol
|
|
||||||
(prismlauncher.override {
|
|
||||||
jdks = [
|
|
||||||
jdk21
|
|
||||||
jdk17
|
|
||||||
jdk8
|
|
||||||
temurin-jre-bin-25
|
|
||||||
temurin-jre-bin-17
|
|
||||||
];
|
|
||||||
})
|
|
||||||
rofi-rbw-wayland
|
rofi-rbw-wayland
|
||||||
|
spicetify-cli
|
||||||
spotify
|
spotify
|
||||||
tcpdump
|
|
||||||
virt-manager
|
virt-manager
|
||||||
# omnissa-horizon-client
|
vmware-horizon-client
|
||||||
yt-dlp
|
yt-dlp
|
||||||
|
|
||||||
|
# k8s tools
|
||||||
|
cilium-cli
|
||||||
|
cmctl
|
||||||
|
k9s
|
||||||
|
krew
|
||||||
|
kubernetes-helm
|
||||||
|
talosctl
|
||||||
|
|
||||||
# Go stuff
|
# Go stuff
|
||||||
go
|
go
|
||||||
gopls
|
|
||||||
delve
|
delve
|
||||||
|
gopls
|
||||||
|
|
||||||
|
# js/ts
|
||||||
|
nodejs
|
||||||
|
nodePackages.pnpm
|
||||||
|
typescript
|
||||||
|
|
||||||
# Py stuff
|
# Py stuff
|
||||||
(python312.withPackages (
|
(python312.withPackages (
|
||||||
@@ -89,7 +92,7 @@ in
|
|||||||
ipython
|
ipython
|
||||||
]
|
]
|
||||||
))
|
))
|
||||||
uv
|
poetry
|
||||||
ruff
|
ruff
|
||||||
|
|
||||||
# rust stuff
|
# rust stuff
|
||||||
@@ -103,20 +106,13 @@ in
|
|||||||
nixprstatus
|
nixprstatus
|
||||||
|
|
||||||
# Stuff with overrides
|
# Stuff with overrides
|
||||||
|
# Btop
|
||||||
(btop.override { cudaSupport = withCuda; })
|
(btop.override { cudaSupport = withCuda; })
|
||||||
|
# PrismLauncher
|
||||||
|
prismlauncher
|
||||||
|
|
||||||
# Extract logcli from grafana-loki
|
# From nix-packages flake
|
||||||
(pkgs.linkFarm "logcli" [
|
path-of-building-beta
|
||||||
{
|
awakened-poe-trade
|
||||||
name = "bin/logcli";
|
|
||||||
path = "${pkgs.grafana-loki}/bin/logcli";
|
|
||||||
}
|
|
||||||
])
|
|
||||||
(lutris.override {
|
|
||||||
extraLibraries = pkgs: [
|
|
||||||
nspr
|
|
||||||
libxdamage
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [
|
|
||||||
(pkgs.python3Packages.buildPythonApplication rec {
|
|
||||||
pname = "tacl";
|
|
||||||
version = "3.9.0";
|
|
||||||
pyproject = true;
|
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "unioslo";
|
|
||||||
repo = "tsd-api-client";
|
|
||||||
rev = "v${version}";
|
|
||||||
sha256 = "sha256-R8fSAhpdjspIoLy3m6NnHZBCBTSLQGWOqAiDkBZlWOc=";
|
|
||||||
};
|
|
||||||
|
|
||||||
build-system = with pkgs.python3Packages; [
|
|
||||||
poetry-core
|
|
||||||
poetry-dynamic-versioning
|
|
||||||
];
|
|
||||||
dependencies = with pkgs.python3Packages; [
|
|
||||||
pyyaml
|
|
||||||
click
|
|
||||||
humanfriendly
|
|
||||||
libnacl
|
|
||||||
requests
|
|
||||||
rich
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
fetchurl,
|
|
||||||
makeWrapper,
|
|
||||||
makeDesktopItem,
|
|
||||||
copyDesktopItems,
|
|
||||||
xorg,
|
|
||||||
gtk2,
|
|
||||||
sqlite,
|
|
||||||
openal,
|
|
||||||
cairo,
|
|
||||||
libGLU,
|
|
||||||
SDL2,
|
|
||||||
freealut,
|
|
||||||
libglvnd,
|
|
||||||
pipewire,
|
|
||||||
libpulseaudio,
|
|
||||||
dotnet-runtime_8,
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
pname = "vintagestory";
|
|
||||||
version = "1.20.0-rc.8";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://cdn.vintagestory.at/gamefiles/unstable/vs_client_linux-x64_${version}.tar.gz";
|
|
||||||
hash = "sha256-/MPR6PAkZv93zT6YbJatg67aRYfzp9vFRY82gtVksAs=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
makeWrapper
|
|
||||||
copyDesktopItems
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [ dotnet-runtime_8 ];
|
|
||||||
|
|
||||||
runtimeLibs = lib.makeLibraryPath (
|
|
||||||
[
|
|
||||||
gtk2
|
|
||||||
sqlite
|
|
||||||
openal
|
|
||||||
cairo
|
|
||||||
libGLU
|
|
||||||
SDL2
|
|
||||||
freealut
|
|
||||||
libglvnd
|
|
||||||
pipewire
|
|
||||||
libpulseaudio
|
|
||||||
]
|
|
||||||
++ (with xorg; [
|
|
||||||
libX11
|
|
||||||
libXi
|
|
||||||
libXcursor
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
desktopItems = [
|
|
||||||
(makeDesktopItem {
|
|
||||||
name = "vintagestory";
|
|
||||||
desktopName = "Vintage Story";
|
|
||||||
exec = "vintagestory";
|
|
||||||
icon = "vintagestory";
|
|
||||||
comment = "Innovate and explore in a sandbox world";
|
|
||||||
categories = [ "Game" ];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/share/vintagestory $out/bin $out/share/pixmaps $out/share/fonts/truetype
|
|
||||||
cp -r * $out/share/vintagestory
|
|
||||||
cp $out/share/vintagestory/assets/gameicon.xpm $out/share/pixmaps/vintagestory.xpm
|
|
||||||
cp $out/share/vintagestory/assets/game/fonts/*.ttf $out/share/fonts/truetype
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
preFixup = ''
|
|
||||||
sed -i 's/net7.0/net8.0/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
|
||||||
sed -i 's/7.0.0/8.0.11/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
|
||||||
|
|
||||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory \
|
|
||||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
|
||||||
--add-flags $out/share/vintagestory/Vintagestory.dll
|
|
||||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory-server \
|
|
||||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
|
||||||
--add-flags $out/share/vintagestory/VintagestoryServer.dll
|
|
||||||
''
|
|
||||||
+ ''
|
|
||||||
find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do
|
|
||||||
local filename="$(basename -- "$file")"
|
|
||||||
ln -sf "$filename" "''${file%/*}"/"''${filename,,}"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "In-development indie sandbox game about innovation and exploration";
|
|
||||||
homepage = "https://www.vintagestory.at/";
|
|
||||||
license = licenses.unfree;
|
|
||||||
maintainers = with maintainers; [
|
|
||||||
artturin
|
|
||||||
gigglesquid
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
# let
|
let
|
||||||
# version = "6.2.6.2503";
|
version = "6.2.6.2503";
|
||||||
# zoom-override = pkgs.zoom-us.overrideAttrs (old: {
|
zoom-override = pkgs.zoom-us.overrideAttrs (old: {
|
||||||
# inherit version;
|
inherit version;
|
||||||
# src = pkgs.fetchurl {
|
src = pkgs.fetchurl {
|
||||||
# url = "https://zoom.us/client/${version}/zoom_x86_64.pkg.tar.xz";
|
url = "https://zoom.us/client/${version}/zoom_x86_64.pkg.tar.xz";
|
||||||
# hash = "sha256-qhymegXkXSl9fK/5klSi5uRPwFVN88QH/5EVGaBUbfc=";
|
hash = "sha256-qhymegXkXSl9fK/5klSi5uRPwFVN88QH/5EVGaBUbfc=";
|
||||||
# };
|
};
|
||||||
# });
|
});
|
||||||
# in
|
in
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [
|
||||||
pkgs.zoom-us
|
(lib.warn "Using overridden zoom version" zoom-override)
|
||||||
#(lib.warn "Using overridden zoom version" zoom-override)
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
48
home/prismo.nix
Normal file
48
home/prismo.nix
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
user,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
||||||
|
home-manager = {
|
||||||
|
useUserPackages = true;
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit pkgs inputs user;
|
||||||
|
};
|
||||||
|
users.${user} =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
|
./sops
|
||||||
|
./editor/neovim
|
||||||
|
./programs/firefox
|
||||||
|
./programs/tmux
|
||||||
|
./programs/dunst
|
||||||
|
./programs/kitty
|
||||||
|
./programs/rofi
|
||||||
|
./programs/obs-studio
|
||||||
|
./programs/vscode
|
||||||
|
./scripts
|
||||||
|
./zsh
|
||||||
|
./packages
|
||||||
|
./hyprland/hyprland_prismo.nix
|
||||||
|
./ssh
|
||||||
|
./services/backup-home.nix
|
||||||
|
./services/ghettoptt.nix
|
||||||
|
];
|
||||||
|
firefox.enable = true;
|
||||||
|
tmux.enable = true;
|
||||||
|
hyprland.enable = true;
|
||||||
|
home = {
|
||||||
|
username = "${user}";
|
||||||
|
homeDirectory = "/home/${user}";
|
||||||
|
stateVersion = "23.11";
|
||||||
|
};
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
---
|
|
||||||
name: docs-verifier
|
|
||||||
description: Verifies documentation accuracy against current codebase state. Use when you need to check if documentation is still correct and get recommendations for updates.
|
|
||||||
tools: Read, Grep, Glob
|
|
||||||
---
|
|
||||||
|
|
||||||
You are a documentation verification agent. Your task is to verify that documentation accurately reflects the current state of the codebase.
|
|
||||||
|
|
||||||
## Input
|
|
||||||
|
|
||||||
You will receive a path to a documentation file. Your job is to:
|
|
||||||
|
|
||||||
1. **Read and understand the documentation** - Parse the document to understand what it claims about the codebase (commands, file paths, configurations, architecture, etc.)
|
|
||||||
|
|
||||||
2. **Verify each claim** - For each verifiable claim in the documentation:
|
|
||||||
- Find the relevant source files, configurations, or scripts
|
|
||||||
- Check if the documented behavior/structure still matches reality
|
|
||||||
- Note any discrepancies
|
|
||||||
|
|
||||||
3. **Analyze discrepancies** - For each discrepancy found, determine the likely cause:
|
|
||||||
- Code changed and docs weren't updated
|
|
||||||
- Documentation was aspirational/planned but not implemented
|
|
||||||
- The documented feature was removed or deprecated
|
|
||||||
- The documented item is dynamic/frequently changing
|
|
||||||
|
|
||||||
## Output
|
|
||||||
|
|
||||||
Provide a structured report with the following sections:
|
|
||||||
|
|
||||||
### Summary
|
|
||||||
One paragraph overview of the documentation's accuracy status.
|
|
||||||
|
|
||||||
### Verified Claims
|
|
||||||
List claims that were verified as correct (brief, can be grouped).
|
|
||||||
|
|
||||||
### Discrepancies Found
|
|
||||||
For each discrepancy:
|
|
||||||
- **Location**: Where in the documentation
|
|
||||||
- **Claim**: What the documentation says
|
|
||||||
- **Reality**: What the current state actually is
|
|
||||||
- **Evidence**: File paths and relevant snippets showing the discrepancy
|
|
||||||
|
|
||||||
### Recommendations
|
|
||||||
For each discrepancy, recommend ONE of:
|
|
||||||
|
|
||||||
1. **Update documentation** - When the code change is intentional and the docs are simply stale
|
|
||||||
- Provide the specific changes needed
|
|
||||||
|
|
||||||
2. **Update code** - When the documentation describes the correct/intended behavior and the code has regressed or drifted
|
|
||||||
- Explain what code changes would be needed
|
|
||||||
|
|
||||||
3. **Add volatility notice** - When the documented item is inherently dynamic (version numbers, generated values, frequently changing configs)
|
|
||||||
- Suggest wording like "This value may change" or recommend removing the specific value
|
|
||||||
|
|
||||||
4. **Remove documentation** - When the documented feature no longer exists and shouldn't be restored
|
|
||||||
- Explain why removal is appropriate
|
|
||||||
|
|
||||||
### Priority
|
|
||||||
Rate the overall urgency: **Critical** / **High** / **Medium** / **Low** / **None**
|
|
||||||
- Critical: Documentation actively misleads users into breaking things
|
|
||||||
- High: Major features are incorrectly documented
|
|
||||||
- Medium: Minor inaccuracies that could cause confusion
|
|
||||||
- Low: Cosmetic issues or very minor discrepancies
|
|
||||||
- None: Documentation is accurate
|
|
||||||
|
|
||||||
## Guidelines
|
|
||||||
|
|
||||||
- Be thorough but efficient - verify claims that matter, don't get stuck on trivialities
|
|
||||||
- When searching for related files, use glob patterns and grep effectively
|
|
||||||
- Quote specific file paths and line numbers as evidence
|
|
||||||
- Keep the report concise and actionable
|
|
||||||
- Focus on factual accuracy, not style or formatting suggestions
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
---
|
|
||||||
name: security-reviewer
|
|
||||||
description: Security expert that reviews code for vulnerabilities, API key exposure, and security best practices. Use proactively after code changes to identify security issues.
|
|
||||||
tools: Read, Grep, Glob, Bash
|
|
||||||
---
|
|
||||||
|
|
||||||
You are a security-focused code reviewer specializing in vulnerability detection.
|
|
||||||
|
|
||||||
When reviewing code, if you are analyzing the master branch. You should review all code.
|
|
||||||
|
|
||||||
If working on a feature branch, only review the changes in that branch. Keep responses short and to the point.
|
|
||||||
|
|
||||||
When reviewing code, analyze for:
|
|
||||||
|
|
||||||
## Common Vulnerabilities
|
|
||||||
- Injection attacks (SQL, command, XPath, LDAP)
|
|
||||||
- Cross-site scripting (XSS)
|
|
||||||
- Cross-site request forgery (CSRF)
|
|
||||||
- Insecure deserialization
|
|
||||||
- Broken authentication/authorization
|
|
||||||
|
|
||||||
## Secrets and Credentials
|
|
||||||
- Hardcoded API keys, tokens, or passwords
|
|
||||||
- Credentials in configuration files
|
|
||||||
- Secrets committed to version control
|
|
||||||
- Insecure credential storage
|
|
||||||
|
|
||||||
## Input Handling
|
|
||||||
- Missing input validation
|
|
||||||
- Insufficient sanitization
|
|
||||||
- Buffer overflows
|
|
||||||
- Path traversal vulnerabilities
|
|
||||||
|
|
||||||
## Cryptography
|
|
||||||
- Weak hashing algorithms (MD5, SHA1 for security purposes)
|
|
||||||
- Insecure random number generation
|
|
||||||
- Improper key management
|
|
||||||
- Missing encryption for sensitive data
|
|
||||||
|
|
||||||
## Other Concerns
|
|
||||||
- Overly permissive file/directory permissions
|
|
||||||
- Privilege escalation risks
|
|
||||||
- Insecure dependencies
|
|
||||||
- Information disclosure in error messages
|
|
||||||
- Race conditions
|
|
||||||
|
|
||||||
For each issue found, provide:
|
|
||||||
- **Severity**: Critical / High / Medium / Low
|
|
||||||
- **Location**: File and line number
|
|
||||||
- **Issue**: Clear explanation of the vulnerability
|
|
||||||
- **Impact**: What an attacker could achieve
|
|
||||||
- **Fix**: Recommended remediation with code example if applicable
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
programs.claude-code = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.claude-code-bin;
|
|
||||||
|
|
||||||
agents = {
|
|
||||||
docs-verifier = ./agents/docs-verifier.md;
|
|
||||||
security-reviewer = ./agents/security-reviewer.md;
|
|
||||||
};
|
|
||||||
|
|
||||||
skills = {
|
|
||||||
pr = ./skills/pr;
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
model = "opus";
|
|
||||||
enabledPlugins = {
|
|
||||||
"gopls-lsp@claude-plugins-official" = true;
|
|
||||||
};
|
|
||||||
env = {
|
|
||||||
DISABLE_AUTOUPDATER = "1";
|
|
||||||
};
|
|
||||||
permissions = {
|
|
||||||
allow = [
|
|
||||||
"Bash(git diff:*)"
|
|
||||||
"Bash(git log:*)"
|
|
||||||
"Bash(git branch:*)"
|
|
||||||
"Bash(git commit:*)"
|
|
||||||
"Bash(git status:*)"
|
|
||||||
"Bash(git add:*)"
|
|
||||||
"Bash(nix build:*)"
|
|
||||||
"Bash(nix fmt:*)"
|
|
||||||
"Bash(nix flake check:*)"
|
|
||||||
"Bash(nix flake show:*)"
|
|
||||||
"Bash(nix eval:*)"
|
|
||||||
"Bash(nvd diff:*)"
|
|
||||||
];
|
|
||||||
deny = [
|
|
||||||
"Read(*.tfvars)"
|
|
||||||
"Read(**/*.tfvars)"
|
|
||||||
"Read(.env)"
|
|
||||||
"Read(**/.env)"
|
|
||||||
"Read(./secrets/**)"
|
|
||||||
"Read(.sops.yaml)"
|
|
||||||
"Read(~/.ssh/*)"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
statusLine = {
|
|
||||||
type = "command";
|
|
||||||
command = ''input=$(cat); echo "$(basename "$(echo "$input" | jq -r '.workspace.current_dir')") | $(echo "$input" | jq -r '.model.display_name')"'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
---
|
|
||||||
name: pr
|
|
||||||
description: Generate a PR summary from the current feature branch and copy it to the clipboard.
|
|
||||||
argument-hint: [optional: additional context or focus areas]
|
|
||||||
user-invocable-only: true
|
|
||||||
---
|
|
||||||
|
|
||||||
# PR Summary Generator
|
|
||||||
|
|
||||||
Generate a concise PR summary comparing the current branch to the main branch (master), and copy it to the clipboard.
|
|
||||||
|
|
||||||
## Input
|
|
||||||
|
|
||||||
Optional user context: $ARGUMENTS
|
|
||||||
|
|
||||||
## Process
|
|
||||||
|
|
||||||
1. **Get branch info**: Use git to determine:
|
|
||||||
- Current branch name
|
|
||||||
- Main branch (master)
|
|
||||||
- Verify we're not on master (warn if we are)
|
|
||||||
|
|
||||||
2. **Gather commit information**: Use the git-explorer MCP tools:
|
|
||||||
- `commits_between` to get all commits from master to HEAD
|
|
||||||
- `get_commit_info` for each commit to see the full message and changes
|
|
||||||
|
|
||||||
3. **Evaluate commit hygiene** (CRITICAL - do this before generating summary):
|
|
||||||
|
|
||||||
Review all commits and check for issues that suggest squashing:
|
|
||||||
- **Fixup commits**: Messages like "fix", "fixup", "oops", "typo", "forgot", "WIP"
|
|
||||||
- **Iterative fixes**: Multiple commits touching the same file for the same logical change
|
|
||||||
- **Broken intermediate states**: Commits that introduce then immediately fix issues
|
|
||||||
- **Noise commits**: Very small changes that don't warrant their own commit
|
|
||||||
- **Related changes split unnecessarily**: Commits that logically belong together
|
|
||||||
|
|
||||||
**If squashing is recommended**: STOP here. Do NOT generate PR summary or copy to clipboard.
|
|
||||||
Instead, respond with a short report:
|
|
||||||
- List which commits should be squashed together
|
|
||||||
- Explain briefly why (e.g., "fixup commit", "same logical change", "WIP")
|
|
||||||
- Suggest the resulting commit message(s)
|
|
||||||
|
|
||||||
**If commits look clean**: Continue to step 4.
|
|
||||||
|
|
||||||
4. **Analyze the changes**:
|
|
||||||
- Group commits by topic/area if there are multiple
|
|
||||||
- Note the key files changed
|
|
||||||
- Understand the overall purpose of the branch
|
|
||||||
|
|
||||||
5. **Generate the summary**: Create a markdown summary with:
|
|
||||||
- A "Summary" section with 2-4 bullet points describing what changed and why
|
|
||||||
- A "Changes" section listing key files/areas modified
|
|
||||||
|
|
||||||
6. **Copy to clipboard**: Pipe the summary to `wl-copy`
|
|
||||||
|
|
||||||
## Squash Recommendation Format
|
|
||||||
|
|
||||||
When recommending squashing, respond like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
Before creating a PR, I recommend squashing some commits:
|
|
||||||
|
|
||||||
**Squash together:**
|
|
||||||
- `abc123` "Add new feature"
|
|
||||||
- `def456` "Fix typo in new feature"
|
|
||||||
- `ghi789` "Forgot to add import"
|
|
||||||
|
|
||||||
→ Suggested message: "Add new feature for X"
|
|
||||||
|
|
||||||
**Reason:** These are iterative fixes to the same change.
|
|
||||||
|
|
||||||
Run `git rebase -i master` to clean up, then invoke `/pr` again.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Output Format
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Summary
|
|
||||||
|
|
||||||
- First key change or feature
|
|
||||||
- Second key change
|
|
||||||
- Additional context if needed
|
|
||||||
|
|
||||||
## Changes
|
|
||||||
|
|
||||||
- `path/to/file.nix` - Brief description of change
|
|
||||||
- `path/to/other.nix` - Brief description
|
|
||||||
```
|
|
||||||
|
|
||||||
## Style Guidelines
|
|
||||||
|
|
||||||
- **Concise**: Each bullet point should be one sentence
|
|
||||||
- **Focus on "why"**: Explain the purpose, not just what files changed
|
|
||||||
- **Group related changes**: Don't list every commit, summarize by area
|
|
||||||
- **Technical accuracy**: Use correct terminology for the codebase
|
|
||||||
- **No fluff**: Skip obvious statements like "this PR adds..."
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
For a branch with commits adding a new monitoring exporter:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
## Summary
|
|
||||||
|
|
||||||
- Add systemd-exporter to all hosts for tracking service health metrics
|
|
||||||
- Configure Prometheus scrape targets for the new exporter
|
|
||||||
- Add Grafana dashboard for visualizing systemd unit status
|
|
||||||
|
|
||||||
## Changes
|
|
||||||
|
|
||||||
- `system/systemd-exporter.nix` - New module enabling systemd-exporter on all hosts
|
|
||||||
- `services/monitoring/prometheus.nix` - Add scrape config for systemd-exporter job
|
|
||||||
- `services/monitoring/grafana/dashboards/` - New systemd dashboard
|
|
||||||
```
|
|
||||||
|
|
||||||
## After Generating
|
|
||||||
|
|
||||||
1. Confirm the summary was copied to clipboard
|
|
||||||
2. Display the summary to the user so they can review it
|
|
||||||
3. Mention they can paste it directly into a PR description
|
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -12,12 +14,13 @@
|
|||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
global = {
|
global = {
|
||||||
|
rounded = "yes";
|
||||||
origin = "top-right";
|
origin = "top-right";
|
||||||
monitor = "4";
|
monitor = "4";
|
||||||
alignment = "left";
|
alignment = "left";
|
||||||
vertical_alignment = "center";
|
vertical_alignment = "center";
|
||||||
width = "(0, 400)";
|
width = "400";
|
||||||
height = "(0, 400)";
|
height = "400";
|
||||||
scale = 0;
|
scale = 0;
|
||||||
gap_size = 0;
|
gap_size = 0;
|
||||||
progress_bar = true;
|
progress_bar = true;
|
||||||
@@ -41,7 +44,7 @@
|
|||||||
format = "<b>%s</b>\\n%b"; # format = "<span foreground='#f3f4f5'><b>%s %p</b></span>\n%b"
|
format = "<b>%s</b>\\n%b"; # format = "<span foreground='#f3f4f5'><b>%s %p</b></span>\n%b"
|
||||||
frame_color = "#232323";
|
frame_color = "#232323";
|
||||||
frame_width = 1;
|
frame_width = 1;
|
||||||
offset = "(15, 15)";
|
offset = "15x15";
|
||||||
horizontal_padding = 10;
|
horizontal_padding = 10;
|
||||||
icon_position = "left";
|
icon_position = "left";
|
||||||
indicate_hidden = "yes";
|
indicate_hidden = "yes";
|
||||||
@@ -51,6 +54,7 @@
|
|||||||
mouse_middle_click = "close_current";
|
mouse_middle_click = "close_current";
|
||||||
mouse_right_click = "close_all";
|
mouse_right_click = "close_all";
|
||||||
padding = 10;
|
padding = 10;
|
||||||
|
plain_text = "no";
|
||||||
separator_height = 2;
|
separator_height = 2;
|
||||||
show_indicators = "yes";
|
show_indicators = "yes";
|
||||||
shrink = "no";
|
shrink = "no";
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
{
|
{
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
userName = "Torjus Håkestad";
|
||||||
settings = {
|
userEmail = "torjus@usit.uio.no";
|
||||||
user = {
|
|
||||||
email = "torjus@usit.uio.no";
|
|
||||||
name = "Torjus Håkestad";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
lfs.enable = true;
|
lfs.enable = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,64 +1,46 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
config,
|
osConfig,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
let
|
||||||
options.torjus.home = {
|
withCuda = osConfig.system.name == "gunter";
|
||||||
obs = {
|
|
||||||
enable = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether to enable obs.";
|
|
||||||
};
|
|
||||||
withCuda = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Enable cuda for obs-related packages.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.torjus.home.obs.enable {
|
onnxruntime-gpu = (pkgs.onnxruntime.override { cudaSupport = withCuda; }).overrideAttrs (old: {
|
||||||
programs.obs-studio =
|
# TODO: Remove when fixed in nixpkgs
|
||||||
let
|
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/libraries/onnxruntime/default.nix#L154
|
||||||
withCuda = config.torjus.home.obs.withCuda;
|
buildInputs = old.buildInputs ++ [ pkgs.cudaPackages.nccl ];
|
||||||
onnxruntime-gpu = (pkgs.onnxruntime.override { cudaSupport = withCuda; });
|
});
|
||||||
obs-backgroundremoval-gpu = (
|
|
||||||
(pkgs.obs-studio-plugins.obs-backgroundremoval.override { onnxruntime = onnxruntime-gpu; })
|
obs-backgrounremoval-gpu = (
|
||||||
.overrideAttrs
|
(pkgs.obs-studio-plugins.obs-backgroundremoval.override { onnxruntime = onnxruntime-gpu; })
|
||||||
(
|
.overrideAttrs
|
||||||
final: prev: {
|
(old: {
|
||||||
version = "1.3.3";
|
version = "1.1.14-beta";
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
owner = "royshil";
|
owner = "occ-ai";
|
||||||
repo = "obs-backgroundremoval";
|
repo = "obs-backgroundremoval";
|
||||||
rev = final.version;
|
rev = "012a7f45fe4cb5363abee654d05c5cba4235feb5";
|
||||||
hash = "sha256-NDe71iDnVcnMilGr5kdbemq8jEKd3WW45tbMwxjqUwo=";
|
hash = "sha256-ud9RfnbMXfOaIhkUYG7zyR4SxZhj3rZd9b4+8P4jBYs=";
|
||||||
};
|
|
||||||
nativeBuildInputs = prev.nativeBuildInputs ++ [ pkgs.pkg-config ];
|
|
||||||
cmakeFlags = [
|
|
||||||
"--preset ubuntu-x86_64"
|
|
||||||
"-DCMAKE_MODULE_PATH:PATH=${final.src}/cmake"
|
|
||||||
"-DUSE_SYSTEM_ONNXRUNTIME=ON"
|
|
||||||
"-DVCPKG_TARGET_TRIPLET="
|
|
||||||
"-DUSE_PKGCONFIG=ON"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
|
||||||
in
|
|
||||||
{
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.obs-studio.override {
|
|
||||||
cudaSupport = withCuda;
|
|
||||||
};
|
};
|
||||||
plugins = with pkgs.obs-studio-plugins; [
|
cmakeFlags =
|
||||||
obs-pipewire-audio-capture
|
if withCuda then
|
||||||
obs-shaderfilter
|
(lib.lists.remove "-DDISABLE_ONNXRUNTIME_GPU=ON" old.cmakeFlags)
|
||||||
obs-backgroundremoval-gpu
|
else
|
||||||
];
|
old.cmakeFlags;
|
||||||
};
|
})
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.obs-studio = {
|
||||||
|
enable = true;
|
||||||
|
plugins =
|
||||||
|
with pkgs.obs-studio-plugins;
|
||||||
|
[
|
||||||
|
obs-pipewire-audio-capture
|
||||||
|
obs-shaderfilter
|
||||||
|
]
|
||||||
|
++ lib.optionals withCuda [ obs-backgrounremoval-gpu ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
cfg = config.streamcontroller;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.streamcontroller = {
|
|
||||||
enable = mkEnableOption "streamcontroller service";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
systemd.user.services.streamcontroller = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Streamcontroller service";
|
|
||||||
PartOf = [ "graphical-session.target" ];
|
|
||||||
After = [ "graphical-session.target" ];
|
|
||||||
Requisite = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${pkgs.streamcontroller}/bin/streamcontroller -b";
|
|
||||||
Restart = "on-failure";
|
|
||||||
};
|
|
||||||
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -2,29 +2,19 @@
|
|||||||
{
|
{
|
||||||
programs.vscode = {
|
programs.vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
profiles.default = {
|
enableUpdateCheck = true;
|
||||||
enableUpdateCheck = true;
|
enableExtensionUpdateCheck = true;
|
||||||
enableExtensionUpdateCheck = true;
|
extensions = with pkgs.vscode-extensions; [
|
||||||
userSettings = {
|
catppuccin.catppuccin-vsc
|
||||||
"window.titleBarStyle" = "custom";
|
catppuccin.catppuccin-vsc-icons
|
||||||
"rust-analyzer.testExplorer" = true;
|
golang.go
|
||||||
"rust-analyzer.restartServerOnConfigChange" = true;
|
vscodevim.vim
|
||||||
"direnv.restart.automatic" = true;
|
ms-python.python
|
||||||
};
|
ms-vscode-remote.remote-ssh
|
||||||
extensions = with pkgs.vscode-extensions; [
|
bbenoist.nix
|
||||||
bbenoist.nix
|
];
|
||||||
catppuccin.catppuccin-vsc
|
userSettings = {
|
||||||
catppuccin.catppuccin-vsc-icons
|
"window.titleBarStyle" = "custom";
|
||||||
github.copilot
|
|
||||||
github.copilot-chat
|
|
||||||
golang.go
|
|
||||||
mkhl.direnv
|
|
||||||
ms-python.python
|
|
||||||
ms-vscode-remote.remote-ssh
|
|
||||||
rooveterinaryinc.roo-cline
|
|
||||||
rust-lang.rust-analyzer
|
|
||||||
vscodevim.vim
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
{ pkgs, config, ... }:
|
{ pkgs, config, ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [ ./lockhelper.nix ];
|
||||||
./noita-helper.nix
|
|
||||||
];
|
|
||||||
home.file.".local/bin/hl-no-opacity" = {
|
home.file.".local/bin/hl-no-opacity" = {
|
||||||
source = ./hl-no-opacity.sh;
|
source = ./hl-no-opacity.sh;
|
||||||
executable = true;
|
executable = true;
|
||||||
|
|||||||
14
home/scripts/lockhelper.nix
Normal file
14
home/scripts/lockhelper.nix
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
lockhelper = pkgs.writeShellApplication {
|
||||||
|
name = "lockhelper";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
grim
|
||||||
|
jq
|
||||||
|
];
|
||||||
|
text = (builtins.readFile ./lockhelper.sh);
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.packages = [ lockhelper ];
|
||||||
|
}
|
||||||
18
home/scripts/lockhelper.sh
Normal file
18
home/scripts/lockhelper.sh
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
mkdir -p /tmp/lockscreen || true
|
||||||
|
|
||||||
|
monitors=$(hyprctl monitors -j | jq -r '.[] | select( .name | contains ("DP")) | .name')
|
||||||
|
|
||||||
|
while IFS= read -r m; do
|
||||||
|
grim -o "$m" "/tmp/lockscreen/$m.png" || true
|
||||||
|
done <<< "$monitors"
|
||||||
|
|
||||||
|
# Only lock if not already running
|
||||||
|
if [ -z "$(pgrep hyprlock)" ]
|
||||||
|
then
|
||||||
|
exec hyprlock
|
||||||
|
else
|
||||||
|
echo "Already locked"
|
||||||
|
fi
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
let
|
|
||||||
noita-helper = pkgs.writeShellApplication {
|
|
||||||
name = "noita-helper";
|
|
||||||
runtimeInputs = with pkgs; [
|
|
||||||
grim
|
|
||||||
jq
|
|
||||||
];
|
|
||||||
text = (builtins.readFile ./noita-helper.sh);
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.packages = [ noita-helper ];
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
SAVE_DIR="/home/torjus/.local/share/Steam/steamapps/compatdata/881100/pfx/drive_c/users/steamuser/AppData/LocalLow/Nolla_Games_Noita"
|
|
||||||
|
|
||||||
RESTIC_REPOSITORY="/home/$(whoami)/tmp/noita-backup"
|
|
||||||
export RESTIC_REPOSITORY
|
|
||||||
export RESTIC_PASSWORD="noita"
|
|
||||||
|
|
||||||
function start {
|
|
||||||
echo "Doing initial backup"
|
|
||||||
restic backup -q "$SAVE_DIR"
|
|
||||||
echo "Backup done"
|
|
||||||
|
|
||||||
echo "Mounting tmpfs for save folder..."
|
|
||||||
sudo mount -o size=2G,noswap -t tmpfs none "$SAVE_DIR"
|
|
||||||
|
|
||||||
echo "Restoring initial backup..."
|
|
||||||
restic restore "latest:$SAVE_DIR" --target "$SAVE_DIR"
|
|
||||||
|
|
||||||
echo "Ready to play Noita!"
|
|
||||||
echo "Remember to run $0 stop when done."
|
|
||||||
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
restic backup -q "$SAVE_DIR"
|
|
||||||
echo "Periodic backup done..."
|
|
||||||
sleep 10m
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
function stop {
|
|
||||||
restic backup -q $SAVE_DIR
|
|
||||||
sudo umount $SAVE_DIR
|
|
||||||
restic restore latest:$SAVE_DIR --target $SAVE_DIR
|
|
||||||
echo "Backup and unmount done..."
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$#" -ne 1 ]; then
|
|
||||||
echo "Usage: $0 {start|stop}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" == "start" ]; then
|
|
||||||
start
|
|
||||||
elif [ "$1" == "stop" ]; then
|
|
||||||
stop
|
|
||||||
else
|
|
||||||
echo "Usage: $0 {start|stop}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
@@ -26,6 +26,11 @@ if [ -z "$wallpaper_path" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! command -v hyprpaper &> /dev/null; then
|
||||||
|
echo "Could not find hyprpaper command"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "setting $wallpaper_path as wallpaper"
|
echo "setting $wallpaper_path as wallpaper"
|
||||||
hyprctl hyprpaper unload all
|
hyprctl hyprpaper unload all
|
||||||
hyprctl hyprpaper preload "$wallpaper_path"
|
hyprctl hyprpaper preload "$wallpaper_path"
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
{
|
{ pkgs, config, ... }:
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
cfg = osConfig.host.capabilities;
|
|
||||||
backupEnabled = cfg.backupRepository != null && cfg.backupPassword != null;
|
|
||||||
|
|
||||||
# Backup home script
|
# Backup home script
|
||||||
backup-home = pkgs.writeShellApplication {
|
backup-home = pkgs.writeShellApplication {
|
||||||
name = "backup-home";
|
name = "backup-home";
|
||||||
@@ -21,8 +12,8 @@ let
|
|||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
echo "========== BACKUP HOME STARTING =========="
|
echo "========== BACKUP HOME STARTING =========="
|
||||||
export RESTIC_PASSWORD="${cfg.backupPassword}"
|
export RESTIC_PASSWORD="gunter.home.2rjus.net"
|
||||||
export RESTIC_REPOSITORY="${cfg.backupRepository}"
|
export RESTIC_REPOSITORY="rest:http://10.69.12.52:8000/gunter.home.2rjus.net"
|
||||||
SECRET_PATH="$XDG_CONFIG_HOME/sops-nix/secrets/gotify_backup_home"
|
SECRET_PATH="$XDG_CONFIG_HOME/sops-nix/secrets/gotify_backup_home"
|
||||||
|
|
||||||
if ! [ -f "$SECRET_PATH" ]; then
|
if ! [ -f "$SECRET_PATH" ]; then
|
||||||
@@ -53,8 +44,6 @@ let
|
|||||||
--exclude '/home/torjus/.npm' \
|
--exclude '/home/torjus/.npm' \
|
||||||
--exclude '/home/torjus/.factorio/mods' \
|
--exclude '/home/torjus/.factorio/mods' \
|
||||||
--exclude '/home/torjus/.zoom' \
|
--exclude '/home/torjus/.zoom' \
|
||||||
--exclude '/home/torjus/Games' \
|
|
||||||
--exclude '/home/torjus/nobackup' \
|
|
||||||
--exclude '/home/torjus/git/nixpkgs'
|
--exclude '/home/torjus/git/nixpkgs'
|
||||||
retval=$?
|
retval=$?
|
||||||
if [ $retval -ne 0 ]; then
|
if [ $retval -ne 0 ]; then
|
||||||
@@ -62,7 +51,7 @@ let
|
|||||||
retval=$?
|
retval=$?
|
||||||
if [ $retval -ne 0 ]; then
|
if [ $retval -ne 0 ]; then
|
||||||
curl "https://gotify.t-juice.club/message?token=$GOTIFY_TOKEN" \
|
curl "https://gotify.t-juice.club/message?token=$GOTIFY_TOKEN" \
|
||||||
-F "title=Backup of home@${osConfig.networking.hostName} failed!" \
|
-F "title=Backup of home@gunter failed!" \
|
||||||
-F "message=Please check status of backup-home service"
|
-F "message=Please check status of backup-home service"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -101,9 +90,9 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sops.secrets."gotify_backup_home" = lib.mkIf backupEnabled { };
|
sops.secrets."gotify_backup_home" = { };
|
||||||
|
|
||||||
systemd.user.services.backup-home = lib.mkIf backupEnabled {
|
systemd.user.services.backup-home = {
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Backup home directory";
|
Description = "Backup home directory";
|
||||||
After = [
|
After = [
|
||||||
@@ -116,7 +105,7 @@ in
|
|||||||
ExecStart = "${backup-home}/bin/backup-home";
|
ExecStart = "${backup-home}/bin/backup-home";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
systemd.user.timers.backup-home = lib.mkIf backupEnabled {
|
systemd.user.timers.backup-home = {
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Backup home directory";
|
Description = "Backup home directory";
|
||||||
After = [ "network.target" ];
|
After = [ "network.target" ];
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
# Ensure runtime directory exists for labmcp MCP servers
|
|
||||||
systemd.user.tmpfiles.rules = [
|
|
||||||
"d %t/labmcp 0755 - - -"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{ pkgs, config, ... }:
|
|
||||||
{
|
|
||||||
sops.secrets."nats_nkey" = { };
|
|
||||||
systemd.user.services.natstonotify = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Run natstonotify";
|
|
||||||
After = [ "sops-nix.service" ];
|
|
||||||
};
|
|
||||||
Service = {
|
|
||||||
Environment = [
|
|
||||||
"NATS_URL=nats://nats1.home.2rjus.net:4222"
|
|
||||||
"NATS_NKEY_FILE=${config.sops.secrets.nats_nkey.path}"
|
|
||||||
];
|
|
||||||
Type = "simple";
|
|
||||||
ExecStart = "${pkgs.natstonotify}/bin/natstonotify server";
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -18,37 +18,27 @@ in
|
|||||||
{
|
{
|
||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableDefaultConfig = false;
|
controlMaster = "auto";
|
||||||
|
|
||||||
matchBlocks = {
|
matchBlocks = {
|
||||||
"bmo.uio.no-on-eduroam" = (
|
"bmo.uio.no-on-eduroam" = (
|
||||||
lib.mkIf (osConfig.host.capabilities.hasEduroamAccess) (
|
lib.mkIf (osConfig.system.name == "magicman") (
|
||||||
lib.hm.dag.entryBefore [ "bmo.uio.no" "*" ] {
|
lib.hm.dag.entryBefore [ "bmo.uio.no" ] {
|
||||||
match = "host bmo.uio.no exec \"nmcli -g GENERAL.STATE c s eduroam|grep -q -E '\\bactiv'\"";
|
match = "host bmo.uio.no exec \"nmcli -g GENERAL.STATE c s eduroam|grep -q -E '\\bactiv'\"";
|
||||||
hostname = "bmo.uio.no";
|
hostname = "bmo.uio.no";
|
||||||
forwardAgent = false;
|
forwardAgent = false;
|
||||||
serverAliveInterval = 30;
|
|
||||||
controlMaster = "auto";
|
|
||||||
controlPath = "/run/user/%i/ssh-cm-%C";
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
"bmo.uio.no" = lib.hm.dag.entryBefore [ "*" ] {
|
"bmo.uio.no" = {
|
||||||
|
setEnv = {
|
||||||
|
# TERM = "xterm-256color";
|
||||||
|
};
|
||||||
hostname = "bmo.uio.no";
|
hostname = "bmo.uio.no";
|
||||||
forwardAgent = false;
|
forwardAgent = false;
|
||||||
proxyJump = "torjus@rlogin.uio.no";
|
proxyJump = "torjus@rlogin.uio.no";
|
||||||
serverAliveInterval = 30;
|
|
||||||
controlMaster = "auto";
|
|
||||||
controlPath = "/run/user/%i/ssh-cm-%C";
|
|
||||||
};
|
|
||||||
|
|
||||||
"*" = {
|
|
||||||
serverAliveInterval = 30;
|
|
||||||
controlMaster = "auto";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.ssh-agent.enable = true;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
nrebuild = "sudo nixos-rebuild switch --flake /home/${user}/nixos";
|
nrebuild = "sudo nixos-rebuild switch --flake /home/${user}/nixos";
|
||||||
ndiffbuild = "sudo nixos-rebuild build --flake /home/${user}/nixos && nvd diff /run/current-system /home/${user}/nixos/result";
|
ndiffbuild = "sudo nixos-rebuild build --flake /home/${user}/nixos && nvd diff /run/current-system /home/${user}/nixos/result";
|
||||||
};
|
};
|
||||||
initContent = ''
|
initExtra = ''
|
||||||
bindkey -v
|
bindkey -v
|
||||||
bindkey '^R' history-incremental-search-backward
|
bindkey '^R' history-incremental-search-backward
|
||||||
|
|
||||||
@@ -32,8 +32,7 @@
|
|||||||
autoload -Uz promptinit
|
autoload -Uz promptinit
|
||||||
promptinit
|
promptinit
|
||||||
prompt pure
|
prompt pure
|
||||||
export MANPAGER="nvim +Man!"
|
export PATH="''${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
|
||||||
export LOKI_ADDR="http://monitoring01:3100"
|
|
||||||
|
|
||||||
# Aliases
|
# Aliases
|
||||||
alias ls=eza
|
alias ls=eza
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../system/monitoring
|
../../system/monitoring.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Sops stuff
|
# Sops stuff
|
||||||
@@ -23,20 +23,15 @@
|
|||||||
|
|
||||||
# Bootloader stuff
|
# Bootloader stuff
|
||||||
boot = {
|
boot = {
|
||||||
blacklistedKernelModules = [
|
|
||||||
"mt7921e"
|
|
||||||
"mt7921_common"
|
|
||||||
"mt792x_lib"
|
|
||||||
"mt76_connac_lib"
|
|
||||||
"mt76"
|
|
||||||
];
|
|
||||||
# Kernel stuff
|
# Kernel stuff
|
||||||
# kernelPackages = lib.warn "Pinned to kernel 6.12 due to issues" pkgs.linuxPackages_6_12;
|
# kernelPackages = pkgs.linuxPackages_xanmod_latest;
|
||||||
kernelParams = [ "module_blacklist=amdgpu" ];
|
kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
# kernelPackages = lib.warn "Pinned to kernel 6.10 due to nvidia fbdev trouble!" pkgs.linuxPackages_6_10;
|
||||||
kernel.sysctl = {
|
kernelParams = [
|
||||||
"vm.max_map_count" = 262144;
|
"quiet"
|
||||||
};
|
"splash"
|
||||||
|
"rd.systemd.show_status=false"
|
||||||
|
];
|
||||||
|
|
||||||
extraModprobeConfig = ''
|
extraModprobeConfig = ''
|
||||||
options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
|
options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
|
||||||
@@ -44,39 +39,31 @@
|
|||||||
|
|
||||||
# Bootloader stuff
|
# Bootloader stuff
|
||||||
loader.systemd-boot = {
|
loader.systemd-boot = {
|
||||||
|
enable = true;
|
||||||
configurationLimit = 10;
|
configurationLimit = 10;
|
||||||
memtest86.enable = true;
|
};
|
||||||
|
loader.efi = {
|
||||||
|
canTouchEfiVariables = true;
|
||||||
};
|
};
|
||||||
supportedFilesystems = [ "nfs" ];
|
supportedFilesystems = [ "nfs" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Networking stuff
|
# Networking stuff
|
||||||
networking.hostName = "gunter"; # Define your hostname.
|
networking.hostName = "gunter"; # Define your hostname.
|
||||||
networking.firewall.allowedTCPPorts = [ 8989 ];
|
networking.networkmanager.enable = true;
|
||||||
|
networking.nftables.enable = true;
|
||||||
# Additional nix caches for homelab and CUDA
|
networking.firewall = {
|
||||||
nix.settings = {
|
enable = true;
|
||||||
substituters = [
|
|
||||||
"https://nix-cache.home.2rjus.net"
|
|
||||||
"https://cuda-maintainers.cachix.org"
|
|
||||||
];
|
|
||||||
|
|
||||||
trusted-substituters = [
|
|
||||||
"https://nix-cache.home.2rjus.net"
|
|
||||||
"https://cuda-maintainers.cachix.org"
|
|
||||||
];
|
|
||||||
|
|
||||||
trusted-public-keys = [
|
|
||||||
"nix-cache02.home.2rjus.net-1:QyT5FAvJtV+EPQrgQQ6iV9JMg1kRiWuIAJftM35QMls="
|
|
||||||
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Set time stuff
|
||||||
|
time.timeZone = "Europe/Oslo";
|
||||||
|
|
||||||
# Enable graphics
|
# Enable graphics
|
||||||
hardware.graphics = {
|
hardware.graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
libva-vdpau-driver
|
vaapiVdpau
|
||||||
nvidia-vaapi-driver
|
nvidia-vaapi-driver
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -89,21 +76,18 @@
|
|||||||
open = true;
|
open = true;
|
||||||
nvidiaSettings = false;
|
nvidiaSettings = false;
|
||||||
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.beta;
|
package = config.boot.kernelPackages.nvidiaPackages.latest;
|
||||||
# package =
|
# package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
|
||||||
# lib.warn "nvidia driver override to use 580.82.07"
|
# version = "560.28.03";
|
||||||
# config.boot.kernelPackages.nvidiaPackages.mkDriver
|
# sha256_64bit = "sha256-martv18vngYBJw1IFUCAaYr+uc65KtlHAMdLMdtQJ+Y=";
|
||||||
# {
|
# sha256_aarch64 = lib.fakeHash;
|
||||||
# version = "580.82.07";
|
# openSha256 = "sha256-asGpqOpU0tIO9QqceA8XRn5L27OiBFuI9RZ1NjSVwaM=";
|
||||||
# sha256_64bit = "sha256-Bh5I4R/lUiMglYEdCxzqm3GLolQNYFB0/yJ/zgYoeYw=";
|
# settingsSha256 = lib.fakeHash;
|
||||||
# sha256_aarch64 = lib.fakeHash;
|
# persistencedSha256 = lib.fakeSha256;
|
||||||
# openSha256 = "sha256-8/7ZrcwBMgrBtxebYtCcH5A51u3lAxXTCY00LElZz08=";
|
# };
|
||||||
# settingsSha256 = lib.fakeHash;
|
|
||||||
# persistencedSha256 = lib.fakeSha256;
|
|
||||||
# };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Setup nvidia video drivers
|
# Setup hyprland
|
||||||
# nixpkgs.overlays = [
|
# nixpkgs.overlays = [
|
||||||
# (self: super: {
|
# (self: super: {
|
||||||
# hyprland = super.hyprland.override {
|
# hyprland = super.hyprland.override {
|
||||||
@@ -111,20 +95,58 @@
|
|||||||
# };
|
# };
|
||||||
# })
|
# })
|
||||||
# ];
|
# ];
|
||||||
|
services.xserver.enable = true;
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
services.xserver.displayManager.gdm.wayland = true;
|
||||||
# Host capabilities
|
services.xserver.displayManager.lightdm.enable = false;
|
||||||
host.capabilities = {
|
services.xserver.displayManager.startx.enable = true;
|
||||||
hasCuda = true;
|
services.xserver.windowManager.i3.enable = true;
|
||||||
hasBattery = false;
|
programs.hyprland = {
|
||||||
formFactor = "desktop";
|
enable = true;
|
||||||
volumeScrollStep = 5;
|
xwayland.enable = true;
|
||||||
enableArrhist = true;
|
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
||||||
hasEduroamAccess = false;
|
|
||||||
backupRepository = "rest:http://10.69.12.52:8000/gunter.home.2rjus.net";
|
|
||||||
backupPassword = "gunter.home.2rjus.net";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Setup common XDG env vars
|
||||||
|
environment.sessionVariables = rec {
|
||||||
|
XDG_CACHE_HOME = "$HOME/.cache";
|
||||||
|
XDG_CONFIG_HOME = "$HOME/.config";
|
||||||
|
XDG_DATA_HOME = "$HOME/.local/share";
|
||||||
|
XDG_STATE_HOME = "$HOME/.local/state";
|
||||||
|
XDG_BIN_HOME = "$HOME/.local/bin";
|
||||||
|
PATH = [ "${XDG_BIN_HOME}" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Setup xdg portal
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
extraPortals = (
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
# unstable.xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable flakes
|
||||||
|
nix.settings = {
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
trusted-users = [
|
||||||
|
"root"
|
||||||
|
"torjus"
|
||||||
|
];
|
||||||
|
substituters = [ "https://cuda-maintainers.cachix.org" ];
|
||||||
|
trusted-public-keys = [
|
||||||
|
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
# Install system-wide packages
|
# Install system-wide packages
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
curl
|
curl
|
||||||
@@ -135,7 +157,7 @@
|
|||||||
wget
|
wget
|
||||||
v4l-utils
|
v4l-utils
|
||||||
nmap
|
nmap
|
||||||
pciutils
|
(lib.mkIf (config.system.name == "gunter") pciutils)
|
||||||
|
|
||||||
# X shit
|
# X shit
|
||||||
# xorg.xorgserver
|
# xorg.xorgserver
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
{ pkgs, lib, ... }:
|
|
||||||
{
|
|
||||||
hardware.nvidia-container-toolkit = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
{
|
{
|
||||||
|
inputs,
|
||||||
|
self,
|
||||||
|
pks,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
./steamuser.nix
|
||||||
./nfs.nix
|
./nfs.nix
|
||||||
./ollama.nix
|
./ollama.nix
|
||||||
./streamdeck.nix
|
./streamdeck.nix
|
||||||
./ratbagd.nix
|
|
||||||
./container.nix
|
|
||||||
../../system
|
../../system
|
||||||
../../home/hosts/gunter
|
../../home/gunter.nix
|
||||||
./steam.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,9 +25,7 @@
|
|||||||
"kvm-amd"
|
"kvm-amd"
|
||||||
"v4l2loopback"
|
"v4l2loopback"
|
||||||
];
|
];
|
||||||
boot.extraModulePackages = with config.boot.kernelPackages; [
|
boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
|
||||||
v4l2loopback
|
|
||||||
];
|
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/disk/by-uuid/a7d4b697-fffa-4bcb-9dd7-cbbd6121a50c";
|
device = "/dev/disk/by-uuid/a7d4b697-fffa-4bcb-9dd7-cbbd6121a50c";
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.hostapd = {
|
|
||||||
enable = true;
|
|
||||||
radios = {
|
|
||||||
wlp13s0 = {
|
|
||||||
countryCode = "NO";
|
|
||||||
wifi6.enable = true;
|
|
||||||
networks.wlp13s0 = {
|
|
||||||
ssid = "TESTLOL";
|
|
||||||
band = "5g";
|
|
||||||
authentication = {
|
|
||||||
wpaPassword = "lol passord";
|
|
||||||
mode = "wpa2-sha256";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,12 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
{
|
{
|
||||||
services.ollama = {
|
services.ollama = {
|
||||||
enable = false;
|
enable = true;
|
||||||
package = pkgs.ollama-cuda;
|
acceleration = "cuda";
|
||||||
};
|
};
|
||||||
services.open-webui = {
|
services.open-webui = {
|
||||||
enable = false;
|
enable = true;
|
||||||
package = pkgs.stable.open-webui;
|
|
||||||
# enable = lib.warn "Open WebUI is disabled" false;
|
|
||||||
environment = {
|
environment = {
|
||||||
VECTOR_DB = "pgvector";
|
|
||||||
PGVECTOR_DB_URL = "postgresql://openwebui:openwebui@pgdb1.home.2rjus.net:5432/openwebui";
|
|
||||||
DO_NOT_TRACK = "True";
|
DO_NOT_TRACK = "True";
|
||||||
SCARF_NO_ANALYTICS = "True";
|
SCARF_NO_ANALYTICS = "True";
|
||||||
OLLAMA_API_BASE_URL = "http://127.0.0.1:11434";
|
OLLAMA_API_BASE_URL = "http://127.0.0.1:11434";
|
||||||
@@ -18,8 +14,4 @@
|
|||||||
};
|
};
|
||||||
port = 11444;
|
port = 11444;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Ensure networking is ok before starting
|
|
||||||
systemd.services.open-webui.after = [ "network-online.target" ];
|
|
||||||
systemd.services.open-webui.wants = [ "network-online.target" ];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
services.ratbagd.enable = true;
|
|
||||||
environment.systemPackages = with pkgs; [ piper ];
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
programs.steam.enable = true;
|
|
||||||
programs.gamemode.enable = true;
|
|
||||||
}
|
|
||||||
23
hosts/gunter/steamuser.nix
Normal file
23
hosts/gunter/steamuser.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
environment.shells = with pkgs; [ zsh ];
|
||||||
|
|
||||||
|
services.xserver.desktopManager.xfce.enable = true;
|
||||||
|
programs.steam.enable = true;
|
||||||
|
programs.gamemode.enable = true;
|
||||||
|
services.flatpak.enable = true;
|
||||||
|
|
||||||
|
users.users.steam = {
|
||||||
|
isNormalUser = true;
|
||||||
|
initialPassword = "steam";
|
||||||
|
home = "/home/steam";
|
||||||
|
description = "Steam user";
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
# Install some user packages
|
||||||
|
packages = with pkgs; [
|
||||||
|
firefox
|
||||||
|
mumble
|
||||||
|
easyeffects
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -8,13 +10,23 @@
|
|||||||
|
|
||||||
# Bootloader stuff
|
# Bootloader stuff
|
||||||
boot.kernelParams = [
|
boot.kernelParams = [
|
||||||
|
"quiet"
|
||||||
|
"splash"
|
||||||
|
"rd.systemd.show_status=false"
|
||||||
"acpi_backlight=native"
|
"acpi_backlight=native"
|
||||||
"video=efifb:nobgrt"
|
"video=efifb:nobgrt"
|
||||||
"loglevel=3"
|
"loglevel=3"
|
||||||
"rd.udev.log_level=3"
|
"rd.udev.log_level=3"
|
||||||
];
|
];
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
boot.loader.systemd-boot.configurationLimit = 3;
|
boot.loader.systemd-boot = {
|
||||||
|
enable = true;
|
||||||
|
configurationLimit = 3;
|
||||||
|
};
|
||||||
|
boot.loader.efi = {
|
||||||
|
canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
|
||||||
boot.initrd.systemd.enable = true;
|
boot.initrd.systemd.enable = true;
|
||||||
boot.plymouth = {
|
boot.plymouth = {
|
||||||
@@ -28,33 +40,23 @@
|
|||||||
|
|
||||||
# Networking stuff
|
# Networking stuff
|
||||||
networking.hostName = "magicman"; # Define your hostname.
|
networking.hostName = "magicman"; # Define your hostname.
|
||||||
networking.networkmanager.wifi.backend = "iwd";
|
networking.networkmanager.enable = true;
|
||||||
|
networking.nftables.enable = true;
|
||||||
hardware = {
|
networking.firewall = {
|
||||||
enableRedistributableFirmware = true;
|
enable = true;
|
||||||
enableAllFirmware = true;
|
|
||||||
|
|
||||||
# Enable opengl
|
|
||||||
graphics = {
|
|
||||||
enable = true;
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
intel-media-driver
|
|
||||||
libva-vdpau-driver
|
|
||||||
libvdpau-va-gl
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Host capabilities
|
# Set time stuff
|
||||||
host.capabilities = {
|
time.timeZone = "Europe/Oslo";
|
||||||
hasCuda = false;
|
|
||||||
hasBattery = true;
|
# Enable opengl
|
||||||
formFactor = "laptop";
|
hardware.graphics = {
|
||||||
volumeScrollStep = 1;
|
enable = true;
|
||||||
enableArrhist = false;
|
extraPackages = with pkgs; [
|
||||||
hasEduroamAccess = true;
|
intel-media-driver
|
||||||
backupRepository = null;
|
vaapiVdpau
|
||||||
backupPassword = null;
|
libvdpau-va-gl
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Bluetooth stuff
|
# Bluetooth stuff
|
||||||
@@ -74,11 +76,63 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Setup hyprland
|
||||||
|
services.xserver.enable = true;
|
||||||
|
services.xserver.displayManager = {
|
||||||
|
gdm.wayland = true;
|
||||||
|
lightdm.enable = false;
|
||||||
|
};
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
||||||
|
};
|
||||||
|
|
||||||
# TRIM
|
# TRIM
|
||||||
services.fstrim.enable = true;
|
services.fstrim.enable = true;
|
||||||
|
|
||||||
|
# TLP
|
||||||
|
services.tlp.enable = true;
|
||||||
|
|
||||||
|
# Brillo
|
||||||
|
hardware.brillo.enable = true;
|
||||||
|
|
||||||
|
# Setup common XDG env vars
|
||||||
|
environment.sessionVariables = rec {
|
||||||
|
XDG_CACHE_HOME = "$HOME/.cache";
|
||||||
|
XDG_CONFIG_HOME = "$HOME/.config";
|
||||||
|
XDG_DATA_HOME = "$HOME/.local/share";
|
||||||
|
XDG_STATE_HOME = "$HOME/.local/state";
|
||||||
|
XDG_BIN_HOME = "$HOME/.local/bin";
|
||||||
|
PATH = [ "${XDG_BIN_HOME}" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Setup xdg portal
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
extraPortals = (
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
# xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
programs.steam.enable = true;
|
programs.steam.enable = true;
|
||||||
|
|
||||||
|
# Enable flakes
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
nix.settings.trusted-users = [
|
||||||
|
"root"
|
||||||
|
"torjus"
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
# Install system-wide packages
|
# Install system-wide packages
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim
|
vim
|
||||||
|
|||||||
@@ -8,8 +8,7 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./laptop.nix
|
|
||||||
../../system
|
../../system
|
||||||
../../home/hosts/magicman
|
../../home/magicman.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
hardware.brillo.enable = true;
|
|
||||||
powerManagement.enable = true;
|
|
||||||
|
|
||||||
services.auto-cpufreq = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
battery = {
|
|
||||||
governor = "powersave";
|
|
||||||
turbo = "never";
|
|
||||||
};
|
|
||||||
charger = {
|
|
||||||
governor = "performance";
|
|
||||||
turbo = "auto";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
103
hosts/prismo/configuration.nix
Normal file
103
hosts/prismo/configuration.nix
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ ./hardware-configuration.nix ];
|
||||||
|
|
||||||
|
# Sops stuff
|
||||||
|
sops.defaultSopsFile = ../../secrets/prismo/secrets.yaml;
|
||||||
|
sops.age.keyFile = "/var/lib/sops-nix/key.txt";
|
||||||
|
sops.age.generateKey = true;
|
||||||
|
sops.secrets."gotify_tokens/backup-home" = { };
|
||||||
|
|
||||||
|
# Bootloader stuff
|
||||||
|
boot.kernelParams = [
|
||||||
|
"quiet"
|
||||||
|
"splash"
|
||||||
|
"rd.systemd.show_status=false"
|
||||||
|
];
|
||||||
|
boot.loader.systemd-boot = {
|
||||||
|
enable = true;
|
||||||
|
configurationLimit = 10;
|
||||||
|
};
|
||||||
|
boot.loader.efi = {
|
||||||
|
canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Networking stuff
|
||||||
|
networking.hostName = "prismo"; # Define your hostname.
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
networking.nftables.enable = true;
|
||||||
|
networking.firewall = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Set time stuff
|
||||||
|
time.timeZone = "Europe/Oslo";
|
||||||
|
|
||||||
|
# Enable opengl
|
||||||
|
hardware.graphics = {
|
||||||
|
enable = true;
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
intel-media-driver
|
||||||
|
vaapiVdpau
|
||||||
|
libvdpau-va-gl
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Setup hyprland
|
||||||
|
services.xserver.enable = true;
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Setup common XDG env vars
|
||||||
|
environment.sessionVariables = rec {
|
||||||
|
XDG_CACHE_HOME = "$HOME/.cache";
|
||||||
|
XDG_CONFIG_HOME = "$HOME/.config";
|
||||||
|
XDG_DATA_HOME = "$HOME/.local/share";
|
||||||
|
XDG_STATE_HOME = "$HOME/.local/state";
|
||||||
|
XDG_BIN_HOME = "$HOME/.local/bin";
|
||||||
|
PATH = [ "${XDG_BIN_HOME}" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Setup xdg portal
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
extraPortals = (
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable flakes
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
# Install system-wide packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
curl
|
||||||
|
git
|
||||||
|
];
|
||||||
|
|
||||||
|
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||||
|
# and migrated your data accordingly.
|
||||||
|
#
|
||||||
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||||
|
system.stateVersion = "23.11"; # Did you read the comment?
|
||||||
|
}
|
||||||
14
hosts/prismo/default.nix
Normal file
14
hosts/prismo/default.nix
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
self,
|
||||||
|
pks,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./configuration.nix
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../system
|
||||||
|
../../home/prismo.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
54
hosts/prismo/hardware-configuration.nix
Normal file
54
hosts/prismo/hardware-configuration.nix
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
initrd = {
|
||||||
|
availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
"rtsx_pci_sdmmc"
|
||||||
|
];
|
||||||
|
kernelModules = [ ];
|
||||||
|
|
||||||
|
luks.devices."cryptroot".device = "/dev/disk/by-uuid/f71b0ace-f38f-435f-a07a-007f9cfe4919";
|
||||||
|
};
|
||||||
|
kernelModules = [ "kvm-intel" ];
|
||||||
|
extraModulePackages = [ ];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/91a0dbc4-426f-4b7b-a49e-063d1d0e59fb";
|
||||||
|
fsType = "xfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/AF2D-FAD0";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ { device = "/dev/disk/by-uuid/67da36a8-69df-4541-88cd-cba7cbc40b4c"; } ];
|
||||||
|
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
48
packages/open-pomodoro.nix
Normal file
48
packages/open-pomodoro.nix
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildGoModule,
|
||||||
|
fetchFromGitHub,
|
||||||
|
installShellFiles,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildGoModule rec {
|
||||||
|
pname = "openpomodoro-cli";
|
||||||
|
version = "0.3.0";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "open-pomodoro";
|
||||||
|
repo = "openpomodoro-cli";
|
||||||
|
rev = "v${version}";
|
||||||
|
hash = "sha256-h/o4yxrZ8ViHhN2JS0ZJMfvcJBPCsyZ9ZQw9OmKnOfY=";
|
||||||
|
};
|
||||||
|
|
||||||
|
vendorHash = "sha256-BR9d/PMQ1ZUYWSDO5ID2bkTN+A+VbaLTlz5t0vbkO60=";
|
||||||
|
|
||||||
|
ldflags = [
|
||||||
|
"-s"
|
||||||
|
"-w"
|
||||||
|
];
|
||||||
|
|
||||||
|
GOWORK = "off";
|
||||||
|
|
||||||
|
subPackages = [ "cmd/pomodoro" ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ installShellFiles ];
|
||||||
|
|
||||||
|
# postInstall = ''
|
||||||
|
# installShellCompletion --cmd talosctl \
|
||||||
|
# --bash <($out/bin/talosctl completion bash) \
|
||||||
|
# --fish <($out/bin/talosctl completion fish) \
|
||||||
|
# --zsh <($out/bin/talosctl completion zsh)
|
||||||
|
# '';
|
||||||
|
|
||||||
|
doCheck = false; # no tests
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A command-line Pomodoro tracker which uses the Open Pomodoro Format";
|
||||||
|
mainProgram = "pomodoro";
|
||||||
|
homepage = "https://github.com/open-pomodoro/openpomodoro-cli";
|
||||||
|
license = licenses.mit;
|
||||||
|
# maintainers = with maintainers; [ flokli ];
|
||||||
|
};
|
||||||
|
}
|
||||||
21
secrets/prismo/secrets.yaml
Normal file
21
secrets/prismo/secrets.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
test: ENC[AES256_GCM,data:MtSN,iv:ag/LDkk0DgE6QPjB/08RhEw3LzQHDOkRH0/4OBn8KUU=,tag:FeiJfjtbd4MCwNmCezH44A==,type:str]
|
||||||
|
sops:
|
||||||
|
kms: []
|
||||||
|
gcp_kms: []
|
||||||
|
azure_kv: []
|
||||||
|
hc_vault: []
|
||||||
|
age:
|
||||||
|
- recipient: age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhaGtaL0tkVFFuTk9ka0Rz
|
||||||
|
bHRpN0UyZFQxTG1ZSTRxSmI4eHJhbVM1ZWs0Cmx5UkdrSFNsRGU1eWRyU0hEcElH
|
||||||
|
WWJLWHdNTVR4RVpGYlcwMlJ4b2J5eHcKLS0tIGkrTWpNdVdERHpvaHZRdGxHN1Mr
|
||||||
|
WDJGWFA1M2kxQ1hHKzRwRTY4WUZwN2MKQIT//FEdXYWfEkI1knDD3uN+KMaIDtmR
|
||||||
|
H64031YMvAh67fVGekRv72S5DWzrft/Zr2libKpsN7T4G9fxGihhEw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2024-10-02T20:56:45Z"
|
||||||
|
mac: ENC[AES256_GCM,data:WQKHFMPmEvDTHS4eYYVcpsX7j8Xef9SV0VKNAbQh0hnZPMJEll4jtzR8sub2tUEt9/I1PvngXMWz6pPmINwOKRI+L3+gTSdg9QgPiikjE6wDA2qbpv9pd14uH22ABmCjkTeEZ9R+b9KbBl0GtMQof1sdTL9nUDrr9Fyfrr/UXs4=,iv:4DgDhwb2ksh2THtR/H5PiO57vF4yKSZ6FyCjWBqCQQI=,tag:dczk4ZAI8k6dareobGmt/w==,type:str]
|
||||||
|
pgp: []
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.9.0
|
||||||
@@ -3,7 +3,6 @@ sonarr_api_key: ENC[AES256_GCM,data:mg19hxs+DY6wsLjt4FupjavwmnmMJAP2Us5i1Rt/yyk=
|
|||||||
sonarr_base_url: ENC[AES256_GCM,data:0HiHIX4KcPEE62Ti1fLH230rC1A7xYg=,iv:mkAnl6t2H5xP9RPjTsbSZkfbrgli/7XKnPE5aGuZpTo=,tag:P2osFM60Jk8qkXJgLaGpjg==,type:str]
|
sonarr_base_url: ENC[AES256_GCM,data:0HiHIX4KcPEE62Ti1fLH230rC1A7xYg=,iv:mkAnl6t2H5xP9RPjTsbSZkfbrgli/7XKnPE5aGuZpTo=,tag:P2osFM60Jk8qkXJgLaGpjg==,type:str]
|
||||||
radarr_api_key: ENC[AES256_GCM,data:Db1ISKTF+m2H1on55/4vdGticfqBdxfIzKHBxC9LAx4=,iv:NhiG4SmsRYIunW1ljFbxeHvRoi9fOVE+9DJn6kmZ6oI=,tag:DoJzo56CW3kJlySYmB8NYQ==,type:str]
|
radarr_api_key: ENC[AES256_GCM,data:Db1ISKTF+m2H1on55/4vdGticfqBdxfIzKHBxC9LAx4=,iv:NhiG4SmsRYIunW1ljFbxeHvRoi9fOVE+9DJn6kmZ6oI=,tag:DoJzo56CW3kJlySYmB8NYQ==,type:str]
|
||||||
radarr_base_url: ENC[AES256_GCM,data:3UgOPQMblYhm0ysRB6VVosvZToIM5IA=,iv:o/s0bVBrjrma2Df2LlCCFL5Ks80063/4mABc6vzDrYg=,tag:eHKntLPM9yRRkMfIWSpIdg==,type:str]
|
radarr_base_url: ENC[AES256_GCM,data:3UgOPQMblYhm0ysRB6VVosvZToIM5IA=,iv:o/s0bVBrjrma2Df2LlCCFL5Ks80063/4mABc6vzDrYg=,tag:eHKntLPM9yRRkMfIWSpIdg==,type:str]
|
||||||
nats_nkey: ENC[AES256_GCM,data:TcIDFkFXB1+qfTqLylDI46w4/+Cy9XdXyXS26qCbwDaDoQNaRUsC6dw94mbT37352IWOCypTY0hweA==,iv:DC5GQyIXbNSx/mOLAOWTf5AyeFeViLxbKTMgZEfTEXE=,tag:krxk/dnZ58a8dcuWb7zhnA==,type:str]
|
|
||||||
sops:
|
sops:
|
||||||
kms: []
|
kms: []
|
||||||
gcp_kms: []
|
gcp_kms: []
|
||||||
@@ -13,23 +12,14 @@ sops:
|
|||||||
- recipient: age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u
|
- recipient: age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u
|
||||||
enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnaUlVOWtoRTFvMHljV0Fu
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDdDRDc0UvaWY4U0loZzQ0
|
||||||
TFp2Ym1jcThqbWRjUjdNSnhxRUsrOWl6S3dBCmh0L0YzaXNlRTFHMXFHTGc1T3I2
|
bDZCMitGbGVYaGJyUXNrZGpnZHJlWHRkK3drCnJ2TlovSUI0OEVrV2FBbVdlSm1z
|
||||||
WE03WjJCSlJSV2lmSExTWDBQRnlOcDAKLS0tIFJoeEM5b0IrdWxTRWhvNnd0c3NG
|
OE9lYXNMSXpCS0NMSkZDcjhtWENOUTAKLS0tIEZFMnVqcktwWkR5VHBGQXdobXlp
|
||||||
dENGdjJteFFaQTNFaDgvSGV2UEtyT0EKbdg4atS91rB99l7zKKkfPzKk4T5Mq2x5
|
Q3gxalhGVjNlS3B3YlFsK0VQMUFITEUKE87+RpOG6ucXHHQ0DMQ9F3yo0n1aXbv7
|
||||||
bX825DPrxauAhvrT7ca/A2OwA4kaFuxPrQGd3VOPAXTVhlbcFgIAdw==
|
OX5ibHU7RroUQwFmDj87u59VUTvpWRQjsBW4c4WrZRk9KcjwinZZZQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1stlqqspmt5fepyz35udrwr5avf9zuju79f787p26pu2d2j08yqps2q2t2c
|
lastmodified: "2024-04-25T19:19:54Z"
|
||||||
enc: |
|
mac: ENC[AES256_GCM,data:VGBiDi71DHAXLhi7XC0XSTqnSwcJXv1Lj53qriFER7BXXZNPUdbeknlYR+KMdL3hgKGiK+ElWK5foDAy6jpl1H3U7Y9B4d40pVZSzEoN+fCwUgfP+yym1HwKZZoJok2ksXZIL4MZyZSNS+ONjDeFEcyHobIx8pRThxic3CcvptI=,iv:QwnFcYeIWibx5q8C/ur1eE8F9vbyGHg5raInDHBoyVs=,tag:JJWEYAyVhfny4hWrKBAKig==,type:str]
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvSEZJWldRcmJ3c1BjbUpT
|
|
||||||
bmZXSmlHU0hVRTV3SG91bXpiTXhZd1RkY0Y4ClBxc0RabWJmMi8reHZYWnlmK3pC
|
|
||||||
bUw5V2FEV0pZdkZEMTJ5ZDZXWDM2NjgKLS0tIGZ6dEZ4dERYQXFRQTVkRHhycndz
|
|
||||||
dkgwQlRrdEp6b2FIVnowaDlUMEZpeHcK2icvVv+UpbcdVErRjjQhlQb6PuluC/K7
|
|
||||||
Vy8Rh7dTn++bSEdGidDNGYeUQBrVy2qooq04lQqbeOOrdmXVhTamdA==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2025-02-11T19:22:47Z"
|
|
||||||
mac: ENC[AES256_GCM,data:vd8O5y1GNDTDrlundbNZcGRAQzKLDly4qyxTqRO2JrnDYOqD/vQ8TqRQYiUgGY+5AcgjoLMER8keE8OUmcngN16cbGx1zKTpdqyHb7B2KR7ZfWOjW5kTk5KWM1gLDA4hA2GBEjHFBPGKdcrjURek9MrT+iM+qArbizSjWlKuehc=,iv:cicEnvWynZizJqrUzPIzbJWl6O8uL65Vs7fAYsuqSNA=,tag:l5jBXQfFedVE/VccZh+1qQ==,type:str]
|
|
||||||
pgp: []
|
pgp: []
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.9.4
|
version: 3.8.1
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{ pkgs, lib, ... }:
|
|
||||||
{
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
|
|
||||||
|
|
||||||
boot.kernelParams = lib.mkBefore [
|
|
||||||
"quiet"
|
|
||||||
"splash"
|
|
||||||
"rd.systemd.show_status=false"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,22 +1,14 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./boot.nix
|
|
||||||
./fonts.nix
|
./fonts.nix
|
||||||
./fwupd.nix
|
./fwupd.nix
|
||||||
./git.nix
|
./git.nix
|
||||||
./greetd.nix
|
./greetd.nix
|
||||||
./host-capabilities.nix
|
|
||||||
./hyprland.nix
|
|
||||||
./label.nix
|
|
||||||
./libvirt.nix
|
./libvirt.nix
|
||||||
./locale.nix
|
|
||||||
./networking.nix
|
|
||||||
./nix-config.nix
|
|
||||||
./podman.nix
|
./podman.nix
|
||||||
./root-ca.nix
|
|
||||||
./security.nix
|
./security.nix
|
||||||
./services.nix
|
./services.nix
|
||||||
./users.nix
|
./users.nix
|
||||||
./xdg.nix
|
./label.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,17 @@
|
|||||||
fira-code
|
fira-code
|
||||||
fira-code-symbols
|
fira-code-symbols
|
||||||
font-awesome
|
font-awesome
|
||||||
nerd-fonts.jetbrains-mono
|
(nerdfonts.override {
|
||||||
nerd-fonts.fira-code
|
fonts = [
|
||||||
nerd-fonts.droid-sans-mono
|
"JetBrainsMono"
|
||||||
nerd-fonts.dejavu-sans-mono
|
"FiraCode"
|
||||||
|
"DroidSansMono"
|
||||||
|
"DejaVuSansMono"
|
||||||
|
];
|
||||||
|
})
|
||||||
noto-fonts
|
noto-fonts
|
||||||
noto-fonts-cjk-sans
|
noto-fonts-cjk-sans
|
||||||
noto-fonts-color-emoji
|
noto-fonts-emoji
|
||||||
noto-fonts-monochrome-emoji
|
noto-fonts-monochrome-emoji
|
||||||
source-sans-pro
|
source-sans-pro
|
||||||
twemoji-color-font
|
twemoji-color-font
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
default_session = {
|
default_session = {
|
||||||
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd \"uwsm start default\"";
|
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd \"dbus-run-session Hyprland\"";
|
||||||
user = "greeter";
|
user = "greeter";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
with lib;
|
|
||||||
{
|
|
||||||
options.host.capabilities = {
|
|
||||||
# Hardware capabilities
|
|
||||||
hasCuda = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether the host has CUDA-capable GPU (for btop, OBS, etc.)";
|
|
||||||
};
|
|
||||||
|
|
||||||
hasBattery = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether the host has a battery (laptop)";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Form factor
|
|
||||||
formFactor = mkOption {
|
|
||||||
type = types.enum [
|
|
||||||
"desktop"
|
|
||||||
"laptop"
|
|
||||||
];
|
|
||||||
default = "desktop";
|
|
||||||
description = "Physical form factor of the host";
|
|
||||||
};
|
|
||||||
|
|
||||||
# UI behavior customizations
|
|
||||||
volumeScrollStep = mkOption {
|
|
||||||
type = types.int;
|
|
||||||
default = 5;
|
|
||||||
description = "Volume adjustment step percentage for scroll wheel";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Service-specific features
|
|
||||||
enableArrhist = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Enable Sonarr/Radarr monitoring widget (arrhist)";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Network environment features
|
|
||||||
hasEduroamAccess = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether this host can connect to eduroam (for SSH config)";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Backup configuration
|
|
||||||
backupRepository = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = "Restic backup repository URL for this host";
|
|
||||||
example = "rest:http://10.69.12.52:8000/gunter.home.2rjus.net";
|
|
||||||
};
|
|
||||||
|
|
||||||
backupPassword = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = "Restic backup password identifier for this host";
|
|
||||||
example = "gunter.home.2rjus.net";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
services.xserver.enable = true;
|
|
||||||
services.displayManager.gdm.wayland = true;
|
|
||||||
|
|
||||||
programs.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
withUWSM = true;
|
|
||||||
xwayland.enable = true;
|
|
||||||
portalPackage = pkgs.xdg-desktop-portal-hyprland;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,9 @@
|
|||||||
package = pkgs.qemu_kvm;
|
package = pkgs.qemu_kvm;
|
||||||
runAsRoot = true;
|
runAsRoot = true;
|
||||||
swtpm.enable = true;
|
swtpm.enable = true;
|
||||||
|
ovmf = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
time.timeZone = "Europe/Oslo";
|
|
||||||
|
|
||||||
i18n = {
|
|
||||||
supportedLocales = [
|
|
||||||
"en_US.UTF-8/UTF-8"
|
|
||||||
"nb_NO.UTF-8/UTF-8"
|
|
||||||
];
|
|
||||||
extraLocaleSettings = {
|
|
||||||
LC_TIME = "nb_NO.UTF-8";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
37
system/monitoring.nix
Normal file
37
system/monitoring.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
prometheus-node-exporter
|
||||||
|
prometheus-systemd-exporter
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services."node-exporter" = {
|
||||||
|
enable = true;
|
||||||
|
unitConfig = {
|
||||||
|
Description = "Prometheus Node Exporter";
|
||||||
|
After = [ "network.target" ];
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.prometheus-node-exporter}/bin/node_exporter";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services."systemd-exporter" = {
|
||||||
|
enable = true;
|
||||||
|
unitConfig = {
|
||||||
|
Description = "Prometheus Systemd Exporter";
|
||||||
|
After = [ "network.target" ];
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.prometheus-systemd-exporter}/bin/systemd_exporter";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
9100
|
||||||
|
9558
|
||||||
|
8989
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./metrics.nix
|
|
||||||
./logs.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.promtail = {
|
|
||||||
enable = true;
|
|
||||||
configuration = {
|
|
||||||
server = {
|
|
||||||
http_listen_address = "0.0.0.0";
|
|
||||||
http_listen_port = 9099;
|
|
||||||
grpc_listen_address = "0.0.0.0";
|
|
||||||
grpc_listen_port = 9098;
|
|
||||||
};
|
|
||||||
|
|
||||||
clients = [
|
|
||||||
{
|
|
||||||
url = "http://monitoring01.home.2rjus.net:3100/loki/api/v1/push";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
scrape_configs = [
|
|
||||||
{
|
|
||||||
job_name = "journal";
|
|
||||||
journal = {
|
|
||||||
json = true;
|
|
||||||
};
|
|
||||||
relabel_configs = [
|
|
||||||
{
|
|
||||||
source_labels = [ "__journal__systemd_unit" ];
|
|
||||||
target_label = "systemd_unit";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
source_labels = [ "__journal__hostname" ];
|
|
||||||
target_label = "host";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.prometheus.exporters = {
|
|
||||||
node = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
enabledCollectors = [
|
|
||||||
"systemd"
|
|
||||||
"logind"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
smartctl = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
devices = [ "/dev/nvme0n1" ];
|
|
||||||
};
|
|
||||||
systemd = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
networking.nftables.enable = true;
|
|
||||||
networking.firewall.enable = true;
|
|
||||||
networking.firewall.allowedTCPPorts = lib.mkDefault [ ];
|
|
||||||
networking.firewall.allowedUDPPorts = lib.mkDefault [ ];
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
nix.settings = {
|
|
||||||
experimental-features = [
|
|
||||||
"nix-command"
|
|
||||||
"flakes"
|
|
||||||
];
|
|
||||||
|
|
||||||
trusted-users = [
|
|
||||||
"root"
|
|
||||||
"torjus"
|
|
||||||
];
|
|
||||||
|
|
||||||
substituters = [ "https://cache.nixos.org" ];
|
|
||||||
|
|
||||||
trusted-substituters = [ "https://cache.nixos.org" ];
|
|
||||||
|
|
||||||
trusted-public-keys = [
|
|
||||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIBxDCCAWmgAwIBAgIQQCSzuOLIKLj1dGbC+NFttjAKBggqhkjOPQQDAjBAMRow
|
|
||||||
GAYDVQQKExFob21lLjJyanVzLm5ldCBDQTEiMCAGA1UEAxMZaG9tZS4ycmp1cy5u
|
|
||||||
ZXQgQ0EgUm9vdCBDQTAeFw0yNDEwMjEwOTEyNDRaFw0zNDEwMTkwOTEyNDRaMEAx
|
|
||||||
GjAYBgNVBAoTEWhvbWUuMnJqdXMubmV0IENBMSIwIAYDVQQDExlob21lLjJyanVz
|
|
||||||
Lm5ldCBDQSBSb290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEGDE4ss9y
|
|
||||||
9msphQ/Sa/tAoEaGoDHQcg5oRcxWL5SZYjUPNl+zbRZzqkvCz2S1XrHJPiPWbyJX
|
|
||||||
cZAlPxbwZrWDyKNFMEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C
|
|
||||||
AQEwHQYDVR0OBBYEFPZx6AahX5diBMChZbv5N4dh+vCTMAoGCCqGSM49BAMCA0kA
|
|
||||||
MEYCIQC6yqMM9/s1Dct5jlq0NAGsDA68hVTDcO3RP61lxQlfBwIhAL1jlmIwaSJc
|
|
||||||
TjdIMjPQ3ombBRqDJBDvDr8o6oOUjret
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICIjCCAaigAwIBAgIUQ/Bd/4kNvkPjQjgGLUMynIVzGeAwCgYIKoZIzj0EAwMw
|
|
||||||
QDELMAkGA1UEBhMCTk8xEDAOBgNVBAoTB0hvbWVsYWIxHzAdBgNVBAMTFmhvbWUu
|
|
||||||
MnJqdXMubmV0IFJvb3QgQ0EwHhcNMjYwMjAxMjIxODA5WhcNMzYwMTMwMjIxODM5
|
|
||||||
WjBAMQswCQYDVQQGEwJOTzEQMA4GA1UEChMHSG9tZWxhYjEfMB0GA1UEAxMWaG9t
|
|
||||||
ZS4ycmp1cy5uZXQgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABH8xhIOl
|
|
||||||
Nd1Yb1OFhgIJQZM+OkwoFenOQiKfuQ4oPMxaF+fnXdKc77qPDVRjeDy61oGS38X3
|
|
||||||
CjPOZAzS9kjo7FmVbzdqlYK7ut/OylF+8MJkCT8mFO1xvuzIXhufnyAD4aNjMGEw
|
|
||||||
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEimBeAg
|
|
||||||
3JVeF4BqdC9hMZ8MYKw2MB8GA1UdIwQYMBaAFEimBeAg3JVeF4BqdC9hMZ8MYKw2
|
|
||||||
MAoGCCqGSM49BAMDA2gAMGUCMQCvhRElHBra/XyT93SKcG6ZzIG+K+DH3J5jm6Xr
|
|
||||||
zaGj2VtdhBRVmEKaUcjU7htgSxcCMA9qHKYFcUH72W7By763M6sy8OOiGQNDSERY
|
|
||||||
VgnNv9rLCvCef1C8G2bYh/sKGZTPGQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
security.pki = {
|
|
||||||
certificateFiles = [
|
|
||||||
"${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
|
|
||||||
./root-ca.crt
|
|
||||||
./root-ca-old.crt
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
locate = {
|
locate = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.plocate;
|
package = pkgs.plocate;
|
||||||
|
localuser = null;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
environment.sessionVariables = rec {
|
|
||||||
XDG_CACHE_HOME = "$HOME/.cache";
|
|
||||||
XDG_CONFIG_HOME = "$HOME/.config";
|
|
||||||
XDG_DATA_HOME = "$HOME/.local/share";
|
|
||||||
XDG_STATE_HOME = "$HOME/.local/state";
|
|
||||||
XDG_BIN_HOME = "$HOME/.local/bin";
|
|
||||||
PATH = [ "${XDG_BIN_HOME}" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
xdgOpenUsePortal = true;
|
|
||||||
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user