Compare commits
319 Commits
f2ce5eb64c
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
3d8fcf9be3
|
|||
|
02a8f00f13
|
|||
|
6ccb26547a
|
|||
|
c50e53a322
|
|||
| 503d57c95e | |||
| a9745bfa14 | |||
| efee0d3e1c | |||
| 3f5dd1a686 | |||
| 87a9d1f5ae | |||
| cade967fb0 | |||
| da0c4e9afe | |||
| dc756c70b2 | |||
| eea61457ad | |||
| 18554a5c5d | |||
| 1b5a94c86c | |||
| 4fb3ec33ea | |||
| 5b0949deed | |||
| 40634b0a40 | |||
| 80c10b6229 | |||
| b1d677ed78 | |||
| 3dd314b1ee | |||
| f08c8c99ad | |||
| 296c84e5eb | |||
| 3aa5216310 | |||
| 6894d6e6af | |||
| 29d1ddc672 | |||
| 0773fd4ffd | |||
| d1808b93af | |||
| 9f01c4ecf1 | |||
| 8e401947eb | |||
| de50a5975a | |||
| aefec1a3a1 | |||
| 2b04e3c253 | |||
| bf9d625581 | |||
| 98b9eb4340 | |||
| d63df5ae9d | |||
| cd0d2c6d0a | |||
| ffa7ccf9b3 | |||
| c88de7f26d | |||
| 0a295e56df | |||
| 8a2c7ed678 | |||
| dc91fd6428 | |||
| 1bbd9b6bbe | |||
| 4e1cf920ee | |||
| aaefea1987 | |||
| 1d29a86ddc | |||
| fb85102582 | |||
| c4259ab0f5 | |||
| 59d1f84c7a | |||
| 08b1c358e3 | |||
| 1899f6baa8 | |||
| a5778ea445 | |||
| 81457e71a3 | |||
| c5cafdb5fb | |||
| 5f6c023f44 | |||
| be261a4de5 | |||
| e6cfe48e5d | |||
| bbf4dd74d2 | |||
| fe70449e97 | |||
| 2d51aab59e | |||
| 82be0d8d39 | |||
| 6c28e38e0b | |||
| be1c65bc5d | |||
| 7c5d88f63a | |||
| 637281e1d0 | |||
| ce971bb732 | |||
| 1c149332d6 | |||
| c14a6c852c | |||
| 9eee68e2a5 | |||
| 1c62518304 | |||
| 06f6488224 | |||
| 77bcef2d50 | |||
| d2a5fc6794 | |||
| 2ded742916 | |||
| 304f4f0b41 | |||
| 5622ddbcfb | |||
| bfe57e7028 | |||
| 32c7c9fbe0 | |||
| cc5a687353 | |||
| 10ceedca05 | |||
| 92918c6e7c | |||
| 8488134867 | |||
| 26551d4465 | |||
| 4954e69353 | |||
| 73b84c49ae | |||
| 4b43067cf8 | |||
| dc53669636 | |||
| 8ca69b50e4 | |||
| 5473b47b7f | |||
| f9baae061a | |||
| aa42d0e283 | |||
| e88199483e | |||
| 790f14fedf | |||
| 52084d1ada | |||
| 4a7ee425b3 | |||
| fa1b204b38 | |||
| b72288a216 | |||
| 7856a08b9b | |||
| a935a63de0 | |||
| 69f4b791f4 | |||
| f59f8ca4ae | |||
| e132544548 | |||
| 502f1ffd82 | |||
| a1a0c23ecd | |||
| 6194629c81 | |||
| 6c608842c4 | |||
| 4c11df5817 | |||
| e00f5868b9 | |||
| 67e3ab081b | |||
| 6027779453 | |||
| a7140ce078 | |||
| 95f0ffa65c | |||
| f3e5daf08a | |||
| c43f8b136d | |||
| 57ee699302 | |||
| 7aa4dc4980 | |||
| 9a7a27c013 | |||
| daa9d28624 | |||
| c765e92f17 | |||
| ace7e30343 | |||
| 758b2ac5b5 | |||
| 90a1016523 | |||
| fff0781acb | |||
| 08fa1e47ab | |||
| 58e6e31e0f | |||
| 5b6d9ef004 | |||
| c55b6b7fa3 | |||
| 655cfbfc1e | |||
| 8e35d7ce1a | |||
| 74ab6d8785 | |||
| 102447bbd4 | |||
| d0f3211664 | |||
| d86c746644 | |||
| d5e8fd25d8 | |||
| 2400d2074e | |||
| f4fa9ecd06 | |||
| b04d6dd036 | |||
| 3e7c52e526 | |||
| c594bc5c10 | |||
| b8bebf1ff3 | |||
| 17247f0aaf | |||
| 333b1863ca | |||
| 53b8e1cf0e | |||
| 818f6b4059 | |||
| ab734d9e97 | |||
| a4ffea27b2 | |||
| 773ffe1c06 | |||
| 57e6c1528b | |||
| 5eb1aeace2 | |||
| c4e53d0a75 | |||
| bb5420b3b3 | |||
| 19fa6802e6 | |||
| 14a3037578 | |||
| f30a7ffb67 | |||
| 2c43950c77 | |||
| 273ad50629 | |||
| 7d950369f2 | |||
| 1aa38a5c3e | |||
| 634994ed0e | |||
| 03adf4e344 | |||
| ab6a6f872b | |||
| 895539f078 | |||
| 0ef8c8b46c | |||
| 8b61028dbe | |||
| 4dbc42fc1f | |||
| 72cb5ff553 | |||
| f8a8ea4ead | |||
| 410215749f | |||
| eacdba9a45 | |||
| ad35a92e44 | |||
| c63cff0ea3 | |||
| 8944b032ca | |||
| 8bc1b4a76c | |||
| 61201dde9c | |||
| b7f77597b0 | |||
| 4d2315766d | |||
| 5d40d4f707 | |||
| 822b111712 | |||
| 10fa21e69e | |||
| c54f69ac77 | |||
| 127b1acb7a | |||
| 4c2a60e60a | |||
| 1092ac0bfb | |||
| dd3b4a60cd | |||
| 3ec140ba67 | |||
| 915d58859b | |||
| 915b1939c1 | |||
| c29dc43ad7 | |||
| 90d5600f28 | |||
| e28d453194 | |||
| 16bf1a8480 | |||
| 40c40f9fca | |||
| 8a81f95b92 | |||
| 7e15b675b3 | |||
| 3153059801 | |||
| 02d1e4d434 | |||
| 17f832c8f2 | |||
| 0cb00937f0 | |||
| ccee2b0cad | |||
| 5967767e8c | |||
| 9476507c32 | |||
| a83045696b | |||
| 752a26bf84 | |||
| c83f81e257 | |||
| e13db3d09a | |||
| b1a3fda37b | |||
| 2ba67bd6f9 | |||
| 251e40562b | |||
| 24b9205af3 | |||
| c88b598bae | |||
| d294cae787 | |||
| 1c74ab1bf9 | |||
| 41f464cc77 | |||
| 93740a4216 | |||
| f3e87369cf | |||
| d8de5d1ba8 | |||
| ddfeae3de5 | |||
| 9244b599ad | |||
| 7c9c30238d | |||
| 88607b6b23 | |||
| e1e07558df | |||
| f654d4379b | |||
| 7c09c8a053 | |||
| 244d3a48c0 | |||
| 5d1ef1f4f6 | |||
| 0440b8b6cc | |||
| b14bd2758d | |||
| 68b0f800da | |||
| e049644ea6 | |||
| 63f704b5a5 | |||
| 7704a74b24 | |||
| 7f80174e22 | |||
| ecb496f029 | |||
| 1fab5fe65e | |||
| ba9422caa8 | |||
| 904686c8c2 | |||
| 7561cc434e | |||
| abd40375d4 | |||
| 173e84252e | |||
| 62f4e58641 | |||
| bf88d845cc | |||
| 42b4bf8262 | |||
| 9954fdfde5 | |||
| 5373df727f | |||
| 509a6d9c94 | |||
| edd6556117 | |||
| 9b4a2cbba9 | |||
| 328956d225 | |||
| 78ef141012 | |||
| 0d7933b5ce | |||
| ee898f020d | |||
| be8a17c5a5 | |||
| f1b69e1931 | |||
| 3375e9fccb | |||
| 5686c34f8f | |||
| 24e7d3dde2 | |||
| 670d159d6c | |||
| 259c2afd09 | |||
| a60bfe9a1d | |||
| 90a51abb19 | |||
| 924a4c4a03 | |||
| 3532769a33 | |||
| 0e243d6ecb | |||
| 644581df4d | |||
| 12f29928ca | |||
| 3b6d3b8b7f | |||
| 12a5a4252e | |||
| 72c403e8b1 | |||
| 368168a881 | |||
| ea9560dbd0 | |||
| 9bb9482c07 | |||
| 2ba5783657 | |||
| 95810cf709 | |||
| 37a04bfd2c | |||
| 1555cbd545 | |||
| 73936cf30c | |||
| dfbc7f2af0 | |||
| 7f9117769d | |||
| 2ccae9f16d | |||
| 298ceacb4d | |||
| 0b41950416 | |||
| 323de4a16a | |||
| e447483d18 | |||
| 503640e68f | |||
| 15da05572c | |||
| 5e0fbd8b21 | |||
| be35914344 | |||
| fc410c6178 | |||
| 17ca00589a | |||
| 4c048f451e | |||
| 8a97782c5c | |||
| 1b9375a241 | |||
| 2bff91fa1c | |||
| ec99b62cce | |||
| d3804d70d6 | |||
| ae47573018 | |||
| 83b63f581c | |||
| d9d81d19ce | |||
| 9d2a0d42e9 | |||
| bb1404aa38 | |||
| 576519a9d7 | |||
| 019767af56 | |||
| d3b946096b | |||
| 8e07dc56e5 | |||
| 6c6643f01c | |||
| bb020d4b9a | |||
| 930aa2dac7 | |||
| 0f8fa6cd88 | |||
| d1c98934cb | |||
| 243e0003bd | |||
| 2068b8a17d | |||
| 172d4bb3c4 | |||
| 74408ee5ea | |||
| 0e86f4aaab | |||
| 69f814d52e | |||
| 4cc975f756 | |||
| 65de8f1df4 | |||
| 20095ff676 | |||
| 9155652776 |
BIN
FastFetch.png
BIN
FastFetch.png
Binary file not shown.
|
Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 1.8 MiB |
BIN
NeoVim.png
Normal file
BIN
NeoVim.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 747 KiB |
172
README.md
172
README.md
@ -1,43 +1,159 @@
|
||||
# NixOS Configuration
|
||||
# NixFlake
|
||||
|
||||
Modular NixOS configuration, using [Niri](https://github.com/niri-wm/niri) and [Waybar](https://github.com/Alexays/Waybar) for a light desktop.
|
||||
NixOS flake with [Niri](https://github.com/niri-wm/niri), [Waybar](https://github.com/Alexays/Waybar) for a lightweight desktop and [home-manager](https://github.com/nix-community/home-manager) for declarative `~/` configuration.
|
||||
|
||||

|
||||

|
||||
## Screenshots
|
||||
|
||||
To install, run `nixos-rebuild` with the `--flake` parameter from the `NixFlake` directory: `nixos-rebuild switch --flake .#nixinator`.
|
||||
Alternatively, use `nh os switch` or `nh os boot`.
|
||||

|
||||
|
||||
## NixFlake/system
|
||||

|
||||
|
||||
Contains all the system configurations.
|
||||

|
||||
|
||||
- There is a common configuration used for all systems: `NixFlake/system/default.nix`
|
||||
- Every system has its own special configuration: `NixFlake/system/<hostname>/default.nix`
|
||||
- System modules are located in `NixFlake/system/systemmodules`
|
||||
- Hosted services are located in `NixFlake/system/services`
|
||||
## Hosts
|
||||
|
||||
When creating a NixOS configuration inside the `NixFlake/flake.nix` the common configuration is imported.
|
||||
Because the hostname is propagated to the common configuration, it can import the host-specific config by itself.
|
||||
| Host | Type | GPU | Features |
|
||||
|-|-|-|-|
|
||||
| `nixinator` | Desktop (x86_64) | NVIDIA | [disko](https://github.com/nix-community/disko) partitioning, [lanzaboote](https://github.com/nix-community/lanzaboote) Secure Boot, [impermanence](https://github.com/nix-community/impermanence) opt-in state, [sops-nix](https://github.com/Mic92/sops-nix) secrets |
|
||||
| `nixtop` | Laptop (x86_64) | Intel | Obsolete trash computer |
|
||||
| `servenix` | Headless (x86_64) | NVIDIA | Jellyfin, Nextcloud, Gitea, ... |
|
||||
| `thinknix` | Headless (x86_64) | - | AdGuard DNS, Nginx, ... |
|
||||
| `darwinix` | macOS (aarch64) | - | nix-darwin with home-manager |
|
||||
|
||||
## NixFlake/home
|
||||
## Usage
|
||||
|
||||
Contains all the home-manager configurations.
|
||||
```bash
|
||||
# Enter dev shell (provides helper utilities)
|
||||
nix develop
|
||||
|
||||
- There is a common configuration for each user: `NixFlake/home/<username>/default.nix`
|
||||
- There is a configuration for a single system of this user: `NixFlake/home/<username>/<hostname>/default.nix`
|
||||
- Home-Manager modules are located in `NixFlake/home/homemodules`
|
||||
# Rebuild system + user config together
|
||||
nh os switch
|
||||
nh os boot
|
||||
|
||||
When creating a NixOS configuration inside the `NixFlake/flake.nix` the common configuration is imported.
|
||||
Because the hostname is propagated to the common configuration, it can import the host-specific config by itself.
|
||||
# Or with nixos-rebuild
|
||||
sudo nixos-rebuild switch --flake .#nixinator
|
||||
```
|
||||
|
||||
## NixFlake/derivations
|
||||
## Info
|
||||
|
||||
Contains all the stuff I packaged.
|
||||
Each derivation is loaded into `NixFlake/derivations/default.nix`.
|
||||
Home-manager runs as a NixOS module (not standalone). A single `nixos-rebuild switch` rebuilds both system and user configuration together.
|
||||
|
||||
## NixFlake/overlays
|
||||
### Components
|
||||
|
||||
Contains all overlays, e.g. package version overrides.
|
||||
The `NixFlake/overlays/default.nix` imports all overlays and all derivations.
|
||||
It is then imported by the top-level `NixFlake/flake.nix`, to make everything available to the system/home configurations.
|
||||
Per-host config consists of three layers:
|
||||
|
||||
1. **Common Config**: `system/default.nix` (NixOS) / `home/christoph/default.nix` (home-manager)
|
||||
2. **Host Config**: `system/<hostname>/default.nix` (NixOS) / `home/christoph/<hostname>/default.nix` (home-manager)
|
||||
3. **Hardware**: `system/<hostname>/hardware-configuration.nix`
|
||||
|
||||
### Modules
|
||||
|
||||
There are two module hierarchies (NixOS and home-manager modules):
|
||||
|
||||
```
|
||||
system/systemmodules/<name>/ home/homemodules/<name>/
|
||||
- options.nix # declares options - options.nix # declares options
|
||||
- default.nix # implementation - default.nix # implementation
|
||||
```
|
||||
|
||||
## Files
|
||||
|
||||
```
|
||||
NixFlake/
|
||||
├── flake.nix # flake entrypoint: inputs, outputs, host definitions
|
||||
├── flake.lock # flake lockfile
|
||||
├── shell.nix # dev shell (nix develop)
|
||||
├── system/ # NixOS system configurations
|
||||
│ ├── default.nix # global system defaults (all hosts)
|
||||
│ ├── <hostname>/ # per-host overrides + hardware-config
|
||||
│ ├── systemmodules/ # reusable system modules
|
||||
│ └── services/ # OCI container services
|
||||
├── home/ # home-manager user configuration
|
||||
│ └── christoph/
|
||||
│ ├── default.nix # global user defaults
|
||||
│ ├── <hostname>/ # per-host user overrides
|
||||
│ └── homemodules/ # reusable home-manager modules
|
||||
├── lib/ # shared helpers
|
||||
├── derivations/ # custom packages
|
||||
├── overlays/ # package overrides
|
||||
├── config/ # linked dotfiles
|
||||
└── wallpapers/ # backgrounds
|
||||
```
|
||||
|
||||
## System Modules
|
||||
|
||||
| Module | Description |
|
||||
|--------|-------------|
|
||||
| `bootloader` | systemd-boot, lanzaboote Secure Boot signing |
|
||||
| `desktopportal` | xdg-desktop-portal backends (Niri, GTK) |
|
||||
| `docker` | Docker / podman daemon config |
|
||||
| `fonts` | System fonts and fontconfig |
|
||||
| `impermanence` | Opt-in state persistence (wipes `/` on boot) |
|
||||
| `mime` | MIME type associations |
|
||||
| `network` | systemd-networkd wired/wireless config |
|
||||
| `polkit` | Polkit rules for desktop users |
|
||||
| `sops-nix` | Secrets decryption at boot |
|
||||
|
||||
## Home-Manager Modules
|
||||
|
||||
### Shell & Terminal
|
||||
`fish` `terminal` `kitty` `tmux` `paths`
|
||||
|
||||
### Editors
|
||||
`neovim` `vscode` `zed`
|
||||
|
||||
### Desktop / WM
|
||||
`niri` `waybar` `rofi` `color` `fcitx`
|
||||
|
||||
### Media
|
||||
`mpd` `rmpc` `cava` `beets` `jellyfin-tui`
|
||||
|
||||
### Browsers
|
||||
`firefox` `qutebrowser`
|
||||
|
||||
### Tools
|
||||
`git` `ssh` `bat` `btop` `fastfetch` `lazygit` `yazi` `zathura`
|
||||
|
||||
## Services
|
||||
|
||||
All server services run as OCI containers (podman). Each service is defined in `system/services/<name>.nix`.
|
||||
|
||||
| Service | Purpose |
|
||||
|---------|---------|
|
||||
| `adguard` | DNS ad blocking |
|
||||
| `authelia` | SSO |
|
||||
| `fileflows` | Media processing |
|
||||
| `gitea` | Git server |
|
||||
| `immich` | Photo cloud |
|
||||
| `jellyfin` | Streaming server |
|
||||
| `kiwix` | Offline mirrors |
|
||||
| `kopia` | Docker volume backup |
|
||||
| `nextcloud` | File sync |
|
||||
| `nginx-proxy-manager` | Reverse proxy with Let's Encrypt |
|
||||
| `ntfy` | Push notification server |
|
||||
| `paperless` | Document management |
|
||||
| `portainer` | Container status monitor |
|
||||
| `teamspeak` | Voice chat server |
|
||||
| `tinymediamanager` | Media metadata management |
|
||||
|
||||
## Overlays
|
||||
|
||||
Package modifications live in `overlays/default.nix`.
|
||||
|
||||
## Secrets
|
||||
|
||||
Secrets are managed with sops-nix. Public age keys are stored in `flake.nix` under `publicKeys`. Encrypted `.yaml`/`.json` files are referenced via `sops.secrets.<name>`. Decryption happens at activation time.
|
||||
|
||||
## Shared Helpers (`lib/`)
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `nixos.nix` | Host config builders (NixOS + darwin) |
|
||||
| `modules.nix` | Option helpers |
|
||||
| `networking.nix` | systemd-networkd config generators |
|
||||
| `generators.nix` | Lua code generation |
|
||||
| `containers.nix` | OCI container helpers for services |
|
||||
| `color.nix` | Color utilities |
|
||||
| `rofi.nix` | Rofi menu helpers |
|
||||
|
||||
Available to all modules as `mylib` (injected via special args).
|
||||
|
||||
245
flake.lock
generated
245
flake.lock
generated
@ -60,11 +60,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775706155,
|
||||
"narHash": "sha256-h7Rw0vlb0n0Jsk21WJPm7H+1T1bG+PEuxE5cJ2TZl8A=",
|
||||
"lastModified": 1781164160,
|
||||
"narHash": "sha256-dxo3aPnfaQJt9K/3NhgKfu2Q9B42z4d4Or9Izoug+68=",
|
||||
"owner": "abenz1267",
|
||||
"repo": "elephant",
|
||||
"rev": "376ee71c66db38683daabd57350bf3f6f086eaf8",
|
||||
"rev": "3296842820d04d5ec774afc7528492fcbb3c01f2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -170,11 +170,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775087534,
|
||||
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
|
||||
"lastModified": 1778716662,
|
||||
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
|
||||
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -263,12 +263,15 @@
|
||||
}
|
||||
},
|
||||
"hardware": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776983936,
|
||||
"narHash": "sha256-ZOQyNqSvJ8UdrrqU1p7vaFcdL53idK+LOM8oRWEWh6o=",
|
||||
"lastModified": 1781168557,
|
||||
"narHash": "sha256-LOnLQ2tpYF9gqIDDr3+j3DbpJJr/QCH6zPRT2GzEUOE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "2096f3f411ce46e88a79ae4eafcfc9df8ed41c61",
|
||||
"rev": "6358ff76821101c178e3ab4919a62799bfe3652e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -284,11 +287,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777594677,
|
||||
"narHash": "sha256-h90sHwoRJLRvaTpZroTvU2JRHDFj0czUafM8eqLe1RI=",
|
||||
"lastModified": 1781305496,
|
||||
"narHash": "sha256-g8Vv4Qfc7n+lgov97REu3X6BeJtvYY0hlSUZR1GrGQQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "899c08a15beae5da51a5cecd6b2b994777a948da",
|
||||
"rev": "c87a39aa979acc4848016d2220c6238390d84779",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -320,14 +323,14 @@
|
||||
},
|
||||
"hytale-launcher": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777394001,
|
||||
"narHash": "sha256-FNHydw2We/qvxBJ2cMNc/eGcxSZkvOXZn2WYGiH6WfE=",
|
||||
"lastModified": 1781228795,
|
||||
"narHash": "sha256-OSofuO5j7FLg2R7c9YQdK5epMqkQLucExcDNF7dqCMo=",
|
||||
"owner": "JPyke3",
|
||||
"repo": "hytale-launcher-nix",
|
||||
"rev": "822e54c97348a6fbc28dfac563e5bbe9fe1783b8",
|
||||
"rev": "efe21e31eb63d6db1a104c14bbb437ae5d03f73b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -339,7 +342,7 @@
|
||||
"impermanence": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager_2",
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1769548169,
|
||||
@ -405,7 +408,7 @@
|
||||
"naersk": {
|
||||
"inputs": {
|
||||
"fenix": "fenix",
|
||||
"nixpkgs": "nixpkgs_7"
|
||||
"nixpkgs": "nixpkgs_9"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763384566,
|
||||
@ -433,11 +436,11 @@
|
||||
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777542749,
|
||||
"narHash": "sha256-j4W+WwdiRxTTFdsoB8A7jlLNLbMQANKJxh9eKf8nOIs=",
|
||||
"lastModified": 1781234038,
|
||||
"narHash": "sha256-jo4a47qDgsx1F1i0MtHZl12FfzqKJOES25vbm0ZUxeI=",
|
||||
"owner": "sodiboo",
|
||||
"repo": "niri-flake",
|
||||
"rev": "36130bc452e0a84c07761d2e176ae875b48eebf3",
|
||||
"rev": "eb5789cba8d37802d330df5a13c691622c83121f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -466,11 +469,11 @@
|
||||
"niri-unstable": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1777468255,
|
||||
"narHash": "sha256-lBZc1UMy+1P1T/E41j3jQrpS7EFI3qegd+ktHZdamIg=",
|
||||
"lastModified": 1780938415,
|
||||
"narHash": "sha256-QHyIMGSbCQW8d5qbOrMsm6gem10bO3Au2YLa3alJfHo=",
|
||||
"owner": "YaLTeR",
|
||||
"repo": "niri",
|
||||
"rev": "dd1c3bcb9f1ef416df33ffa22d1d9bcee1398e7d",
|
||||
"rev": "6f1a2c5f0e8274223d4204b1f8d6f7f91538967e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -483,14 +486,14 @@
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776242217,
|
||||
"narHash": "sha256-TRts0fKUPFcf1i6rZHFGUDTfti/x3oKEg/CqsPRpSgs=",
|
||||
"lastModified": 1778849865,
|
||||
"narHash": "sha256-HiVhuhD7Fvfje3iw4slmtcCckz/LbjLITa4g/iTEbw0=",
|
||||
"owner": "thiagokokada",
|
||||
"repo": "nix-alien",
|
||||
"rev": "4c5e52dda0d6ab3de814e364046769321d3e1021",
|
||||
"rev": "1bb49f5aea63e95a3cf9c4b91f9f1331fef7a52b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -506,11 +509,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775037210,
|
||||
"narHash": "sha256-KM2WYj6EA7M/FVZVCl3rqWY+TFV5QzSyyGE2gQxeODU=",
|
||||
"lastModified": 1781242433,
|
||||
"narHash": "sha256-bchLZZ3sRn740zyvD2icZSnNoTaanN0nw7l6fjVXO+E=",
|
||||
"owner": "nix-darwin",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "06648f4902343228ce2de79f291dd5a58ee12146",
|
||||
"rev": "aabb2037edfc0f210723b72cd5f528aab5dd3f0b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -544,11 +547,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775970782,
|
||||
"narHash": "sha256-7jt9Vpm48Yy5yAWigYpde+HxtYEpEuyzIQJF4VYehhk=",
|
||||
"lastModified": 1778393439,
|
||||
"narHash": "sha256-mOtQxUjtKaPHLeoLOY/YEDctmud1X9KwJr4kE1MJ3Wc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "bedba5989b04614fc598af9633033b95a937933f",
|
||||
"rev": "01466c414c7357ae2ce32be4a272a7c69e94ab5f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -575,11 +578,11 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1777428379,
|
||||
"narHash": "sha256-ypxFOeDz+CqADEQNL72haqGjvZQdBR5Vc7pyx2JDttI=",
|
||||
"lastModified": 1780952837,
|
||||
"narHash": "sha256-Fwd1+spDtQ0hDyBwme6ufG3n4mY0UrjjFdYHv+G/Hds=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "755f5aa91337890c432639c60b6064bb7fe67769",
|
||||
"rev": "e820eb4a444b46a19b2e03e8dfd2359439ff30fe",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -591,11 +594,11 @@
|
||||
},
|
||||
"nixpkgs-stable_2": {
|
||||
"locked": {
|
||||
"lastModified": 1777428379,
|
||||
"narHash": "sha256-ypxFOeDz+CqADEQNL72haqGjvZQdBR5Vc7pyx2JDttI=",
|
||||
"lastModified": 1780952837,
|
||||
"narHash": "sha256-Fwd1+spDtQ0hDyBwme6ufG3n4mY0UrjjFdYHv+G/Hds=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "755f5aa91337890c432639c60b6064bb7fe67769",
|
||||
"rev": "e820eb4a444b46a19b2e03e8dfd2359439ff30fe",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -605,6 +608,22 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_10": {
|
||||
"locked": {
|
||||
"lastModified": 1775710090,
|
||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1764242076,
|
||||
@ -623,11 +642,24 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1777268161,
|
||||
"narHash": "sha256-bxrdOn8SCOv8tN4JbTF/TXq7kjo9ag4M+C8yzzIRYbE=",
|
||||
"lastModified": 1767892417,
|
||||
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
|
||||
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
|
||||
"type": "tarball",
|
||||
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1781074563,
|
||||
"narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1c3fe55ad329cbcb28471bb30f05c9827f724c76",
|
||||
"rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -637,7 +669,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1768564909,
|
||||
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
|
||||
@ -653,39 +685,55 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1775710090,
|
||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1777268161,
|
||||
"narHash": "sha256-bxrdOn8SCOv8tN4JbTF/TXq7kjo9ag4M+C8yzzIRYbE=",
|
||||
"owner": "nixos",
|
||||
"lastModified": 1778443072,
|
||||
"narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1c3fe55ad329cbcb28471bb30f05c9827f724c76",
|
||||
"rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1781074563,
|
||||
"narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1780336545,
|
||||
"narHash": "sha256-vhVhuXzFrIOfcssC/9hDHx7MHzDKjF3keHuREOQqQiQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4df1b885d76a54e1aa1a318f8d16fd6005b6401f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1752077645,
|
||||
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
|
||||
@ -701,36 +749,18 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1775710090,
|
||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixvim": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs": "nixpkgs_8",
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777236345,
|
||||
"narHash": "sha256-ALOqlq7bE30lsX4rA76hXeQ2aLLEpb44hS+D1+jWS88=",
|
||||
"lastModified": 1781287460,
|
||||
"narHash": "sha256-9hXtN4my7eBqHRVQ/t6FQZ4YqZ1KG6SsKSG4Hdtr+i0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixvim",
|
||||
"rev": "a67d9cd6ff725a763afe88727aac73208ded3bf4",
|
||||
"rev": "f2029d9a26266eb67f46b0c79bd0a3713839a57a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -770,11 +800,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777624369,
|
||||
"narHash": "sha256-nQOSodcDhXiKlfCKb4pE/4GBAs2FnBOD+AHVem0EqOc=",
|
||||
"lastModified": 1781349989,
|
||||
"narHash": "sha256-PTgbtYdDqSzfANBCI8g0iA5DdMGr5imJuWUH1w0RmWY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "c3ec6b994c235a53a28304564da6422a45230603",
|
||||
"rev": "6b2f93e70e526d09559f73dfc3760d489a5504bf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -824,7 +854,7 @@
|
||||
"nix-alien": "nix-alien",
|
||||
"nix-darwin": "nix-darwin",
|
||||
"nix-flatpak": "nix-flatpak",
|
||||
"nixpkgs": "nixpkgs_6",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nixpkgs-stable": "nixpkgs-stable_2",
|
||||
"nixvim": "nixvim",
|
||||
"nps": "nps",
|
||||
@ -879,11 +909,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777338324,
|
||||
"narHash": "sha256-bc+ZZCmOTNq86/svGnw0tVpH7vJaLYvGLLKFYP08Q8E=",
|
||||
"lastModified": 1780547341,
|
||||
"narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "8eaee5c45428b28b8c47a83e4c09dccec5f279b5",
|
||||
"rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -924,15 +954,16 @@
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"lastModified": 1774449309,
|
||||
"narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"rev": "c29398b59d2048c4ab79345812849c9bd15e9150",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"ref": "future-26.11",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
@ -974,11 +1005,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777451299,
|
||||
"narHash": "sha256-Okqpw+zxAwHKXuuxlwYy9Ge9JUpnTbsMXqws2eOKfKo=",
|
||||
"lastModified": 1780405768,
|
||||
"narHash": "sha256-WhPHaupeq5yWP53anFH6vr/ZMQQtAYGtpgUhzqWx9Ws=",
|
||||
"owner": "adriankarlen",
|
||||
"repo": "textfox",
|
||||
"rev": "3af57df1ed3a38eb584475fd9e032d9643f2a94d",
|
||||
"rev": "d6895da75f10fa17f1b637759aec3d84818b20e2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -992,15 +1023,15 @@
|
||||
"elephant": [
|
||||
"elephant"
|
||||
],
|
||||
"nixpkgs": "nixpkgs_8",
|
||||
"nixpkgs": "nixpkgs_10",
|
||||
"systems": "systems_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777299395,
|
||||
"narHash": "sha256-ZoLkqwPVw8SdW+f9Raf15/ttyKqmC6vtKd5R+orNN/g=",
|
||||
"lastModified": 1781164128,
|
||||
"narHash": "sha256-xPcYrHdDXWykIi5/XXkLvliBArRnfzvs+atB9El1qhI=",
|
||||
"owner": "abenz1267",
|
||||
"repo": "walker",
|
||||
"rev": "7b0cb0fd1f8b0a60b241081483aea4277f0b4500",
|
||||
"rev": "aa1e4b7d59237e8c43dde58636bae476f23d9bfb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -1029,11 +1060,11 @@
|
||||
"xwayland-satellite-unstable": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1773622265,
|
||||
"narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=",
|
||||
"lastModified": 1781226823,
|
||||
"narHash": "sha256-28696iIw8uE0ZUyFTtzhEM8xMh85clCYypMxkvUi+sc=",
|
||||
"owner": "Supreeeme",
|
||||
"repo": "xwayland-satellite",
|
||||
"rev": "a879e5e0896a326adc79c474bf457b8b99011027",
|
||||
"rev": "8575d0ef55d70f9b4c46b6bffb3accf912217e1e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@ -64,7 +64,7 @@
|
||||
|
||||
# NeoVim <3
|
||||
nixvim.url = "github:nix-community/nixvim";
|
||||
nixvim.inputs.nixpkgs.follows = "nixpkgs";
|
||||
# nixvim.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
# Emacs nightly
|
||||
# emacs-overlay.url = "github:nix-community/emacs-overlay";
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
pkgs,
|
||||
nixosConfig,
|
||||
config,
|
||||
hostname,
|
||||
lib,
|
||||
mylib,
|
||||
username,
|
||||
@ -31,17 +32,199 @@
|
||||
mcp = {
|
||||
enable = true;
|
||||
servers = {
|
||||
nixos = {
|
||||
command = "uvx";
|
||||
args = ["mcp-nixos"];
|
||||
};
|
||||
svelte = {
|
||||
# claude mcp add -t stdio -s [scope] svelte -- npx -y @sveltejs/mcp
|
||||
args = [
|
||||
"-y"
|
||||
"@sveltejs/mcp"
|
||||
];
|
||||
command = "npx";
|
||||
# type = "stdio";
|
||||
args = ["-y" "@sveltejs/mcp"];
|
||||
type = "stdio";
|
||||
};
|
||||
shadcn = {
|
||||
# npx shadcn@latest mcp init --client claude
|
||||
command = "npx";
|
||||
args = ["-y" "shadcn@latest" "mcp"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
opencode = {
|
||||
enable = true;
|
||||
enableMcpIntegration = true;
|
||||
extraPackages = with pkgs; [
|
||||
# opencode-claude-auth # Installed using npm
|
||||
];
|
||||
|
||||
# Writes opencode.json
|
||||
settings = {
|
||||
attachment = {
|
||||
image = {
|
||||
auto_resize = true;
|
||||
max_width = 2000;
|
||||
max_height = 2000;
|
||||
max_base64_bytes = 5242880;
|
||||
};
|
||||
};
|
||||
autoupdate = false;
|
||||
compaction = {
|
||||
auto = true;
|
||||
prune = true;
|
||||
reserved = 10000;
|
||||
};
|
||||
default_agent = "plan";
|
||||
enabled_providers = [
|
||||
"opencode"
|
||||
"opencode-go"
|
||||
"anthropic"
|
||||
];
|
||||
formatter = {
|
||||
nixfmt = {
|
||||
disabled = true;
|
||||
};
|
||||
alejandra = {
|
||||
command = ["alejandra" "$FILE"];
|
||||
extensions = [".nix"];
|
||||
};
|
||||
perltidy = {
|
||||
command = ["perltidy" "$FILE"];
|
||||
extensions = [".pl"];
|
||||
};
|
||||
};
|
||||
lsp = {
|
||||
nixd = {
|
||||
command = ["nixd"];
|
||||
extensions = [".nix"];
|
||||
initialization = {
|
||||
preferences = {
|
||||
nixd = {
|
||||
nixpkgs = {expr = "import <nixpkgs> {}";};
|
||||
options = {
|
||||
nixos = {expr = "(builtins.getFlake \"/home/${username}/NixFlake\").nixosConfigurations.${hostname}.options";};
|
||||
home-manager = {expr = "(builtins.getFlake \"/home/${username}/NixFlake\").nixosConfigurations.\"${hostname}\".options.home-manager.users.type.getSubOptions []";};
|
||||
};
|
||||
diagnostic = {
|
||||
suppress = ["sema-escaping-with" "var-bind-to-this" "escaping-this-with"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
perlnavigator = {
|
||||
command = ["perlnavigator"];
|
||||
extensions = [".pl"];
|
||||
initialization = {
|
||||
preferences = {};
|
||||
};
|
||||
};
|
||||
# perlpls = {
|
||||
# command = ["pls"];
|
||||
# extensions = [".pl"];
|
||||
# initialization = {
|
||||
# preferences = {
|
||||
# perl = {
|
||||
# perlcritic = {enabled = false;};
|
||||
# syntax = {enabled = true;};
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
r-language-server = {
|
||||
command = ["R" "--no-echo" "-e" "languageserver::run()"];
|
||||
extensions = [".r" ".rmd" ".quarto"];
|
||||
};
|
||||
};
|
||||
permission = {
|
||||
"*" = "ask";
|
||||
"bash" = {
|
||||
"*" = "ask";
|
||||
"ls *" = "allow";
|
||||
"find *" = "ask"; # Don't want find -exec
|
||||
"file *" = "allow";
|
||||
"wc *" = "allow";
|
||||
"grep *" = "allow";
|
||||
"rg *" = "allow";
|
||||
"test *" = "allow";
|
||||
"echo *" = "allow";
|
||||
"which *" = "allow";
|
||||
"pwd *" = "allow";
|
||||
"dirname *" = "allow";
|
||||
"basename *" = "allow";
|
||||
"readlink *" = "allow";
|
||||
|
||||
"cat *.env" = "deny";
|
||||
"cat *.env.*" = "deny";
|
||||
"cat *.env.example" = "allow";
|
||||
"printenv *" = "deny";
|
||||
"env *" = "deny";
|
||||
|
||||
"nix eval *" = "allow";
|
||||
"nix flake metadata *" = "allow";
|
||||
"nix flake show *" = "allow";
|
||||
"nix path-info *" = "allow";
|
||||
"nix why-depends *" = "allow";
|
||||
"nix derivation show *" = "allow";
|
||||
"nix store ping *" = "allow";
|
||||
"nix stire diff-closures *" = "allow";
|
||||
|
||||
"git status *" = "allow";
|
||||
"git log *" = "allow";
|
||||
"git diff *" = "allow";
|
||||
};
|
||||
"external_directory" = {
|
||||
"/nix/store/**" = "allow";
|
||||
"/tmp" = "allow";
|
||||
"/tmp/*" = "allow";
|
||||
};
|
||||
"read" = {
|
||||
"*" = "allow";
|
||||
"*.env" = "deny";
|
||||
"*.env.*" = "deny";
|
||||
"*.env.example" = "allow";
|
||||
};
|
||||
"grep" = "allow";
|
||||
"glob" = "allow";
|
||||
"lsp" = "allow";
|
||||
"skill" = "allow";
|
||||
"task" = "ask";
|
||||
"todowrite" = "allow";
|
||||
"webfetch" = "allow";
|
||||
"websearch" = "allow";
|
||||
"question" = "allow";
|
||||
};
|
||||
plugin = [
|
||||
"opencode-claude-auth@latest" # https://github.com/griffinmartin/opencode-claude-auth
|
||||
"@tarquinen/opencode-dcp@latest" # better compacting
|
||||
# "@slkiser/opencode-quota"
|
||||
];
|
||||
share = "disabled";
|
||||
shell = "fish";
|
||||
snapshot = false;
|
||||
watcher = {
|
||||
ignore = ["node_modules/**" "dist/**" ".git/**"];
|
||||
};
|
||||
};
|
||||
|
||||
# Writes tui.json
|
||||
tui = {
|
||||
theme = "system";
|
||||
diff_style = "auto";
|
||||
mouse = true;
|
||||
attention = {
|
||||
enabled = true;
|
||||
notifications = true;
|
||||
sound = true;
|
||||
volume = "0.3";
|
||||
};
|
||||
};
|
||||
|
||||
agents = {};
|
||||
commands = {};
|
||||
context = '''';
|
||||
skills = {};
|
||||
tools = {};
|
||||
};
|
||||
};
|
||||
|
||||
home = let
|
||||
|
||||
@ -83,6 +83,9 @@ in {
|
||||
stylua
|
||||
tombi
|
||||
typstyle
|
||||
|
||||
nodejs_latest
|
||||
uv
|
||||
])
|
||||
|
||||
[
|
||||
@ -97,6 +100,7 @@ in {
|
||||
(perl.withPackages (p:
|
||||
with p; [
|
||||
PLS
|
||||
PerlCritic
|
||||
PerlTidy
|
||||
NetOpenSSH
|
||||
DateTime
|
||||
@ -131,6 +135,9 @@ in {
|
||||
readr
|
||||
tibble
|
||||
svglite
|
||||
dplyr
|
||||
tidyr
|
||||
scales
|
||||
];
|
||||
})
|
||||
|
||||
@ -141,6 +148,8 @@ in {
|
||||
};
|
||||
|
||||
programs.nixvim = {
|
||||
# nixpkgs.pkgs = pkgs;
|
||||
|
||||
defaultEditor = true;
|
||||
enable = true;
|
||||
enableMan = false; # Nixvim man pages
|
||||
@ -163,7 +172,7 @@ in {
|
||||
performance.byteCompileLua = {
|
||||
enable = true;
|
||||
configs = true;
|
||||
initLua = false; # When debugging init.lua turn this off
|
||||
initLua = true; # When debugging init.lua turn this off
|
||||
nvimRuntime = true;
|
||||
plugins = true;
|
||||
};
|
||||
@ -299,6 +308,15 @@ in {
|
||||
require("${name}").setup(opts)
|
||||
end
|
||||
'';
|
||||
|
||||
# Like mkDefaultConfig but takes the Lua module name explicitly.
|
||||
# Use when the Lua module name (e.g. "noice") differs from what
|
||||
# lazy.nvim expects as the plugin name (e.g. "noice.nvim").
|
||||
mkDefaultConfigFor = moduleName: ''
|
||||
function(_, opts)
|
||||
require("${moduleName}").setup(opts)
|
||||
end
|
||||
'';
|
||||
in {
|
||||
enable = true;
|
||||
|
||||
@ -1103,6 +1121,7 @@ in {
|
||||
pkg = pkgs.vimPlugins.lualine-nvim;
|
||||
lazy = true;
|
||||
event = ["BufReadPost" "BufNewFile"];
|
||||
# dependencies = [opencode];
|
||||
config = ''
|
||||
function(_, opts)
|
||||
local lualine = require("lualine")
|
||||
@ -1202,6 +1221,7 @@ in {
|
||||
lualine_c.__raw = ''{}''; # Use __raw: Nixvim does nothing with "[]", so the default config would be used
|
||||
|
||||
lualine_x.__raw = ''{}'';
|
||||
# lualine_x.__raw = ''{ { require("opencode").statusline, }, }'';
|
||||
lualine_y = ["filetype" "encoding" "fileformat"];
|
||||
lualine_z.__raw = ''{ { "location", separator = {}, } }'';
|
||||
};
|
||||
@ -1367,19 +1387,19 @@ in {
|
||||
};
|
||||
|
||||
_nui = {
|
||||
name = "nui"; # For noice
|
||||
name = "nui.nvim";
|
||||
pkg = pkgs.vimPlugins.nui-nvim;
|
||||
lazy = true;
|
||||
};
|
||||
|
||||
noice = rec {
|
||||
name = "noice";
|
||||
name = "noice.nvim";
|
||||
pkg = pkgs.vimPlugins.noice-nvim;
|
||||
lazy = false;
|
||||
dependencies = [
|
||||
_nui
|
||||
];
|
||||
config = mkDefaultConfig name;
|
||||
config = mkDefaultConfigFor "noice";
|
||||
opts = {
|
||||
presets = {
|
||||
bottom_search = false;
|
||||
@ -1441,6 +1461,32 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
opencode = {
|
||||
name = "opencode";
|
||||
pkg = pkgs.vimPlugins.opencode-nvim;
|
||||
lazy = false;
|
||||
config = ''
|
||||
function()
|
||||
vim.g.opencode_opts = {
|
||||
server = {
|
||||
url = "http://localhost:12345",
|
||||
start = false,
|
||||
},
|
||||
events = {
|
||||
permissions = {
|
||||
edits = {
|
||||
-- Disable neovim diff popup tab
|
||||
enabled = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
vim.o.autoread = true -- Required for `vim.g.opencode_opts.events.reload`
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
# obsidian = rec {
|
||||
# name = "obsidian";
|
||||
# pkg = pkgs.vimPlugins.obsidian-nvim;
|
||||
@ -1665,7 +1711,7 @@ in {
|
||||
gitbrowse.enabled = false;
|
||||
image.enabled = false;
|
||||
indent.enabled = false;
|
||||
input.enabled = false;
|
||||
input.enabled = true;
|
||||
keymap.enabled = false;
|
||||
layout.enabled = false;
|
||||
lazygit.enabled = true;
|
||||
@ -1701,6 +1747,20 @@ in {
|
||||
truncate = 80;
|
||||
};
|
||||
};
|
||||
|
||||
actions = {
|
||||
opencode_send.__raw = ''
|
||||
function(picker)
|
||||
local items = vim.tbl_map(function(item)
|
||||
return item.file
|
||||
and require("opencode").format({ path = item.file, from = item.pos, to = item.end_pos })
|
||||
or item.text
|
||||
end, picker:selected({ fallback = true }))
|
||||
|
||||
require("opencode").prompt(table.concat(items, ", ") .. " ")
|
||||
end
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
profiler.enabled = false;
|
||||
@ -1771,7 +1831,7 @@ in {
|
||||
};
|
||||
|
||||
_plenary = {
|
||||
name = "plenary";
|
||||
name = "plenary.nvim";
|
||||
pkg = pkgs.vimPlugins.plenary-nvim;
|
||||
lazy = true;
|
||||
};
|
||||
@ -2190,12 +2250,12 @@ in {
|
||||
};
|
||||
|
||||
yazi = rec {
|
||||
name = "yazi";
|
||||
name = "yazi.nvim";
|
||||
pkg = pkgs.vimPlugins.yazi-nvim;
|
||||
lazy = true;
|
||||
event = ["VeryLazy"];
|
||||
dependencies = [_plenary];
|
||||
config = mkDefaultConfig name;
|
||||
config = mkDefaultConfigFor "yazi";
|
||||
opts = {
|
||||
open_for_directories = true;
|
||||
highlight_hovered_buffers_in_same_directory = false;
|
||||
@ -2257,6 +2317,7 @@ in {
|
||||
noice # Modern UI overhaul, e.g. floating cmdline
|
||||
# obsidian # Integration with Obsidian.md
|
||||
|
||||
opencode # TODO: Doesn't work, can't find "opencode --port" process
|
||||
# overseer # Run tasks from within neovim (e.g. cargo) # TODO:
|
||||
|
||||
persisted # Session management
|
||||
|
||||
@ -415,6 +415,58 @@ _: let
|
||||
}
|
||||
];
|
||||
|
||||
leader-opencode = [
|
||||
{
|
||||
mode = ["n" "v"];
|
||||
key = "<leader>o";
|
||||
action = "+opencode";
|
||||
}
|
||||
{
|
||||
mode = ["n" "v"];
|
||||
key = "<leader>oo";
|
||||
action.__raw = ''function() require("opencode").ask("@this: ") end'';
|
||||
options.desc = "Ask about @this";
|
||||
}
|
||||
{
|
||||
mode = ["n" "v"];
|
||||
key = "<leader>od";
|
||||
action.__raw = ''function() require("opencode").prompt("Explain @diagnostics") end'';
|
||||
options.desc = "Explain @diagnostics";
|
||||
}
|
||||
{
|
||||
mode = ["n" "v"];
|
||||
key = "<leader>oe";
|
||||
action.__raw = ''function() require("opencode").prompt("Explain @this and its context") end'';
|
||||
options.desc = "Explain @this";
|
||||
}
|
||||
{
|
||||
mode = ["n" "v"];
|
||||
key = "<leader>or";
|
||||
action.__raw = ''function() require("opencode").prompt("Review @this for correctness and readability") end'';
|
||||
options.desc = "Review @this";
|
||||
}
|
||||
{
|
||||
mode = ["n" "v"];
|
||||
key = "<leader>os";
|
||||
action.__raw = ''function() require("opencode").select() end'';
|
||||
options.desc = "Select Action";
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<leader>oa";
|
||||
action.__raw = ''function() return require("opencode").operator("@this ") .. "_" end'';
|
||||
options.desc = "Append Line to Prompt";
|
||||
options.expr = true;
|
||||
}
|
||||
{
|
||||
mode = "v";
|
||||
key = "<leader>oa";
|
||||
action.__raw = ''function() return require("opencode").operator("@this ") end'';
|
||||
options.desc = "Append Range to Prompt";
|
||||
options.expr = true;
|
||||
}
|
||||
];
|
||||
|
||||
leader-file = [
|
||||
{
|
||||
mode = "n";
|
||||
@ -1005,6 +1057,7 @@ in
|
||||
no-leader
|
||||
|
||||
leader
|
||||
leader-opencode
|
||||
leader-file
|
||||
leader-help
|
||||
leader-quit
|
||||
|
||||
@ -53,8 +53,16 @@ in {
|
||||
in
|
||||
gtkConfig
|
||||
// {
|
||||
gtk3 = gtkConfig // {extraConfig = gtkExtraConfig;};
|
||||
gtk4 = gtkConfig // {extraConfig = gtkExtraConfig;};
|
||||
gtk3 =
|
||||
gtkConfig
|
||||
// {
|
||||
extraConfig = gtkExtraConfig;
|
||||
};
|
||||
gtk4 =
|
||||
gtkConfig
|
||||
// {
|
||||
extraConfig = gtkExtraConfig;
|
||||
};
|
||||
};
|
||||
|
||||
dconf = {
|
||||
@ -453,10 +461,27 @@ in {
|
||||
prefer-no-csd = true; # Disable client-side decorations (e.g. window titlebars)
|
||||
|
||||
spawn-at-startup = [
|
||||
{argv = ["ashell" "-c" "${config.paths.dotfiles}/ashell/config.toml"];}
|
||||
{argv = ["waypaper" "--restore"];}
|
||||
{
|
||||
argv = [
|
||||
"ashell"
|
||||
"-c"
|
||||
"${config.paths.dotfiles}/ashell/config.toml"
|
||||
];
|
||||
}
|
||||
{
|
||||
argv = [
|
||||
"waypaper"
|
||||
"--restore"
|
||||
];
|
||||
}
|
||||
|
||||
{argv = ["kitty" "--hold" "fastfetch"];}
|
||||
{
|
||||
argv = [
|
||||
"kitty"
|
||||
"--hold"
|
||||
"fastfetch"
|
||||
];
|
||||
}
|
||||
{argv = ["fcitx5"];}
|
||||
# {argv = ["zeal"];}
|
||||
# {argv = ["protonvpn-app"];}
|
||||
@ -467,16 +492,36 @@ in {
|
||||
];
|
||||
|
||||
workspaces = {
|
||||
"1" = {open-on-output = "DP-1";};
|
||||
"2" = {open-on-output = "DP-1";};
|
||||
"3" = {open-on-output = "DP-1";};
|
||||
"4" = {open-on-output = "DP-1";};
|
||||
"5" = {open-on-output = "DP-1";};
|
||||
"6" = {open-on-output = "DP-1";};
|
||||
"7" = {open-on-output = "DP-1";};
|
||||
"8" = {open-on-output = "DP-1";};
|
||||
"9" = {open-on-output = "DP-1";};
|
||||
"10" = {open-on-output = "DP-2";};
|
||||
"1" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"2" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"3" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"4" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"5" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"6" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"7" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"8" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"9" = {
|
||||
open-on-output = "DP-1";
|
||||
};
|
||||
"10" = {
|
||||
open-on-output = "DP-2";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = {
|
||||
@ -517,8 +562,12 @@ in {
|
||||
border = {
|
||||
enable = true;
|
||||
width = 2;
|
||||
active = {color = color.hex.accent;};
|
||||
inactive = {color = color.hex.base;};
|
||||
active = {
|
||||
color = color.hex.accent;
|
||||
};
|
||||
inactive = {
|
||||
color = color.hex.base;
|
||||
};
|
||||
};
|
||||
|
||||
# This border is drawn OUTSIDE of the focused window
|
||||
@ -529,7 +578,9 @@ in {
|
||||
# Hint where a dragged window will be inserted
|
||||
insert-hint = {
|
||||
enable = true;
|
||||
display = {color = color.hex.accentDim;};
|
||||
display = {
|
||||
color = color.hex.accentDim;
|
||||
};
|
||||
};
|
||||
|
||||
always-center-single-column = true;
|
||||
@ -552,7 +603,9 @@ in {
|
||||
};
|
||||
|
||||
gestures = {
|
||||
hot-corners = {enable = false;};
|
||||
hot-corners = {
|
||||
enable = false;
|
||||
};
|
||||
};
|
||||
|
||||
window-rules = [
|
||||
@ -616,16 +669,16 @@ in {
|
||||
|
||||
# Rules for specific windows
|
||||
{
|
||||
matches = [{app-id = "neovide";}];
|
||||
matches = [
|
||||
{app-id = "neovide";}
|
||||
{app-id = "dev.zed.Zed";}
|
||||
{app-id = "code";}
|
||||
{app-id = "jetbrains-clion";}
|
||||
];
|
||||
open-on-workspace = "2";
|
||||
open-maximized = true;
|
||||
open-focused = true;
|
||||
}
|
||||
{
|
||||
matches = [{app-id = "jetbrains-clion";}];
|
||||
open-on-workspace = "2";
|
||||
open-maximized = true;
|
||||
}
|
||||
{
|
||||
matches = [{app-id = "code-url-handler";}];
|
||||
open-on-workspace = "2";
|
||||
@ -703,6 +756,14 @@ in {
|
||||
draw-behind-window = true;
|
||||
};
|
||||
}
|
||||
# TODO: Missing niri-flake update
|
||||
# {
|
||||
# matches = [{namespace = "walker";}];
|
||||
#
|
||||
# background-effect = {
|
||||
# blur = true;
|
||||
# };
|
||||
# }
|
||||
];
|
||||
|
||||
debug = {
|
||||
@ -785,69 +846,101 @@ in {
|
||||
# DMenu
|
||||
"Mod+Shift+A" = {
|
||||
action = spawn "walker" "-m" "providerlist";
|
||||
hotkey-overlay = {title = "Toggle the launcher.";};
|
||||
hotkey-overlay = {
|
||||
title = "Toggle the launcher.";
|
||||
};
|
||||
};
|
||||
"Mod+A" = {
|
||||
action = spawn "walker" "-m" "desktopapplications";
|
||||
hotkey-overlay = {title = "Toggle the application launcher.";};
|
||||
hotkey-overlay = {
|
||||
title = "Toggle the application launcher.";
|
||||
};
|
||||
};
|
||||
"Mod+C" = {
|
||||
action = spawn "walker" "-m" "clipboard";
|
||||
hotkey-overlay = {title = "Show clipboard history.";};
|
||||
hotkey-overlay = {
|
||||
title = "Show clipboard history.";
|
||||
};
|
||||
};
|
||||
"Mod+Escape" = {
|
||||
action = spawn "${sessionMenu}/bin/rofi-menu-Session";
|
||||
hotkey-overlay = {title = "Toggle the session menu.";};
|
||||
hotkey-overlay = {
|
||||
title = "Toggle the session menu.";
|
||||
};
|
||||
};
|
||||
"Mod+W" = {
|
||||
action = spawn "${wallpaperMenu}/bin/rofi-menu-Wallpaper";
|
||||
hotkey-overlay = {title = "Open wallpaper menu.";};
|
||||
hotkey-overlay = {
|
||||
title = "Open wallpaper menu.";
|
||||
};
|
||||
};
|
||||
"Mod+D" = {
|
||||
action = spawn "${globalMenu}/bin/rofi-menu-Global";
|
||||
hotkey-overlay = {title = "Open global menu.";};
|
||||
hotkey-overlay = {
|
||||
title = "Open global menu.";
|
||||
};
|
||||
};
|
||||
|
||||
# Applications
|
||||
"Mod+Ctrl+W" = {
|
||||
action = spawn "waypaper";
|
||||
hotkey-overlay = {title = "Open waypaper.";};
|
||||
hotkey-overlay = {
|
||||
title = "Open waypaper.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+W" = {
|
||||
action = spawn "waypaper" "--random";
|
||||
hotkey-overlay = {title = "Select random wallpaper.";};
|
||||
hotkey-overlay = {
|
||||
title = "Select random wallpaper.";
|
||||
};
|
||||
};
|
||||
"Mod+T" = {
|
||||
action = spawn "kitty";
|
||||
hotkey-overlay = {title = "Spawn Kitty.";};
|
||||
hotkey-overlay = {
|
||||
title = "Spawn Kitty.";
|
||||
};
|
||||
};
|
||||
"Mod+E" = {
|
||||
action = spawn "kitty" "--title=Yazi" "yazi";
|
||||
hotkey-overlay = {title = "Spawn Yazi.";};
|
||||
hotkey-overlay = {
|
||||
title = "Spawn Yazi.";
|
||||
};
|
||||
};
|
||||
"Mod+B" = {
|
||||
action = spawn "kitty" "--title=Btop" "btop";
|
||||
hotkey-overlay = {title = "Spawn Btop.";};
|
||||
hotkey-overlay = {
|
||||
title = "Spawn Btop.";
|
||||
};
|
||||
};
|
||||
"Mod+R" = {
|
||||
action = spawn "kitty" "--title=Rmpc" "rmpc";
|
||||
hotkey-overlay = {title = "Spawn Rmpc.";};
|
||||
hotkey-overlay = {
|
||||
title = "Spawn Rmpc.";
|
||||
};
|
||||
};
|
||||
"Mod+N" = {
|
||||
action = spawn "neovide";
|
||||
hotkey-overlay = {title = "Spawn Neovide.";};
|
||||
hotkey-overlay = {
|
||||
title = "Spawn Neovide.";
|
||||
};
|
||||
};
|
||||
"Mod+Ctrl+N" = {
|
||||
action = spawn "kitty" "--title=Navi" "navi";
|
||||
hotkey-overlay = {title = "Call Navi for help.";};
|
||||
hotkey-overlay = {
|
||||
title = "Call Navi for help.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+N" = {
|
||||
action = spawn "neovide" "${config.paths.dotfiles}/navi/christoph.cheat";
|
||||
hotkey-overlay = {title = "Edit the Navi cheats.";};
|
||||
hotkey-overlay = {
|
||||
title = "Edit the Navi cheats.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+F" = {
|
||||
action = spawn "neovide" "${config.paths.dotfiles}/flake.nix";
|
||||
hotkey-overlay = {title = "Edit the NixFlake.";};
|
||||
hotkey-overlay = {
|
||||
title = "Edit the NixFlake.";
|
||||
};
|
||||
};
|
||||
|
||||
# Screenshots
|
||||
@ -856,24 +949,34 @@ in {
|
||||
write-to-disk = true;
|
||||
show-pointer = false;
|
||||
};
|
||||
hotkey-overlay = {title = "Take a screenshot of the current window.";};
|
||||
hotkey-overlay = {
|
||||
title = "Take a screenshot of the current window.";
|
||||
};
|
||||
};
|
||||
"Mod+Ctrl+S" = {
|
||||
action.screenshot-screen = {
|
||||
write-to-disk = true;
|
||||
show-pointer = false;
|
||||
};
|
||||
hotkey-overlay = {title = "Take a screenshot of the current screen.";};
|
||||
hotkey-overlay = {
|
||||
title = "Take a screenshot of the current screen.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+S" = {
|
||||
action.screenshot = {show-pointer = false;};
|
||||
hotkey-overlay = {title = "Take a screenshot of a region.";};
|
||||
action.screenshot = {
|
||||
show-pointer = false;
|
||||
};
|
||||
hotkey-overlay = {
|
||||
title = "Take a screenshot of a region.";
|
||||
};
|
||||
};
|
||||
|
||||
# Niri
|
||||
"Mod+Shift+Slash" = {
|
||||
action = show-hotkey-overlay;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
# "Alt+Tab" = {
|
||||
# action = "next-window";
|
||||
@ -887,191 +990,283 @@ in {
|
||||
# Audio
|
||||
"XF86AudioRaiseVolume" = {
|
||||
action = spawn "wpctl" "set-volume" "-l" "1.5" "@DEFAULT_AUDIO_SINK@" "5%+";
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"XF86AudioLowerVolume" = {
|
||||
action = spawn "wpctl" "set-volume" "-l" "1.5" "@DEFAULT_AUDIO_SINK@" "5%-";
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"XF86AudioPlay" = {
|
||||
action = spawn "playerctl" "play-pause";
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"XF86AudioPrev" = {
|
||||
action = spawn "playerctl" "previous";
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"XF86AudioNext" = {
|
||||
action = spawn "playerctl" "next";
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Niri windows
|
||||
"Mod+Q" = {
|
||||
action = close-window;
|
||||
hotkey-overlay = {title = "Close the current window.";};
|
||||
hotkey-overlay = {
|
||||
title = "Close the current window.";
|
||||
};
|
||||
};
|
||||
"Mod+F" = {
|
||||
action = fullscreen-window;
|
||||
hotkey-overlay = {title = "Toggle between fullscreen and tiled window.";};
|
||||
hotkey-overlay = {
|
||||
title = "Toggle between fullscreen and tiled window.";
|
||||
};
|
||||
};
|
||||
"Mod+Equal" = {
|
||||
action = set-column-width "+10%";
|
||||
hotkey-overlay = {title = "Increase column width";};
|
||||
hotkey-overlay = {
|
||||
title = "Increase column width";
|
||||
};
|
||||
};
|
||||
"Mod+Minus" = {
|
||||
action = set-column-width "-10%";
|
||||
hotkey-overlay = {title = "Decrease column width";};
|
||||
hotkey-overlay = {
|
||||
title = "Decrease column width";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+M" = {
|
||||
action = set-column-width "50%";
|
||||
hotkey-overlay = {title = "Set column width to 50%";};
|
||||
hotkey-overlay = {
|
||||
title = "Set column width to 50%";
|
||||
};
|
||||
};
|
||||
"Mod+M" = {
|
||||
action = maximize-column;
|
||||
hotkey-overlay = {title = "Maximize column.";};
|
||||
hotkey-overlay = {
|
||||
title = "Maximize column.";
|
||||
};
|
||||
};
|
||||
"Mod+Comma" = {
|
||||
action = reset-window-height;
|
||||
hotkey-overlay = {title = "Reset window height.";};
|
||||
hotkey-overlay = {
|
||||
title = "Reset window height.";
|
||||
};
|
||||
};
|
||||
"Mod+V" = {
|
||||
action = toggle-window-floating;
|
||||
hotkey-overlay = {title = "Toggle between floating and tiled window.";};
|
||||
hotkey-overlay = {
|
||||
title = "Toggle between floating and tiled window.";
|
||||
};
|
||||
};
|
||||
"Mod+O" = {
|
||||
action = toggle-overview;
|
||||
hotkey-overlay = {title = "Toggle overlay.";};
|
||||
hotkey-overlay = {
|
||||
title = "Toggle overlay.";
|
||||
};
|
||||
};
|
||||
"Mod+H" = {
|
||||
action = focus-column-or-monitor-left;
|
||||
hotkey-overlay = {title = "Focus column on the left. Equivalent bindings for other directions.";};
|
||||
hotkey-overlay = {
|
||||
title = "Focus column on the left. Equivalent bindings for other directions.";
|
||||
};
|
||||
};
|
||||
"Mod+J" = {
|
||||
action = focus-window-or-workspace-down;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+K" = {
|
||||
action = focus-window-or-workspace-up;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+L" = {
|
||||
action = focus-column-or-monitor-right;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+WheelScrollUp" = {
|
||||
action = focus-column-left;
|
||||
hotkey-overlay = {title = "Focus column on the left. Equivalent binding for other direction.";};
|
||||
hotkey-overlay = {
|
||||
title = "Focus column on the left. Equivalent binding for other direction.";
|
||||
};
|
||||
};
|
||||
"Mod+WheelScrollDown" = {
|
||||
action = focus-column-right;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+WheelScrollUp" = {
|
||||
action = focus-workspace-up;
|
||||
hotkey-overlay = {title = "Focus previous workspace. Equivalent binding for other direction.";};
|
||||
hotkey-overlay = {
|
||||
title = "Focus previous workspace. Equivalent binding for other direction.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+WheelScrollDown" = {
|
||||
action = focus-workspace-down;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+H" = {
|
||||
action = move-column-left-or-to-monitor-left;
|
||||
hotkey-overlay = {title = "Move column to the left. Equivalent bindings for other directions.";};
|
||||
hotkey-overlay = {
|
||||
title = "Move column to the left. Equivalent bindings for other directions.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+J" = {
|
||||
action = move-window-down-or-to-workspace-down;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+K" = {
|
||||
action = move-window-up-or-to-workspace-up;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+L" = {
|
||||
action = move-column-right-or-to-monitor-right;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Niri workspaces
|
||||
"Mod+1" = {
|
||||
action = focus-workspace 1;
|
||||
hotkey-overlay = {title = "Focus workspace 1. Equivalent bindings for other workspaces.";};
|
||||
hotkey-overlay = {
|
||||
title = "Focus workspace 1. Equivalent bindings for other workspaces.";
|
||||
};
|
||||
};
|
||||
"Mod+2" = {
|
||||
action = focus-workspace 2;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+3" = {
|
||||
action = focus-workspace 3;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+4" = {
|
||||
action = focus-workspace 4;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+5" = {
|
||||
action = focus-workspace 5;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+6" = {
|
||||
action = focus-workspace 6;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+7" = {
|
||||
action = focus-workspace 7;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+8" = {
|
||||
action = focus-workspace 8;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+9" = {
|
||||
action = focus-workspace 9;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+0" = {
|
||||
action = focus-workspace 10;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+1" = {
|
||||
action.move-window-to-workspace = 1;
|
||||
hotkey-overlay = {title = "Move current window to workspace 1. Equivalent bindings for other workspaces.";};
|
||||
hotkey-overlay = {
|
||||
title = "Move current window to workspace 1. Equivalent bindings for other workspaces.";
|
||||
};
|
||||
};
|
||||
"Mod+Shift+2" = {
|
||||
action.move-window-to-workspace = 2;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+3" = {
|
||||
action.move-window-to-workspace = 3;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+4" = {
|
||||
action.move-window-to-workspace = 4;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+5" = {
|
||||
action.move-window-to-workspace = 5;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+6" = {
|
||||
action.move-window-to-workspace = 6;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+7" = {
|
||||
action.move-window-to-workspace = 7;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+8" = {
|
||||
action.move-window-to-workspace = 8;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+9" = {
|
||||
action.move-window-to-workspace = 9;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
"Mod+Shift+0" = {
|
||||
action.move-window-to-workspace = 10;
|
||||
hotkey-overlay = {hidden = true;};
|
||||
hotkey-overlay = {
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -160,6 +160,8 @@ in {
|
||||
czkawka-full # file deduplicator
|
||||
binaryninja-free # reverse engineering
|
||||
tableplus # database explorer
|
||||
# opencode-desktop
|
||||
lmstudio # TODO: Ollama
|
||||
|
||||
# Office
|
||||
kdePackages.wacomtablet # For xournalpp/krita
|
||||
|
||||
@ -15,44 +15,44 @@ in {
|
||||
enable = true;
|
||||
enableDefaultConfig = false;
|
||||
|
||||
matchBlocks = {
|
||||
settings = {
|
||||
"*" = {
|
||||
forwardAgent = false;
|
||||
addKeysToAgent =
|
||||
ForwardAgent = false;
|
||||
AddKeysToAgent =
|
||||
if pkgs.stdenv.isLinux
|
||||
then "no"
|
||||
else "yes"; # Don't have keychain on darwin
|
||||
compression = true;
|
||||
serverAliveInterval = 0;
|
||||
serverAliveCountMax = 3;
|
||||
hashKnownHosts = false;
|
||||
userKnownHostsFile = "~/.ssh/known_hosts";
|
||||
controlMaster = "no";
|
||||
controlPath = "~/.ssh/master-%r@%n:%p";
|
||||
controlPersist = "no";
|
||||
Compression = true;
|
||||
ServerAliveInterval = 0;
|
||||
ServerAliveCountMax = 3;
|
||||
HashKnownHosts = false;
|
||||
UserKnownHostsFile = "~/.ssh/known_hosts";
|
||||
ControlMaster = "no";
|
||||
ControlPath = "~/.ssh/master-%r@%n:%p";
|
||||
ControlPersist = "no";
|
||||
};
|
||||
"nixinator" = {
|
||||
port = 5432;
|
||||
user = "christoph";
|
||||
hostname = "vps.chriphost.de";
|
||||
Port = 5432;
|
||||
User = "christoph";
|
||||
HostName = "vps.chriphost.de";
|
||||
};
|
||||
"servenix" = {
|
||||
user = "christoph";
|
||||
hostname = "local.chriphost.de";
|
||||
User = "christoph";
|
||||
HostName = "local.chriphost.de";
|
||||
};
|
||||
"thinknix" = {
|
||||
user = "christoph";
|
||||
hostname = "think.chriphost.de";
|
||||
User = "christoph";
|
||||
HostName = "think.chriphost.de";
|
||||
};
|
||||
"vps" = {
|
||||
user = "root";
|
||||
hostname = "vps.chriphost.de";
|
||||
User = "root";
|
||||
HostName = "vps.chriphost.de";
|
||||
};
|
||||
"mars" = {
|
||||
user = "smchurla";
|
||||
hostname = "mars.cs.tu-dortmund.de";
|
||||
serverAliveInterval = 60;
|
||||
localForwards = [
|
||||
User = "smchurla";
|
||||
HostName = "mars.cs.tu-dortmund.de";
|
||||
ServerAliveInterval = 60;
|
||||
LocalForward = [
|
||||
{
|
||||
# Resultbrowser
|
||||
bind.port = 22941;
|
||||
|
||||
@ -38,6 +38,7 @@ in {
|
||||
ms-vscode-remote.remote-ssh
|
||||
ms-vscode-remote.remote-ssh-edit
|
||||
ms-vscode.remote-explorer
|
||||
anthropic.claude-code
|
||||
|
||||
# Python
|
||||
ms-python.python
|
||||
|
||||
@ -17,7 +17,19 @@ in {
|
||||
shellWrapperName = "y";
|
||||
|
||||
plugins = {
|
||||
inherit (pkgs.yaziPlugins) chmod diff full-border git lazygit mount ouch rsync starship sudo; # smart-paste
|
||||
inherit
|
||||
(pkgs.yaziPlugins)
|
||||
chmod
|
||||
diff
|
||||
full-border
|
||||
git
|
||||
lazygit
|
||||
mount
|
||||
ouch
|
||||
rsync
|
||||
starship
|
||||
sudo
|
||||
; # smart-paste
|
||||
};
|
||||
|
||||
initLua = ''
|
||||
@ -70,7 +82,12 @@ in {
|
||||
{
|
||||
run = ''mpv "$@"'';
|
||||
orphan = true;
|
||||
desc = "Play selection";
|
||||
desc = "Play selection with mpv";
|
||||
}
|
||||
{
|
||||
run = ''vlc "$@"'';
|
||||
orphan = true;
|
||||
desc = "Play selection with vlc";
|
||||
}
|
||||
];
|
||||
edit = [
|
||||
@ -83,12 +100,16 @@ in {
|
||||
open = [
|
||||
{
|
||||
run = ''xdg-open "$@"'';
|
||||
desc = "Open selection";
|
||||
desc = "Open selection with xdg-open";
|
||||
}
|
||||
{
|
||||
run = ''imv "$@"'';
|
||||
desc = "Open selection with imv";
|
||||
}
|
||||
{
|
||||
# TODO: For some reason, junction does not exit after choosing an application...
|
||||
run = ''junction "$@"'';
|
||||
desc = "Open selection in chosen application";
|
||||
desc = "Open selection with junction";
|
||||
}
|
||||
];
|
||||
extract = [
|
||||
@ -106,13 +127,13 @@ in {
|
||||
|
||||
plugin.prepend_fetchers = [
|
||||
{
|
||||
id = "git";
|
||||
name = "*";
|
||||
group = "git";
|
||||
url = "*";
|
||||
run = "git";
|
||||
}
|
||||
{
|
||||
id = "git";
|
||||
name = "*/";
|
||||
group = "git";
|
||||
url = "*/";
|
||||
run = "git";
|
||||
}
|
||||
];
|
||||
@ -162,42 +183,66 @@ in {
|
||||
|
||||
mgr.prepend_keymap = [
|
||||
{
|
||||
on = ["<C-p>" "m"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"m"
|
||||
];
|
||||
run = "plugin mount";
|
||||
desc = "Manage device mounts";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "c"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"c"
|
||||
];
|
||||
run = "plugin chmod";
|
||||
desc = "Chmod selection";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "g"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"g"
|
||||
];
|
||||
run = "plugin lazygit";
|
||||
desc = "Run LazyGit";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "a"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"a"
|
||||
];
|
||||
run = "plugin ouch";
|
||||
desc = "Add selection to archive";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "d"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"d"
|
||||
];
|
||||
run = ''shell -- ripdrag -a -n "$@"'';
|
||||
desc = "Drag & drop selection";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "D"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"D"
|
||||
];
|
||||
run = "plugin diff";
|
||||
desc = "Diff the selected with the hovered file";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "r"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"r"
|
||||
];
|
||||
run = "plugin rsync";
|
||||
desc = "Copy files using rsync";
|
||||
}
|
||||
{
|
||||
on = ["<C-p>" "w"];
|
||||
on = [
|
||||
"<C-p>"
|
||||
"w"
|
||||
];
|
||||
run = ''wl-copy < "$0"'';
|
||||
desc = "Copy hovered file contents using wl-copy";
|
||||
}
|
||||
@ -209,7 +254,10 @@ in {
|
||||
}
|
||||
{
|
||||
on = "y";
|
||||
run = [''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' "yank"];
|
||||
run = [
|
||||
''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list''
|
||||
"yank"
|
||||
];
|
||||
desc = "Copy files to system clipboard on yank";
|
||||
}
|
||||
# {
|
||||
@ -228,7 +276,9 @@ in {
|
||||
# https://github.com/catppuccin/yazi/blob/main/themes/mocha/catppuccin-mocha-lavender.toml
|
||||
theme = {
|
||||
mgr = {
|
||||
cwd = {fg = color.hexS.teal;};
|
||||
cwd = {
|
||||
fg = color.hexS.teal;
|
||||
};
|
||||
|
||||
hovered = {
|
||||
fg = color.hexS.accentText;
|
||||
@ -285,7 +335,9 @@ in {
|
||||
};
|
||||
|
||||
border_symbol = "│";
|
||||
border_style = {fg = color.hexS.overlay0;};
|
||||
border_style = {
|
||||
fg = color.hexS.overlay0;
|
||||
};
|
||||
};
|
||||
|
||||
tabs = {
|
||||
@ -354,58 +406,104 @@ in {
|
||||
bg = color.hexS.surface0;
|
||||
};
|
||||
|
||||
perm_type = {fg = color.hexS.blue;};
|
||||
perm_read = {fg = color.hexS.yellow;};
|
||||
perm_write = {fg = color.hexS.red;};
|
||||
perm_exec = {fg = color.hexS.green;};
|
||||
perm_sep = {fg = color.hexS.overlay0;};
|
||||
perm_type = {
|
||||
fg = color.hexS.blue;
|
||||
};
|
||||
perm_read = {
|
||||
fg = color.hexS.yellow;
|
||||
};
|
||||
perm_write = {
|
||||
fg = color.hexS.red;
|
||||
};
|
||||
perm_exec = {
|
||||
fg = color.hexS.green;
|
||||
};
|
||||
perm_sep = {
|
||||
fg = color.hexS.overlay0;
|
||||
};
|
||||
};
|
||||
|
||||
input = {
|
||||
border = {fg = color.hexS.accentDim;};
|
||||
border = {
|
||||
fg = color.hexS.accentDim;
|
||||
};
|
||||
title = {};
|
||||
value = {};
|
||||
selected = {reversed = true;};
|
||||
selected = {
|
||||
reversed = true;
|
||||
};
|
||||
};
|
||||
|
||||
pick = {
|
||||
border = {fg = color.hexS.accentDim;};
|
||||
active = {fg = color.hexS.accentHl;};
|
||||
border = {
|
||||
fg = color.hexS.accentDim;
|
||||
};
|
||||
active = {
|
||||
fg = color.hexS.accentHl;
|
||||
};
|
||||
inactive = {};
|
||||
};
|
||||
|
||||
confirm = {
|
||||
border = {fg = color.hexS.accentDim;};
|
||||
title = {fg = color.hexS.accentDim;};
|
||||
border = {
|
||||
fg = color.hexS.accentDim;
|
||||
};
|
||||
title = {
|
||||
fg = color.hexS.accentDim;
|
||||
};
|
||||
content = {};
|
||||
list = {};
|
||||
btn_yes = {reversed = true;};
|
||||
btn_yes = {
|
||||
reversed = true;
|
||||
};
|
||||
btn_no = {};
|
||||
};
|
||||
|
||||
cmp = {
|
||||
border = {fg = color.hexS.accentDim;};
|
||||
border = {
|
||||
fg = color.hexS.accentDim;
|
||||
};
|
||||
};
|
||||
|
||||
tasks = {
|
||||
border = {fg = color.hexS.accentDim;};
|
||||
border = {
|
||||
fg = color.hexS.accentDim;
|
||||
};
|
||||
title = {};
|
||||
hovered = {underline = true;};
|
||||
hovered = {
|
||||
underline = true;
|
||||
};
|
||||
};
|
||||
|
||||
which = {
|
||||
cand = {fg = color.hexS.accent;};
|
||||
desc = {fg = color.hexS.accentHl;};
|
||||
mask = {bg = color.hexS.surface0;};
|
||||
rest = {fg = color.hexS.surface0;};
|
||||
cand = {
|
||||
fg = color.hexS.accent;
|
||||
};
|
||||
desc = {
|
||||
fg = color.hexS.accentHl;
|
||||
};
|
||||
mask = {
|
||||
bg = color.hexS.surface0;
|
||||
};
|
||||
rest = {
|
||||
fg = color.hexS.surface0;
|
||||
};
|
||||
separator = " ";
|
||||
separator_style = {fg = color.hexS.text;};
|
||||
separator_style = {
|
||||
fg = color.hexS.text;
|
||||
};
|
||||
};
|
||||
|
||||
help = {
|
||||
on = {fg = color.hexS.accent;};
|
||||
run = {fg = color.hexS.accentHl;};
|
||||
desc = {fg = color.hexS.text;};
|
||||
on = {
|
||||
fg = color.hexS.accent;
|
||||
};
|
||||
run = {
|
||||
fg = color.hexS.accentHl;
|
||||
};
|
||||
desc = {
|
||||
fg = color.hexS.text;
|
||||
};
|
||||
hovered = {
|
||||
fg = color.hexS.accentText; # TODO: This is not applied
|
||||
|
||||
@ -420,19 +518,31 @@ in {
|
||||
};
|
||||
|
||||
notify = {
|
||||
title_info = {fg = color.hexS.teal;};
|
||||
title_warn = {fg = color.hexS.yellow;};
|
||||
title_error = {fg = color.hexS.red;};
|
||||
title_info = {
|
||||
fg = color.hexS.teal;
|
||||
};
|
||||
title_warn = {
|
||||
fg = color.hexS.yellow;
|
||||
};
|
||||
title_error = {
|
||||
fg = color.hexS.red;
|
||||
};
|
||||
};
|
||||
|
||||
spot = {
|
||||
border = {fg = color.hexS.lavender;};
|
||||
title = {fg = color.hexS.lavender;};
|
||||
border = {
|
||||
fg = color.hexS.lavender;
|
||||
};
|
||||
title = {
|
||||
fg = color.hexS.lavender;
|
||||
};
|
||||
tbl_cell = {
|
||||
fg = color.hexS.lavender;
|
||||
reversed = true;
|
||||
};
|
||||
tbl_col = {bold = true;};
|
||||
tbl_col = {
|
||||
bold = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Default rules good enough
|
||||
|
||||
@ -23,33 +23,74 @@ in {
|
||||
extensions = [
|
||||
"catppuccin"
|
||||
"catppuccin-icons"
|
||||
"comment"
|
||||
"git-firefly"
|
||||
|
||||
"nix"
|
||||
"perl"
|
||||
"fish"
|
||||
"lua"
|
||||
"toml"
|
||||
"csharp"
|
||||
"java"
|
||||
"latex"
|
||||
"typst"
|
||||
"haskell"
|
||||
"glsl"
|
||||
"mermaid"
|
||||
"clojure"
|
||||
"verilog"
|
||||
"qml"
|
||||
"plantuml"
|
||||
"graphviz"
|
||||
|
||||
"dockerfile"
|
||||
"docker-compose"
|
||||
|
||||
"html"
|
||||
"svelte"
|
||||
"svelte-mcp"
|
||||
|
||||
"make"
|
||||
"xml"
|
||||
"scss"
|
||||
"rainbow-csv"
|
||||
"sql"
|
||||
"nix"
|
||||
"svelte"
|
||||
"svelte-mcp"
|
||||
"jinja2"
|
||||
|
||||
"just"
|
||||
"perl"
|
||||
"make"
|
||||
"neocmake"
|
||||
"assembly"
|
||||
"wat"
|
||||
"neocmake"
|
||||
"linkerscript"
|
||||
"r"
|
||||
];
|
||||
|
||||
themes = {};
|
||||
userDebug = [];
|
||||
|
||||
# TODO: Add neovim keymaps
|
||||
userKeymaps = [
|
||||
{
|
||||
context = "Workspace";
|
||||
bindings = {
|
||||
ctrl-shift-t = "workspace::NewTerminal";
|
||||
"ctrl-/" = "terminal_panel::Toggle";
|
||||
};
|
||||
}
|
||||
{
|
||||
context = "Editor";
|
||||
unbind = {
|
||||
"ctrl-/" = [
|
||||
"editor::ToggleComments"
|
||||
{
|
||||
advance_downwards = false;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
context = "(vim_mode == normal || vim_mode == visual) && !menu";
|
||||
bindings = {
|
||||
"ctrl-c" = "editor::ToggleComments";
|
||||
};
|
||||
}
|
||||
];
|
||||
@ -70,12 +111,20 @@ in {
|
||||
tree_view = true;
|
||||
};
|
||||
|
||||
# TODO: Doesn't work, although perlnavigator advertises Perl::Tidy autoformatting...
|
||||
languages = {
|
||||
Perl = {
|
||||
formatter = "language_server";
|
||||
};
|
||||
};
|
||||
|
||||
auto_signature_help = true;
|
||||
lsp = {
|
||||
nil = {
|
||||
initialization_options = {
|
||||
formatting = {
|
||||
command = null;
|
||||
# command = null;
|
||||
command = ["${pkgs.alejandra}/bin/alejandra"];
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -86,6 +135,27 @@ in {
|
||||
};
|
||||
};
|
||||
};
|
||||
# No idea how to configure the formatter
|
||||
# perlnavigator-server = let
|
||||
# # TODO: Duplicated in neovim/default.nix. Need Perl module.
|
||||
# perl = pkgs.perl.withPackages (p:
|
||||
# with p; [
|
||||
# PLS
|
||||
# PerlCritic
|
||||
# PerlTidy
|
||||
# NetOpenSSH
|
||||
# DateTime
|
||||
# DBI
|
||||
# DBDMariaDB
|
||||
# CursesUI
|
||||
# TextCSV_XS
|
||||
# ]);
|
||||
# in {
|
||||
# initialization_options = {
|
||||
# "perlnavigator.perlPath" = "${perl}/bin";
|
||||
# "perlnavigator.includePaths" = ["${perl}/lib/perl5"];
|
||||
# };
|
||||
# };
|
||||
};
|
||||
|
||||
disable_ai = false;
|
||||
@ -100,10 +170,13 @@ in {
|
||||
codex-acp = {
|
||||
type = "registry";
|
||||
};
|
||||
gemini = {
|
||||
type = "registry";
|
||||
};
|
||||
mistral-vibe = {
|
||||
type = "registry";
|
||||
};
|
||||
gemini = {
|
||||
opencode = {
|
||||
type = "registry";
|
||||
};
|
||||
};
|
||||
|
||||
@ -23,15 +23,11 @@
|
||||
substituters = [
|
||||
"https://cache.nixos.org"
|
||||
"https://nix-community.cachix.org"
|
||||
# "https://comfyui.cachix.org"
|
||||
# "https://ai.cachix.org"
|
||||
# "https://app.cachix.org/cache/nixos-rocm"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
# "comfyui.cachix.org-1:33mf9VzoIjzVbp0zwj+fT51HG0y31ZTK3nzYZAX0rec="
|
||||
# "ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc="
|
||||
# "nixos-rocm.cachix.org-1:VEpsf7pRIijjd8csKjFNBGzkBqOmw8H9PRmgAq14LnE="
|
||||
];
|
||||
};
|
||||
|
||||
@ -12,7 +12,6 @@
|
||||
./disks.nix
|
||||
|
||||
# General services
|
||||
../services/comfyui.nix
|
||||
../services/fileflows-node.nix
|
||||
];
|
||||
|
||||
@ -234,53 +233,50 @@
|
||||
|
||||
kmscon = {
|
||||
enable = false;
|
||||
hwRender = true;
|
||||
useXkbConfig = true;
|
||||
# autologinUser = username;
|
||||
|
||||
fonts = [
|
||||
{
|
||||
name = "MonoLisa Alt Script";
|
||||
package = pkgs.monolisa;
|
||||
}
|
||||
];
|
||||
config = let
|
||||
color = config.home-manager.users.${username}.homemodules.color;
|
||||
in {
|
||||
# term=xterm-256color
|
||||
|
||||
hwaccel = true;
|
||||
|
||||
font-name = color.font;
|
||||
font-size = 14;
|
||||
|
||||
mode = "3440x1440";
|
||||
palette = "custom";
|
||||
|
||||
palette-black = "0,0,0";
|
||||
pallette-white = "255,255,255";
|
||||
|
||||
palette-red = color.rgbS.red;
|
||||
palette-light-red = color.rgbS.red;
|
||||
|
||||
palette-green = color.rgbS.green;
|
||||
palette-light-green = color.rgbS.green;
|
||||
|
||||
palette-yellow = color.rgbS.yellow;
|
||||
palette-light-yellow = color.rgbS.yellow;
|
||||
|
||||
palette-blue = color.rgbS.blue;
|
||||
palette-light-blue = color.rgbS.blue;
|
||||
|
||||
palette-magenta = color.rgbS.pink;
|
||||
palette-light-magenta = color.rgbS.pink;
|
||||
|
||||
palette-cyan = color.rgbS.teal;
|
||||
palette-light-cyan = color.rgbS.teal;
|
||||
|
||||
palette-foreground = color.rgbS.text;
|
||||
palette-background = "0,0,0";
|
||||
};
|
||||
|
||||
# NOTE: Do NOT use multline strings here!
|
||||
# This will create a linebreak in the systemd service and break login!
|
||||
extraOptions = "";
|
||||
|
||||
extraConfig = let
|
||||
color = config.home-manager.users.${username}.homemodules.color;
|
||||
in ''
|
||||
# term=xterm-256color
|
||||
font-size=14
|
||||
mode=3440x1440
|
||||
palette=custom
|
||||
|
||||
palette-black=0,0,0
|
||||
pallette-white=255,255,255
|
||||
|
||||
palette-red=${color.rgbS.red}
|
||||
palette-light-red=${color.rgbS.red}
|
||||
|
||||
palette-green=${color.rgbS.green}
|
||||
palette-light-green=${color.rgbS.green}
|
||||
|
||||
palette-yellow=${color.rgbS.yellow}
|
||||
palette-light-yellow=${color.rgbS.yellow}
|
||||
|
||||
palette-blue=${color.rgbS.blue}
|
||||
palette-light-blue=${color.rgbS.blue}
|
||||
|
||||
palette-magenta=${color.rgbS.pink}
|
||||
palette-light-magenta=${color.rgbS.pink}
|
||||
|
||||
palette-cyan=${color.rgbS.teal}
|
||||
palette-light-cyan=${color.rgbS.teal}
|
||||
|
||||
palette-foreground=${color.rgbS.text}
|
||||
palette-background=0,0,0
|
||||
'';
|
||||
};
|
||||
|
||||
openssh = {
|
||||
|
||||
@ -121,12 +121,6 @@
|
||||
fsType = "nfs";
|
||||
options = ["defaults" "rw" "noatime" "_netdev" "bg" "hard"];
|
||||
};
|
||||
|
||||
"/media/Box" = {
|
||||
device = "192.168.86.20:/mnt/Seagate4TB/Box";
|
||||
fsType = "nfs";
|
||||
options = ["defaults" "rw" "relatime" "_netdev" "bg" "hard"];
|
||||
};
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
@ -146,8 +140,8 @@
|
||||
nvidia-container-toolkit.enable = true;
|
||||
|
||||
nvidia = {
|
||||
# package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.beta;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
# package = config.boot.kernelPackages.nvidiaPackages.beta;
|
||||
|
||||
open = true;
|
||||
nvidiaSettings = false; # Those are for x-server
|
||||
|
||||
@ -24,7 +24,6 @@
|
||||
# General services
|
||||
../services/authelia.nix
|
||||
../services/bazarr.nix
|
||||
../services/box.nix
|
||||
../services/fileflows.nix
|
||||
../services/gitea.nix
|
||||
../services/immich.nix
|
||||
|
||||
@ -69,12 +69,6 @@
|
||||
fsType = "nfs";
|
||||
options = ["defaults" "rw" "relatime" "_netdev" "bg" "hard"];
|
||||
};
|
||||
|
||||
"/media/Box" = {
|
||||
device = "192.168.86.20:/mnt/Seagate4TB/Box";
|
||||
fsType = "nfs";
|
||||
options = ["defaults" "rw" "relatime" "_netdev" "bg" "hard"];
|
||||
};
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
@ -92,7 +86,7 @@
|
||||
nvidia-container-toolkit.enable = true;
|
||||
|
||||
nvidia = {
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.legacy_580;
|
||||
|
||||
modesetting.enable = false;
|
||||
open = false; # GTX 1070 is too old for open drivers
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
{
|
||||
mylib,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
boxVersion = "v0.31.0";
|
||||
in {
|
||||
virtualisation.oci-containers.containers = {
|
||||
box = {
|
||||
image = "stashapp/stash:${boxVersion}";
|
||||
autoStart = true;
|
||||
|
||||
login = mylib.containers.mkDockerLogin config;
|
||||
|
||||
dependsOn = [];
|
||||
|
||||
ports = [
|
||||
# "9999:9999"
|
||||
];
|
||||
|
||||
volumes = [
|
||||
"/etc/localtime:/etc/localtime:ro"
|
||||
|
||||
"/media/Box:/data"
|
||||
|
||||
"box_config:/root/.stash"
|
||||
"box_metadata:/metadata"
|
||||
"box_cache:/cache"
|
||||
"box_blobs:/blobs"
|
||||
"box_generated:/generated"
|
||||
];
|
||||
|
||||
environment = {
|
||||
PUID = "3000";
|
||||
PGID = "3000";
|
||||
TZ = "Europe/Berlin";
|
||||
|
||||
STASH_STASH = "/data/";
|
||||
STASH_GENERATED = "/generated/";
|
||||
STASH_METADATA = "/metadata/";
|
||||
STASH_CACHE = "/cache/";
|
||||
};
|
||||
|
||||
extraOptions = [
|
||||
"--privileged"
|
||||
"--device=nvidia.com/gpu=all"
|
||||
"--net=behind-nginx"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@ -1,77 +0,0 @@
|
||||
{
|
||||
mylib,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
# comfyuiVersion = "cu128-slim-20260316";
|
||||
# comfyuiVersion = "cu128-megapak-20260413";
|
||||
# comfyuiVersion = "cu130-megapak-pt211-20260413";
|
||||
comfyuiVersion = "cu130-megapak-pt211-20260508";
|
||||
in {
|
||||
virtualisation.oci-containers.containers = {
|
||||
comfyui = {
|
||||
image = "yanwk/comfyui-boot:${comfyuiVersion}";
|
||||
autoStart = false;
|
||||
|
||||
login = mylib.containers.mkDockerLogin config;
|
||||
|
||||
dependsOn = [];
|
||||
|
||||
ports = [
|
||||
"8188:8188"
|
||||
];
|
||||
|
||||
volumes = let
|
||||
rootDir = "/home/christoph/Games/ComfyUI";
|
||||
in [
|
||||
# cu128-slim / cu128-megapak
|
||||
# "${rootDir}/storage:/root"
|
||||
# "${rootDir}/storage-models/models:/root/ComfyUI/models"
|
||||
# "${rootDir}/storage-models/hf-hub:/root/.cache/huggingface/hub"
|
||||
# "${rootDir}/storage-models/torch-hub:/root/.cache/torch/hub"
|
||||
# "${rootDir}/storage-user/input:/root/ComfyUI/input"
|
||||
# "${rootDir}/storage-user/output:/root/ComfyUI/output"
|
||||
# "${rootDir}/storage-user/workflows:/root/ComfyUI/user/default/workflows"
|
||||
|
||||
# cu130-megapak
|
||||
"${rootDir}/storage-cache/dot-cache:/root/.cache"
|
||||
"${rootDir}/storage-cache/dot-config:/root/.config"
|
||||
"${rootDir}/storage-nodes/dot-local:/root/.local"
|
||||
"${rootDir}/storage-nodes/comfy-extras:/root/ComfyUI/comfy_extras"
|
||||
"${rootDir}/storage-nodes/custom_nodes:/root/ComfyUI/custom_nodes"
|
||||
"${rootDir}/storage-models/models:/root/ComfyUI/models"
|
||||
"${rootDir}/storage-models/hf-hub:/root/.cache/huggingface/hub"
|
||||
"${rootDir}/storage-models/torch-hub:/root/.cache/torch/hub"
|
||||
"${rootDir}/storage-user/input:/root/ComfyUI/input"
|
||||
"${rootDir}/storage-user/output:/root/ComfyUI/output"
|
||||
"${rootDir}/storage-user/user-profile:/root/ComfyUI/user"
|
||||
"${rootDir}/storage-user/user-scripts:/root/user-scripts"
|
||||
];
|
||||
|
||||
environment = {
|
||||
PUID = "1000";
|
||||
PGID = "1000";
|
||||
TZ = "Europe/Berlin";
|
||||
|
||||
# https://github.com/Comfy-Org/ComfyUI/blob/master/comfy/cli_args.py
|
||||
CLI_ARGS = lib.concatStringsSep " " [
|
||||
# "--cache-none" # Leads to single nodes being executed multiple times for each output connection :/
|
||||
# "--lowvram"
|
||||
# "--disable-smart-memory"
|
||||
# "--disable-pinned-memory"
|
||||
# "--disable-xformers"
|
||||
# "--use-sage-attention" # Crashes
|
||||
# "--reserve-vram 1" # (1 or 2) => Assume less vram is available to mitigate OOM due to wrong vram estimation
|
||||
];
|
||||
};
|
||||
|
||||
extraOptions = [
|
||||
"--privileged"
|
||||
"--device=nvidia.com/gpu=all"
|
||||
# "--net=behind-nginx"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@ -5,7 +5,7 @@
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
fileflowsVersion = "26.01";
|
||||
fileflowsVersion = "26.06";
|
||||
in {
|
||||
virtualisation.oci-containers.containers = {
|
||||
fileflows-node = {
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
version = "26.01";
|
||||
version = "26.06";
|
||||
in {
|
||||
virtualisation.oci-containers.containers = {
|
||||
fileflows = {
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
nextcloudVersion = "31.0.6-apache";
|
||||
nextcloudVersion = "33.0.5-apache";
|
||||
in {
|
||||
systemd.services.nextcloud-cron = {
|
||||
enable = true;
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
teamspeakVersion = "v6.0.0-beta8";
|
||||
teamspeakVersion = "6.0.0-beta10";
|
||||
in {
|
||||
virtualisation.oci-containers.containers = {
|
||||
teamspeak = {
|
||||
|
||||
@ -70,7 +70,6 @@ in {
|
||||
(mkRDir "/usr/systemd-placeholder" m755)
|
||||
|
||||
# TODO: Why does this use the mandb user?
|
||||
# TODO: Why does this apparently conflict with comfyui-nix?
|
||||
# (mkDir "mandb" "/var/cache/man" m755)
|
||||
|
||||
# (mkRDir "/var/cache/restic-backups-synology" m755)
|
||||
@ -126,10 +125,12 @@ in {
|
||||
(mkUDir ".docker" m755)
|
||||
# (mkUDir ".gradle" m755) # Unity
|
||||
(mkUDir ".java" m755) # JetBrains
|
||||
(mkUDir ".lmstudio" m755)
|
||||
(mkUDir ".MakeMKV" m755)
|
||||
(mkUDir ".mozilla/firefox" m755) # TODO: Remove this someday
|
||||
(mkUDir ".mozilla/native-messaging-hosts" m755)
|
||||
(mkUDir ".nix-package-search" m755)
|
||||
(mkUDir ".npm" m755) # Contains mcp servers :/
|
||||
# (mkUDir ".nv" m755) # Unity
|
||||
# (mkUDir ".ollama" m755)
|
||||
# (mkUDir ".plastic4" m755) # Unity
|
||||
@ -142,12 +143,16 @@ in {
|
||||
|
||||
# Cache that's actually useful
|
||||
(mkUDir ".cache/claude-cli-nodejs" m755)
|
||||
(mkUDir ".cache/elephant" m755)
|
||||
(mkUDir ".cache/fish/generated_completions" m755)
|
||||
(mkUDir ".cache/nix" m755)
|
||||
(mkUDir ".cache/nix-index" m755)
|
||||
(mkUDir ".cache/nix-search-tv" m755)
|
||||
(mkUDir ".cache/nvim" m755)
|
||||
(mkUDir ".cache/JetBrains" m755)
|
||||
(mkUDir ".cache/keepassxc" m755)
|
||||
(mkUDir ".cache/opencode" m755)
|
||||
(mkUDir ".cache/uv" m755)
|
||||
|
||||
# Config
|
||||
# (mkUDir ".config/.android" m755) # Unity
|
||||
@ -166,11 +171,13 @@ in {
|
||||
(mkUDir ".config/JetBrains" m755)
|
||||
(mkUDir ".config/kdeconnect" m755)
|
||||
(mkUDir ".config/keepassxc" m755)
|
||||
(mkUDir ".config/LM Studio" m755)
|
||||
(mkUDir ".config/Msty" m755)
|
||||
(mkUDir ".config/Nextcloud" m755)
|
||||
# (mkUDir ".config/niri/dms" m755)
|
||||
(mkUDir ".config/obsidian" m755)
|
||||
(mkUDir ".config/obs-studio" m755)
|
||||
(mkUDir ".config/opencode" m755)
|
||||
(mkUDir ".config/Signal" m755)
|
||||
# (mkUDir ".config/singularitygroup-hotreload" m755) # Unity
|
||||
(mkUDir ".config/TeamSpeak" m755)
|
||||
@ -202,6 +209,7 @@ in {
|
||||
(mkUDir ".local/share/net.lrclib.lrcget" m755)
|
||||
(mkUDir ".local/share/nix" m755)
|
||||
(mkUDir ".local/share/nvim" m755)
|
||||
(mkUDir ".local/share/opencode" m755)
|
||||
(mkUDir ".local/share/qutebrowser" m755)
|
||||
(mkUDir ".local/share/systemd" m755)
|
||||
# (mkUDir ".local/share/unity3d" m755) # Unity
|
||||
@ -214,6 +222,7 @@ in {
|
||||
(mkUDir ".local/state/lazygit" m755)
|
||||
(mkUDir ".local/state/nix" m755)
|
||||
(mkUDir ".local/state/nvim" m755)
|
||||
(mkUDir ".local/state/opencode" m755)
|
||||
(mkUDir ".local/state/waypaper" m755)
|
||||
(mkUDir ".local/state/wireplumber" m755)
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user