Compare commits
106 Commits
sway-fixes
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 34f84a18b3 | |||
| ac36f0adf2 | |||
| e50397c2e3 | |||
| 4634d35eb2 | |||
| c5d4cac1a0 | |||
| a172fe7ff7 | |||
| 4c65e43fd1 | |||
| f5d8296ff0 | |||
| 07455cb132 | |||
| df5eee8d84 | |||
|
|
6614903852 | ||
|
|
fdafcea4f7 | ||
| 84734df417 | |||
| 9627cd0786 | |||
| b6468bd29e | |||
| 2a04bb07b0 | |||
| 4871559257 | |||
| d8dbcce967 | |||
| c5dbbfb933 | |||
| 771ea038ec | |||
| c1a21e9a4d | |||
| b1e26c04b7 | |||
| 2e1c26ef7a | |||
| 50a3e26386 | |||
| 28ab87f588 | |||
| a554be2df5 | |||
| 338a39d0be | |||
| 582886dcb1 | |||
| 7aa354b6b4 | |||
| 54da358d5e | |||
| 394ab8e87b | |||
| 7feda0326a | |||
| b3719addd6 | |||
| f2799ccb5b | |||
| 24d3b16b83 | |||
| 8ba2a0cc4f | |||
| c7f1dff97c | |||
| 306eb316e5 | |||
| 5fcd9c93b2 | |||
| 598a7f2b45 | |||
| f9192a65c4 | |||
| 827d659160 | |||
| c9db00532e | |||
| 0755352a2e | |||
| 49bdc108e7 | |||
| 114648a9d2 | |||
| 10aed5245b | |||
| a111590e39 | |||
| 1b9e2a6b75 | |||
| 6efd73e6aa | |||
| 4e365a5e5c | |||
| cd7df6f38b | |||
| b8fad8d4b4 | |||
| a11050f6e5 | |||
| 957facbd5d | |||
| 9a58df54ff | |||
| eaa7e26cdc | |||
| 0a63318ddc | |||
| cc72effdce | |||
| 6e96f4749f | |||
| c15d8f03c9 | |||
| 829275d044 | |||
| a0831e42e1 | |||
| fc7e4d6668 | |||
| 2a15e0e7c2 | |||
| bfb5ea11be | |||
| 80da6b5a81 | |||
| d3e00168b5 | |||
| 2281cf9111 | |||
| 2063655b6c | |||
|
|
610cf5273d | ||
|
|
a816da62a1 | ||
|
|
9f8a777294 | ||
| c611ca5235 | |||
| eff26f4ce6 | |||
| e4cbc21843 | |||
| 8ca7bb1890 | |||
| f7f492adcc | |||
| 3f6d2e3580 | |||
| e93174e665 | |||
| 71f632b421 | |||
| 9e0e69c80d | |||
|
|
5a601916a4 | ||
| 24b2e36544 | |||
| 1332d72a5c | |||
| be2a7863dc | |||
| 0f028a075a | |||
| a7277567d4 | |||
| 9fec5b56e8 | |||
| e488d6af8e | |||
| 910cd3316b | |||
| 6cdcafb03d | |||
| 935d32f35f | |||
| d2595c7fa6 | |||
| 2c00b7b718 | |||
| 663c21495b | |||
| 85028eabf2 | |||
| 5d8c8f1707 | |||
| 3c47a48c70 | |||
| eec6abf860 | |||
| 332cac2dcb | |||
| f4cce8dfff | |||
| 56459a0285 | |||
| 69da90215f | |||
| d5ad688d40 | |||
| 0ce69398e3 |
2
.gitignore
vendored
@@ -3,3 +3,5 @@
|
||||
./secrets/secrets.yaml.priv
|
||||
./secrets/secrets.priv.yaml.gpg
|
||||
|
||||
.aider*
|
||||
.env
|
||||
|
||||
87
README.md
@@ -1,6 +1,87 @@
|
||||
# nix-dotfiles
|
||||
My nix dotfiles. Will not guarrante it to work as it is always a work in progress.
|
||||
# NixOS Configuration Repository
|
||||
|
||||
**Work-in-progress setup**
|
||||
|
||||
## Repository Structure
|
||||
This repository contains my NixOS configuration files organized into several directories:
|
||||
* `home/`: Home manager
|
||||
* `machines/`: Machine-specific configurations
|
||||
* `packages/`: Custom package definitions and configs.
|
||||
* `profiles/`: System profiles (desktop, development, etc.)
|
||||
* `services/`: Service configurations (nginx, mysql, etc.)
|
||||
* `secrets/`: Encrypted secrets
|
||||
|
||||
## Quick Start
|
||||
### Build Configuration
|
||||
```bash
|
||||
nix --extra-experimental-features "nix-command flakes" build ".#nixosConfigurations.galadriel.config.system.build.toplevel"
|
||||
```
|
||||
|
||||
nixos-rebuild switch --update-input nixpkgs --update-input unstable --no-write-lock-file --refresh --flake git+https://github.com/adrlau/nix-dotfiles.git --upgrade
|
||||
### Rebuild and Switch
|
||||
The primary rebuild command is:
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .# --no-write-lock-file -L --impure
|
||||
```
|
||||
This command:
|
||||
* Uses the current flake
|
||||
* Disables lock file writing
|
||||
* Enables debug logging (-L)
|
||||
* Allows impure derivations
|
||||
|
||||
#### Alternative Rebuild Methods
|
||||
1. **Remote Flake**:
|
||||
```bash
|
||||
sudo nixos-rebuild switch \
|
||||
--update-input nixpkgs \
|
||||
--update-input unstable \
|
||||
--no-write-lock-file \
|
||||
--refresh \
|
||||
--flake git+https://github.com/adrlau/nix-dotfiles.git \
|
||||
--upgrade
|
||||
```
|
||||
|
||||
2. **Standard Local Rebuild**:
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .#
|
||||
```
|
||||
|
||||
## Dependency Inspection
|
||||
Check package relationships using:
|
||||
```bash
|
||||
nix why-depends /run/current-system /nix/store/...
|
||||
nix why-depends .#nixosConfigurations.galadriel nixpkgs#python312Packages.botorch
|
||||
nix why-depends .#nixosConfigurations.eowyn.config.system.build.toplevel pkgs.python3.12-libarcus-4.12.0 --impure
|
||||
```
|
||||
|
||||
|
||||
show flake attrs
|
||||
```nix flake show .#```
|
||||
|
||||
## Troubleshooting
|
||||
### Fix Broken Store
|
||||
After aborted rebuilds:
|
||||
```bash
|
||||
nix-store --query --referrers-closure \
|
||||
$(find /nix/store -maxdepth 1 -type f -name '*.drv' -size 0) |
|
||||
xargs sudo nix-store --delete --ignore-liveness
|
||||
sudo nix store gc
|
||||
sudo nix store verify --repair --all
|
||||
```
|
||||
|
||||
### Viewing Logs
|
||||
Check home-manager logs:
|
||||
```bash
|
||||
journalctl -eu home-manager-gunalx
|
||||
```
|
||||
|
||||
## Maintenance
|
||||
Clean old generations:
|
||||
```bash
|
||||
sudo nix-collect-garbage --delete-older-than 4d
|
||||
```
|
||||
|
||||
## Notes
|
||||
* This configuration is constantly evolving
|
||||
* Refer to specific machine configurations in `machines/` for details
|
||||
* Service configurations are located in `services/`
|
||||
* Custom packages are defined in `packages/`
|
||||
|
||||
733
flake.lock
generated
@@ -1,733 +0,0 @@
|
||||
{
|
||||
"nodes": {
|
||||
"base16": {
|
||||
"inputs": {
|
||||
"fromYaml": "fromYaml"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1708890466,
|
||||
"narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
|
||||
"owner": "SenchoPens",
|
||||
"repo": "base16.nix",
|
||||
"rev": "665b3c6748534eb766c777298721cece9453fdae",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "SenchoPens",
|
||||
"repo": "base16.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16-fish": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1622559957,
|
||||
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
|
||||
"owner": "tomyun",
|
||||
"repo": "base16-fish",
|
||||
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tomyun",
|
||||
"repo": "base16-fish",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16-foot": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1696725948,
|
||||
"narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-foot",
|
||||
"rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-foot",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16-helix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1696727917,
|
||||
"narHash": "sha256-FVrbPk+NtMra0jtlC5oxyNchbm8FosmvXIatkRbYy1g=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-helix",
|
||||
"rev": "dbe1480d99fe80f08df7970e471fac24c05f2ddb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-helix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16-kitty": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1665001328,
|
||||
"narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
|
||||
"owner": "kdrag0n",
|
||||
"repo": "base16-kitty",
|
||||
"rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "kdrag0n",
|
||||
"repo": "base16-kitty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16-tmux": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1696725902,
|
||||
"narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-tmux",
|
||||
"rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tinted-theming",
|
||||
"repo": "base16-tmux",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"base16-vim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1663659192,
|
||||
"narHash": "sha256-uJvaYYDMXvoo0fhBZUhN8WBXeJ87SRgof6GEK2efFT0=",
|
||||
"owner": "chriskempson",
|
||||
"repo": "base16-vim",
|
||||
"rev": "3be3cd82cd31acfcab9a41bad853d9c68d30478d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "chriskempson",
|
||||
"repo": "base16-vim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"devenv": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
"nix": "nix",
|
||||
"nixpkgs": "nixpkgs_4",
|
||||
"pre-commit-hooks": "pre-commit-hooks"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706018268,
|
||||
"narHash": "sha256-d24+re0t8b6HYGzAPZCIJed85n23RUFXQa2yuHoW0uQ=",
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"rev": "ad0ae333b210e31237e1fc4a7ddab71a01785add",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fenix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"ozai",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706336364,
|
||||
"narHash": "sha256-mJ5i2YIVKv6jTN2+l3oOUUej2NUVjJX/H3bAq6019ks=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "eb683549b7d76b12d1a009f888b91b70ed34485f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1673956053,
|
||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1673956053,
|
||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat_3": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1673956053,
|
||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1681202837,
|
||||
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1685518550,
|
||||
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fromYaml": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1689549921,
|
||||
"narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
|
||||
"owner": "SenchoPens",
|
||||
"repo": "fromYaml",
|
||||
"rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "SenchoPens",
|
||||
"repo": "fromYaml",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"ozai",
|
||||
"devenv",
|
||||
"pre-commit-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1660459072,
|
||||
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gnome-shell": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1698794309,
|
||||
"narHash": "sha256-/TIkZ8y5Wv3QHLFp79Poao9fINurKs5pa4z0CRe+F8s=",
|
||||
"owner": "GNOME",
|
||||
"repo": "gnome-shell",
|
||||
"rev": "a7c169c6c29cf02a4c392fa0acbbc5f5072823e7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "GNOME",
|
||||
"ref": "45.1",
|
||||
"repo": "gnome-shell",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1716736833,
|
||||
"narHash": "sha256-rNObca6dm7Qs524O4st8VJH6pZ/Xe1gxl+Rx6mcWYo0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "a631666f5ec18271e86a5cde998cba68c33d9ac6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-24.05",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"lowdown-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1633514407,
|
||||
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
|
||||
"owner": "kristapsdz",
|
||||
"repo": "lowdown",
|
||||
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "kristapsdz",
|
||||
"repo": "lowdown",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"matrix-synapse-next": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710311999,
|
||||
"narHash": "sha256-s0pT1NyrMgeolUojXXcnXQDymN7m80GTF7itCv0ZH20=",
|
||||
"owner": "dali99",
|
||||
"repo": "nixos-matrix-modules",
|
||||
"rev": "6c9b67974b839740e2a738958512c7a704481157",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "dali99",
|
||||
"repo": "nixos-matrix-modules",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix": {
|
||||
"inputs": {
|
||||
"lowdown-src": "lowdown-src",
|
||||
"nixpkgs": [
|
||||
"ozai",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-regression": "nixpkgs-regression"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1676545802,
|
||||
"narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=",
|
||||
"owner": "domenkozar",
|
||||
"repo": "nix",
|
||||
"rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "domenkozar",
|
||||
"ref": "relaxed-flakes",
|
||||
"repo": "nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-minecraft": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1716995137,
|
||||
"narHash": "sha256-hEn9737jS0d12ubAUYh1N209LABdEgEouroPLfWpUC0=",
|
||||
"owner": "Infinidoge",
|
||||
"repo": "nix-minecraft",
|
||||
"rev": "7ae2611869c843e6f62cab97a1a8a97944984022",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Infinidoge",
|
||||
"repo": "nix-minecraft",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1725885300,
|
||||
"narHash": "sha256-5RLEnou1/GJQl+Wd+Bxaj7QY7FFQ9wjnFq1VNEaxTmc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "166dee4f88a7e3ba1b7a243edb1aca822f00680e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "master",
|
||||
"repo": "nixos-hardware",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1706098335,
|
||||
"narHash": "sha256-r3dWjT8P9/Ah5m5ul4WqIWD8muj5F+/gbCdjiNVBKmU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a77ab169a83a4175169d78684ddd2e54486ac651",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-23.11",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-regression": {
|
||||
"locked": {
|
||||
"lastModified": 1643052045,
|
||||
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1685801374,
|
||||
"narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-23.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable_2": {
|
||||
"locked": {
|
||||
"lastModified": 1716655032,
|
||||
"narHash": "sha256-kQ25DAiCGigsNR/Quxm3v+JGXAEXZ8I7RAF4U94bGzE=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "59a450646ec8ee0397f5fa54a08573e8240eb91f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "release-23.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1715266358,
|
||||
"narHash": "sha256-doPgfj+7FFe9rfzWo1siAV2mVCasW+Bh8I1cToAXEE4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f1010e0469db743d14519a1efd37e23f8513d714",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1717090882,
|
||||
"narHash": "sha256-Up5tvtY9YlVEyVn9hfZcxFQi5qVhQ5hdVNGPQOUchNw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d24e7fdcfaecdca496ddd426cae98c9e2d12dfe8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-24.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1678875422,
|
||||
"narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"ozai": {
|
||||
"inputs": {
|
||||
"devenv": "devenv",
|
||||
"fenix": "fenix",
|
||||
"nixpkgs": [
|
||||
"unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1712434594,
|
||||
"narHash": "sha256-Ct0StUM5GLxtA1NGhwekDbT0JLSrjwAmsXAODrjI9G4=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "9844e6890892d22ac6c1164a6c6a18c4de6b2832",
|
||||
"revCount": 27,
|
||||
"type": "git",
|
||||
"url": "https://git.pvv.ntnu.no/Projects/ozai.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.pvv.ntnu.no/Projects/ozai.git"
|
||||
}
|
||||
},
|
||||
"ozai-webui": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1717002624,
|
||||
"narHash": "sha256-HgPu7+J2wAAil7741FovwR5h180f1mn+h3PbPsgSjwY=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "a624e3013fab375f2741957070c116638fd99fe6",
|
||||
"revCount": 18,
|
||||
"type": "git",
|
||||
"url": "https://git.pvv.ntnu.no/adriangl/ozai-webui.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.pvv.ntnu.no/adriangl/ozai-webui.git"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"ozai",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"flake-utils": "flake-utils_2",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"ozai",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704725188,
|
||||
"narHash": "sha256-qq8NbkhRZF1vVYQFt1s8Mbgo8knj+83+QlL5LBnYGpI=",
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"rev": "ea96f0c05924341c551a797aaba8126334c505d2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"matrix-synapse-next": "matrix-synapse-next",
|
||||
"nix-minecraft": "nix-minecraft",
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"ozai": "ozai",
|
||||
"ozai-webui": "ozai-webui",
|
||||
"sops-nix": "sops-nix",
|
||||
"stylix": "stylix",
|
||||
"unstable": "unstable"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1706295183,
|
||||
"narHash": "sha256-VSyMaUsXfjb31B8/uT5cM5qXC1VOHLVsCi/bQuo3O/g=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "596e5c77cf5b2b660b3ac2ce732fa0596c246d9b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rust-lang",
|
||||
"ref": "nightly",
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1716692524,
|
||||
"narHash": "sha256-sALodaA7Zkp/JD6ehgwc0UCBrSBfB4cX66uFGTsqeFU=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "962797a8d7f15ed7033031731d0bb77244839960",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"stylix": {
|
||||
"inputs": {
|
||||
"base16": "base16",
|
||||
"base16-fish": "base16-fish",
|
||||
"base16-foot": "base16-foot",
|
||||
"base16-helix": "base16-helix",
|
||||
"base16-kitty": "base16-kitty",
|
||||
"base16-tmux": "base16-tmux",
|
||||
"base16-vim": "base16-vim",
|
||||
"flake-compat": "flake-compat_3",
|
||||
"gnome-shell": "gnome-shell",
|
||||
"home-manager": [
|
||||
"home-manager"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1713897030,
|
||||
"narHash": "sha256-ZPr1R0d9MVmyRX/+XpYsBdLBEBqYMtuyaAjYgWHMloU=",
|
||||
"owner": "bluskript",
|
||||
"repo": "stylix",
|
||||
"rev": "6bc871ab352c9f18d1179daab9e392a4d46393af",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "bluskript",
|
||||
"repo": "stylix",
|
||||
"rev": "6bc871ab352c9f18d1179daab9e392a4d46393af",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1716769173,
|
||||
"narHash": "sha256-7EXDb5WBw+d004Agt+JHC/Oyh/KTUglOaQ4MNjBbo5w=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9ca3f649614213b2aaf5f1e16ec06952fe4c2632",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
180
flake.nix
@@ -2,10 +2,10 @@
|
||||
description = "My System flake";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||
unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
home-manager.url = "github:nix-community/home-manager/release-24.05";
|
||||
home-manager.url = "github:nix-community/home-manager/release-25.05";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
nix-colors.url = "github:misterio77/nix-colors";
|
||||
@@ -14,6 +14,9 @@
|
||||
# stylix.inputs.nixpkgs.follows = "nixpkgs";
|
||||
# stylix.inputs.home-manager.follows = "home-manager";
|
||||
|
||||
# NixVirt.url = "https://flakehub.com/f/AshleyYakeley/NixVirt/*.tar.gz";
|
||||
# NixVirt.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
|
||||
ozai.url = "git+https://git.pvv.ntnu.no/Projects/ozai.git";
|
||||
ozai.inputs.nixpkgs.follows = "unstable";
|
||||
@@ -46,9 +49,8 @@
|
||||
, unstable
|
||||
, ... }@inputs:
|
||||
let
|
||||
overlay-unstable = final: prev: {
|
||||
unstable = unstable.legacyPackages.${prev.system};
|
||||
};
|
||||
overlay-unstable = final: prev: { unstable = inputs.unstable.legacyPackages.${prev.system}; };
|
||||
overlays = [ overlay-unstable ];
|
||||
in
|
||||
{
|
||||
nixosConfigurations = {
|
||||
@@ -67,7 +69,8 @@
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users."gunalx" = import ./home/full.nix;
|
||||
home-manager.users."gunalx" = import ./home/gunalx/full.nix;
|
||||
home-manager.users."root" = import ./home/root/base.nix;
|
||||
home-manager.backupFileExtension = "bac";
|
||||
home-manager.extraSpecialArgs = {inherit nix-colors inputs;};
|
||||
}
|
||||
@@ -78,7 +81,7 @@
|
||||
};
|
||||
|
||||
aragon = nixpkgs.lib.nixosSystem {
|
||||
system = "x84_64-linux";
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
@@ -87,11 +90,19 @@
|
||||
({ config, pkgs, ... }: { nixpkgs.overlays = [ overlay-unstable ]; })
|
||||
./machines/aragon/configuration.nix
|
||||
sops-nix.nixosModules.sops
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users."gunalx" = import ./home/gunalx/full.nix;
|
||||
home-manager.users."root" = import ./home/root/base.nix;
|
||||
home-manager.backupFileExtension = "bac";
|
||||
home-manager.extraSpecialArgs = {inherit nix-colors inputs;};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
galadriel = nixpkgs.lib.nixosSystem {
|
||||
galadriel = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
@@ -101,14 +112,37 @@
|
||||
({ config, pkgs, ... }: { nixpkgs.overlays = [ overlay-unstable ]; })
|
||||
./machines/galadriel/configuration.nix
|
||||
sops-nix.nixosModules.sops
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users."gunalx" = import ./home/gunalx/base.nix;
|
||||
home-manager.users."root" = import ./home/root/base.nix;
|
||||
home-manager.backupFileExtension = "bac";
|
||||
home-manager.extraSpecialArgs = {inherit nix-colors inputs;};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
ozai.nixosModules.ozai
|
||||
ozai-webui.nixosModules.ozai-webui
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
gandalf = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
modules = [
|
||||
./machines/gandalf/configuration.nix
|
||||
({ config, pkgs, ... }: { nixpkgs.overlays = [ overlay-unstable ]; })
|
||||
sops-nix.nixosModules.sops
|
||||
|
||||
elrond = nixpkgs.lib.nixosSystem {
|
||||
];
|
||||
};
|
||||
|
||||
elrond = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
@@ -117,135 +151,21 @@
|
||||
./machines/elrond/configuration.nix
|
||||
({ config, pkgs, ... }: { nixpkgs.overlays = [ overlay-unstable ]; })
|
||||
sops-nix.nixosModules.sops
|
||||
inputs.ozai.nixosModules.ozai
|
||||
inputs.ozai-webui.nixosModules.ozai-webui
|
||||
#inputs.ozai.nixosModules.ozai
|
||||
#inputs.ozai-webui.nixosModules.ozai-webui
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
devShells.x86_64-linux = {
|
||||
default = nixpkgs.legacyPackages.x86_64-linux.callPackage ./home/shell.nix { };
|
||||
default = nixpkgs.legacyPackages.x86_64-linux.callPackage ./home/gunalx/shell.nix { };
|
||||
};
|
||||
|
||||
devShells.aarch64-linux = {
|
||||
default = nixpkgs.legacyPackages.aarch64-linux.callPackage ./home/shell.nix { };
|
||||
default = nixpkgs.legacyPackages.aarch64-linux.callPackage ./home/gunalx/shell.nix { };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
{ lib, stdenv, pkgs }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "wallpapers";
|
||||
version = "1.0";
|
||||
|
||||
src = pkgs.fetchurl {
|
||||
url = "file://./";
|
||||
sha256 = lib.fakeSha256;
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/wallpapers
|
||||
cp -r * $out/share/wallpapers/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "My Collection of wallpapers";
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ adriangl ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
{ pkgs, config, nix-colors, ... }:
|
||||
|
||||
let
|
||||
nix-colors-lib = nix-colors.lib.contrib { inherit pkgs; };
|
||||
|
||||
background = "010C09";
|
||||
foreground = "FFFFFF";
|
||||
offWhite = "F0FFF8";
|
||||
teal = "60C89A";
|
||||
red = "E64553";
|
||||
blue = "58B5E0";
|
||||
green = "79E05B";
|
||||
purple = "6B5BDC";
|
||||
magenta = "80D1A0";
|
||||
cyan = "5FE2C5";
|
||||
yellow = "F5D24D";
|
||||
orange = "FF8800";
|
||||
pink = "FF4EC9";
|
||||
grey = "888B8E";
|
||||
lightGrey = "F3FCF7";
|
||||
darkTeal = "154E44";
|
||||
lighterTeal = "2C7A6A";
|
||||
lightTeal = "B0E8DA";
|
||||
|
||||
in{
|
||||
imports = [
|
||||
nix-colors.homeManagerModules.default
|
||||
];
|
||||
|
||||
# colorScheme = nix-colors-lib.colorSchemeFromPicture {
|
||||
# path = ./assets/evergarden-telescope.jpg;
|
||||
# variant = "dark";
|
||||
# };
|
||||
colorScheme = {
|
||||
slug = "cyberpunk-apathy";
|
||||
name = "Cyberpunk Apathy";
|
||||
author = "Adrian G L (based on Apathy by Jannik Siebert)";
|
||||
palette = {
|
||||
# Base16 color values with context-specific usage comments
|
||||
base00 = background; # Default background
|
||||
base01 = darkTeal; # Lighter background (used for status bars)
|
||||
base02 = lighterTeal; # Selection background
|
||||
base03 = teal; # Comments, secondary content, line highlighting
|
||||
base04 = lightTeal; # Darker foreground (used for status bars)
|
||||
base05 = foreground; # Default text and foreground
|
||||
base06 = lightGrey; # Lighter foreground (used for inactive text)
|
||||
base07 = offWhite; # Lightest background (used for highlights)
|
||||
base08 = teal; # Variables, constants, markup link text
|
||||
base09 = blue; # Integers, booleans, constants, and XML attributes
|
||||
base0A = magenta; # Classes, headings, keywords
|
||||
base0B = cyan; # Strings, literals, escape sequences
|
||||
base0C = green; # Support and error colors
|
||||
base0D = cyan; # Functions, methods, function names
|
||||
base0E = red; # Keywords, storage, selectors
|
||||
base0F = yellow; # Deprecated or obsolete code
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = "Adwaita-dark";
|
||||
package = pkgs.gnome.gnome-themes-extra;
|
||||
};
|
||||
};
|
||||
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme.name = "adwaita";
|
||||
style.name = "adwaita-dark";
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
54
home/common/atuin.nix
Normal file
@@ -0,0 +1,54 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.atuin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
# Data files
|
||||
db_path = "~/.history.db";
|
||||
|
||||
# Filtering
|
||||
filter_mode = "host";
|
||||
filter_mode_shell_up_key_binding = "directory";
|
||||
|
||||
# UI
|
||||
max_preview_height = 2;
|
||||
show_help = true;
|
||||
prefers_reduced_motion = true;
|
||||
|
||||
# History storage
|
||||
secrets_filter = true;
|
||||
enter_accept = true;
|
||||
|
||||
# Sync v2
|
||||
sync = {
|
||||
records = true;
|
||||
};
|
||||
|
||||
# Stats
|
||||
stats = {
|
||||
common_subcommands = [
|
||||
"apt" "cargo" "composer" "dnf" "docker" "git" "go" "ip"
|
||||
"kubectl" "nix" "nmcli" "npm" "pecl" "pnpm" "podman"
|
||||
"port" "systemctl" "tmux" "yarn"
|
||||
];
|
||||
common_prefix = [ "sudo" ];
|
||||
};
|
||||
|
||||
# Keys
|
||||
keys = {
|
||||
scroll_exits = true;
|
||||
};
|
||||
|
||||
# Theme
|
||||
theme = {
|
||||
name = "marine";
|
||||
};
|
||||
|
||||
# Search
|
||||
search = {
|
||||
filters = [ "directory" "host" "session" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,23 +1,28 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
|
||||
home.packages = with pkgs; [
|
||||
nerdfonts
|
||||
home.packages = with pkgs; [
|
||||
nerd-fonts._0xproto
|
||||
_0xproto
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
noto-fonts-color-emoji
|
||||
noto-fonts-emoji-blob-bin
|
||||
unicode-emoji
|
||||
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
nerdfonts
|
||||
ubuntu_font_family
|
||||
zpix-pixel-font
|
||||
_0xproto
|
||||
font-awesome
|
||||
font-awesome_5
|
||||
font-awesome_4
|
||||
nerd-fonts._0xproto
|
||||
|
||||
]++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
||||
|
||||
];
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
fonts.fontconfig.defaultFonts = {
|
||||
8
home/common/nix.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
programs.nix-index.enable = true;
|
||||
|
||||
}
|
||||
99
home/common/sshconfig.nix
Normal file
@@ -0,0 +1,99 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
openssh
|
||||
ssh-askpass-fullscreen
|
||||
sshfs
|
||||
];
|
||||
|
||||
services.ssh-agent.enable = true;
|
||||
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
compression = true;
|
||||
|
||||
matchBlocks = {
|
||||
"*" = {
|
||||
identityFile = [
|
||||
"~/.ssh/nixos"
|
||||
"~/.ssh/id_ed25519"
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
"*.pvv.ntnu.no" = {
|
||||
user="adriangl";
|
||||
};
|
||||
|
||||
"*.ntnu.no !login.pvv.ntnu.no" = {
|
||||
user="adriangl";
|
||||
proxyJump="login.pvv.ntnu.no";
|
||||
};
|
||||
|
||||
|
||||
"snotra" = {
|
||||
user="adriangl";
|
||||
proxyJump="adriangl@login.pvv.ntnu.no";
|
||||
hostname="snotra.idi.ntnu.no";
|
||||
};
|
||||
|
||||
#pbsds
|
||||
|
||||
"garp.pbsds.net" = {
|
||||
user="adrlau";
|
||||
proxyJump = "login.pvv.ntnu.no";
|
||||
extraOptions = {
|
||||
StrictHostKeyChecking = "no";
|
||||
UserKnownHostsFile = "/dev/null";
|
||||
};
|
||||
};
|
||||
"bolle.pbsds.net" = {
|
||||
user="adrlau";
|
||||
proxyJump = "login.pvv.ntnu.no";
|
||||
extraOptions = {
|
||||
StrictHostKeyChecking = "no";
|
||||
UserKnownHostsFile = "/dev/null";
|
||||
};
|
||||
};
|
||||
|
||||
#pvv
|
||||
"pvv" = {
|
||||
user="adriangl";
|
||||
hostname="login.pvv.ntnu.no";
|
||||
};
|
||||
"isvegg" = {
|
||||
user="adriangl";
|
||||
hostname="isvegg.pvv.ntnu.no";
|
||||
};
|
||||
|
||||
#home
|
||||
"aragon" = {
|
||||
port = 6969;
|
||||
hostname="100.74.34.149";
|
||||
};
|
||||
|
||||
"galadriel" = {
|
||||
port = 6969;
|
||||
hostname="100.84.215.84";
|
||||
};
|
||||
|
||||
"gandalf" = {
|
||||
port = 6969;
|
||||
hostname="100.124.183.16";
|
||||
};
|
||||
|
||||
"elrond" = {
|
||||
port = 6969;
|
||||
hostname="100.101.17.39 ";
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
|
||||
extraConfig = "";
|
||||
};
|
||||
}
|
||||
|
||||
79
home/gunalx/base.nix
Normal file
@@ -0,0 +1,79 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
../common/sshconfig.nix
|
||||
../common/nix.nix
|
||||
../common/atuin.nix
|
||||
];
|
||||
|
||||
programs.nix-index = {
|
||||
enableBashIntegration = true;
|
||||
enable = true;
|
||||
};
|
||||
|
||||
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
"rebuild" = "sudo nixos-rebuild switch --no-write-lock-file --flake git+https://github.com/adrlau/nix-dotfiles.git -L --impure";
|
||||
"nixedit" = "sudo vim /etc/nixos/nix-dotfiles/.";
|
||||
"nixdir" = "cd /etc/nixos/nix-dotfiles";
|
||||
|
||||
|
||||
"," = "comma ";
|
||||
|
||||
"gst" = "git status";
|
||||
"gsw" = "git switch";
|
||||
"gcm" = "git commit -m ";
|
||||
"gca" = "git commit --amend";
|
||||
"gaa" = "git add -A";
|
||||
"gb" = "git branch";
|
||||
|
||||
"sl" = "eza";
|
||||
"ls" = "eza";
|
||||
"lls" = "ls";
|
||||
"la" = "eza -la";
|
||||
"tree" = "eza -T";
|
||||
"neofetch" = "fastfetch";
|
||||
};
|
||||
historyControl = ["ignoredups" "ignorespace" "erasedups"];
|
||||
historyIgnore = [ "ls" "cd" "exit" "cd .." ".." "la"];
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
bottom
|
||||
htop
|
||||
fastfetch
|
||||
eza
|
||||
ripgrep
|
||||
foot.terminfo
|
||||
comma
|
||||
];
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
|
||||
extraConfig = {
|
||||
pull.rebase = true;
|
||||
push.autoSetupRemote = true;
|
||||
color.ui = "auto";
|
||||
init.defaultBranch = "main";
|
||||
lfs.enable = true;
|
||||
user = {
|
||||
name = "Adrian G L";
|
||||
email = "adrian@lauterer.it";
|
||||
};
|
||||
};
|
||||
ignores = [
|
||||
"*~"
|
||||
"*.swp"
|
||||
".DS_Store"
|
||||
".vscode"
|
||||
"*__PYCACHE__*"
|
||||
"*__pycache__*"
|
||||
];
|
||||
};
|
||||
|
||||
home.stateVersion = "23.05";
|
||||
}
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
enableUpdateCheck = false;
|
||||
enableExtensionUpdateCheck = false;
|
||||
profiles.default.enableUpdateCheck = false;
|
||||
profiles.default.enableExtensionUpdateCheck = false;
|
||||
mutableExtensionsDir = true;
|
||||
|
||||
# Extensions
|
||||
extensions = (with pkgs.vscode-extensions; [
|
||||
profiles.default.extensions = (with pkgs.vscode-extensions; [
|
||||
# Stable
|
||||
ms-vscode-remote.remote-ssh
|
||||
mhutchie.git-graph
|
||||
@@ -39,7 +39,7 @@
|
||||
]);
|
||||
|
||||
# Settings
|
||||
userSettings = {
|
||||
profiles.default.userSettings = {
|
||||
# General
|
||||
"editor.fontSize" = 16;
|
||||
"editor.fontFamily" = "'Jetbrains Mono', 'monospace', monospace";
|
||||
81
home/gunalx/colors.nix
Normal file
@@ -0,0 +1,81 @@
|
||||
{ pkgs, config, nix-colors, ... }:
|
||||
|
||||
let
|
||||
nix-colors-lib = nix-colors.lib.contrib { inherit pkgs; };
|
||||
|
||||
background = "010C09";
|
||||
foreground = "FFFFFF";
|
||||
offWhite = "F0FFF8";
|
||||
teal = "60C89A";
|
||||
red = "E64553";
|
||||
blue = "58B5E0";
|
||||
green = "79E05B";
|
||||
purple = "6B5BDC";
|
||||
magenta = "80D1A0";
|
||||
cyan = "5FE2C5";
|
||||
yellow = "F5D24D";
|
||||
orange = "FF8800";
|
||||
pink = "FF4EC9";
|
||||
grey = "888B8E";
|
||||
lightGrey = "F3FCF7";
|
||||
darkTeal = "154E44";
|
||||
lighterTeal = "2C7A6A";
|
||||
lightTeal = "B0E8DA";
|
||||
|
||||
in{
|
||||
imports = [
|
||||
nix-colors.homeManagerModules.default
|
||||
];
|
||||
|
||||
# colorScheme = nix-colors-lib.colorSchemeFromPicture {
|
||||
# path = ./assets/evergarden-telescope.jpg;
|
||||
# variant = "dark";
|
||||
# };
|
||||
colorScheme = {
|
||||
slug = "teal-green-dark";
|
||||
name = "Teal Green Dark";
|
||||
author = "Auto‐generated";
|
||||
palette = {
|
||||
# Base16 Teal‐Green Dark Theme
|
||||
base00 = "0f1f1c"; # Default background
|
||||
base01 = "143028"; # Lighter background (status bars)
|
||||
base02 = "1e3b34"; # Selection background
|
||||
base03 = "28514b"; # Comments, secondary content
|
||||
base04 = "4a7b70"; # Dark foreground (status bars)
|
||||
base05 = "d4efe0"; # Default foreground
|
||||
base06 = "e4f8f2"; # Light foreground
|
||||
base07 = "fafdfb"; # Lightest background
|
||||
base08 = "63d1be"; # Variables, markup link text
|
||||
base09 = "3dc28f"; # Integers, constants
|
||||
base0A = "a2e096"; # Classes, search highlight
|
||||
base0B = "8ce45a"; # Strings, inserted
|
||||
base0C = "4cd7e5"; # Support, escape characters
|
||||
base0D = "2e97d5"; # Functions, headings
|
||||
base0E = "df6fad"; # Keywords, selectors
|
||||
base0F = "e5d97f"; # Deprecated tags
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = "Adwaita-dark";
|
||||
package = pkgs.gnome-themes-extra;
|
||||
};
|
||||
};
|
||||
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme.name = "adwaita";
|
||||
style.name = "adwaita-dark";
|
||||
};
|
||||
|
||||
# Ensure the Adwaita GTK theme is installed so wlogout can load gtk.css
|
||||
home.packages = with pkgs; [
|
||||
gnome-themes-extra
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
642
home/gunalx/config.kdl
Normal file
@@ -0,0 +1,642 @@
|
||||
// This config is in the KDL format: https://kdl.dev
|
||||
// "/-" comments out the following node.
|
||||
// Check the wiki for a full description of the configuration:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
|
||||
|
||||
// Input device configuration.
|
||||
// Find the full list of options on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
// You can set rules, model, layout, variant and options.
|
||||
// For more information, see xkeyboard-config(7).
|
||||
|
||||
// For example:
|
||||
layout "us,no"
|
||||
//options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||||
options "grp:ctrl_space_toggle"
|
||||
}
|
||||
}
|
||||
|
||||
// Next sections include libinput settings.
|
||||
// Omitting settings disables them, or leaves them at their default values.
|
||||
touchpad {
|
||||
// off
|
||||
tap
|
||||
// dwt
|
||||
// dwtp
|
||||
// drag-lock
|
||||
natural-scroll
|
||||
accel-speed 0.1
|
||||
accel-profile "flat"
|
||||
// scroll-method "two-finger"
|
||||
// disabled-on-external-mouse
|
||||
}
|
||||
|
||||
mouse {
|
||||
// off
|
||||
// natural-scroll
|
||||
// accel-speed 0.2
|
||||
// accel-profile "flat"
|
||||
// scroll-method "no-scroll"
|
||||
}
|
||||
|
||||
trackpoint {
|
||||
// off
|
||||
// natural-scroll
|
||||
// accel-speed 0.2
|
||||
// accel-profile "flat"
|
||||
// scroll-method "on-button-down"
|
||||
// scroll-button 273
|
||||
// middle-emulation
|
||||
}
|
||||
|
||||
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
||||
warp-mouse-to-focus
|
||||
|
||||
// Focus windows and outputs automatically when moving the mouse into them.
|
||||
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
||||
// You can configure outputs by their name, which you can find
|
||||
// by running `niri msg outputs` while inside a niri instance.
|
||||
// The built-in laptop monitor is usually called "eDP-1".
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
|
||||
// Remember to uncomment the node by removing "/-"!
|
||||
output "AU Optronics 0x212B Unknown" {
|
||||
// Uncomment this line to disable this output.
|
||||
// off
|
||||
|
||||
// Resolution and, optionally, refresh rate of the output.
|
||||
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||||
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
||||
// for the resolution.
|
||||
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||||
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||||
mode "3840x2160@60.002"
|
||||
|
||||
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
||||
scale 2
|
||||
|
||||
// Transform allows to rotate the output counter-clockwise, valid values are:
|
||||
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||||
transform "normal"
|
||||
|
||||
// Position of the output in the global coordinate space.
|
||||
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||||
// The cursor can only move between directly adjacent outputs.
|
||||
// Output scale and rotation has to be taken into account for positioning:
|
||||
// outputs are sized in logical, or scaled, pixels.
|
||||
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||||
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
||||
// If the position is unset or results in an overlap, the output is instead placed
|
||||
// automatically.
|
||||
position x=1920 y=2160
|
||||
}
|
||||
output "ASUSTek COMPUTER INC ASUS MB16AH L9LMTF068515" { //MAYBE move to be on the side of main monitor.
|
||||
mode "1920x1080@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=1920 y=1080
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT01710L4" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=960 y=960
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT0181039" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=2880 y=960
|
||||
}
|
||||
|
||||
|
||||
|
||||
//switch events for open closing lid.
|
||||
switch-events {
|
||||
lid-close { spawn "swaylock"; }
|
||||
//lid-open { spawn "notify-send" "The laptop lid is open!"; }
|
||||
tablet-mode-on { spawn "bash" "-c" "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true"; }
|
||||
tablet-mode-off { spawn "bash" "-c" "gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false"; }
|
||||
}
|
||||
|
||||
|
||||
// Settings that influence how windows are positioned and sized.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
||||
layout {
|
||||
// Set gaps around windows in logical pixels.
|
||||
gaps 8
|
||||
|
||||
// When to center a column when changing focus, options are:
|
||||
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||
// or right edge of the screen.
|
||||
// - "always", the focused column will always be centered.
|
||||
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||
// together with the previously focused column.
|
||||
center-focused-column "on-overflow"
|
||||
|
||||
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||
preset-column-widths {
|
||||
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||
// The default preset widths are 1/3, 1/2 and 2/3 of the output but that is annoying.
|
||||
proportion 0.3333333
|
||||
proportion 0.5
|
||||
proportion 0.6666667
|
||||
proportion 0.9
|
||||
|
||||
// Fixed sets the width in logical pixels exactly.
|
||||
// fixed 1920
|
||||
}
|
||||
|
||||
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||
// preset-window-heights { }
|
||||
|
||||
// You can change the default width of the new windows.
|
||||
default-column-width { proportion 0.5; }
|
||||
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||
// default-column-width {}
|
||||
|
||||
// By default focus ring and border are rendered as a solid background rectangle
|
||||
// behind windows. That is, they will show up through semitransparent windows.
|
||||
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||
// client-side decorations.
|
||||
// Alternatively, you can override it with a window rule called
|
||||
// `draw-border-with-background`.
|
||||
|
||||
// You can change how the focus ring looks.
|
||||
focus-ring {
|
||||
// Uncomment this line to disable the focus ring.
|
||||
// off
|
||||
|
||||
// How many logical pixels the ring extends out from the windows.
|
||||
width 2
|
||||
|
||||
// Colors can be set in a variety of ways:
|
||||
// - CSS named colors: "red"
|
||||
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||
|
||||
// Color of the ring on the active monitor.
|
||||
active-color "#7fffc8"
|
||||
|
||||
// Color of the ring on inactive monitors.
|
||||
inactive-color "#505050"
|
||||
|
||||
// You can also use gradients. They take precedence over solid colors.
|
||||
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||
// The angle is the same as in linear-gradient, and is optional,
|
||||
// defaulting to 180 (top-to-bottom gradient).
|
||||
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||
// Changing the color space is also supported, check the wiki for more info.
|
||||
//
|
||||
// active-gradient from="#80c8ff" to="#bbddff" angle=45
|
||||
|
||||
// You can also color the gradient relative to the entire view
|
||||
// of the workspace, rather than relative to just the window itself.
|
||||
// To do that, set relative-to="workspace-view".
|
||||
//
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||
border {
|
||||
// The settings are the same as for the focus ring.
|
||||
// If you enable the border, you probably want to disable the focus ring.
|
||||
off
|
||||
width 2
|
||||
active-color "#ffc87f"
|
||||
inactive-color "#505050"
|
||||
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can enable drop shadows for windows.
|
||||
shadow {
|
||||
// Uncomment the next line to enable shadows.
|
||||
on
|
||||
|
||||
// By default, the shadow draws only around its window, and not behind it.
|
||||
// Uncomment this setting to make the shadow draw behind its window.
|
||||
//
|
||||
// Note that niri has no way of knowing about the CSD window corner
|
||||
// radius. It has to assume that windows have square corners, leading to
|
||||
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||
// those artifacts.
|
||||
//
|
||||
// However, instead you may want to set prefer-no-csd and/or
|
||||
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||
// draw the shadow correctly, without having to draw it behind the
|
||||
// window. These will also remove client-side shadows if the window
|
||||
// draws any.
|
||||
//
|
||||
//draw-behind-window false
|
||||
|
||||
// You can change how shadows look. The values below are in logical
|
||||
// pixels and match the CSS box-shadow properties.
|
||||
|
||||
// Softness controls the shadow blur radius.
|
||||
softness 30
|
||||
|
||||
// Spread expands the shadow.
|
||||
spread 5
|
||||
|
||||
// Offset moves the shadow relative to the window.
|
||||
offset x=0 y=5
|
||||
|
||||
// You can also change the shadow color and opacity.
|
||||
color "#0007"
|
||||
}
|
||||
|
||||
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||
// Left and right struts will cause the next window to the side to always be visible.
|
||||
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||
// layer-shell panels and regular gaps.
|
||||
struts {
|
||||
left 24
|
||||
right 24
|
||||
// top 64
|
||||
// bottom 64
|
||||
}
|
||||
}
|
||||
|
||||
// Add lines like this to spawn processes at startup.
|
||||
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||
// which may be more convenient to use.
|
||||
// See the binds section below for more spawn examples.
|
||||
// spawn-at-startup "alacritty" "-e" "fish"
|
||||
spawn-at-startup "foot" "--server"
|
||||
spawn-at-startup "xwayland-satellite"
|
||||
spawn-at-startup "mako"
|
||||
spawn-at-startup "swww-daemon"
|
||||
spawn-at-startup "waybar"
|
||||
spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"
|
||||
|
||||
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||
// If the client will specifically ask for CSD, the request will be honored.
|
||||
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||
prefer-no-csd
|
||||
|
||||
// You can change the path where screenshots are saved.
|
||||
// A ~ at the front will be expanded to the home directory.
|
||||
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||
screenshot-path "~/Pictures/screenshots/screenshot-%Y-%m-%d %H-%M-%S.png"
|
||||
|
||||
// You can also set this to null to disable saving screenshots to disk.
|
||||
// screenshot-path null
|
||||
|
||||
// Animation settings.
|
||||
// The wiki explains how to configure individual animations:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
||||
animations {
|
||||
// Uncomment to turn off all animations.
|
||||
off
|
||||
|
||||
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||
// slowdown 3.0
|
||||
}
|
||||
|
||||
// Window rules let you adjust behavior for individual windows.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
||||
|
||||
// Work around WezTerm's initial configure bug
|
||||
// by setting an empty default-column-width.
|
||||
window-rule {
|
||||
// This regular expression is intentionally made as specific as possible,
|
||||
// since this is the default config, and we want no false positives.
|
||||
// You can get away with just app-id="wezterm" if you want.
|
||||
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||
default-column-width {}
|
||||
}
|
||||
|
||||
// Open the Firefox picture-in-picture player as floating by default.
|
||||
window-rule {
|
||||
// This app-id regular expression will work for both:
|
||||
// - host Firefox (app-id is "firefox")
|
||||
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
|
||||
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||
match app-id=r#"firefox$"# title="^Bitwarden$"
|
||||
match app-id=r#"firefox$"# title="^Extension: (Bitwarden Password Manager) - Bitwarden — Mozilla Firefox$"
|
||||
match app-id=r#"Bitwarden$"#
|
||||
open-floating true
|
||||
}
|
||||
|
||||
//niri overview python script.
|
||||
window-rule {
|
||||
match app-id=r#"niri-overview.py"#
|
||||
match app-id=r#"niri_overview.py"#
|
||||
match app-id=r#"niri_overview.bin"#
|
||||
match app-id=r#"niri_overview"#
|
||||
open-focused true
|
||||
open-floating true
|
||||
default-window-height { proportion 0.5; }
|
||||
default-column-width { proportion 0.8; }
|
||||
}
|
||||
|
||||
//fix steam notifications to bottom rigth
|
||||
window-rule {
|
||||
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
|
||||
default-floating-position x=10 y=10 relative-to="bottom-right"
|
||||
}
|
||||
|
||||
|
||||
// Example: block out two password managers from screen capture.
|
||||
// (This example rule is commented out with a "/-" in front.)
|
||||
/-window-rule {
|
||||
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||
match app-id=r#"^Bitwarden$"#
|
||||
|
||||
block-out-from "screen-capture"
|
||||
|
||||
// Use this instead if you want them visible on third-party screenshot tools.
|
||||
// block-out-from "screencast"
|
||||
}
|
||||
|
||||
// Example: enable rounded corners for all windows.
|
||||
// (This example rule is commented out with a "/-" in front.)
|
||||
/-window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
binds {
|
||||
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||
// in the end. To find an XKB name for a particular key, you may use a program
|
||||
// like wev.
|
||||
//
|
||||
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||
// when running as a winit window.
|
||||
//
|
||||
// Most actions that you can bind here can also be invoked programmatically with
|
||||
// `niri msg action do-something`.
|
||||
|
||||
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||
// shows a list of important hotkeys.
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
|
||||
// spawn niri overview script
|
||||
Mod+Slash { spawn "/home/gunalx/.config/niri/niri_overview/niri_overview.bin"; }
|
||||
// for next release
|
||||
// Mod+Slash { toggle-overview; }
|
||||
|
||||
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||
Mod+Return { spawn "foot"; }
|
||||
Mod+D { spawn "fuzzel"; }
|
||||
Super+M { spawn "swaylock"; }
|
||||
|
||||
// You can also use a shell. Do this if you need pipes, multiple commands, etc.
|
||||
// Note: the entire command goes as a single argument in the end.
|
||||
// Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
|
||||
|
||||
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||
|
||||
Mod+Shift+Q { close-window; }
|
||||
|
||||
Mod+Left { focus-column-left; }
|
||||
Mod+Down { focus-window-down; }
|
||||
Mod+Up { focus-window-up; }
|
||||
Mod+Right { focus-column-right; }
|
||||
Mod+H { focus-column-left; }
|
||||
Mod+J { focus-window-down; }
|
||||
Mod+K { focus-window-up; }
|
||||
Mod+L { focus-column-right; }
|
||||
|
||||
Alt+Tab { focus-window-previous; }
|
||||
|
||||
Mod+Ctrl+Left { move-column-left; }
|
||||
Mod+Ctrl+Down { move-window-down; }
|
||||
Mod+Ctrl+Up { move-window-up; }
|
||||
Mod+Ctrl+Right { move-column-right; }
|
||||
Mod+Ctrl+H { move-column-left; }
|
||||
Mod+Ctrl+J { move-window-down; }
|
||||
Mod+Ctrl+K { move-window-up; }
|
||||
Mod+Ctrl+L { move-column-right; }
|
||||
|
||||
// Alternative commands that move across workspaces when reaching
|
||||
// the first or last window in a column.
|
||||
// Mod+J { focus-window-or-workspace-down; }
|
||||
// Mod+K { focus-window-or-workspace-up; }
|
||||
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||
|
||||
Mod+Home { focus-column-first; }
|
||||
Mod+End { focus-column-last; }
|
||||
Mod+Ctrl+Home { move-column-to-first; }
|
||||
Mod+Ctrl+End { move-column-to-last; }
|
||||
|
||||
Mod+Shift+Left { focus-monitor-left; }
|
||||
Mod+Shift+Down { focus-monitor-down; }
|
||||
Mod+Shift+Up { focus-monitor-up; }
|
||||
Mod+Shift+Right { focus-monitor-right; }
|
||||
Mod+Shift+H { focus-monitor-left; }
|
||||
Mod+Shift+J { focus-monitor-down; }
|
||||
Mod+Shift+K { focus-monitor-up; }
|
||||
Mod+Shift+L { focus-monitor-right; }
|
||||
|
||||
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
// And you can also move a whole workspace to another monitor:
|
||||
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
Mod+Page_Down { focus-workspace-down; }
|
||||
Mod+Page_Up { focus-workspace-up; }
|
||||
Mod+U { focus-workspace-down; }
|
||||
Mod+I { focus-workspace-up; }
|
||||
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
||||
// ...
|
||||
|
||||
Mod+Shift+Page_Down { move-workspace-down; }
|
||||
Mod+Shift+Page_Up { move-workspace-up; }
|
||||
Mod+Shift+U { move-workspace-down; }
|
||||
Mod+Shift+I { move-workspace-up; }
|
||||
|
||||
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||
// These binds will change direction based on the natural-scroll setting.
|
||||
//
|
||||
// To avoid scrolling through workspaces really fast, you can use
|
||||
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||
|
||||
// Usually scrolling up and down with Shift in applications results in
|
||||
// horizontal scrolling; these binds replicate that.
|
||||
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||
|
||||
// Similarly, you can bind touchpad scroll "ticks".
|
||||
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||
// discrete intervals.
|
||||
// These binds are also affected by touchpad's natural-scroll, so these
|
||||
// example binds are "inverted", since we have natural-scroll enabled for
|
||||
// touchpads by default.
|
||||
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
||||
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
||||
|
||||
// You can refer to workspaces by index. However, keep in mind that
|
||||
// niri is a dynamic workspace system, so these commands are kind of
|
||||
// "best effort". Trying to refer to a workspace index bigger than
|
||||
// the current workspace count will instead refer to the bottommost
|
||||
// (empty) workspace.
|
||||
//
|
||||
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||
// will all refer to the 3rd workspace.
|
||||
Mod+1 { focus-workspace 1; }
|
||||
Mod+2 { focus-workspace 2; }
|
||||
Mod+3 { focus-workspace 3; }
|
||||
Mod+4 { focus-workspace 4; }
|
||||
Mod+5 { focus-workspace 5; }
|
||||
Mod+6 { focus-workspace 6; }
|
||||
Mod+7 { focus-workspace 7; }
|
||||
Mod+8 { focus-workspace 8; }
|
||||
Mod+9 { focus-workspace 9; }
|
||||
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||
|
||||
// Switches focus between the current and the previous workspace.
|
||||
// Mod+Tab { focus-workspace-previous; }
|
||||
|
||||
// The following binds move the focused window in and out of a column.
|
||||
// If the window is alone, they will consume it into the nearby column to the side.
|
||||
// If the window is already in a column, they will expel it out.
|
||||
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||
Mod+BracketRight { consume-or-expel-window-right; }
|
||||
|
||||
// Consume one window from the right to the bottom of the focused column.
|
||||
Mod+Comma { consume-window-into-column; }
|
||||
// Expel the bottom window from the focused column to the right.
|
||||
Mod+Period { expel-window-from-column; }
|
||||
|
||||
Mod+R { switch-preset-column-width; }
|
||||
Mod+Shift+R { switch-preset-window-height; }
|
||||
Mod+Ctrl+R { reset-window-height; }
|
||||
Mod+F { maximize-column; }
|
||||
Mod+Shift+F { fullscreen-window; }
|
||||
|
||||
// Expand the focused column to space not taken up by other fully visible columns.
|
||||
// Makes the column "fill the rest of the space".
|
||||
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||
|
||||
Mod+C { center-column; }
|
||||
|
||||
// Finer width adjustments.
|
||||
// This command can also:
|
||||
// * set width in pixels: "1000"
|
||||
// * adjust width in pixels: "-5" or "+5"
|
||||
// * set width as a percentage of screen width: "25%"
|
||||
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||
Mod+Minus { set-column-width "-10%"; }
|
||||
Mod+Equal { set-column-width "+10%"; }
|
||||
|
||||
// Finer height adjustments when in column with other windows.
|
||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||
|
||||
// Move the focused window between the floating and the tiling layout.
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||
|
||||
// Toggle tabbed column display mode.
|
||||
// Windows in this column will appear as vertical tabs,
|
||||
// rather than stacked on top of each other.
|
||||
Mod+W { toggle-column-tabbed-display; }
|
||||
|
||||
// Actions to switch layouts.
|
||||
// Note: if you uncomment these, make sure you do NOT have
|
||||
// a matching layout switch hotkey configured in xkb options above.
|
||||
// Having both at once on the same hotkey will break the switching,
|
||||
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||
// Mod+Space { switch-layout "next"; }
|
||||
// Mod+Shift+Space { switch-layout "prev"; }
|
||||
|
||||
Print { screenshot; }
|
||||
Ctrl+Print { screenshot-screen; }
|
||||
Alt+Print { screenshot-window; }
|
||||
|
||||
// Applications such as remote-desktop clients and software KVM switches may
|
||||
// request that niri stops processing the keyboard shortcuts defined here
|
||||
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||
// so a buggy application can't hold your session hostage.
|
||||
//
|
||||
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||
// which ensures niri always processes them, even when an inhibitor is active.
|
||||
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||
|
||||
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||
Mod+Shift+E { quit; }
|
||||
Ctrl+Alt+Delete { quit; }
|
||||
|
||||
// Powers off the monitors. To turn them back on, do any input like
|
||||
// moving the mouse or pressing any other key.
|
||||
Mod+Shift+P { power-off-monitors; }
|
||||
}
|
||||
|
||||
|
||||
//Enviroment to be set.
|
||||
environment {
|
||||
DISPLAY ":0"
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
}
|
||||
45
home/gunalx/fcitx5.nix
Normal file
@@ -0,0 +1,45 @@
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
i18n.inputMethod = {
|
||||
enable = true;
|
||||
type = "fcitx5";
|
||||
|
||||
fcitx5 = {
|
||||
# 1) Load the GTK bridge, the classic UI and the Catppuccin theme package
|
||||
addons = with pkgs; [
|
||||
fcitx5-gtk
|
||||
fcitx5-mozc
|
||||
catppuccin-fcitx5
|
||||
];
|
||||
|
||||
# 2) Install the Catppuccin theme under $XDG_DATA_HOME/fcitx5/themes/catppuccin
|
||||
themes = {
|
||||
catppuccin = {
|
||||
highlightImage = "${pkgs.catppuccin-fcitx5}/share/fcitx5/themes/catppuccin/highlight.svg";
|
||||
panelImage = "${pkgs.catppuccin-fcitx5}/share/fcitx5/themes/catppuccin/panel.svg";
|
||||
theme = "${pkgs.catppuccin-fcitx5}/share/fcitx5/themes/catppuccin/theme.conf";
|
||||
};
|
||||
}; # i18n.inputMethod.fcitx5.themes.<name> … [source_id=2]
|
||||
|
||||
settings = {
|
||||
# 3) Tell the classic UI to use “catppuccin”
|
||||
addons.classicui.globalSection = {
|
||||
Theme = "catppuccin";
|
||||
};
|
||||
|
||||
# 4) Your other config (hotkey, layouts, IM engines…)
|
||||
globalOptions."Global" = {
|
||||
TriggerKey = "Control+space";
|
||||
};
|
||||
inputMethod."Default" = {
|
||||
Enabled = "xkb:us::eng,xkb:no::nob,xkb:jp::jpn,mozc";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# 5) Force your own ExecStart so you never get “conflicting definition” errors
|
||||
systemd.user.services.fcitx5-daemon.Service.ExecStart =
|
||||
lib.mkForce "${pkgs.fcitx5-with-addons}/bin/fcitx5";
|
||||
}
|
||||
53
home/gunalx/foot.nix
Normal file
@@ -0,0 +1,53 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
foot
|
||||
];
|
||||
|
||||
programs.foot.enable = true;
|
||||
programs.foot.settings = {
|
||||
|
||||
main = {
|
||||
term = "xterm-256color";
|
||||
font = "0xproto:size=14";
|
||||
#dpi-aware = "yes";
|
||||
};
|
||||
mouse = {
|
||||
hide-when-typing = "yes";
|
||||
};
|
||||
|
||||
|
||||
colors = {
|
||||
alpha = "0.7";
|
||||
foreground = "${config.colorScheme.palette.base05}";
|
||||
background = "${config.colorScheme.palette.base00}";
|
||||
|
||||
regular0 = "${config.colorScheme.palette.base00}";
|
||||
regular1 = "${config.colorScheme.palette.base08}";
|
||||
regular2 = "${config.colorScheme.palette.base0B}";
|
||||
regular3 = "${config.colorScheme.palette.base0A}";
|
||||
regular4 = "${config.colorScheme.palette.base0D}";
|
||||
regular5 = "${config.colorScheme.palette.base0E}";
|
||||
regular6 = "${config.colorScheme.palette.base0C}";
|
||||
regular7 = "${config.colorScheme.palette.base05}";
|
||||
|
||||
bright0 = "${config.colorScheme.palette.base03}";
|
||||
bright1 = "${config.colorScheme.palette.base08}";
|
||||
bright2 = "${config.colorScheme.palette.base0B}";
|
||||
bright3 = "${config.colorScheme.palette.base0A}";
|
||||
bright4 = "${config.colorScheme.palette.base0D}";
|
||||
bright5 = "${config.colorScheme.palette.base0E}";
|
||||
bright6 = "${config.colorScheme.palette.base0C}";
|
||||
bright7 = "${config.colorScheme.palette.base07}";
|
||||
selection-foreground = "${config.colorScheme.palette.base00}";
|
||||
selection-background = "${config.colorScheme.palette.base0A}";
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
./base.nix
|
||||
./code.nix
|
||||
./sway.nix
|
||||
./niri.nix
|
||||
../common/fonts.nix
|
||||
./colors.nix
|
||||
|
||||
#./stylix.nix
|
||||
1852
home/gunalx/fuzzel-emoji
Executable file
52
home/gunalx/fuzzel.nix
Normal file
@@ -0,0 +1,52 @@
|
||||
{ config, pkgs, lib, inputs, ... }:
|
||||
|
||||
let
|
||||
palette = config.colorScheme.palette;
|
||||
hex = colour: lib.removePrefix "#" colour;
|
||||
in
|
||||
|
||||
{
|
||||
programs.fuzzel = {
|
||||
enable = true;
|
||||
package = pkgs.fuzzel;
|
||||
settings = {
|
||||
main = {
|
||||
terminal = "${pkgs.foot}/bin/foot";
|
||||
layer = "overlay";
|
||||
use-bold = true;
|
||||
fields = "filename,name,keywords,exec,comment,generic";
|
||||
tabs = "4";
|
||||
|
||||
width = 60; # Wider window (characters)
|
||||
lines = 20; # Show more items vertically
|
||||
horizontal-pad = 50; # Horizontal padding
|
||||
vertical-pad = 15; # Vertical padding
|
||||
|
||||
font = "monospace:size=16";
|
||||
|
||||
anchor = "top";
|
||||
y-margin = 240;
|
||||
icons-enabled = true;
|
||||
# match-mode = "fzf";
|
||||
# image-size-ratio = 0.5;
|
||||
};
|
||||
colors = {
|
||||
background = "${hex palette.base00}ff";
|
||||
text = "${hex palette.base03}ff";
|
||||
prompt = "${hex palette.base03}ff";
|
||||
placeholder = "${hex palette.base03}ff";
|
||||
input = "${hex palette.base05}ff";
|
||||
match = "${hex palette.base08}ff";
|
||||
selection = "${hex palette.base02}ff";
|
||||
"selection-text" = "${hex palette.base05}ff";
|
||||
"selection-match" = "${hex palette.base08}ff";
|
||||
counter = "${hex palette.base04}ff";
|
||||
border = "${hex palette.base03}ff";
|
||||
};
|
||||
border = {
|
||||
radius = 20;
|
||||
width = 3;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
50
home/gunalx/mako.nix
Normal file
@@ -0,0 +1,50 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
palette = config.colorscheme.palette;
|
||||
in {
|
||||
services.mako = {
|
||||
enable = true; # Turn on mako
|
||||
package = pkgs.mako; # Which package to use
|
||||
|
||||
# Colors (from your colorscheme)
|
||||
settings.background-color = "#${palette.base00}FF"; # popup background
|
||||
settings.text-color = "#${palette.base05}FF"; # popup text
|
||||
settings.border-color = "#${palette.base03}FF"; # popup border
|
||||
settings.progress-color = "over #${palette.base0A}FF"; # progress bar
|
||||
|
||||
# Placement & layering
|
||||
settings.anchor = "top-right"; # corner on screen
|
||||
settings.layer = "overlay"; # appear above fullscreen
|
||||
|
||||
# Geometry
|
||||
settings.width = 320; # px
|
||||
settings.height = 120; # max px
|
||||
settings.margin = "10"; # all edges
|
||||
settings.padding = "8"; # all edges
|
||||
settings.border-size = 2; # px
|
||||
settings.border-radius = 12; # px
|
||||
|
||||
# Font & icons
|
||||
settings.font = "monospace 10"; # Pango font
|
||||
settings.icons = true; # show icons
|
||||
settings.max-icon-size = 48; # px
|
||||
|
||||
# Behavior & timing
|
||||
settings.default-timeout = 5000; # ms; 0 = no timeout
|
||||
settings.ignore-timeout = true; # use defaultTimeout always
|
||||
settings.actions = true; # clickable actions
|
||||
settings.max-visible = 5; # simultaneous popups
|
||||
settings.sort = "-time"; # newest first
|
||||
settings.group-by = "app-name"; # grouping criteria
|
||||
settings.markup = true; # enable Pango markup
|
||||
|
||||
settings."actionable=true" = {
|
||||
default-timeout = 15000;
|
||||
border-radius = 24;
|
||||
border-color = "#${palette.base08}FF";
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
655
home/gunalx/niri.nix
Normal file
@@ -0,0 +1,655 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
let
|
||||
palette = config.colorScheme.palette;
|
||||
|
||||
niriConfig = ''
|
||||
// KDL‐format niri config
|
||||
|
||||
input {
|
||||
keyboard { xkb { layout "us,no"; options "grp:ctrl_space_toggle"; }; }
|
||||
touchpad {
|
||||
tap
|
||||
natural-scroll
|
||||
accel-speed 0.1
|
||||
accel-profile "flat"
|
||||
}
|
||||
warp-mouse-to-focus
|
||||
focus-follows-mouse max-scroll-amount="0%"
|
||||
}
|
||||
|
||||
output "AU Optronics 0x212B Unknown" {
|
||||
mode "3840x2160@60.002"
|
||||
//focus-at-startup
|
||||
scale 2
|
||||
transform "normal"
|
||||
position x=1920 y=2160
|
||||
}
|
||||
output "ASUSTek COMPUTER INC ASUS MB16AH L9LMTF068515" {
|
||||
mode "1920x1080@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=1920 y=1080
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT01710L4" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=960 y=960
|
||||
}
|
||||
output "Hewlett Packard HP ZR24w CNT0181039" {
|
||||
mode "1920x1200@60.000"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=2880 y=960
|
||||
}
|
||||
|
||||
//desktop outputs.
|
||||
output "Dell Inc. DELL U2410 F525M06G123L" {
|
||||
mode "2560x1440@144.000"
|
||||
scale 1
|
||||
transform "90"
|
||||
position x=0 y=0
|
||||
}
|
||||
output "Samsung Electric Company LC27G5xT H4LR800468" {
|
||||
mode "1920x1200@59.950"
|
||||
variable-refresh-rate on-demand=true
|
||||
//focus-at-startup
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=1200 y=240
|
||||
}
|
||||
|
||||
//switch events for open closing lid.
|
||||
switch-events {
|
||||
lid-close { spawn "swaylock"; }
|
||||
//lid-open { spawn "notify-send" "The laptop lid is open!"; }
|
||||
tablet-mode-on { spawn "bash" "-c" "wvkbd-mobintl"; }
|
||||
tablet-mode-off { spawn "bash" "-c" "pkill wvkbd-mobintl"; }
|
||||
}
|
||||
|
||||
|
||||
// Settings that influence how windows are positioned and sized.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
||||
layout {
|
||||
// Set gaps around windows in logical pixels.
|
||||
gaps 8
|
||||
|
||||
// When to center a column when changing focus, options are:
|
||||
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||
// or right edge of the screen.
|
||||
// - "always", the focused column will always be centered.
|
||||
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||
// together with the previously focused column.
|
||||
center-focused-column "on-overflow"
|
||||
|
||||
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||
preset-column-widths {
|
||||
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||
// The default preset widths are 1/3, 1/2 and 2/3 of the output but that is annoying.
|
||||
proportion 0.3333333
|
||||
proportion 0.5
|
||||
proportion 0.6666667
|
||||
|
||||
// Fixed sets the width in logical pixels exactly.
|
||||
// fixed 1920
|
||||
}
|
||||
|
||||
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||
preset-window-heights {
|
||||
proportion 1.0
|
||||
proportion 0.5
|
||||
|
||||
}
|
||||
|
||||
// You can change the default width of the new windows.
|
||||
default-column-width { proportion 1.0; }
|
||||
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||
// default-column-width {}
|
||||
|
||||
// By default focus ring and border are rendered as a solid background rectangle
|
||||
// behind windows. That is, they will show up through semitransparent windows.
|
||||
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||
// client-side decorations.
|
||||
// Alternatively, you can override it with a window rule called
|
||||
// `draw-border-with-background`.
|
||||
|
||||
// You can change how the focus ring looks.
|
||||
focus-ring {
|
||||
// Uncomment this line to disable the focus ring.
|
||||
// off
|
||||
|
||||
// How many logical pixels the ring extends out from the windows.
|
||||
width 2
|
||||
|
||||
// Colors can be set in a variety of ways:
|
||||
// - CSS named colors: "red"
|
||||
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||
|
||||
// Color of the ring on the active monitor.
|
||||
active-color "${palette.base0D}"
|
||||
|
||||
// Color of the ring on inactive monitors.
|
||||
inactive-color "${palette.base03}"
|
||||
|
||||
// You can also use gradients. They take precedence over solid colors.
|
||||
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||
// The angle is the same as in linear-gradient, and is optional,
|
||||
// defaulting to 180 (top-to-bottom gradient).
|
||||
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||
// Changing the color space is also supported, check the wiki for more info.
|
||||
//
|
||||
// active-gradient from="#80c8ff" to="#bbddff" angle=45
|
||||
|
||||
// You can also color the gradient relative to the entire view
|
||||
// of the workspace, rather than relative to just the window itself.
|
||||
// To do that, set relative-to="workspace-view".
|
||||
//
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||
border {
|
||||
// The settings are the same as for the focus ring.
|
||||
// If you enable the border, you probably want to disable the focus ring.
|
||||
off
|
||||
width 2
|
||||
active-color "${palette.base0A}"
|
||||
inactive-color "${palette.base03}"
|
||||
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||
}
|
||||
|
||||
// You can enable drop shadows for windows.
|
||||
shadow {
|
||||
// Uncomment the next line to enable shadows.
|
||||
on
|
||||
|
||||
// By default, the shadow draws only around its window, and not behind it.
|
||||
// Uncomment this setting to make the shadow draw behind its window.
|
||||
//
|
||||
// Note that niri has no way of knowing about the CSD window corner
|
||||
// radius. It has to assume that windows have square corners, leading to
|
||||
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||
// those artifacts.
|
||||
//
|
||||
// However, instead you may want to set prefer-no-csd and/or
|
||||
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||
// draw the shadow correctly, without having to draw it behind the
|
||||
// window. These will also remove client-side shadows if the window
|
||||
// draws any.
|
||||
//
|
||||
//draw-behind-window false
|
||||
|
||||
// You can change how shadows look. The values below are in logical
|
||||
// pixels and match the CSS box-shadow properties.
|
||||
|
||||
// Softness controls the shadow blur radius.
|
||||
softness 30
|
||||
|
||||
// Spread expands the shadow.
|
||||
spread 5
|
||||
|
||||
// Offset moves the shadow relative to the window.
|
||||
offset x=0 y=5
|
||||
|
||||
// You can also change the shadow color and opacity.
|
||||
color "#0007"
|
||||
}
|
||||
|
||||
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||
// Left and right struts will cause the next window to the side to always be visible.
|
||||
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||
// layer-shell panels and regular gaps.
|
||||
struts {
|
||||
left 24
|
||||
right 24
|
||||
// top 64
|
||||
// bottom 64
|
||||
}
|
||||
}
|
||||
|
||||
overview {
|
||||
zoom 0.5
|
||||
backdrop-color "#${palette.base00}"
|
||||
}
|
||||
|
||||
// Add lines like this to spawn processes at startup.
|
||||
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||
// which may be more convenient to use.
|
||||
// See the binds section below for more spawn examples.
|
||||
// spawn-at-startup "alacritty" "-e" "fish"
|
||||
spawn-at-startup "foot" "--server"
|
||||
spawn-at-startup "xwayland-satellite"
|
||||
spawn-at-startup "mako"
|
||||
spawn-at-startup "swww-daemon"
|
||||
//spawn-at-startup "waybar" //spawns by system service instead
|
||||
spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"
|
||||
|
||||
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||
// If the client will specifically ask for CSD, the request will be honored.
|
||||
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||
prefer-no-csd
|
||||
|
||||
// You can change the path where screenshots are saved.
|
||||
// A ~ at the front will be expanded to the home directory.
|
||||
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||
screenshot-path "~/Pictures/screenshots/screenshot-%Y-%m-%d %H-%M-%S.png"
|
||||
|
||||
// Animation settings.
|
||||
// The wiki explains how to configure individual animations:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
||||
animations {
|
||||
// Uncomment to turn off all animations.
|
||||
off
|
||||
|
||||
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||
// slowdown 0.3
|
||||
|
||||
}
|
||||
|
||||
|
||||
layer-rule {
|
||||
match namespace="^notifications$"
|
||||
block-out-from "screencast"
|
||||
}
|
||||
|
||||
// Window rules let you adjust behavior for individual windows.
|
||||
// Find more information on the wiki:
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
||||
|
||||
|
||||
|
||||
// Floating Bitwarden extension popup windows only
|
||||
window-rule {
|
||||
match title=r#"^Extension: \(Bitwarden Password Manager\) - Bitwarden — Mozilla Firefox$"#
|
||||
match title="^Extension: (Bitwarden Password Manager) - Bitwarden — Mozilla Firefox$"
|
||||
match app-id=r#"(?i)^bitwarden$"#
|
||||
open-floating true
|
||||
default-column-width { proportion 0.3;}
|
||||
default-floating-position x=0 y=0 relative-to="top-left"
|
||||
opacity 0.9
|
||||
block-out-from "screen-capture"
|
||||
}
|
||||
|
||||
// dropdown terminal
|
||||
window-rule {
|
||||
match title="^dropdown$"
|
||||
open-focused true
|
||||
open-floating true
|
||||
default-floating-position x=0 y=0 relative-to="top"
|
||||
default-window-height { proportion 0.5; }
|
||||
// 80% of the screen wide.
|
||||
default-column-width { proportion 0.8; }
|
||||
// block-out-from "screencast"
|
||||
block-out-from "screen-capture"
|
||||
}
|
||||
|
||||
//fix steam notifications to bottom rigth
|
||||
window-rule {
|
||||
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
|
||||
default-floating-position x=10 y=10 relative-to="bottom-right"
|
||||
//block-out-from "screencast"
|
||||
block-out-from "screen-capture"
|
||||
}
|
||||
|
||||
|
||||
window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id="onboard"
|
||||
match app-id="Onboard"
|
||||
open-floating true
|
||||
default-window-height { proportion 0.2; }
|
||||
default-column-width { proportion 0.8; }
|
||||
block-out-from "screen-capture"
|
||||
}
|
||||
|
||||
binds {
|
||||
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||
// in the end. To find an XKB name for a particular key, you may use a program
|
||||
// like wev.
|
||||
//
|
||||
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||
// when running as a winit window.
|
||||
//
|
||||
// Most actions that you can bind here can also be invoked programmatically with
|
||||
// `niri msg action do-something`.
|
||||
|
||||
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||
// shows a list of important hotkeys.
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
Mod+Slash { toggle-overview; }
|
||||
|
||||
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||
Mod+Return { spawn "footclient"; }
|
||||
Mod+T { spawn "sh" "-c" "if pgrep -f '^foot -T dropdown$' >/dev/null; then pkill -f '^foot -T dropdown$'; else exec foot -T dropdown; fi"; }
|
||||
Mod+D { spawn "fuzzel"; }
|
||||
Mod+M { spawn "swaylock" "--grace" "0"; }
|
||||
Mod+O { toggle-window-rule-opacity; }
|
||||
|
||||
// You can also use a shell. Do this if you need pipes, multiple commands, etc.
|
||||
// Note: the entire command goes as a single argument in the end.
|
||||
// Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
|
||||
|
||||
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||
|
||||
Mod+Shift+Q { close-window; }
|
||||
|
||||
Mod+Left { focus-column-or-monitor-left; }
|
||||
Mod+Down { focus-window-or-monitor-down; }
|
||||
Mod+Up { focus-window-or-monitor-up; }
|
||||
Mod+Right { focus-column-or-monitor-right; }
|
||||
Mod+H { focus-column-or-monitor-left; }
|
||||
Mod+J { focus-window-or-monitor-down; }
|
||||
Mod+K { focus-window-or-monitor-up; }
|
||||
Mod+L { focus-column-or-monitor-right; }
|
||||
|
||||
Alt+Tab { focus-window-previous; }
|
||||
|
||||
Mod+Ctrl+Left { move-column-left; }
|
||||
Mod+Ctrl+Down { move-window-down; }
|
||||
Mod+Ctrl+Up { move-window-up; }
|
||||
Mod+Ctrl+Right { move-column-right; }
|
||||
Mod+Ctrl+H { move-column-left; }
|
||||
Mod+Ctrl+J { move-window-down; }
|
||||
Mod+Ctrl+K { move-window-up; }
|
||||
Mod+Ctrl+L { move-column-right; }
|
||||
|
||||
// Alternative commands that move across workspaces when reaching
|
||||
// the first or last window in a column.
|
||||
// Mod+J { focus-window-or-workspace-down; }
|
||||
// Mod+K { focus-window-or-workspace-up; }
|
||||
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||
|
||||
Mod+Home { focus-column-first; }
|
||||
Mod+End { focus-column-last; }
|
||||
Mod+Ctrl+Home { move-column-to-first; }
|
||||
Mod+Ctrl+End { move-column-to-last; }
|
||||
|
||||
Mod+Shift+Left { focus-monitor-left; }
|
||||
Mod+Shift+Down { focus-monitor-down; }
|
||||
Mod+Shift+Up { focus-monitor-up; }
|
||||
Mod+Shift+Right { focus-monitor-right; }
|
||||
Mod+Shift+H { focus-monitor-left; }
|
||||
Mod+Shift+J { focus-monitor-down; }
|
||||
Mod+Shift+K { focus-monitor-up; }
|
||||
Mod+Shift+L { focus-monitor-right; }
|
||||
|
||||
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
// And you can also move a whole workspace to another monitor:
|
||||
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||
// ...
|
||||
|
||||
Mod+Page_Down { focus-workspace-down; }
|
||||
Mod+Page_Up { focus-workspace-up; }
|
||||
Mod+U { focus-workspace-down; }
|
||||
Mod+I { focus-workspace-up; }
|
||||
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||
|
||||
|
||||
Mod+Shift+Page_Down { move-workspace-down; }
|
||||
Mod+Shift+Page_Up { move-workspace-up; }
|
||||
Mod+Shift+U { move-workspace-down; }
|
||||
Mod+Shift+I { move-workspace-up; }
|
||||
|
||||
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||
// These binds will change direction based on the natural-scroll setting.
|
||||
//
|
||||
// To avoid scrolling through workspaces really fast, you can use
|
||||
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||
Mod+Shift+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+Shift+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||
Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||
|
||||
Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; }
|
||||
Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; }
|
||||
Mod+Ctrl+WheelScrollRight cooldown-ms=150 { move-column-right; }
|
||||
Mod+Ctrl+WheelScrollLeft cooldown-ms=150 { move-column-left; }
|
||||
|
||||
// Usually scrolling up and down with Shift in applications results in
|
||||
// horizontal scrolling; these binds replicate that.
|
||||
// But i found it impractical. workspaces i can graphically cahnge. and probably more rarly, so i swapped it
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-column-right; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-column-left; }
|
||||
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-right; }
|
||||
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-left; }
|
||||
|
||||
// Similarly, you can bind touchpad scroll "ticks".
|
||||
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||
// discrete intervals.
|
||||
// These binds are also affected by touchpad's natural-scroll, so these
|
||||
// example binds are "inverted", since we have natural-scroll enabled for
|
||||
// touchpads by default.
|
||||
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
||||
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
||||
|
||||
// You can refer to workspaces by index. However, keep in mind that
|
||||
// niri is a dynamic workspace system, so these commands are kind of
|
||||
// "best effort". Trying to refer to a workspace index bigger than
|
||||
// the current workspace count will instead refer to the bottommost
|
||||
// (empty) workspace.
|
||||
//
|
||||
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||
// will all refer to the 3rd workspace.
|
||||
Mod+1 { focus-workspace 1; }
|
||||
Mod+2 { focus-workspace 2; }
|
||||
Mod+3 { focus-workspace 3; }
|
||||
Mod+4 { focus-workspace 4; }
|
||||
Mod+5 { focus-workspace 5; }
|
||||
Mod+6 { focus-workspace 6; }
|
||||
Mod+7 { focus-workspace 7; }
|
||||
Mod+8 { focus-workspace 8; }
|
||||
Mod+9 { focus-workspace 9; }
|
||||
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||
|
||||
// Alternatively, there are commands to move just a single window:
|
||||
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||
|
||||
// Switches focus between the current and the previous workspace.
|
||||
// Mod+Tab { focus-workspace-previous; }
|
||||
|
||||
// The following binds move the focused window in and out of a column.
|
||||
// If the window is alone, they will consume it into the nearby column to the side.
|
||||
// If the window is already in a column, they will expel it out.
|
||||
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||
Mod+BracketRight { consume-or-expel-window-right; }
|
||||
|
||||
// Consume one window from the right to the bottom of the focused column.
|
||||
Mod+Comma { consume-window-into-column; }
|
||||
// Expel the bottom window from the focused column to the right.
|
||||
Mod+Period { expel-window-from-column; }
|
||||
|
||||
Mod+R { switch-preset-column-width; }
|
||||
Mod+Shift+R { switch-preset-window-height; }
|
||||
Mod+Ctrl+R { reset-window-height; }
|
||||
Mod+F { maximize-column; }
|
||||
Mod+Shift+F { fullscreen-window; }
|
||||
Mod+Ctrl+Shift+F { toggle-windowed-fullscreen; }
|
||||
|
||||
// Expand the focused column to space not taken up by other fully visible columns.
|
||||
// Makes the column "fill the rest of the space".
|
||||
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||
|
||||
Mod+C { center-column; }
|
||||
|
||||
// Finer width adjustments.
|
||||
// This command can also:
|
||||
// * set width in pixels: "1000"
|
||||
// * adjust width in pixels: "-5" or "+5"
|
||||
// * set width as a percentage of screen width: "25%"
|
||||
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||
Mod+Minus { set-column-width "-10%"; }
|
||||
Mod+Equal { set-column-width "+10%"; }
|
||||
Mod+0 { set-column-width "+10%"; }
|
||||
|
||||
// Finer height adjustments when in column with other windows.
|
||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||
Mod+Shift+0 { set-window-height "+10%"; }
|
||||
|
||||
// Move the focused window between the floating and the tiling layout.
|
||||
Mod+V { toggle-window-floating; }
|
||||
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||
|
||||
// Toggle tabbed column display mode.
|
||||
// Windows in this column will appear as vertical tabs,
|
||||
// rather than stacked on top of each other.
|
||||
Mod+W { toggle-column-tabbed-display; }
|
||||
|
||||
// Actions to switch layouts.
|
||||
// Note: if you uncomment these, make sure you do NOT have
|
||||
// a matching layout switch hotkey configured in xkb options above.
|
||||
// Having both at once on the same hotkey will break the switching,
|
||||
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||
// Mod+Space { switch-layout "next"; }
|
||||
// Mod+Shift+Space { switch-layout "prev"; }
|
||||
|
||||
Print { screenshot; }
|
||||
Ctrl+Print { screenshot-screen; }
|
||||
Alt+Print { screenshot-window; }
|
||||
|
||||
// Applications such as remote-desktop clients and software KVM switches may
|
||||
// request that niri stops processing the keyboard shortcuts defined here
|
||||
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||
// so a buggy application can't hold your session hostage.
|
||||
//
|
||||
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||
// which ensures niri always processes them, even when an inhibitor is active.
|
||||
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||
|
||||
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||
Mod+Shift+E { quit; }
|
||||
Ctrl+Alt+Delete { quit; }
|
||||
|
||||
// Powers off the monitors. To turn them back on, do any input like
|
||||
// moving the mouse or pressing any other key.
|
||||
Mod+Shift+P { power-off-monitors; }
|
||||
}
|
||||
|
||||
|
||||
//Enviroment to be set.
|
||||
environment {
|
||||
DISPLAY ":0"
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
}
|
||||
|
||||
'';
|
||||
|
||||
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./waybar.nix
|
||||
./wallpapers.nix
|
||||
./foot.nix
|
||||
./swaylock.nix
|
||||
./wlogout.nix
|
||||
./mako.nix
|
||||
./fcitx5.nix
|
||||
./fuzzel.nix
|
||||
];
|
||||
|
||||
|
||||
home.packages = with pkgs; [
|
||||
niri
|
||||
wl-clipboard
|
||||
pass-wayland
|
||||
wev
|
||||
|
||||
#term
|
||||
foot
|
||||
alacritty
|
||||
|
||||
|
||||
wdisplays
|
||||
swww
|
||||
|
||||
xwayland-satellite
|
||||
|
||||
#bar applets and notifications
|
||||
waybar
|
||||
networkmanagerapplet
|
||||
networkmanager
|
||||
libsForQt5.networkmanager-qt
|
||||
|
||||
|
||||
mako
|
||||
|
||||
swayidle
|
||||
|
||||
#ligth and sound
|
||||
brightnessctl
|
||||
pavucontrol
|
||||
|
||||
fuzzel
|
||||
|
||||
emote
|
||||
|
||||
|
||||
wvkbd
|
||||
|
||||
|
||||
xdg-desktop-portal-gtk
|
||||
xdg-desktop-portal
|
||||
xdg-desktop-portal-wlr
|
||||
xdg-desktop-portal-gnome
|
||||
|
||||
|
||||
#fonts
|
||||
_0xproto
|
||||
font-awesome
|
||||
font-awesome_5
|
||||
font-awesome_4
|
||||
|
||||
];
|
||||
|
||||
# Drop the interpolated KDL into ~/.config/niri/config.kdl
|
||||
home.file.".config/niri/config.kdl" = {
|
||||
text = niriConfig;
|
||||
};
|
||||
}
|
||||
@@ -13,9 +13,11 @@ in
|
||||
imports = [
|
||||
./waybar.nix
|
||||
./foot.nix
|
||||
./fonts.nix
|
||||
./fcitx5.nix
|
||||
./kanshi.nix
|
||||
./swaylock.nix
|
||||
./mako.nix
|
||||
./wlogout.nix
|
||||
#./assets/wallpapers
|
||||
];
|
||||
|
||||
@@ -25,10 +27,12 @@ in
|
||||
#];
|
||||
home.packages = with pkgs; [
|
||||
wl-clipboard
|
||||
libsForQt5.qt5ct
|
||||
#wl-copy
|
||||
libsForQt5.qt5ct
|
||||
qt6Packages.qt6ct
|
||||
pass-wayland
|
||||
wev
|
||||
xkb-switch
|
||||
|
||||
#term
|
||||
foot
|
||||
@@ -44,6 +48,7 @@ in
|
||||
#swaybg
|
||||
swww
|
||||
|
||||
|
||||
#bar applets and notifications
|
||||
waybar
|
||||
networkmanagerapplet
|
||||
@@ -52,7 +57,6 @@ in
|
||||
mako
|
||||
|
||||
#lockscreen and related
|
||||
wleave
|
||||
swayidle
|
||||
#swaylock-effects
|
||||
#swaylock-fancy #migth change to this default may look prettier.
|
||||
@@ -71,23 +75,15 @@ in
|
||||
bemoji
|
||||
fuzzel
|
||||
|
||||
#for emoji picker
|
||||
emote
|
||||
unicode-emoji
|
||||
|
||||
#screenshots
|
||||
grim
|
||||
slurp
|
||||
|
||||
#fonts
|
||||
nerdfonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
nerdfonts
|
||||
ubuntu_font_family
|
||||
zpix-pixel-font
|
||||
_0xproto
|
||||
font-awesome
|
||||
font-awesome_5
|
||||
font-awesome_4
|
||||
@@ -95,6 +91,8 @@ in
|
||||
];
|
||||
|
||||
|
||||
home.keyboard.layout = "us,no";
|
||||
|
||||
home.sessionVariables = {
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
MOZ_USE_XINPUT2 = "1";
|
||||
@@ -120,7 +118,9 @@ in
|
||||
};
|
||||
|
||||
|
||||
|
||||
programs.wlogout = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
wayland.windowManager.sway = let
|
||||
cfg = config.wayland.windowManager.sway;
|
||||
@@ -145,7 +145,19 @@ in {
|
||||
|
||||
#wallpaper
|
||||
{command = "swww-daemon";}
|
||||
{command = "while true; do for wallpaper in $WALLPAPER_DIR/*; do swww img \"$wallpaper\"; sleep 15; done; done;";}
|
||||
{command = ''sleep 3 \
|
||||
wallpapers=("/home/gunalx/Pictures/wallpapers"/*.{jpg,jpeg,png,gif}) \
|
||||
transitions=(fade left right top bottom wipe wave grow center outer) \
|
||||
i=0 \
|
||||
while true; do \
|
||||
img="''${wallpapers[i % ''${#wallpapers[@]}]}" \
|
||||
trans="''${transitions[i % ''${#transitions[@]}]}" \
|
||||
swww img "$img" --transition-type "$trans" --transition-fps 60 --transition-duration 3 \
|
||||
((i++)) \
|
||||
sleep 15m \
|
||||
done
|
||||
'';}
|
||||
#{command = "while true; do for wallpaper in $WALLPAPER_DIR/*; do swww img $wallpaper; sleep 15; done; done;";}
|
||||
|
||||
#idlelock
|
||||
{command = ''swayidle \
|
||||
@@ -258,9 +270,12 @@ in {
|
||||
"${cfg.config.modifier}+f11" = "exec grim -g \"$(slurp)\" ~/Pictures/screenshots/\"screenshot-`date +%F-%T`\".png";
|
||||
"${cfg.config.modifier}+Print" = "exec grim -g \"$(slurp)\" ~/Pictures/screenshots/\"screenshot-`date +%F-%T`\".png";
|
||||
"${cfg.config.modifier}+m" = "exec ${idlelock}";
|
||||
"ctrl+space" = "exec xkb_switch_layout next"; #TODO:verify
|
||||
"${cfg.config.modifier}+tab" = "workspace next";
|
||||
##emoji piacker
|
||||
"${cfg.config.modifier}+period" = "exec emote";
|
||||
#"ctrl+space" = "exec xkb_switch_layout next"; #TODO:verify
|
||||
"${cfg.config.modifier}+tab" = "${menu}";
|
||||
"Alt+tab" = "workspace back_and_forth";
|
||||
"XF86PowerOff" = "exec ${pkgs.wlogout}/bin/wlogout";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -269,8 +284,10 @@ in {
|
||||
xkb_capslock disabled
|
||||
xkb_numlock enabled
|
||||
|
||||
xkb_layout us,no
|
||||
xkb_options :
|
||||
xkb_layout us,no,jp
|
||||
xkb_options ,,
|
||||
xkb_options grp:win_space_toggle
|
||||
xkb_numlock enabled # enable numlock when logging in
|
||||
}
|
||||
|
||||
|
||||
@@ -284,10 +301,25 @@ in {
|
||||
default_floating_border pixel 2
|
||||
titlebar_border_thickness 1
|
||||
|
||||
client.focused #${palette.base0D} #${palette.base00} #${palette.base05} #${palette.base0D} #${palette.base0D}
|
||||
client.focused_inactive #${palette.base0D} #${palette.base00} #${palette.base05} #${palette.base0D} #${palette.base0D}
|
||||
client.unfocused #${palette.base0D} #${palette.base03} #${palette.base05} #${palette.base0D} #${palette.base00}
|
||||
client.urgent #${palette.base0D} #${palette.base0D} #${palette.base03} #${palette.base0D} #${palette.base00}
|
||||
###client.focused #${palette.base0D} #${palette.base00} #${palette.base05} #${palette.base0D} #${palette.base0D}
|
||||
###client.focused_inactive #${palette.base0D} #${palette.base00} #${palette.base05} #${palette.base0D} #${palette.base0D}
|
||||
###client.unfocused #${palette.base0D} #${palette.base03} #${palette.base05} #${palette.base0D} #${palette.base00}
|
||||
###client.urgent #${palette.base0D} #${palette.base0D} #${palette.base03} #${palette.base0D} #${palette.base00}
|
||||
|
||||
# # window decorations
|
||||
# # class border background text indicator child_border
|
||||
# client.focused #80a0ff #303030 #c6c6c6 #80a0ff #80a0ff
|
||||
# client.focused_inactive #80a0ff #303030 #c6c6c6 #80a0ff #80a0ff
|
||||
# client.unfocused #80a0ff #080808 #c6c6c6 #80a0ff #303030
|
||||
# client.urgent #80a0ff #80a0ff #080808 #80a0ff
|
||||
|
||||
# window decorations
|
||||
# class border background text indicator child_border
|
||||
client.focused ${palette.base0A} ${palette.base01} ${palette.base05} ${palette.base0A} ${palette.base0A}
|
||||
client.focused_inactive ${palette.base0A} ${palette.base01} ${palette.base05} ${palette.base0A} ${palette.base0A}
|
||||
client.unfocused ${palette.base0A} ${palette.base00} ${palette.base05} ${palette.base0A} ${palette.base01}
|
||||
client.urgent ${palette.base0A} ${palette.base0A} ${palette.base00} ${palette.base0A}
|
||||
|
||||
|
||||
for_window [title="(?:Open|Save) (?:File|Folder|As)"] floating enable
|
||||
for_window [title="(?:Open|Save) (?:File|Folder|As)"] resize set 1920 1080
|
||||
42
home/gunalx/swaylock.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{ pkgs, inputs, lib, config, nix-colors, ... }:
|
||||
let
|
||||
palette = config.colorScheme.palette;
|
||||
in
|
||||
{
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
package = pkgs.swaylock-effects;
|
||||
settings = {
|
||||
# screen & indicator
|
||||
color = "#${palette.base00}AA"; # --color
|
||||
screenshots = true; # --screenshots
|
||||
fade-in = 0.1; # --fade-in
|
||||
scaling = "fill"; # e.g. --scaling=fill
|
||||
|
||||
# authentication grace
|
||||
grace = 3; # --grace
|
||||
submit-on-touch = true; # --submit-on-touch
|
||||
|
||||
# clock
|
||||
clock = true; # --clock
|
||||
|
||||
# indicator visuals
|
||||
indicator-idle-visible = true; # --indicator-idle-visible
|
||||
indicator-radius = 100; # --indicator-radius
|
||||
indicator-thickness = 7; # --indicator-thickness
|
||||
|
||||
# indicator colors
|
||||
ring-color = "#${palette.base0D}C0"; # --ring-color
|
||||
key-hl-color = "#${palette.base0E}C0"; # --key-hl-color
|
||||
text-color = "#${palette.base05}FF"; # --text-color
|
||||
inside-color = "#${palette.base02}CC"; # --inside-color
|
||||
line-color = "#${palette.base01}99"; # --line-color
|
||||
separator-color = "#${palette.base01}99"; # --separator-color
|
||||
|
||||
# effects
|
||||
effect-scale = 0.6; # --effect-scale
|
||||
effect-blur = "7x3"; # --effect-blur
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
23
home/gunalx/wallpapers.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
# Path to your source folder of wallpapers
|
||||
wallpaperSrc = ./wallpapers;
|
||||
|
||||
# Read all file names in that directory
|
||||
names = lib.attrNames (builtins.readDir wallpaperSrc);
|
||||
|
||||
# For each name, produce an attrset mapping
|
||||
wallpaperFiles = map (name:
|
||||
{
|
||||
# quoted string keys are valid attribute names
|
||||
"Pictures/wallpapers/${name}" = {
|
||||
source = "${wallpaperSrc}/${name}";
|
||||
};
|
||||
}
|
||||
) names;
|
||||
in
|
||||
{
|
||||
# Merge them all under home.file
|
||||
home.file = lib.mkMerge wallpaperFiles;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
BIN
home/gunalx/wallpapers/evergarden2.jpg
Normal file
|
After Width: | Height: | Size: 1016 KiB |
BIN
home/gunalx/wallpapers/milkywayanime.jpg
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
home/gunalx/wallpapers/stars.jpg
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 488 KiB |
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
BIN
home/gunalx/wallpapers/wp4586807-aesthetic-anime-wallpapers.jpg
Normal file
|
After Width: | Height: | Size: 307 KiB |
|
After Width: | Height: | Size: 307 KiB |
BIN
home/gunalx/wallpapers/wp4714974-japan-aesthetic-wallpapers.jpg
Normal file
|
After Width: | Height: | Size: 940 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 376 KiB |
|
After Width: | Height: | Size: 480 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 771 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 334 KiB |
|
After Width: | Height: | Size: 793 KiB |
|
After Width: | Height: | Size: 3.2 MiB |
BIN
home/gunalx/wallpapers/wp5897845-retro-anime-city-wallpapers.jpg
Normal file
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 392 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 840 KiB |
291
home/gunalx/waybar.nix
Normal file
@@ -0,0 +1,291 @@
|
||||
{ config, pkgs, lib, inputs, ... }:
|
||||
|
||||
let
|
||||
# Import Base16 palette & hex→RGB helper
|
||||
inherit (inputs.nix-colors.lib.conversions) hexToRGBString;
|
||||
inherit (config.colorscheme) palette;
|
||||
|
||||
# Build "rgba(r,g,b,a)" strings
|
||||
toRGBA = colour: alpha:
|
||||
let rgb = hexToRGBString "," (lib.removePrefix "#" colour);
|
||||
in "rgba(${rgb},${alpha})";
|
||||
in
|
||||
{
|
||||
|
||||
home.packages = with pkgs; [
|
||||
fuzzel
|
||||
wvkbd
|
||||
];
|
||||
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
package = pkgs.waybar;
|
||||
|
||||
# Single-bar JSON config
|
||||
settings = [
|
||||
(builtins.fromJSON ''
|
||||
{
|
||||
"layer": "top",
|
||||
"height": 36,
|
||||
"spacing": 2,
|
||||
"tray-position": "right",
|
||||
"tray-all-outputs": true,
|
||||
"modules-left": ["custom/overview", "custom/launcher", "custom/keyboard", "sway/workspaces", "niri/workspaces"],
|
||||
"modules-center": ["niri/window"],
|
||||
"modules-right": [
|
||||
"idle_inhibitor", "backlight", "pulseaudio", "keyboard-state",
|
||||
"network", "cpu", "memory", "temperature", "battery",
|
||||
"power-profiles-daemon", "clock", "tray", "custom/power"
|
||||
],
|
||||
|
||||
"custom/launcher": {
|
||||
"format": " ",
|
||||
"on-click": "pkill fuzzel || fuzzel"
|
||||
},
|
||||
|
||||
"sway/workspaces": {
|
||||
"format": "{index}: {name} - {icon}",
|
||||
"format-icons": {
|
||||
"focused":"","active":"","default":""
|
||||
},
|
||||
"all-outputs": false,
|
||||
"current-only": false,
|
||||
"persistent": true,
|
||||
"on-click": "swaymsg workspace number {index}"
|
||||
},
|
||||
|
||||
"niri/workspaces": {
|
||||
"format": "{index}: {name} - {icon}",
|
||||
"format-icons": {
|
||||
"focused":"","active":"","default":""
|
||||
},
|
||||
"all-outputs": false,
|
||||
"current-only": false,
|
||||
"persistent": true,
|
||||
"on-click": "niri msg workspace {index}"
|
||||
},
|
||||
|
||||
"custom/overview": {
|
||||
"format": "",
|
||||
"tooltip": "Toggle Overview",
|
||||
"on-click": "niri msg action toggle-overview"
|
||||
},
|
||||
"custom/keyboard": {
|
||||
"format": "",
|
||||
"tooltip": "On-Screen Keyboard",
|
||||
"on-click": "pkill wvkbd-mobintl || wvkbd-mobintl"
|
||||
},
|
||||
|
||||
|
||||
"niri/window": {
|
||||
"format": "{title}"
|
||||
},
|
||||
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon}",
|
||||
"format-icons": { "activated":"","deactivated":"" }
|
||||
},
|
||||
|
||||
"backlight": {
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["","","","","","","","",""]
|
||||
},
|
||||
|
||||
"pulseaudio": {
|
||||
"format": "{volume}% {icon}",
|
||||
"format-muted": "",
|
||||
"format-icons": { "default": ["","",""] },
|
||||
"on-click": "pavucontrol"
|
||||
},
|
||||
|
||||
"keyboard-state": {
|
||||
"numlock": true,
|
||||
"capslock": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": { "locked":"","unlocked":"" }
|
||||
},
|
||||
|
||||
"network": {
|
||||
"format-wifi": " {essid} ({signalStrength}%)",
|
||||
"format-ethernet": " {ipaddr}",
|
||||
"format-disconnected": "⚠ Disconnected",
|
||||
"format-alt": " {ipaddr}/{cidr}",
|
||||
"tooltip": true,
|
||||
"tooltip-format-wifi": "<span color='#${palette.base0C}'></span> <span color='#${palette.base05}'>WiFi</span>\n<span color='#${palette.base0A}'>SSID:</span> <span color='#${palette.base06}'>{essid}</span>\n<span color='#${palette.base0A}'>Interface:</span> <span color='#${palette.base04}'>{ifname}</span>\n<span color='#${palette.base0A}'>IP:</span> <span color='#${palette.base06}'>{ipaddr}</span>\n<span color='#${palette.base0A}'>IPv6:</span> <span color='#${palette.base04}'>{ipaddr6}</span>\n<span color='#${palette.base0A}'>Gateway:</span> <span color='#${palette.base04}'>{gwaddr}</span>\n<span color='#${palette.base0A}'>Frequency:</span> <span color='#${palette.base04}'>{frequency} MHz</span>\n<span color='#${palette.base0A}'>Signal:</span> <span color='#${palette.base0B}'>{signalStrength}%</span> <span color='#${palette.base04}'>({signaldBm} dBm)</span>",
|
||||
|
||||
"tooltip-format-ethernet": "<span color='#${palette.base0C}'></span> <span color='#${palette.base05}'>Ethernet</span>\n<span color='#${palette.base0A}'>Interface:</span> <span color='#${palette.base04}'>{ifname}</span>\n<span color='#${palette.base0A}'>IP:</span> <span color='#${palette.base06}'>{ipaddr}</span>\n<span color='#${palette.base0A}'>IPv6:</span> <span color='#${palette.base04}'>{ipaddr6}</span>\n<span color='#${palette.base0A}'>Gateway:</span> <span color='#${palette.base04}'>{gwaddr}</span>\n<span color='#${palette.base0A}'>Netmask:</span> <span color='#${palette.base04}'>{netmask}</span>",
|
||||
|
||||
"tooltip-format-disconnected": "<span color='#${palette.base08}'>⚠</span> <span color='#${palette.base08}'>No Connection</span>\n<span color='#${palette.base04}'>Click to refresh network info</span>",
|
||||
|
||||
"on-click": "nmcli device wifi rescan && nmcli connection show --active",
|
||||
"on-click-right": "nmcli device status",
|
||||
"max-length": 50
|
||||
},
|
||||
|
||||
"cpu": { "format": " {usage}%" },
|
||||
"memory": { "format": " {used:0.1f}G" },
|
||||
|
||||
"temperature": {
|
||||
"format": "{temperatureC}°C ",
|
||||
"critical-threshold": 80
|
||||
},
|
||||
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-icons": ["","","","",""],
|
||||
"format-charging": "{capacity}% ",
|
||||
"states": { "warning": 30, "critical": 15 }
|
||||
},
|
||||
|
||||
|
||||
"power-profiles-daemon": {
|
||||
"format": "{icon}",
|
||||
"tooltip-format": "Power profile: {profile}\\nDriver: {driver}",
|
||||
"tooltip": true,
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"performance": "",
|
||||
"balanced": "",
|
||||
"power-saver": ""
|
||||
}
|
||||
},
|
||||
|
||||
"clock": {
|
||||
"format": "{:%H:%M}",
|
||||
"format-alt": "{:%Y-%m-%d}",
|
||||
"tooltip": true,
|
||||
"tooltip-format": "<tt><small>{calendar}</small></tt>",
|
||||
"calendar": {
|
||||
"mode": "month",
|
||||
"mode-mon-col": 3,
|
||||
"weeks-pos": "right",
|
||||
"on-scroll": 1,
|
||||
"format": {
|
||||
"months": "<span color='#${palette.base05}'><b>{}</b></span>",
|
||||
"days": "<span color='#${palette.base04}'>{}</span>",
|
||||
"weeks": "<span color='#${palette.base0C}'><b>W{}</b></span>",
|
||||
"weekdays": "<span color='#${palette.base0A}'><b>{}</b></span>",
|
||||
"today": "<span color='#${palette.base08}'><b><u>{}</u></b></span>"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"on-click-right": "mode",
|
||||
"on-scroll-up": "shift_up",
|
||||
"on-scroll-down": "shift_down"
|
||||
}
|
||||
},
|
||||
|
||||
"tray": {
|
||||
"spacing": 12
|
||||
},
|
||||
|
||||
"custom/power": {
|
||||
"format": "⏻",
|
||||
"tooltip": "exit",
|
||||
"on-click": "wlogout || wleave"
|
||||
}
|
||||
}
|
||||
'')
|
||||
];
|
||||
|
||||
# CSS style for Waybar
|
||||
style = ''
|
||||
/* Base font */
|
||||
* { font-family: FontAwesome, Roboto, sans-serif; font-size: 13px; }
|
||||
|
||||
/* Bar container */
|
||||
window#waybar {
|
||||
background-color: ${toRGBA palette.base00 "0.8"};
|
||||
border-radius: 12px;
|
||||
padding: 4px 20px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Workspace margin */
|
||||
#sway-workspaces,#niri-workspaces { margin-left: 12px; }
|
||||
|
||||
/* Module blocks */
|
||||
#idle_inhibitor,#backlight,#pulseaudio,#keyboard-state,
|
||||
#network,#cpu,#memory,#temperature,#battery,
|
||||
#power-profiles-daemon,#clock,#tray,#custom-power,#custom-launcher,#custom-overview,#niri-window {
|
||||
background-color: ${toRGBA palette.base01 "0.9"};
|
||||
border-radius: 8px;
|
||||
margin: 0 6px;
|
||||
padding: 0 10px;
|
||||
border: 1px solid ${toRGBA palette.base03 "0.9"};
|
||||
}
|
||||
|
||||
/* Hover effect */
|
||||
#idle_inhibitor:hover,#backlight:hover,#pulseaudio:hover,
|
||||
#keyboard-state:hover,#network:hover,#cpu:hover,#memory:hover,
|
||||
#temperature:hover,#battery:hover,#power-profiles-daemon:hover,
|
||||
#clock:hover,#tray:hover,#custom-power:hover,#custom-launcher:hover,#custom-overview:hover,#niri-window:hover,#niri-workspaces:hover {
|
||||
background-color: ${toRGBA palette.base02 "0.7"};
|
||||
}
|
||||
|
||||
/* Tooltip styling */
|
||||
tooltip {
|
||||
background-color: ${toRGBA palette.base01 "0.95"};
|
||||
border: 1px solid ${toRGBA palette.base02 "0.6"};
|
||||
border-radius: 8px;
|
||||
color: ${toRGBA palette.base05 "1"};
|
||||
padding: 8px 12px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
tooltip label {
|
||||
color: ${toRGBA palette.base05 "1"};
|
||||
}
|
||||
|
||||
#clock tooltip {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
|
||||
/* Workspace buttons */
|
||||
#sway-workspaces button,#niri-workspaces button {
|
||||
padding: 0 6px;
|
||||
background: transparent;
|
||||
color: ${toRGBA palette.base05 "1"};
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
}
|
||||
#sway-workspaces button:hover,#niri-workspaces button:hover {
|
||||
background-color: ${toRGBA palette.base02 "0.6"};
|
||||
}
|
||||
#sway-workspaces button.focused,#niri-workspaces button.focused {
|
||||
background-color: ${toRGBA palette.base0D "0.6"};
|
||||
box-shadow: inset 0 -3px ${toRGBA palette.base0D "0.8"};
|
||||
}
|
||||
#sway-workspaces button.urgent,#niri-workspaces button.urgent {
|
||||
background-color: ${toRGBA palette.base08 "0.7"};
|
||||
}
|
||||
|
||||
/* Active workspace buttons */
|
||||
#sway-workspaces button.active,#niri-workspaces button.active {
|
||||
background-color: ${toRGBA palette.base02 "0.7"};
|
||||
}
|
||||
|
||||
/* Right‐hand text color */
|
||||
#clock,#battery,#cpu,#memory,#temperature,#backlight,
|
||||
#network,#pulseaudio,#tray,#power-profiles-daemon,#custom-power {
|
||||
color: ${toRGBA palette.base05 "1"};
|
||||
}
|
||||
|
||||
/* Battery critical blink */
|
||||
@keyframes blink {
|
||||
to {
|
||||
background: ${toRGBA palette.base05 "1"};
|
||||
color: ${toRGBA palette.base00 "1"};
|
||||
}
|
||||
}
|
||||
#battery.critical:not(.charging) {
|
||||
animation: blink 0.5s steps(12) infinite alternate;
|
||||
}
|
||||
'';
|
||||
|
||||
# Keep Waybar alive in your user session
|
||||
systemd.enable = true;
|
||||
};
|
||||
}
|
||||
69
home/gunalx/wlogout.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{ pkgs
|
||||
, lib
|
||||
, inputs
|
||||
, config
|
||||
, nix-colors
|
||||
, ...
|
||||
}:
|
||||
|
||||
let
|
||||
# Grab your palette and the hex→RGBA helper
|
||||
palette = config.colorscheme.palette;
|
||||
toRGBA = color: alpha:
|
||||
let rgb = nix-colors.lib.conversions.hexToRGBString "," (lib.removePrefix "#" color);
|
||||
in "rgba(${rgb},${alpha})";
|
||||
|
||||
# Path to the wleave-provided icons
|
||||
iconsDir = "${pkgs.wleave}/share/wleave/icons";
|
||||
in
|
||||
|
||||
{
|
||||
programs.wlogout = {
|
||||
enable = true;
|
||||
package = pkgs.wlogout;
|
||||
|
||||
# Your button layout
|
||||
layout = [
|
||||
{ label = "lock"; action = "swaylock"; text = "Lock"; keybind = "l"; }
|
||||
{ label = "hibernate"; action = "systemctl hibernate"; text = "Hibernate"; keybind = "h"; }
|
||||
{ label = "logout"; action = "loginctl terminate-user $USER"; text = "Logout"; keybind = "e"; }
|
||||
{ label = "shutdown"; action = "systemctl poweroff"; text = "Shutdown"; keybind = "s"; }
|
||||
{ label = "suspend"; action = "systemctl suspend"; text = "Suspend"; keybind = "u"; }
|
||||
{ label = "reboot"; action = "systemctl reboot"; text = "Reboot"; keybind = "r"; }
|
||||
];
|
||||
|
||||
style = ''
|
||||
* { background-image: none; }
|
||||
|
||||
window {
|
||||
background-color: ${toRGBA palette.base00 "0.7"};
|
||||
}
|
||||
|
||||
button {
|
||||
color: #${palette.base0C};
|
||||
background-color: ${toRGBA palette.base02 "0.8"};
|
||||
border: 2px solid #${palette.base0C};
|
||||
border-radius: 1em;
|
||||
margin: 0.75em;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
box-shadow: 0 0 4px #${palette.base0C};
|
||||
padding: 0.6em 1.2em;
|
||||
}
|
||||
|
||||
button:focus,
|
||||
button:active {
|
||||
background-color: ${toRGBA palette.base03 "0.9"};
|
||||
box-shadow: 0 0 6px #${palette.base0C};
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#lock { background-image: image(url("${iconsDir}/lock.svg")); }
|
||||
#logout { background-image: image(url("${iconsDir}/logout.svg")); }
|
||||
#suspend { background-image: image(url("${iconsDir}/suspend.svg")); }
|
||||
#hibernate { background-image: image(url("${iconsDir}/hibernate.svg")); }
|
||||
#shutdown { background-image: image(url("${iconsDir}/shutdown.svg")); }
|
||||
#reboot { background-image: image(url("${iconsDir}/reboot.svg")); }
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,19 +1,15 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
./sshconfig.nix
|
||||
../common/sshconfig.nix
|
||||
../common/nix.nix
|
||||
../common/atuin.nix
|
||||
];
|
||||
|
||||
programs.nix-index = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
nixpkgs = {
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = (_: true);
|
||||
};
|
||||
};
|
||||
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
@@ -1,56 +0,0 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
openssh
|
||||
sshfs
|
||||
];
|
||||
|
||||
services.ssh-agent.enable = true;
|
||||
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
compression = true;
|
||||
|
||||
matchBlocks = {
|
||||
"*.pvv.ntnu.no" = {
|
||||
user="adriangl";
|
||||
};
|
||||
"*.ntnu.no !*.pvv.ntnu.no" = {
|
||||
user="adriangl";
|
||||
proxyJump="isvegg.pvv.ntnu.no";
|
||||
};
|
||||
"snotra" = {
|
||||
user="adriangl";
|
||||
proxyJump="adriangl@isvegg.pvv.ntnu.no";
|
||||
hostname="snotra.idi.ntnu.no";
|
||||
};
|
||||
|
||||
#pvv
|
||||
"pvv" = {
|
||||
user="adriangl";
|
||||
hostname="login.pvv.ntnu.no";
|
||||
};
|
||||
"isvegg" = {
|
||||
user="adriangl";
|
||||
hostname="isvegg.pvv.ntnu.no";
|
||||
};
|
||||
|
||||
#home
|
||||
"aragon" = {
|
||||
port = 6969;
|
||||
user="gunalx";
|
||||
hostname="100.74.34.149";
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
extraConfig = "";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{ pkgs, inputs, lib, config, nix-colors, ... }:
|
||||
let
|
||||
palette = config.colorScheme.palette;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
package = pkgs.swaylock-effects;
|
||||
settings = {
|
||||
color = palette.base00;
|
||||
screenshots = true;
|
||||
grace = 15;
|
||||
clock = true;
|
||||
submit-on-touch = true;
|
||||
indicator-idle-visible = true;
|
||||
indicator-radius = 100;
|
||||
indicator-thickness = 7;
|
||||
ring-color = palette.base05;
|
||||
key-hl-color = palette.base03;
|
||||
tect-color = palette.base00;
|
||||
line-colot = palette.base00;
|
||||
innside-color = palette.base04;
|
||||
seperator-color = palette.base00;
|
||||
fade-in = 0.1;
|
||||
effect-scale = 0.6;
|
||||
effect-blur = "7x3";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
376
home/waybar.nix
@@ -1,376 +0,0 @@
|
||||
{ pkgs, inputs, lib, config, nix-colors, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
|
||||
|
||||
|
||||
programs.waybar = let
|
||||
inherit (inputs.nix-colors.lib.conversions) hexToRGBString;
|
||||
inherit (config.colorscheme) colors;
|
||||
inherit (config.colorscheme) palette;
|
||||
toRGBA = color: opacity: "rgba(${hexToRGBString "," (lib.removePrefix "#" color)},${opacity})";
|
||||
in {
|
||||
|
||||
enable = true;
|
||||
|
||||
|
||||
|
||||
style = ''
|
||||
* {
|
||||
/* `otf-font-awesome` is required to be installed for icons */
|
||||
font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: #${palette.base00};
|
||||
border-bottom: 3px solid #${palette.base03};
|
||||
color: ${toRGBA palette.base05 "0.7"};
|
||||
transition-property: background-color;
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/*
|
||||
window#waybar.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
window#waybar.solo {
|
||||
background-color: #${palette.base07};
|
||||
}
|
||||
*/
|
||||
|
||||
window#waybar.termite {
|
||||
background-color: #${palette.base03};
|
||||
}
|
||||
|
||||
window#waybar.chromium {
|
||||
background-color: #${palette.base00};
|
||||
border: none;
|
||||
}
|
||||
|
||||
button {
|
||||
/* Use box-shadow instead of border so the text isn't offset */
|
||||
box-shadow: inset 0 -3px transparent;
|
||||
/* Avoid rounded borders under each button name */
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
|
||||
button:hover {
|
||||
background: inherit;
|
||||
box-shadow: inset 0 -3px #${palette.base05};
|
||||
}
|
||||
|
||||
/* you can set a style on hover for any module like this */
|
||||
#pulseaudio:hover {
|
||||
background-color: #${palette.base0A};
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
color: #${palette.base05};
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: #${palette.base00};
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
background-color: #${palette.base03};
|
||||
box-shadow: inset 0 -3px #${palette.base05};
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: #${palette.base08};
|
||||
}
|
||||
|
||||
#mode {
|
||||
background-color: #${palette.base03};
|
||||
box-shadow: inset 0 -3px #${palette.base05};
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor,
|
||||
#scratchpad,
|
||||
#power-profiles-daemon,
|
||||
#mpd {
|
||||
padding: 0 10px;
|
||||
color: #${palette.base05};
|
||||
}
|
||||
|
||||
#window,
|
||||
#workspaces {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
/* If workspaces is the leftmost module, omit left margin */
|
||||
.modules-left > widget:first-child > #workspaces {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* If workspaces is the rightmost module, omit right margin */
|
||||
.modules-right > widget:last-child > #workspaces {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#clock {
|
||||
background-color: #${palette.base03};
|
||||
}
|
||||
|
||||
#battery {
|
||||
background-color: #${palette.base05};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#battery.charging, #battery.plugged {
|
||||
color: #${palette.base05};
|
||||
background-color: #${palette.base0B};
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #${palette.base05};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
}
|
||||
|
||||
/* Using steps() instead of linear as a timing function to limit cpu usage */
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: #${palette.base08};
|
||||
color: #${palette.base05};
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: steps(12);
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#power-profiles-daemon {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/*0b also looked good though. */
|
||||
#power-profiles-daemon.performance {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#power-profiles-daemon.balanced {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#power-profiles-daemon.power-saver {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
label:focus {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#cpu {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#memory {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#disk {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#backlight {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#network {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
background-color: #${palette.base0A};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base03};
|
||||
}
|
||||
|
||||
#wireplumber {
|
||||
background-color: #${palette.base07};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#wireplumber.muted {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#custom-media {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
#custom-media.custom-spotify {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#custom-media.custom-vlc {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#temperature {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
background-color: #${palette.base0E};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#tray {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#tray > .passive {
|
||||
-gtk-icon-effect: dim;
|
||||
}
|
||||
|
||||
#tray > .needs-attention {
|
||||
-gtk-icon-effect: highlight;
|
||||
background-color: #${palette.base07};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#idle_inhibitor {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
background-color: #${palette.base06};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#mpd {
|
||||
background-color: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#mpd.disconnected {
|
||||
background-color: #${palette.base06};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#mpd.stopped {
|
||||
background-color: #${palette.base0C};
|
||||
}
|
||||
|
||||
#mpd.paused {
|
||||
background-color: #${palette.base0B};
|
||||
}
|
||||
|
||||
#language {
|
||||
background: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
padding: 0 5px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state {
|
||||
background: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
padding: 0 0px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state > label {
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
#keyboard-state > label.locked {
|
||||
background: #${palette.base04};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#scratchpad {
|
||||
background: #${palette.base00};
|
||||
color: #${palette.base00};
|
||||
}
|
||||
|
||||
#scratchpad.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#privacy {
|
||||
padding: 0;
|
||||
color: #${palette.base04};
|
||||
}
|
||||
|
||||
#privacy-item {
|
||||
color: #${palette.base00};
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
#privacy-item.screenshare {
|
||||
background-color: #${palette.base00};
|
||||
}
|
||||
|
||||
#privacy-item.audio-in {
|
||||
background-color: #${palette.base0B};
|
||||
}
|
||||
|
||||
#privacy-item.audio-out {
|
||||
background-color: #${palette.base0D};
|
||||
}
|
||||
|
||||
'';
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
#customised applications
|
||||
../../services/podman.nix
|
||||
../../services/boinc.nix
|
||||
../../services/ollama-amd.nix
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
@@ -52,15 +54,7 @@
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
services.xserver.videoDrivers = [ "amdgpu" ];
|
||||
hardware.opengl.extraPackages = with pkgs; [
|
||||
rocm-opencl-icd
|
||||
rocm-opencl-runtime
|
||||
amdvlk
|
||||
];
|
||||
|
||||
hardware.opengl.driSupport = true;
|
||||
# For 32 bit applications
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
# services.xserver.libinput.enable = true;
|
||||
@@ -69,7 +63,7 @@
|
||||
users.users.gunalx = {
|
||||
isNormalUser = true;
|
||||
description = "Adrian Gunnar Lauterer";
|
||||
extraGroups = [ "networkmanager" "wheel" ];
|
||||
extraGroups = [ "networkmanager" "wheel" "input" ];
|
||||
packages = with pkgs; [
|
||||
];
|
||||
};
|
||||
@@ -96,7 +90,7 @@
|
||||
|
||||
|
||||
#basic programming
|
||||
kate
|
||||
kdePackages.kate
|
||||
vscode-fhs
|
||||
gcc
|
||||
gpp
|
||||
@@ -123,7 +117,7 @@
|
||||
ollama
|
||||
rpi-imager
|
||||
prismlauncher
|
||||
cura
|
||||
#cura #seems broken dependencies.
|
||||
prusa-slicer
|
||||
openscad
|
||||
|
||||
|
||||
@@ -13,24 +13,48 @@
|
||||
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
hardware.amdgpu.opencl.enable = true;
|
||||
hardware.amdgpu.amdvlk.enable = true;
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
services.xserver.videoDrivers = [ "amdgpu" ];
|
||||
systemd.tmpfiles.rules = [
|
||||
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
|
||||
];
|
||||
hardware.opengl.extraPackages = with pkgs; [
|
||||
rocmPackages.clr.icd
|
||||
#amdvlk
|
||||
libva-utils
|
||||
];
|
||||
|
||||
nixpkgs.config.rocmSupport = true;
|
||||
|
||||
environment.variables = {
|
||||
HSA_OVERRIDE_GFX_VERSION="10.3.0";
|
||||
|
||||
};
|
||||
|
||||
|
||||
#hardware.opengl.extraPackages32 = with pkgs; [
|
||||
# driversi686Linux.amdvlk
|
||||
#];
|
||||
|
||||
hardware.opengl.driSupport = true; # This is already enabled by default
|
||||
hardware.opengl.driSupport32Bit = true; # For 32 bit applications
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
lact
|
||||
rocmPackages.rocminfo
|
||||
rocmPackages.rocm-smi
|
||||
rocmPackages.rocm-runtime
|
||||
rocmPackages.rocm-device-libs
|
||||
rocmPackages.rocm-core
|
||||
rocmPackages.rocm-cmake
|
||||
rocmPackages.rocgdb
|
||||
rocmPackages.rocblas
|
||||
rocmPackages.rccl
|
||||
|
||||
|
||||
];
|
||||
systemd.packages = with pkgs; [ lact ];
|
||||
systemd.services.lactd.wantedBy = ["multi-user.target"];
|
||||
|
||||
|
||||
fileSystems."/" =
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
./hardware-configuration.nix
|
||||
../../profiles/webhost.nix
|
||||
../../profiles/base.nix
|
||||
../../services/gate.nix
|
||||
../../services/ozai.nix
|
||||
#../../services/ozai.nix
|
||||
#../../services/ollamaWebui.nix
|
||||
./routes.nix
|
||||
];
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
wget
|
||||
tailscale
|
||||
config.services.headscale.package
|
||||
kanidm
|
||||
];
|
||||
|
||||
users.users.gunalx = { # Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
|
||||
46
machines/elrond/domeneshop-dyndns.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
cfg = config.services.domeneshop-dyndns;
|
||||
in {
|
||||
options.services.domeneshop-dyndns = {
|
||||
enable = lib.mkEnableOption "Domeneshop DynDNS";
|
||||
|
||||
domain = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "Domain name to configure";
|
||||
};
|
||||
|
||||
netrcFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = "Path to the file that contains `machine api.domeneshop.no login <DDNS_TOKEN> password <DDNS_SECRET>` from https://domene.shop/admin?view=api";
|
||||
};
|
||||
|
||||
startAt = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "*:0/10"; # Every 10 minutes
|
||||
description = "Systemd onCalendar expression for when to run the timer";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.services.domeneshop-dyndns = {
|
||||
serviceConfig.LoadCredential = "netrc:${cfg.netrcFile}";
|
||||
startAt = cfg.startAt;
|
||||
|
||||
script = ''
|
||||
DNSNAME="${cfg.domain}"
|
||||
NEW_IP="$(${lib.getExe pkgs.curl} --silent https://ipinfo.io/ip)"
|
||||
OLD_IP="$(${lib.getExe pkgs.getent} hosts "$DNSNAME" | ${lib.getExe pkgs.gawk} '{ print $1 }')"
|
||||
|
||||
if [[ "$NEW_IP" != "$OLD_IP" ]]; then
|
||||
echo "Old IP ($OLD_IP) does not match new IP ($NEW_IP), updating..."
|
||||
${lib.getExe pkgs.curl} --silent --netrc-file "$CREDENTIALS_DIRECTORY/netrc" "https://api.domeneshop.no/v0/dyndns/update?hostname=$DNSNAME&myip=$NEW_IP"
|
||||
else
|
||||
echo "Old IP ($OLD_IP) matches new IP ($NEW_IP), exiting..."
|
||||
fi
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
services.nginx = {
|
||||
virtualHosts."lauterer.it" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://100.84.215.84";
|
||||
};
|
||||
};
|
||||
#virtualHosts."lauterer.it" = {
|
||||
# forceSSL = true;
|
||||
# useACMEHost = config.networking.domain;
|
||||
# locations."/" = {
|
||||
# proxyWebsockets = true;
|
||||
# proxyPass = "http://100.84.215.84";
|
||||
# };
|
||||
#};
|
||||
|
||||
virtualHosts."managment.lauterer.it" = {
|
||||
forceSSL = true;
|
||||
@@ -50,6 +50,18 @@
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
|
||||
# virtualHosts."hybel.lauterer.it" = {
|
||||
# forceSSL = true;
|
||||
# useACMEHost = config.networking.domain;
|
||||
# locations."/" = {
|
||||
# proxyWebsockets = true;
|
||||
# proxyPass = "http://100.109.23.4:8123";
|
||||
# };
|
||||
# # ignorerer sikkerhet for littegran for å oprettholde lettvinthet og app kompatibilitet.
|
||||
# #basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
# };
|
||||
|
||||
|
||||
virtualHosts."jellyfin.lauterer.it" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
@@ -69,16 +81,52 @@
|
||||
basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
|
||||
virtualHosts."jupyter.lauterer.it" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://100.84.215.84:8771";
|
||||
};
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
|
||||
virtualHosts."rss.lauterer.it" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://100.84.215.84:8081";
|
||||
proxyPass = "http://100.84.215.84:8089";
|
||||
};
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
|
||||
|
||||
virtualHosts."ai.lauterer.it" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://100.84.215.84:11111";
|
||||
};
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
|
||||
|
||||
|
||||
virtualHosts."chat.lauterer.it" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://100.84.215.84:11111";
|
||||
};
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#virtualHosts."azul.256.no" = {
|
||||
# forceSSL = true;
|
||||
# useACMEHost = config.networking.domain;
|
||||
@@ -89,15 +137,15 @@
|
||||
# #basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
#};
|
||||
|
||||
virtualHosts."azul.256.no" = {
|
||||
forceSSL = true;
|
||||
useACMEHost = config.networking.domain;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://localhost:8085";
|
||||
};
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
# virtualHosts."azul.256.no" = {
|
||||
# forceSSL = true;
|
||||
# useACMEHost = config.networking.domain;
|
||||
# locations."/" = {
|
||||
# proxyWebsockets = true;
|
||||
# proxyPass = "http://localhost:8095";
|
||||
# };
|
||||
# #basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
# };
|
||||
|
||||
|
||||
#virtualHosts."shiori.lauterer.it" = config.services.nginx.virtualHosts."archive.lauterer.it";
|
||||
@@ -111,7 +159,7 @@
|
||||
proxyPass = "http://100.84.215.84:8082";
|
||||
};
|
||||
#basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
./hardware-configuration.nix
|
||||
../../profiles/base.nix
|
||||
../../profiles/desktop.nix
|
||||
../../profiles/development.nix
|
||||
];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
@@ -46,7 +47,7 @@
|
||||
users.users.gunalx = {
|
||||
isNormalUser = true;
|
||||
description = "Adrian Gunnar Lauterer";
|
||||
extraGroups = [ "networkmanager" "wheel" "video" ];
|
||||
extraGroups = [ "networkmanager" "wheel" "video" "input" "audio"];
|
||||
packages = with pkgs; [
|
||||
];
|
||||
};
|
||||
|
||||
@@ -18,14 +18,16 @@
|
||||
../../profiles/ai.nix
|
||||
../../profiles/mediaserver.nix
|
||||
|
||||
../../services/smb.nix
|
||||
../../services/wordpress.nix
|
||||
#../../services/smb.nix
|
||||
#../../services/wordpress.nix # lets not
|
||||
../../services/bitwarden.nix
|
||||
../../services/torrent.nix
|
||||
../../services/mc.nix
|
||||
../../services/jupyterhub.nix
|
||||
#../../services/ozai.nix
|
||||
#../../services/stableDiffusion.nix
|
||||
../../services/rss.nix
|
||||
../../services/shiori.nix
|
||||
../../services/mealie.nix
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
@@ -70,12 +72,11 @@
|
||||
jftui
|
||||
sonixd
|
||||
unpackerr
|
||||
qbittorrent-nox
|
||||
python3
|
||||
python3Packages.torchWithCuda
|
||||
ollama
|
||||
];
|
||||
|
||||
unstable.qbittorrent-nox
|
||||
];
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
|
||||
@@ -1,53 +1,62 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
# Enable OpenGL
|
||||
hardware.opengl = {
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
driSupport = true;
|
||||
driSupport32Bit = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
nixpkgs.config = {
|
||||
allowUnfree = true;
|
||||
cudaSupport = true;
|
||||
};
|
||||
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||
"cuda_cudart"
|
||||
];
|
||||
|
||||
# Load nvidia driver for Xorg and Wayland
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
#boot with nvidia kernel module
|
||||
boot.initrd.kernelModules = [ "nvidia" ];
|
||||
hardware.nvidia = {
|
||||
# Modesetting is required.
|
||||
modesetting.enable = true;
|
||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
||||
#powerManagement.enable = true;
|
||||
# Fine-grained power management. Turns off GPU when not in use.
|
||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||
# Fine-grained power management. Turns off GPU when not in use. Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||
#powerManagement.finegrained = true;
|
||||
|
||||
# Use the NVidia open source kernel module (not to be confused with the
|
||||
# independent third-party "nouveau" open source driver).
|
||||
# Support is limited to the Turing and later architectures. Full list of
|
||||
# supported GPUs is at:
|
||||
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
||||
# Only available from driver 515.43.04+
|
||||
# Use the NVidia open source kernel module (not to be confused with the independent third-party "nouveau" open source driver).
|
||||
# Currently alpha-quality/buggy, so false is currently the recommended setting.
|
||||
open = false;
|
||||
open = false; #need proprietary for cuda.
|
||||
|
||||
# Enable the Nvidia settings menu,
|
||||
# accessible via `nvidia-settings`.
|
||||
# Enable the Nvidia settings menu, accessible via `nvidia-settings`.
|
||||
#nvidiaSettings = true;
|
||||
|
||||
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
|
||||
|
||||
# Enable the CUDA toolkit
|
||||
#install packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
#cudaPackages.cudnn
|
||||
#cudaPackages.cudatoolkit
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
cudaPackages.cudatoolkit
|
||||
cudaPackages.cudnn
|
||||
nvtopPackages.nvidia
|
||||
#gcc
|
||||
cudaPackages.nccl
|
||||
#cmake
|
||||
#llama-cpp
|
||||
#python3Packages.pip
|
||||
#cudaPackages.cuda_cudart
|
||||
#xgboostWithCuda
|
||||
#libxcrypt-legacy
|
||||
#cudaPackages.setupCudaHook
|
||||
#cudaPackages.markForCudatoolkitRootHook
|
||||
#cudaPackages.cuda_cudart.static
|
||||
pkgs.cudaPackages.libcublas
|
||||
#cudaPackages.tensorrt_8_6_0 #needs to be added manually, to the store and is a pain because of the license agreement and garbage collection
|
||||
|
||||
];
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
services.zfs.autoSnapshot.enable = true;
|
||||
services.zfs.autoSnapshot.flags = "-k -p --utc";
|
||||
|
||||
|
||||
boot.zfs.extraPools = [ "Main" ];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
zfs
|
||||
zfsnap
|
||||
|
||||
30
machines/gandalf/bootvm-daemon.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
qemu-system-x86_64 \
|
||||
-m 4G \
|
||||
-cpu host \
|
||||
-smp 2 \
|
||||
-enable-kvm \
|
||||
-device vfio-pci,host=04:00.0 \
|
||||
-device vfio-pci,host=05:00.0 \
|
||||
-device vfio-pci,host=06:00.0 \
|
||||
-device vfio-pci,host=07:00.0 \
|
||||
-device vfio-pci,host=08:00.0 \
|
||||
-device vfio-pci,host=0b:00.0 \
|
||||
-device vfio-pci,host=0b:00.1 \
|
||||
-device vfio-pci,host=0c:00.0 \
|
||||
-device vfio-pci,host=0c:00.1 \
|
||||
-drive file=/vm-images/OPNsense-24.7-nano-amd64.img,format=raw \
|
||||
-vga virtio \
|
||||
-netdev user,id=net0 -device virtio-net,netdev=net0 \
|
||||
-display none \
|
||||
-daemonize \
|
||||
|
||||
#-net none
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:04:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:05:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:06:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:07:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:08:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0b:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0b:00.1\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0c:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0c:00.1\ #
|
||||
29
machines/gandalf/bootvm.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
qemu-system-x86_64 \
|
||||
-m 4G \
|
||||
-cpu host \
|
||||
-smp 2 \
|
||||
-enable-kvm \
|
||||
-device vfio-pci,host=04:00.0 \
|
||||
-device vfio-pci,host=05:00.0 \
|
||||
-device vfio-pci,host=06:00.0 \
|
||||
-device vfio-pci,host=07:00.0 \
|
||||
-device vfio-pci,host=08:00.0 \
|
||||
-device vfio-pci,host=0c:00.1 \
|
||||
-device vfio-pci,host=08:00.0 \
|
||||
-device vfio-pci,host=08:00.0 \
|
||||
-device vfio-pci,host=08:00.0 \
|
||||
-drive file=/vm-images/OPNsense-24.7-nano-amd64.img,format=raw \
|
||||
-vga virtio \
|
||||
-netdev user,id=net0 -device virtio-net,netdev=net0 \
|
||||
-nographic \
|
||||
|
||||
#-net none
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:04:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:05:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:06:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:07:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:08:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0b:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0b:00.1\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0c:00.0\
|
||||
# -device hostdev,/sys/bus/pci/devices/0000:0c:00.1\ #
|
||||
86
machines/gandalf/configuration.nix
Normal file
@@ -0,0 +1,86 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
../../profiles/base.nix
|
||||
../../services/virt.nix
|
||||
./qemu.nix
|
||||
];
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
|
||||
# Pick only one of the below networking options.
|
||||
#networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||
|
||||
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
|
||||
# Per-interface useDHCP will be mandatory in the future, so this generated config
|
||||
# replicates the default behaviour.
|
||||
# networking.useDHCP = true;
|
||||
networking.interfaces.wlp3s0f0.useDHCP = true; # Interface is not constant. I really only want to use dhcp att all so could remove this in favor of the old way.
|
||||
networking.hostName = "gandalf"; # Define your hostname.
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.conf.all.forwarding" = true;
|
||||
"net.ipv6.conf.all.forwarding" = true;
|
||||
};
|
||||
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
git
|
||||
wget
|
||||
tailscale
|
||||
];
|
||||
|
||||
users.users.gunalx = { # Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||
initialPassword = "pw123"; # this is changed imedeately.
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
users.users."root".openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTExYoT3+flrd2wPYiT7sFFDmAUqi2YAz0ldQg7WMop"
|
||||
];
|
||||
users.users."gunalx".openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTExYoT3+flrd2wPYiT7sFFDmAUqi2YAz0ldQg7WMop"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEj+Y0RUrSaF8gUW8m2BY6i8e7/0bUWhu8u8KW+AoHDh gunalx@nixos"
|
||||
];
|
||||
|
||||
#firewall options
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
checkReversePath = "loose";
|
||||
trustedInterfaces = [ "tailscale0" ];
|
||||
allowedUDPPorts = [
|
||||
80
|
||||
443
|
||||
25565
|
||||
config.services.tailscale.port
|
||||
#config.services.headscale.port
|
||||
];
|
||||
allowedTCPPorts = config.networking.firewall.allowedUDPPorts;
|
||||
};
|
||||
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It's perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "24.05"; # Did you read the comment?
|
||||
|
||||
}
|
||||
55
machines/gandalf/hardware-configuration.nix
Normal file
@@ -0,0 +1,55 @@
|
||||
# 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 = [ "ahci" "xhci_pci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||
boot.kernelParams = [ "intel_iommu=on" "iommu=pt" ];
|
||||
boot.kernelModules = [ "kvm-intel" "vfio_pci" "drm" "drm_kms_helper"];
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.extraModprobeConfig = ''
|
||||
options vfio-pci ids=8086:125c,8086:15c4
|
||||
'';
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/a12c97d6-8cbb-4853-8642-ba8760a43584";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/5526-5FF3";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
fileSystems."/vm-images" =
|
||||
{ device = "/dev/disk/by-uuid/4f4505c3-8942-4767-b7f2-b27087aa9ec1";
|
||||
fsType = "ext4";
|
||||
};
|
||||
swapDevices = [ ];
|
||||
|
||||
# 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.eno1.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eno2.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eno3.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eno4.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp5s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp6s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp7s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp8s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlp3s0f0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
55
machines/gandalf/qemu.nix
Normal file
@@ -0,0 +1,55 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
|
||||
users.users.qemu = {
|
||||
isSystemUser = true;
|
||||
description = "QEMU User";
|
||||
home = "/var/lib/qemu";
|
||||
createHome = true;
|
||||
group = "qemu";
|
||||
extraGroups = [ "vfio" ]; # Add qemu to vfio group
|
||||
};
|
||||
users.groups.qemu = {};
|
||||
|
||||
services.udev.extraRules = ''
|
||||
# Set proper permissions for VFIO devices
|
||||
SUBSYSTEM=="vfio", GROUP="vfio", MODE="0660"
|
||||
'';
|
||||
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
qemu_kvm
|
||||
];
|
||||
|
||||
systemd.services.qemu-vm = {
|
||||
description = "QEMU VM Service";
|
||||
#wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
#can add ,rombar=0 to vfio devices, but it does at least run now.
|
||||
ExecStart = ''
|
||||
${pkgs.qemu_kvm}/bin/qemu-system-x86_64 \
|
||||
-m 4G \
|
||||
-cpu host \
|
||||
-smp 2 \
|
||||
-enable-kvm \
|
||||
-device vfio-pci,host=04:00.0 \
|
||||
-device vfio-pci,host=05:00.0 \
|
||||
-device vfio-pci,host=06:00.0 \
|
||||
-device vfio-pci,host=07:00.0 \
|
||||
-device vfio-pci,host=08:00.0 \
|
||||
-device vfio-pci,host=0b:00.0 \
|
||||
-device vfio-pci,host=0b:00.1 \
|
||||
-device vfio-pci,host=0c:00.0 \
|
||||
-device vfio-pci,host=0c:00.1 \
|
||||
-drive file=/vm-images/OPNsense-24.7-nano-amd64.img,format=raw \
|
||||
-vga virtio \
|
||||
-netdev user,id=net0 -device virtio-net,netdev=net0 \
|
||||
-display none \
|
||||
#-daemonize
|
||||
'';
|
||||
Restart = "on-failure";
|
||||
User = "root"; # Run as the qemu user
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
2
machines/gandalf/text.md
Normal file
@@ -0,0 +1,2 @@
|
||||
qemu-img create -f qcow2 /vm-images/opnsense.qcow2 20G
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
'';
|
||||
packages.myplugins = with pkgs.vimPlugins; {
|
||||
start = [
|
||||
vim-nix
|
||||
vim-lastplace
|
||||
vim-yaml
|
||||
vim-nix
|
||||
#vim-lastplace
|
||||
#vim-yaml
|
||||
#coc-rust-analyzer
|
||||
#neovim-fuzzy
|
||||
#LanguageClient-neovim
|
||||
|
||||
@@ -5,44 +5,50 @@
|
||||
./base.nix
|
||||
../services/podman.nix
|
||||
../services/ollama.nix
|
||||
#../services/ollama-webui.nix
|
||||
#../services/whisper.nix
|
||||
../services/ollamaWebui.nix
|
||||
# ../services/whisper.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs.unstable; [
|
||||
# ollama
|
||||
# openai-whisper
|
||||
# openai-whisper-cpp
|
||||
# wyoming-faster-whisper
|
||||
# subtitlr
|
||||
# piper-tts
|
||||
ollama
|
||||
openai-whisper
|
||||
openai-whisper-cpp
|
||||
wyoming-faster-whisper
|
||||
wyoming-piper
|
||||
subtitlr
|
||||
piper-tts
|
||||
bark
|
||||
|
||||
# #piper-train #broken
|
||||
# wyoming-piper
|
||||
# python3
|
||||
# python3Packages.torchWithCuda
|
||||
# python3Packages.openai-whisper
|
||||
# python3Packages.faster-whisper
|
||||
# python3Packages.scipy
|
||||
python3
|
||||
python3Packages.openai-whisper
|
||||
python3Packages.faster-whisper
|
||||
python3Packages.scipy
|
||||
# python3Packages.numba-scipy
|
||||
# python3Packages.scikit-image
|
||||
# python3Packages.traittypes
|
||||
# python3Packages.statsmodels
|
||||
# python3Packages.scikits-odes
|
||||
# python3Packages.sympy
|
||||
# python3Packages.numpy
|
||||
# python3Packages.pandas
|
||||
# python3Packages.matplotlib
|
||||
python3Packages.sympy
|
||||
python3Packages.numpy
|
||||
python3Packages.pandas
|
||||
python3Packages.matplotlib
|
||||
# python3Packages.tensorflow
|
||||
# python3Packages.tensorboard
|
||||
# python3Packages.keras
|
||||
# python3Packages.transformers
|
||||
# python3Packages.torch
|
||||
python3Packages.transformers
|
||||
python3Packages.torch
|
||||
# python3Packages.torchvision-bin
|
||||
# python3Packages.torchsde
|
||||
# python3Packages.torchaudio-bin
|
||||
# python3Packages.torchWithRocm
|
||||
# python3Packages.torchWithCuda
|
||||
# python3Packages.scikit-learn-extra
|
||||
python3Packages.langchain
|
||||
python3Packages.langchain-community
|
||||
python3Packages.langchain-core
|
||||
python3Packages.langchain-chroma
|
||||
python3Packages.langchain-text-splitters
|
||||
];
|
||||
|
||||
|
||||
|
||||
@@ -1,34 +1,45 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
mkDefault = lib.mkDefault;
|
||||
in
|
||||
{
|
||||
imports =
|
||||
[
|
||||
../packages/vim.nix
|
||||
../services/ssh.nix
|
||||
./sops.nix
|
||||
];
|
||||
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
git
|
||||
unzip
|
||||
zip
|
||||
gnutar
|
||||
wget
|
||||
rsync
|
||||
ripgrep
|
||||
neofetch
|
||||
htop
|
||||
#neofetch
|
||||
#htop
|
||||
bottom
|
||||
killall
|
||||
foot.terminfo
|
||||
tailscale
|
||||
sops
|
||||
atuin
|
||||
#upower
|
||||
];
|
||||
|
||||
#just allow unfree, im fine with it.
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
zramSwap = {
|
||||
|
||||
zramSwap = mkDefault {
|
||||
enable = true;
|
||||
memoryPercent = 25;
|
||||
};
|
||||
|
||||
#boot.plymouth.enable = true;
|
||||
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Oslo";
|
||||
@@ -37,13 +48,20 @@ imports =
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
# Configure console
|
||||
console = {
|
||||
console = mkDefault {
|
||||
font = "Lat2-Terminus16";
|
||||
keyMap = "no";
|
||||
};
|
||||
|
||||
#tailscale
|
||||
services.tailscale.enable = true;
|
||||
networking.firewall.interfaces."tailscale0" = let
|
||||
all = { from = 0; to = 65535; };
|
||||
in {
|
||||
allowedUDPPortRanges = [ all ];
|
||||
allowedTCPPortRanges = [ all ];
|
||||
};
|
||||
|
||||
|
||||
#system vide bash aliases. TODO: check if only one of these works so i dont need duplicates.
|
||||
programs.bash.shellAliases = config.environment.shellAliases;
|
||||
@@ -57,36 +75,148 @@ imports =
|
||||
dc="cd";
|
||||
la="ls -la";
|
||||
lls="ls";
|
||||
};
|
||||
environment.interactiveShellInit = ''
|
||||
alias gst='git status'
|
||||
alias gcm='git commit -m'
|
||||
alias gca='git commit --amend'
|
||||
alias gsw='git switch'
|
||||
alias gaa='git add -A'
|
||||
alias gb='git branch'
|
||||
alias dc='cd'
|
||||
alias la='ls -la'
|
||||
alias lls='ls'
|
||||
battery="upower -i $(upower -e | grep 'BAT') | grep -E 'state|to full|percentage'";
|
||||
cim="vim";
|
||||
cbuild="mkdir build && cd build && cmake .. && make";
|
||||
untar="tar -xvf";
|
||||
};
|
||||
|
||||
|
||||
environment.interactiveShellInit = ''
|
||||
#atuin import auto
|
||||
|
||||
# Colors
|
||||
RESET='\[\e[0m\]'
|
||||
BOLD='\[\e[1m\]'
|
||||
CYAN='\[\e[36m\]'
|
||||
GREEN='\[\e[32m\]'
|
||||
BLUE='\[\e[34m\]'
|
||||
YELLOW='\[\e[33m\]'
|
||||
MAGENTA='\[\e[35m\]'
|
||||
RED='\[\e[31m\]'
|
||||
|
||||
if [[ -n "$SSH_CONNECTION" ]]; then
|
||||
REMOTE_LABEL="\[''${YELLOW}\] (ssh)\[''${RESET}\]"
|
||||
else
|
||||
REMOTE_LABEL=""
|
||||
fi
|
||||
|
||||
# Git branch function
|
||||
parse_git_branch() {
|
||||
git branch --show-current 2>/dev/null | awk '{print " (" $1 ")"}'
|
||||
}
|
||||
|
||||
|
||||
# Set prompt
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
PS1="''${BOLD}''${RED}\u''${RESET}:''${BOLD}''${RED}\h''${REMOTE_LABEL}''${RESET}:''${BOLD}''${GREEN}\w''${MAGENTA}\$(parse_git_branch) ''${BLUE}\A''${RESET}\$ "
|
||||
else
|
||||
PS1="''${BOLD}''${CYAN}\u''${RESET}:''${BOLD}''${CYAN}\h''${REMOTE_LABEL}''${RESET}:''${BOLD}''${GREEN}\w''${MAGENTA}\$(parse_git_branch) ''${BLUE}\A''${RESET}\$ "
|
||||
fi
|
||||
'';
|
||||
|
||||
|
||||
# environment.interactiveShellInit = ''
|
||||
# alias gst='git status'
|
||||
# alias gcm='git commit -m'
|
||||
# alias gca='git commit --amend'
|
||||
# alias gsw='git switch'
|
||||
# alias gaa='git add -A'
|
||||
# alias gb='git branch'
|
||||
# alias dc='cd'
|
||||
# alias la='ls -la'
|
||||
# alias lls='ls'
|
||||
# '';
|
||||
#
|
||||
|
||||
#some insecure packages
|
||||
## some insecure packages
|
||||
nixpkgs.config.permittedInsecurePackages = [
|
||||
"python3.11-youtube-dl-2021.12.17"
|
||||
];
|
||||
|
||||
|
||||
sops.secrets."github/api" = {
|
||||
mode = "0444";
|
||||
group = "root";
|
||||
};
|
||||
|
||||
#nix stuff
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
nix.gc.automatic = true;
|
||||
nix.gc.automatic = mkDefault true;
|
||||
nix = {
|
||||
extraOptions = mkDefault ''
|
||||
builders-use-substitutes = true
|
||||
experimental-features = nix-command flakes impure-derivations ca-derivations
|
||||
!include ${config.sops.secrets."github/api".path}
|
||||
'';
|
||||
|
||||
settings = {
|
||||
trusted-users = [ "gunalx" "root" ];
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
substituters = [
|
||||
"https://cache.nixos.org/"
|
||||
"https://cuda-maintainers.cachix.org"
|
||||
"https://nix-community.cachix.org"
|
||||
"https://nixos-rocm.cachix.org"
|
||||
"https://nixpkgs-unfree.cachix.org"
|
||||
];
|
||||
|
||||
trusted-public-keys = [
|
||||
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"nixos-rocm.cachix.org-1:VEpsf7pRIijjd8csKjFNBGzkBqOmw8H9PRmgAq14LnE="
|
||||
"nixpkgs-unfree.cachix.org-1:hqvoInulhbV4nJ9yJOEr+4wxhDV4xq2d1DK7S6Nj6rs="
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
buildMachines = [
|
||||
|
||||
{ hostName = "aragon";
|
||||
system = "x86_64-linux";
|
||||
# if the builder supports building for multiple architectures,
|
||||
# replace the previous line by, e.g.,
|
||||
# systems = ["x86_64-linux" "aarch64-linux"];
|
||||
maxJobs = 6;
|
||||
#speedFactor = 13199;
|
||||
speedFactor = 6000;
|
||||
supportedFeatures = [ ];
|
||||
mandatoryFeatures = [ ];
|
||||
}
|
||||
{ hostName = "galadriel";
|
||||
system = "x86_64-linux";
|
||||
maxJobs = 4;
|
||||
#speedFactor = 8066;
|
||||
speedFactor = 4000;
|
||||
supportedFeatures = [ "cuda" ];
|
||||
mandatoryFeatures = [ ];
|
||||
}
|
||||
{ hostName = "localhost";
|
||||
system = "x86_64-linux";
|
||||
maxJobs = 4;
|
||||
#speedFactor = 8066;
|
||||
speedFactor = 2000;
|
||||
supportedFeatures = [ ];
|
||||
mandatoryFeatures = [ ];
|
||||
}
|
||||
# {
|
||||
# hostName = "isvegg.pvv.ntnu.no";
|
||||
# system = "x86_64-linux";
|
||||
# maxJobs = 4;
|
||||
# speedFactor = 4961;
|
||||
# supportedFeatures = [ "big-parallel" ];
|
||||
# mandatoryFeatures = [ ];
|
||||
# }
|
||||
];
|
||||
distributedBuilds = true;
|
||||
};
|
||||
|
||||
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
flake = "git+https://github.com/adrlau/nix-dotfiles.git";
|
||||
flags = [
|
||||
"--update-input" "nixpkgs"
|
||||
"--update-input" "nixpkgs-unstable"
|
||||
"--no-write-lock-file"
|
||||
"-L"
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -1,30 +1,39 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{ unstable, config, pkgs, lib, ... } @ args:
|
||||
{
|
||||
imports =
|
||||
[
|
||||
./base.nix
|
||||
./sound.nix
|
||||
./video.nix
|
||||
./office.nix
|
||||
./office.nix
|
||||
./development.nix
|
||||
|
||||
../packages/vim.nix
|
||||
../packages/steam.nix
|
||||
|
||||
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
openscad
|
||||
cura
|
||||
environment.systemPackages = with pkgs; [
|
||||
libnotify
|
||||
openscad
|
||||
|
||||
#cura # broken
|
||||
prusa-slicer
|
||||
|
||||
#libsForQt5.qt5ct
|
||||
#qt6Packages.qt6ct
|
||||
|
||||
where-is-my-sddm-theme
|
||||
#libsForQt5.qt5ct
|
||||
#qt6Packages.qt6ct
|
||||
where-is-my-sddm-theme
|
||||
swww
|
||||
|
||||
nvtopPackages.full
|
||||
];
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
nerd-fonts._0xproto
|
||||
_0xproto
|
||||
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
@@ -32,34 +41,37 @@ imports =
|
||||
mplus-outline-fonts.githubRelease
|
||||
dina-font
|
||||
proggyfonts
|
||||
nerdfonts
|
||||
#nerdfonts
|
||||
ubuntu_font_family
|
||||
|
||||
|
||||
] ++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);
|
||||
|
||||
];
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.printing.enable = true;
|
||||
services.printing.enable = false; #temp off because of CVE
|
||||
|
||||
security.polkit.enable = true;
|
||||
|
||||
security.pam.services.swaylock = {};
|
||||
security.pam.services.swaylock-effects = {};
|
||||
security.pam.services.ly = {};
|
||||
|
||||
#security.pam.services.display-manager.ly = {};
|
||||
services.displayManager = {
|
||||
enable = true;
|
||||
sessionPackages = with pkgs; [ sway ];
|
||||
sessionPackages = with pkgs; [ sway niri];
|
||||
|
||||
sddm = {
|
||||
enable = true;
|
||||
theme = "${pkgs.where-is-my-sddm-theme}";
|
||||
wayland.enable = true;
|
||||
wayland.compositor = "kwin";
|
||||
autoNumlock = true;
|
||||
enableHidpi = true;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
services.power-profiles-daemon.enable = true;
|
||||
|
||||
services.logind.powerKey = "ignore";
|
||||
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
services.desktopManager.plasma6.enableQt5Integration = true;
|
||||
|
||||
@@ -84,8 +96,9 @@ imports =
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.xkb = {
|
||||
layout = "us,no";
|
||||
variant = ",";
|
||||
layout = "no,us";
|
||||
variant = "";
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -3,11 +3,20 @@
|
||||
imports =
|
||||
[
|
||||
./base.nix
|
||||
./ai.nix
|
||||
#./ai.nix
|
||||
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
zed-editor-fhs
|
||||
aider-chat
|
||||
|
||||
python3Full
|
||||
uv
|
||||
python3Packages.pip
|
||||
python3Packages.uv
|
||||
poetry
|
||||
|
||||
|
||||
|
||||
texliveFull
|
||||
@@ -29,10 +38,14 @@ imports =
|
||||
rustup
|
||||
|
||||
|
||||
cmake
|
||||
gnumake
|
||||
mpi
|
||||
bc
|
||||
gnuplot
|
||||
ffmpeg
|
||||
|
||||
|
||||
ripes
|
||||
|
||||
];
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
imports =
|
||||
[
|
||||
./base.nix
|
||||
../services/podgrab.nix
|
||||
#../services/podgrab.nix # not maintained
|
||||
../services/jellyfin.nix
|
||||
];
|
||||
|
||||
|
||||
@@ -10,20 +10,22 @@
|
||||
# This will add secrets.yml to the nix store
|
||||
# You can avoid this by adding a string to the full path instead, i.e.
|
||||
# sops.defaultSopsFile = "/root/.sops/secrets/example.yaml";
|
||||
sops.defaultSopsFile = "/etc/nixos/nix-dotfiles/secrets/secrets.yaml";
|
||||
sops.validateSopsFiles = false;
|
||||
# This will automaticx-sopsally import SSH keys as age keys
|
||||
sops.age.sshKeyPaths = [
|
||||
# sops.defaultSopsFile = "/etc/nixos/nix-dotfiles/secrets/secrets.yaml";
|
||||
sops = {
|
||||
defaultSopsFile = ../secrets/secrets.yaml;
|
||||
validateSopsFiles = false;
|
||||
|
||||
# This will automaticx-sopsally import SSH keys as age keys
|
||||
age.sshKeyPaths = [
|
||||
"/etc/ssh/nixos"
|
||||
#"/$HOME/.ssh/nixos"
|
||||
#"/home/gunalx/.ssh/nixos"
|
||||
"/root/.ssh/nixos"
|
||||
];
|
||||
# This is using an age key that is expected to already be in the filesystem
|
||||
sops.age.keyFile = "/var/lib/sops-nix/key.txt";
|
||||
# This will generate a new key if the key specified above does not exist
|
||||
sops.age.generateKey = true;
|
||||
|
||||
# This is the actual specification of the secrets.
|
||||
#sops.secrets."myservice/my_subdir/my_secret" = {};
|
||||
|
||||
# This is using an age key that is expected to already be in the filesystem
|
||||
#age.keyFile = "/var/lib/sops-nix/key.txt";
|
||||
age.keyFile = "/root/.config/sops/age/key.txt";
|
||||
# This will generate a new key if the key specified above does not exist
|
||||
age.generateKey = true;
|
||||
# This is the actual specification of the secrets.
|
||||
#secrets."myservice/my_subdir/my_secret" = {};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,14 +6,11 @@ imports =
|
||||
|
||||
];
|
||||
|
||||
# Enable sound with pipewire.
|
||||
sound.enable = true;
|
||||
#hardware.pulseaudio.enable = false;
|
||||
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
audio.enable = true;
|
||||
systemWide = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
@@ -21,6 +18,7 @@ imports =
|
||||
wireplumber.enable = true;
|
||||
};
|
||||
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
pavucontrol
|
||||
wireplumber
|
||||
@@ -36,7 +34,7 @@ imports =
|
||||
vital
|
||||
picoloop
|
||||
#bespokesynth-with-vst2 #always takes ages compiling
|
||||
fmsynth
|
||||
#fmsynth
|
||||
polyphone #soundfont editor
|
||||
|
||||
#vocaloids
|
||||
@@ -62,7 +60,8 @@ imports =
|
||||
headset
|
||||
nuclear
|
||||
spotifyd
|
||||
spotify-qt
|
||||
spotify-player
|
||||
spotify
|
||||
spotify-tray
|
||||
|
||||
tenacity
|
||||
|
||||
@@ -41,7 +41,7 @@ imports =
|
||||
workstyle
|
||||
#swayest-workstyle #migth switch to this.
|
||||
autotiling-rs
|
||||
wleave
|
||||
wlogout
|
||||
|
||||
pass-wayland
|
||||
|
||||
@@ -49,7 +49,7 @@ imports =
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
|
||||
@@ -2,12 +2,16 @@
|
||||
#ENC[AES256_GCM,data:7kh9f2LAKp46UTh8LmDqvK8xOhHO9mVUD2yzLg4LRR2WU98EpztHmDcHKOF0AG60NsndYaw1en5efU0x/NVAzfdTVPJA2apDs3vtAlzGjvv593Snwb2wa4iK0tM0beMyGvzkSEPs8HOuSLvNpLHWaB1xlC0=,iv:eBoUwZfMPhBnT2+jWqT/EGh/CVNK5qiYeaspFf1VJxY=,tag:nEcuwi2nnACadGR8zw63HA==,type:comment]
|
||||
acme:
|
||||
certs: ENC[AES256_GCM,data:L9v0y/T4Vq+fZt5U8YAcyxtvMzv8w+gCwk2z5N027cYiuauuNFYDQ4WV5bTfDL1cSjp30oYvGTlgn3+8s9MA8xqaPJytCNNClRK4isvZKP1YdiVwKdxTg814LDzgPoZsyErSHb+MvgMEUpONifRxFJ7n1HHqcyfeXpV1Bx0=,iv:dnct9KU24ZVaQThA6rTTClRjT+vTi4aD+7UV+oiqoVU=,tag:vTMcHHexHVST3r4wiiTuXA==,type:str]
|
||||
github:
|
||||
api: ENC[AES256_GCM,data:QYXx+9QxXJ4WwDp6FsaSmrngs/+hBugGD8L6ZdiAgu/1/RW/ip1IEC52g49N70PGh545fAone3IiZJKGxqHeitSxTFv111cmTL4dq5s1yXEwUrsrll8n6rEVMJeHnPeAhz8MNYNxJuIfwugp7XlT61v2f/ylNVa77ZubSdNa5w==,iv:Cdnlb8LFQgsWnjEl+eQUHYIiVpXFabb70FFtnWDfIl8=,tag:vzzfJlQFQBncjLJvmFxuzw==,type:str]
|
||||
nginx:
|
||||
defaultpass: ENC[AES256_GCM,data:kbWRuL4GiHjOoy4bvDZN9etrnP9mm3Sc5+ltxXzFzU5G1cbHAa6Si9zzhoA67/MXXvOQ1mp31rQpV1K/WsrxGaajFdHgVYGUJB/RaZfZfg1THF5qvqR7vdOiVRWSIalzGMOSUyJTNg2dgQMbymVbmc/k/vZjkjjsI3oze7oN/NZnQ7nolGybQ6W8DCTRzHi5x20/zTJdXNmJf450az9sWOw7i1A6Avg2pPZ9t2N0WyuIcy1MsQICs7PE4ztrxIF82IsFLQNj6LmXXRQaZ9dCF/3h3yyNShfjgI2owYMmrRJssZCdF5dOPq+HVCEfE3jYBFcAWrvCCnYBczCx+WGl+5sQbfJtZdcDGw1bRw41I71h/W4micjo6W5XbeHVx+Rd,iv:h6gn2VKancyy6dZlON99zjRj4smArwt6I4a3PRjGfZ8=,tag:F++P/Qhh+uUUhBJYp3rGvA==,type:str]
|
||||
qbittorrent:
|
||||
interfaceAddress: ENC[AES256_GCM,data:GsDv+UB07bQGh/DISw==,iv:Hn1zGJweLj5jy8sk4aN9rob/6kfzo7iLXPgaLBIMSVs=,tag:fbKSrAIOqTsnCCI1DBUZkA==,type:str]
|
||||
miniflux:
|
||||
adminCredentialsFile: ENC[AES256_GCM,data:FPcdTiJqbI6MloU9JqAYPABoD/odegXks+JyEeCri8hOV0dPMd0TNDV8fN1bbIiJ4llzaclZbjl0HKM=,iv:5fd3O008aP34+7lGlG8vBPAIdmEjFPoneH+rJ6d9TI0=,tag:HKOHjGLiAIDBR54HJv9teA==,type:str]
|
||||
vaultwarden:
|
||||
environmentFile: ENC[AES256_GCM,data:5AvlU42RmYip4TKTtbvTq/eiLrYbNNYbUddq4z5B6N6XKa2KKolVXeNiVC2v/GSq2iRYXBUOOgTHXwoBSA40mh4ui3Yy3BKuiMEITmEbSxFDW+6KGbMNrPm5Xu5SEnjRMKiKUkL78QT7YVe72pcwVWIasZumzrHw1i39aCe2hDD1/2HraG4Y7e3ZD0TH0kyIdnj2kOmS46BuZQg+3KHi8Fg5ar4zVh6WTW4T//cfkb+Y2611TbXmo+w5j7Gt+ARKmsLFzer73Ut7+xNyqEbEgL06gsI3jj0/QzGV7nrZUste0VVqB5kM7iG6OugH8zoJRnhM0LvaU12vYXcQ7DxPEKBzuQIhhpaLu7PJgVYuDueyDYpRiYnV568BAlGLpTrfJCFT4YsGGetK2ktOsu9M2QjoDD2GfrS8j/RZfZawFY5q7qzg8gKXxeZ4pGUnX/k2+TBLMuYTdu+aF4aML7TcQZw7Ai/aneH6JNrfzFaFhKYAzx1pcF500QdZUXp6XdOOhDNXLkcYzM1Ovz6gg9QRKWQ0SsTYIlprdWOaWoGcHtYdo83oTFGz/uCga9NAcIjVJRQI989Oak6rAxtW98En+/wlIoEOW4Q/irRdBQ6gYeyC9LBOXDzKfwDtvG7LEsDj63CITv8hUbYvPEUG2wy5WAmfaC6vrtRg52G/GHxfjMlY23clRXKQB9AYw5ywrUTrMzqHGqYevQR97yhzx7qi0DUlhj3bBh0RsnxbbIA2vqyhg+l6Rp3oYb8NRqm9hHjyDfBvdomU5s7mrxxz4H/mjOURF7+iUuK7N4oDQM/pF+Dh+3hE/0WzgdY0pK/hWKbol8EbfLGuy8QCCrcXwTkwYfgnwNQEnEx+MvA67il4aKhI/eDPXU9d2Lt7lFEteTkPXQYgcIM7KV7y3hwSUIudUc5I84uHa058FMg1HnRcFxpBhN9twCAOmI3Ec+qEz0vJIEmda+ZPrAG0drOJix/VmtyD5LG7G6hAQ8vFGz4/9oz/xmkzdh6vU7R/D7onUAzPy8t6uP2LDP4lT7uETJYMbbU4XGk0dHE4WICmGzcodxFN92A1gshl74DikLIgH+hTbWyRbKB9v5/p676IXWfEqfH3ymOaQkEUC+Y6bqXWSpbprG6VQPbtdiNuKYLgNqY8w8sVvjqNrsVVtBCyzm35PMc0xomUBtH/s37dmXPwiNKxr91BVGnsr5ASb4vL5UpnGhk7QedO4JOsqj20Oj0OMFZcGQ+roTBr9hUI6FwB9pGiRmot28LvqjMxYZDYSRcGI551FoAYycZKj7jGHs47BXNxaVlSzVipWGryYyvLzMXLBXqlft4azIIZ6UUT3MSAauRt13BXuyLEIDSgA08YNP0B9dIJ0cHXXachLNn/Jl4Y4po0Ua4CnnqmXBS2CCDCJY4032+jYYl8GzmcjQ43cT8cWFuZzSjCHOymFCvt4ZrVvXE9btNASveLekv17KGRCw7jiC0oIoNIh5C1ImZCxn6KgJaRFSUeS4bplGoZEMQ5Q0RjJeZW7LXRPdWdQ8uYo7bWQnJLn5fVXhIFXkC1xcpP/gtWy2NvdFx1W8fg/eIsIHjZY50YiybmbGHBpBm58Du7qLUB0eu+dE1sGCKFNaSdVUYK42Q3TjuF40moZWBBxAkrdAoFUiS363i1e+cW7mD/fbPJ+m3BYC/fo9OZfVxDsRMrs8T+OXP/LnrxdgGTnbim/hmyTIuPGzX+xrjDo2yCFQRwdZ/QGaiMN93CJeHMMtO7FCT5+RlOmMFLzk09Z/OTEqM2vHlURHZclBA99zt7TZ5S1ep3zv/nHy0DvXzNJL956KKP2T0SD1/EhToulER+P+dryeO8eX1nCVJO/pitv6nzNOvoE9CaGTkwn0c0flJi8EeKm9dbuIOVVYPnNStUu6YuAiHrBNVQeYawuK9T7nqe4MgWPf3qAM25uGLODZv8gZessJao65H9j8uOogN678iGPTnLKQZ2+5JgqpemmD3MLpBKAFgVJrGrMWtk670Hl4N11PIHT2hVUFc=,iv:jSlHx+PODfAcsYTZOju5z8mawPXAV+TKvj89nrdCYkE=,tag:j+4gdsBV4COe/FduaejI2A==,type:str]
|
||||
openvpn:
|
||||
galadriel:
|
||||
config: ENC[AES256_GCM,data:f9uDYNLHP63oee5lGMPsmZ76f80n51eYxd3hvF5ZhPGtCspBEOMLHRonTSEril1wKCT3i1DWR967lWTdjJs6KOpoX5JqKz2Qj9tkpXS5jnHZAf0JQg1l7jmf9/a2OKJparVCFJyNPTN5mzl3gGOyDGe0TIT+ZtP8/PCWsQNjB89Crd/kHSSAmIUb2fcNXEkxs6XwgsBAlhbR69e+06NYaRyX5ydVV/kDekx+ixpx2bIqMQqIdEk358RLCauP3wAh1FoqTTJ2eqLcDhuPySFol9cLCInWnColNdyb/0+czrEa4DiLrbFVXx7bUVwjd9rb+eoajC1e09d41aJkVHG1LxlSRjq1sBlI3v3E1vaUBJWegZBROEpqEOCKfHSagkmaanaBv/KMq1MFmXJ1MzyskDJb9MdNFKRQBjQLwBXnURts/Yj9ChrT51z+/bwItxt8XmlwIEgL65F/8h1+bUJGOi27ZAvfkixflff0ELYSPvQI+N1vFlF9QP6AmIFxF2SdmOSlYzTYIz0+LMejLltCEUdU2qdlZ0a9DuYlsxvnZ75JgWXviw==,iv:C2Zb1DLTMlsEqQ5/UUrpT9k5Z51YYGu3SUcu1F20ydc=,tag:wGkQ7LWgCfy0K3zM38JxHQ==,type:str]
|
||||
@@ -16,10 +20,6 @@ openvpn:
|
||||
userkey: ENC[AES256_GCM,data:qaJIx3uJPnRf/ZN3PUj8CdbIDZYwfDHG4APWlQTUBHtJqYZbP+sLVFmpvgCD+yFgomghLeeDCt+Hm7ti+XYjLRciDPZQb/CAlsdgQW7JbsGA2Sdfj5wwn+vF0F0BLO0hORcB4VW2cY62yuf3koS6IbgXeHRVmLe4hmTftZ2ILZm/nPdjsG2sktLklORG26h/zaLX8fe/+2E9kFu8swyFxI3b+2xDkbm8/jsYSN08sL6L/kCaRlmITISMzVOodrms2FYv7oYnKsyq8ABBnpYECRJheukWNIzcFiJ6+QQwqJUCiJvdJ2Hu60LHgSP20plm5SJ631KBEK8NelwRUhpWe0WBiTfilcmwGJUhADtOIaDIO5r6Ou/OfZupPUEQtg0XhElwWiwqnnnMA//POUxMRQ7mxbhZU9XA2BAHv+RH2SUq7IEgTYkOps4zEWk48yyCI7338hB6DOZs2lR/yWkfR/JtDF3HM8RqLVDB3b9BypkWwfXh/M1RlK4XHid0gv575rQXe507mCAb4KJ82RJSbQ213974e8jXRdMtERM4ZujcP0hfeqxj5vrKLRqVgyLDH3Lz7c9eYhUVS/JN2HC3t/BPdN5J9LJud4r1VLYR01Ru5U+IDqOi71T5jiASndrc+QQa1mulEGLIWj/2c8oe2S0p2EU+P6V5RSrqLRuYGpvCcMOs7ydzKBd3oHBMY/VDhpbKlZEw/Kofbs+Easuz5zBlLlPxc0O+AttNlfsSgxuTD5/NiUKT9+TsToSrBZQiBDKvgDpQjZsq2Clw7ZAvFNrPNTiu0sU7YCe4xO9gQ7RIcXzI6S1B1eoHAbnfv7lKE0VvxRCsfngK8Kp/NccXIsNfDCZ/1x7/WHmq9wr5XmWqY41rf1LFeouQFwydjI5iPp4jHwUzPkiGBkkaOdkb8Ovjjy4urMekTiyO5JKJUJCmtZiSj2DHCOBWm6nRQOFCenLHD6ls2NeUpqqsA2wna5DVn0EPvpaPIkmrdIqHh8d85+N9C8UbYDwAnEFvqcAIlFDWj/tUWVUyfWLRl0JSc1wQFzXavJUaLhhLfP0Gh3n5/ayALGLrLwAeUWQz+tLu7oTs27PaEbQknyPvBczG4I/usAzpdlzr4VfdKWfvdjWST1c5ZCPl4qS8T9+/5jOE1+g/y3kcZED9qjFXdnVpoSJfLx+3cY59inv2LMAnavY++zEV1SWIwKFgAgJoYR4hCKANySWY8kBxCDcRjdBno2rAM3xLfU6I1sLb0lm+6LBswOEqHTb9E20u8RXum9JUI/6iauhJHmfoyMLVvhD5XQyolbQ5n/r1qq5LOjsKWGMvo/AeosBwcAY3u67xyvNnNgrd29SBwOYyGYNKG0jyhg7HDfHFIpSDzfAI4IOyhs44cPGFoN759+Y0BNLjW1mqDiWpErvSaNc4zH2cr2fSCaGpEBbf6q3hMh4tRQJayxVSEeD2emO69UNBd4jCkHo4vaK6D9aSBEcpWR2SQM0c968zDcdmOTajsLzPYoIyaOgWFAIs+9A6f8eyqlhDfWIxp6e1fVY8sCFotZaDXRqb9/umCy0IqNQChuKYcB5oB/hvwwMMuTE+4Q4Dd7RXfW8ZMAZz3Z1bqimVhFeVXDkyT+8DXMf2166bLxxwxpxSCPd3XmmOSUiNKysTHykh5MKaPjEyTl7xgvbhqZ16k0pvkh+z5Op1NcU2tm6W+/FL1JV83KnsjC1jAdwMEeFn+0MAFXTBARAG+qAb3pGowYz/wNSsvf93a3JTANA609opK/7MK84h5n7M6TulRBw5Phnw0HUdio5SJ7DBRPr4kYGgVTMwWzxfOY3lDF/fnsqTOjGWxUoLrRXrZ8aaAHWaUYFzx52SW3J3rczRBWTC0jUUEVs7cslfR7N7VGvEXV9p9TuJOsfAyvFyseRIh66Uwi9Pwq+QBOadUttcT+iBgz72BEPwuIAcKre+ShoxE9cHGrtpvlgi7eDSlI1bZ7km+8j0TWryzKLK8P9N4MhspwRO/zGXiErAOoBe4MaBvMvjGCgCRFgnLypoDoeHeoLO1WvgskKUhHXIZV/02nBhhnxPUmJjzsqp722aDztxWKU1VX6lHooRFgpMRzOymD7XVxfZNyDrxuf0VJluIzZlFCzGpswgGnxocs0hFgTMePzhoMx2XnU9d6NM3hl1fOCCwV7Be8KjahNRc5qGChPS4kLzEyvsWHD7EiKK2gCYS0ysiPTNxKrcC9JFXqR7iX1QSQ8W5Sy5IBWYZWuBNj0STJ4J9VXImEaOnWnkNLcncwQh1Ty8OTDX15jeC7/ltfQ6KVjPj3iPs8cEADnOW7ez91vtXOg4dFhjuLAylipQYFIaUpjJOwNQuEcp121LKR1YXHeLRI4y2Cvw9ZL9HXZbB8yQR5/NNba2PScDjfg05ZhFb4yFfcrT+OOrvO6ej1mX4qPzK4X4Sxzi+c632Xi98I/L6rKE5WCLg0dXPUhy4YwD495ZoCFfT5hzNHrNjeCGG03mVC4qLTcopwyn4TlcN+SnZEzI9kVvTwOhtW2J9ol1GNjiGsmfDq9I/+jOfALFQgA/nFVyqBi14pui9yhno6WDyPGifDeKsoNBoZq63lQ/exxGzTH/sPRqeumAUWU81n3/4FLcknH1ssucMC73scO5S4+lzpF89PFCV5Qnkcghzu+vEC5/Z0roU+jQL+wPpjnq1QAuX94TX0iLVozSmcPfFwv4PyzqiCRK7dbk8TtTQlqdM+elzKzKbQkUQXvY2vGTyKnZxJjrwHx71QuEYMfu3QqO7v5XUJSayON1o/RcfQdwfxenLaLOzXYPVod2eylalY7vXKtJOclz0OsCHVL/IAs2p+qvnBhDi2LcBKFgYRgI9ZrOFWGBvk2hzNjieQtM/a9BAcAjzR8jNTgBYqTQWIuloJEjd+KtRC7S4qFVSwp5E+2eFD3QpBaf+TFuDCvSteWpHZSXIrrLEGAichsWVHK09KKGsFPb//S2bEIrHeMYwPbDZ4JFR5YzUJTnfuHFCAGxsL4qali4ZA8BlTEp675TwJ47FWpS349/10di0DbIm7+eeQUVv4obn9sk0st1tDHS5kWsWQq587t52OFuqwXZv+GdEMn/jfo4F4dEF61DbkXtMzMs0/DU9x60m0pp41LvJQsm7GyGjvtUV0ltD5n8lF40pmVZnrcrQb/VSd2mLZbkTl8K+1J2rDnel2vf5DcUSysTha8o+g0X4fqMeGnIot71ZS7bqtzYzACQukMYkSxqE/vnalxN2G4cmP0RCSwb4YhOdgsKjqUwEr560xv5M58RSMW92cFC59CHtu4G7rPyvuA9Bp6lJnxsRAfPB57QF4aqYg0VpBTpP4MHdeVuG7v7REATjyexnjuli5BSx9540nHgjrcMVcSVkcNcIykAJsHVk4PJZ01o5Ycmubvw3fHvt9OKyxY2Y7CLQpVcSwgfp4KOLnUe3+88fLfMUfg3V4rVjiriivqHVKx0aMKqkW1Od6fT5nZAd6h5rMxLWDU2U++wUcc/lfRK+J2GgY+r6MmBb1qRajW8VS3ms7e/RylxzHpaU/meUTFiFxop4iCCwBn3IjgFtZWcn+8eERkQQ0wZfuz8u5Lfy0uPQoaRhoHPXtBZQEWuQd/MIGKaetHU85XRu/1HYvQ4V5+Elu12D8idTCennGv6gqIOFZBhS1CCKbPtzTmYuV9JlmbMNhQthwuxKKbZoXhI+GNDggPMxkkmhxGChj4X2NymV7u3Yqrr1FnNGTMcuBJ10+BDeNNY9KV4MZCKH//rRjUxVEgiln0EEGFTeA/WSyG8wu72maDu2OvcfoNH3KkYYJ7JqSzvZ8raVMiWSx9nkAN18xRWxWIz4wNndrk963Ol4rwxymVcXDE9/Qrz27MAZmNhrEaF4qsut7VDLxWvnrcWCIXddNPFcqgU1IQVF48U7WAGgTFDJdDEp+Q33FNIbo70koN0KLE8ot0jIqWuwBFhA5fI7NSv5cEIOueTcD2p3J2snBebQbRtsDtu8mJBunYPqcvP3YH9xiDJkdiij/g21Wtb7FY/WPP1uVt8RJu51kxTw9VZJLLQqisk1usn3kAKM+m3gQAKpbgiFmfjb3pif3nHTCi+tRAM4hGX2VWHY8F/iaTCAZpSyd34SD6OqYIzh83nchwyaMOU9QrrOIG7Vbrd923/AMBcFVaZnQB4eGNIe6fnEiet67kb6g0yxHNKyORM0+fg9INbywzT1MzjbjozvNw5JEHm49C2J/oWcyGDW13XtQXw8uvCBVEqXpz4baNng7Xzge5WwBLTlF2+hh136npAE62aHkNZyy0E3Fa1V6ludI//BcnZ4jqYEO0/w5SA9wYFT6Aun9ltRpq60VZnYc1Jr2A=,iv:kR5g0wvCQ3NGAqviN1jvqscgAYrGzHLqhooIljtJ+gg=,tag:Z+U5Wn4U5ADIxjdfI37cBA==,type:str]
|
||||
tlscrypt: ENC[AES256_GCM,data:zG12fAsc9/LcxO0eGx4ytjHm07BMnf5aBHlfTtif4noCXcPAx5xunhJCOaWEoTobwOEpdgXoZzQcJa7EW6N/4kEnGzk8gfSl+BFswO6LEoqzYJb4sfy2qJJQrjUNxsI9yib+OCgb4DQ94apdvVG/dVypdMQrw+x+xg8K+hdZ5LZWdZLKKcBxHKeHoZ+lt/gJNv3BbtQP6Vy+1biWxjdHy1YfvLm+iqaJfi3/9HV8YAi/iePoY+rNNtc8GlaUp/HrHfmCFF4EBWuFr2knQ5t8bx7sHGlhdcTIyHJwNQdCUIsyVqckhxDulLM8luuGJZsiulkdK2f4NSpa6CPYZPWPHQ2BfSnugBEjbWrF2RQT3eOLAEJBS9YSV1/nvHA/lU2ymf0PBzzXhE9Ms0twecrS8Ql/qRbWSqiQNzHv/P7k5i5E8iw4zqaUtir7gpu3AkC2GxMVuQfowiruZGPi6i2YbDzgaBi5fZJAosWQHvZXnVApqFqzWXCzw4ACXlMI6MZ1rb3Ut9wEDXHGMRhhcWmHDsCO6I4/EphDfLiexYeVHKB++MLilXaUa6wXN0yGefj+NC3Am5YQRwR3rd4KrjXOrbKWELoIkyYrGWkZ5w5O5fC4Z+h8jxPjng/lNM3JAzREgKcw+0IcY5q3/bRXWGMScVm5qqc9LXozhWU9gghQOhbcb4NYFob8yczTJT8IdA6D72N4pAm+524DMjTPRiAi1KQInICeZp2mILvT5aUgTEXtj+iwyqyo+io3ffOjQdHa9HU2IrZKmoapkvEOsFHm3L63uY1T92/Han8=,iv:cjIKuwyLtXT5Wg/VzinC2Lf5EysoxsgnEsHei/+Yum8=,tag:b5LKO8urIBC7BJgyfs5kWw==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age14cpm59h7hx8gr54hrn4uxu4xnrp9wy3f2kdxvy6xwuyxsfg8g9zs8z5e77
|
||||
enc: |
|
||||
@@ -30,8 +30,7 @@ sops:
|
||||
OHNBdXMzZTN0VEVTYkVSbUVRYmo3eUUKvRiPgmrCCK1F5QoSHlV89C2MPl5FvU5i
|
||||
z61NMJu68UEDsDu8qNRaW3aqpT+1GYsr1evi5imzNwr0qTM2oRwkFQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2024-05-18T22:06:32Z"
|
||||
mac: ENC[AES256_GCM,data:XnO6jTrgyE3/DNkYoNmTVW52NOS+8aLmINGidvWonNLH+FBurdAyYqC+Fnj7n6VrZrnKpFknPvtNV63EVcIroQeB4l12AMow2zhShy7EEwiahJW6DrpM/lbUxOct76KXItacZv+7zMS94uojOqTBhVRjqnBQSCQZgGzhvZTX5hc=,iv:7gA/O747oRu8xgpk1bLi5IgghSXCdq0Xx3KBNmfJ8aw=,tag:UhdKhWKYlTOlSlvJjmoOSg==,type:str]
|
||||
pgp: []
|
||||
lastmodified: "2025-09-28T20:50:07Z"
|
||||
mac: ENC[AES256_GCM,data:RL8OmwcGAfFC/x5MZq6zC+wlLoyyma+ZTK5uq4Qe80SJlAJP8Sep1zp82fCuBe2ogl7h0UjrBcpOtwOPxoEs7ez2qaDpHyhmK+IFahvnLiodoP95JCSgpHLhTPK3Fxt3bPhO6T52HoLq/coiKO8YQhRdMPtat9+KF0SbcrH1uAE=,iv:tsieRtJTf00Haa8Elc+CyWB73qiMChLY1SC6HMVC84s=,tag:f+jjKdYfmr/ef/FJbCU1Dg==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.8.1
|
||||
version: 3.10.2
|
||||
|
||||
24
services/bitwarden.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
# environment.systemPackages = [
|
||||
# pkgs.sendmail
|
||||
# ];
|
||||
|
||||
sops.secrets."vaultwarden/environmentFile" = {
|
||||
restartUnits = [ "vaultwarden.service" ];
|
||||
owner = "vaultwarden";
|
||||
mode = "0755";
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
services.vaultwarden = {
|
||||
enable = true;
|
||||
environmentFile = config.sops.secrets."vaultwarden/environmentFile".path;
|
||||
dbBackend = "sqlite";
|
||||
backupDir = "/var/backup/vaultwarden";
|
||||
};
|
||||
|
||||
}
|
||||
12
services/boinc.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
services.boinc = {
|
||||
enable = true;
|
||||
package = pkgs.boinc-headless;
|
||||
extraEnvPackages = with pkgs ;[
|
||||
virtualbox
|
||||
ocl-icd
|
||||
];
|
||||
};
|
||||
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
mcPort = 25565;
|
||||
configurationFile = ''
|
||||
config:
|
||||
lite:
|
||||
enabled: true
|
||||
routes:
|
||||
- host: mc.256.no
|
||||
backend: 100.84.215.84:25565
|
||||
'';
|
||||
file = pkgs.writeText "gate.yaml" configurationFile;
|
||||
in
|
||||
{
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ mcPort];
|
||||
networking.firewall.allowedUDPPorts = [ mcPort];
|
||||
|
||||
users.users.gate = {
|
||||
isSystemUser = true;
|
||||
description = "Gate Minecraft Proxy User";
|
||||
home = "/var/lib/gate";
|
||||
createHome = true;
|
||||
group = "gate";
|
||||
};
|
||||
|
||||
users.groups.gate = {
|
||||
};
|
||||
|
||||
systemd.services."gate" = {
|
||||
after = [ "network.target" ];
|
||||
wants = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.gate}/bin/gate -c ${file}";
|
||||
User = "gate";
|
||||
Group = "gate";
|
||||
Restart = "on-failure";
|
||||
ProtectKernelModules = true;
|
||||
NoNewPrivileges = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
99
services/jupyterhub.nix
Normal file
@@ -0,0 +1,99 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
myPython = pkgs.python3;
|
||||
|
||||
myJupyterHubEnv = myPython.withPackages (ps: with ps; [
|
||||
jupyterhub
|
||||
jupyterhub-systemdspawner
|
||||
ipython
|
||||
jupyterlab
|
||||
notebook
|
||||
ipykernel
|
||||
numpy
|
||||
scipy
|
||||
pandas
|
||||
matplotlib
|
||||
seaborn
|
||||
scikit-learn
|
||||
]);
|
||||
|
||||
myJupyterLabEnv = myPython.withPackages (ps: with ps; [
|
||||
jupyterhub
|
||||
jupyterlab
|
||||
ipykernel
|
||||
numpy
|
||||
scipy
|
||||
pandas
|
||||
matplotlib
|
||||
seaborn
|
||||
scikit-learn
|
||||
]);
|
||||
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
python3Packages.numpy
|
||||
python3Packages.scipy
|
||||
python3Packages.pandas
|
||||
python3Packages.matplotlib
|
||||
python3Packages.seaborn
|
||||
python3Packages.scikit-learn
|
||||
];
|
||||
|
||||
users.users.tdt4117 = {
|
||||
isNormalUser = true;
|
||||
home = "/home/tdt4117";
|
||||
description = "Alice Foobar";
|
||||
extraGroups = [ ];
|
||||
# openssh.authorizedKeys.keys = [ "ssh-dss AAAAB3Nza... " ];
|
||||
};
|
||||
|
||||
services.jupyterhub = {
|
||||
jupyterhubEnv = myJupyterHubEnv;
|
||||
jupyterlabEnv = myJupyterLabEnv;
|
||||
enable = true;
|
||||
port = 8770;
|
||||
host = "0.0.0.0";
|
||||
extraConfig = ''
|
||||
c.Authenticator.allow_all = True
|
||||
c.ConfigurableHTTPProxy.api_url = 'http://0.0.0.0:8770'
|
||||
c.JupyterHub.bind_url = 'http://0.0.0.0:8771'
|
||||
'';
|
||||
|
||||
kernels = {
|
||||
python3 = let
|
||||
env = (pkgs.python3.withPackages (pythonPackages: with pythonPackages; [
|
||||
ipykernel
|
||||
pandas
|
||||
scikit-learn
|
||||
seaborn
|
||||
pandas
|
||||
huggingface-hub
|
||||
datasets
|
||||
matplotlib
|
||||
tqdm
|
||||
numpy
|
||||
scipy
|
||||
|
||||
]));
|
||||
in {
|
||||
displayName = "Python 3 for machine learning";
|
||||
argv = [
|
||||
"${env.interpreter}"
|
||||
"-m"
|
||||
"ipykernel_launcher"
|
||||
"-f"
|
||||
"{connection_file}"
|
||||
];
|
||||
language = "python";
|
||||
logo32 = "${env}/${env.sitePackages}/ipykernel/resources/logo-32x32.png";
|
||||
logo64 = "${env}/${env.sitePackages}/ipykernel/resources/logo-64x64.png";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
|
||||
services.minecraft-server = {
|
||||
enable = true;
|
||||
eula = true;
|
||||
#jvmOpts = "-Xms4092M -Xmx4092M -XX:+UseG1GC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10";
|
||||
|
||||
|
||||
# serverProperties = {
|
||||
# server-port = 25500;
|
||||
# difficulty = 3;
|
||||
# gamemode = 1;
|
||||
# max-players = 8;
|
||||
# motd = "Adrian Minecraft server!";
|
||||
# };
|
||||
openFirewall = true;
|
||||
|
||||
};
|
||||
}
|
||||
11
services/mealie.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
services.mealie = {
|
||||
enable = true;
|
||||
settings = {
|
||||
ALLOW_SIGNUP = "true";
|
||||
};
|
||||
database.createLocally = true;
|
||||
};
|
||||
|
||||
}
|
||||
54
services/ollama-amd.nix
Normal file
@@ -0,0 +1,54 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
# Add Ollama to system packages
|
||||
environment.systemPackages = [ pkgs.unstable.ollama ];
|
||||
|
||||
# Ollama configuration
|
||||
services.ollama = {
|
||||
enable = true;
|
||||
package = pkgs.unstable.ollama;
|
||||
host = "0.0.0.0";
|
||||
openFirewall = true;
|
||||
port = 11434;
|
||||
home = "/var/lib/ollama";
|
||||
|
||||
# Preloaded models
|
||||
loadModels = [
|
||||
"gemma3:1b"
|
||||
"qwen3:8b"
|
||||
"qwen3:0.6b"
|
||||
"llama3.1"
|
||||
"moondream"
|
||||
"minicpm-v"
|
||||
"qwen2.5vl:3b"
|
||||
"gemma3:4b"
|
||||
"granite3.2-vision"
|
||||
"zylonai/multilingual-e5-large"
|
||||
"nomic-embed-text"
|
||||
"snowflake-arctic-embed2"
|
||||
];
|
||||
|
||||
# Environment variables based on hostname
|
||||
environmentVariables = {
|
||||
"HIP_VISIBLE_DEVICES" = "0,1";
|
||||
"OLLAMA_LLM_LIBRARY" = "rocm";
|
||||
};
|
||||
|
||||
rocmOverrideGfx = "10.3.0"; #rdna2
|
||||
|
||||
# Acceleration settings
|
||||
acceleration = "rocm";
|
||||
|
||||
};
|
||||
|
||||
# NGINX reverse proxy configuration
|
||||
services.nginx.virtualHosts."ollama.${config.networking.hostName}.${config.networking.domain}" = {
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://${config.services.ollama.listenAddress}";
|
||||
};
|
||||
basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
openWebuiImage = "ghcr.io/open-webui/open-webui:main";
|
||||
in
|
||||
{
|
||||
virtualisation.oci-containers = {
|
||||
backend = {
|
||||
image = openWebuiImage;
|
||||
cmd = [ "-d" "--network=host" "-v" "open-webui:/app/backend/data" "--name" "open-webui" "--restart" "always" ];
|
||||
volumes = [ "open-webui:/app/backend/data" ];
|
||||
environment = {
|
||||
OLLAMA_BASE_URL = "http://127.0.0.1:11434";
|
||||
};
|
||||
restart = "always";
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."chat.${config.networking.hostName}.${config.networking.domain}" = {
|
||||
forceSSL = true;
|
||||
#useACMEHost = config.networking.domain; #not sure if this will work, unless
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://${config.services.ollama.listenAddress}";
|
||||
};
|
||||
basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
}
|
||||
@@ -1,30 +1,45 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
hostname = config.networking.hostName;
|
||||
in
|
||||
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.ollama
|
||||
];
|
||||
# Add Ollama to system packages
|
||||
environment.systemPackages = [ pkgs.unstable.ollama ];
|
||||
|
||||
services.ollama.enable = true;
|
||||
services.ollama.listenAddress = "0.0.0.0:11434";
|
||||
services.ollama.models = "/var/lib/ollama/models";
|
||||
services.ollama.home = "/var/lib/ollama";
|
||||
|
||||
#possibly a flawed idea.
|
||||
services.ollama.acceleration = lib.mkDefault ( let
|
||||
hostname = config.networking.hostName;
|
||||
in
|
||||
if hostname == "galadriel" then "cuda"
|
||||
else if hostname == "boromir" then "cuda"
|
||||
else if hostname == "aragorn" then "rocm"
|
||||
else null);
|
||||
# Ollama configuration
|
||||
services.ollama = {
|
||||
enable = true;
|
||||
package = pkgs.unstable.ollama;
|
||||
host = "0.0.0.0";
|
||||
openFirewall = true;
|
||||
port = 11434;
|
||||
home = "/var/lib/ollama";
|
||||
|
||||
# Preloaded models
|
||||
loadModels = [
|
||||
"gemma3:1b"
|
||||
"qwen3:latest"
|
||||
"qwen3:4b"
|
||||
"qwen3:0.6b"
|
||||
"gemma3:4b"
|
||||
"qwen2.5vl:3b"
|
||||
"granite3.2-vision"
|
||||
"gpt-oss:20b"
|
||||
];
|
||||
|
||||
# Acceleration settings
|
||||
acceleration = "cuda";
|
||||
|
||||
};
|
||||
# NGINX reverse proxy configuration
|
||||
services.nginx.virtualHosts."ollama.${config.networking.hostName}.${config.networking.domain}" = {
|
||||
forceSSL = true;
|
||||
#useACMEHost = config.networking.domain; #not sure if this will work, unless
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://${config.services.ollama.listenAddress}";
|
||||
};
|
||||
basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://${config.services.ollama.listenAddress}";
|
||||
};
|
||||
basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
}
|
||||
|
||||
47
services/ollamaWebui.nix
Normal file
@@ -0,0 +1,47 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
#pkgs.open-webui
|
||||
#pkgs.unstable.open-webui #needed stable one to hoefulle be able to take a backup from ui.
|
||||
pkgs.bash
|
||||
pkgs.ffmpeg
|
||||
# pkgs.unstable.tika
|
||||
|
||||
];
|
||||
|
||||
# services.tika = {
|
||||
# enable=true;
|
||||
# package = pkgs.unstable.tika;
|
||||
# openFirewall=true;
|
||||
# listenAddress = "0.0.0.0";
|
||||
# port = 9998;
|
||||
# enableOcr = true;
|
||||
# };
|
||||
|
||||
services.open-webui = {
|
||||
enable = true;
|
||||
|
||||
package = pkgs.unstable.open-webui;
|
||||
port = 11111;
|
||||
host = "0.0.0.0";
|
||||
openFirewall = true;
|
||||
stateDir = "/var/lib/open-webui";
|
||||
environment = {
|
||||
ANONYMIZED_TELEMETRY = "False";
|
||||
DO_NOT_TRACK = "True";
|
||||
SCARF_NO_ANALYTICS = "True";
|
||||
|
||||
FRONTEND_BUILD_DIR = "${config.services.open-webui.stateDir}/build";
|
||||
DATA_DIR = "${config.services.open-webui.stateDir}/data";
|
||||
STATIC_DIR = "${config.services.open-webui.stateDir}/static";
|
||||
|
||||
|
||||
WEBUI_AUTH = "True";
|
||||
#ENABLE_SIGNUP = "True";
|
||||
ENABLE_SIGNUP_PASSWORD_CONFIRMATION = "True";
|
||||
#DEFAULT_USER_ROLE = "admin";
|
||||
ENV = "prod";
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
@@ -7,8 +7,9 @@
|
||||
|
||||
services.ozai-webui = {
|
||||
enable = true;
|
||||
port = 8085;
|
||||
port = 8095;
|
||||
host = "0.0.0.0";
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
139
services/qbittorrent-old.nix
Normal file
@@ -0,0 +1,139 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
port = 8090;
|
||||
torrentPort = 44183;
|
||||
savePath = "/Main/Data/media/Downloads/";
|
||||
path = "/var/lib/qbittorrent";
|
||||
|
||||
|
||||
configurationFile = ''
|
||||
[Application]
|
||||
FileLogger\Age=1
|
||||
FileLogger\AgeType=1
|
||||
FileLogger\Backup=true
|
||||
FileLogger\DeleteOld=true
|
||||
FileLogger\Enabled=true
|
||||
FileLogger\MaxSizeBytes=66560
|
||||
FileLogger\Path=/Main/Data/media/.qbittorrent/logs
|
||||
MemoryWorkingSetLimit=8192
|
||||
|
||||
[BitTorrent]
|
||||
Session\AddExtensionToIncompleteFiles=true
|
||||
Session\AlternativeGlobalDLSpeedLimit=1000
|
||||
Session\AlternativeGlobalUPSpeedLimit=1000
|
||||
Session\AnonymousModeEnabled=false
|
||||
Session\BTProtocol=Both
|
||||
Session\BandwidthSchedulerEnabled=false
|
||||
Session\DefaultSavePath=/Main/Data/media/Downloads
|
||||
Session\Encryption=1
|
||||
Session\ExcludedFileNames=
|
||||
Session\FinishedTorrentExportDirectory=/Main/Data/media/Downloads/torrents-complete
|
||||
Session\GlobalDLSpeedLimit=0
|
||||
Session\GlobalMaxRatio=1.5
|
||||
Session\GlobalUPSpeedLimit=0
|
||||
Session\I2P\Enabled=true
|
||||
Session\IgnoreLimitsOnLAN=true
|
||||
Session\IncludeOverheadInLimits=true
|
||||
Session\Interface=tun0
|
||||
Session\InterfaceAddress=${config.sops.placeholder."qbittorrent/interfaceAddress"}
|
||||
Session\InterfaceName=tun0
|
||||
Session\LSDEnabled=true
|
||||
Session\MaxActiveCheckingTorrents=15
|
||||
Session\MaxRatioAction=1
|
||||
Session\Port=44183
|
||||
Session\Preallocation=true
|
||||
Session\QueueingSystemEnabled=false
|
||||
Session\SubcategoriesEnabled=true
|
||||
Session\Tags=movie, anime
|
||||
Session\TempPath=/Main/Data/media/Downloads/temp
|
||||
Session\TempPathEnabled=true
|
||||
Session\TorrentContentLayout=Subfolder
|
||||
Session\TorrentExportDirectory=/Main/Data/media/Downloads/torrents
|
||||
Session\UseAlternativeGlobalSpeedLimit=false
|
||||
|
||||
[Core]
|
||||
AutoDeleteAddedTorrentFile=Never
|
||||
|
||||
[LegalNotice]
|
||||
Accepted=true
|
||||
|
||||
[Meta]
|
||||
MigrationVersion=6
|
||||
|
||||
[Network]
|
||||
PortForwardingEnabled=true
|
||||
|
||||
[Preferences]
|
||||
General\Locale=en
|
||||
MailNotification\req_auth=true
|
||||
Scheduler\days=Weekday
|
||||
Scheduler\end_time=@Variant(\0\0\0\xf\x5%q\xa0)
|
||||
WebUI\AuthSubnetWhitelist=192.168.1.0/24, 100.0.0.0/8
|
||||
WebUI\AuthSubnetWhitelistEnabled=true
|
||||
WebUI\Port=${toString port}
|
||||
WebUI\UseUPnP=false
|
||||
|
||||
[RSS]
|
||||
AutoDownloader\DownloadRepacks=true
|
||||
AutoDownloader\EnableProcessing=true
|
||||
AutoDownloader\SmartEpisodeFilter=s(\\d+)e(\\d+), (\\d+)x(\\d+), "(\\d{4}[.\\-]\\d{1,2}[.\\-]\\d{1,2})", "(\\d{1,2}[.\\-]\\d{1,2}[.\\-]\\d{4})"
|
||||
Session\EnableProcessing=true
|
||||
'';
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
imports = [
|
||||
../profiles/sops.nix
|
||||
];
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ port torrentPort];
|
||||
networking.firewall.allowedUDPPorts = [ port torrentPort];
|
||||
|
||||
sops.secrets."qbittorrent/interfaceAddress" = {
|
||||
restartUnits = [ "qbittorrent-nox.service" ];
|
||||
owner = "qbittorrent";
|
||||
mode = "0755";
|
||||
};
|
||||
|
||||
sops.templates."qbittorrent/configuration" = {
|
||||
content = configurationFile;
|
||||
#path = "${path}/.config/qBittorrent/qBittorrent.conf"; #did not seem to work
|
||||
owner = "qbittorrent";
|
||||
mode = "0755";
|
||||
};
|
||||
|
||||
users.users.qbittorrent = {
|
||||
isNormalUser = true; #make this a normal user to be able to make files
|
||||
home = path;
|
||||
group = "media";
|
||||
|
||||
};
|
||||
users.groups.qbittorrent = {};
|
||||
|
||||
systemd.services."qbittorrent-nox" = {
|
||||
after = [ "network.target" ];
|
||||
wants = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStartPre = "${pkgs.bash}/bin/bash -c '${pkgs.coreutils}/bin/mkdir -p ${path} && ${pkgs.coreutils}/bin/chmod -R 755 ${path} && ${pkgs.coreutils}/bin/cp ${config.sops.templates."qbittorrent/configuration".path} ${path}/.config/qBittorrent/qBittorrent.conf'";
|
||||
ExecStart = "${pkgs.unstable.qbittorrent-nox}/bin/qbittorrent-nox";
|
||||
User = "qbittorrent";
|
||||
Group = "media";
|
||||
Restart = "on-failure";
|
||||
|
||||
ProtectKernelModules = true;
|
||||
NoNewPrivileges = true;
|
||||
};
|
||||
};
|
||||
services.nginx.virtualHosts."qbittorrent.${config.networking.hostName}.${config.networking.domain}" = {
|
||||
forceSSL = true;
|
||||
#useACMEHost = config.networking.domain; #not sure if this will work, unless
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://localhost:${port}";
|
||||
};
|
||||
basicAuthFile = config.sops.secrets."nginx/defaultpass".path;
|
||||
};
|
||||
}
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
|
||||
services.miniflux.enable = true;
|
||||
services.miniflux.config.LISTEN_ADDR = "0.0.0.0:8081";
|
||||
services.miniflux.config.LISTEN_ADDR = "0.0.0.0:8089";
|
||||
services.miniflux.adminCredentialsFile = config.sops.secrets."miniflux/adminCredentialsFile".path;
|
||||
|
||||
}
|
||||
|
||||
180
services/searxng.nix
Normal file
@@ -0,0 +1,180 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
|
||||
];
|
||||
|
||||
|
||||
services.searx = {
|
||||
enable = false;
|
||||
redisCreateLocally = true;
|
||||
|
||||
# Rate limiting
|
||||
limiterSettings = {
|
||||
real_ip = {
|
||||
x_for = 1;
|
||||
ipv4_prefix = 32;
|
||||
ipv6_prefix = 56;
|
||||
};
|
||||
|
||||
botdetection = {
|
||||
ip_limit = {
|
||||
filter_link_local = true;
|
||||
link_token = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# UWSGI configuration should be true for non single user instances.
|
||||
runInUwsgi = false;
|
||||
|
||||
uwsgiConfig = {
|
||||
socket = "/run/searx/searx.sock";
|
||||
http = ":8888";
|
||||
chmod-socket = "660";
|
||||
};
|
||||
|
||||
# Searx configuration
|
||||
settings = {
|
||||
# Instance settings
|
||||
general = {
|
||||
debug = false;
|
||||
instance_name = "SearXNG Instance";
|
||||
donation_url = false;
|
||||
contact_url = false;
|
||||
privacypolicy_url = false;
|
||||
enable_metrics = false;
|
||||
};
|
||||
|
||||
# User interface
|
||||
ui = {
|
||||
static_use_hash = true;
|
||||
default_locale = "en";
|
||||
query_in_title = true;
|
||||
infinite_scroll = false;
|
||||
center_alignment = true;
|
||||
default_theme = "simple";
|
||||
theme_args.simple_style = "auto";
|
||||
search_on_category_select = false;
|
||||
hotkeys = "vim";
|
||||
};
|
||||
|
||||
# Search engine settings
|
||||
search = {
|
||||
safe_search = 2;
|
||||
autocomplete_min = 2;
|
||||
autocomplete = "duckduckgo";
|
||||
ban_time_on_fail = 5;
|
||||
max_ban_time_on_fail = 120;
|
||||
};
|
||||
|
||||
# Server configuration
|
||||
server = {
|
||||
base_url = "https://search.lauterer.it";
|
||||
port = 8888;
|
||||
bind_address = "127.0.0.1";
|
||||
secret_key = config.sops.secrets.searx.path;
|
||||
limiter = true;
|
||||
public_instance = false;
|
||||
image_proxy = true;
|
||||
method = "GET";
|
||||
};
|
||||
|
||||
# Search engines
|
||||
engines = lib.mapAttrsToList (name: value: { inherit name; } // value) {
|
||||
"duckduckgo".disabled = false;
|
||||
"brave".disabled = true;
|
||||
"bing".disabled = false;
|
||||
"mojeek".disabled = true;
|
||||
"mwmbl".disabled = false;
|
||||
"mwmbl".weight = 0.4;
|
||||
"qwant".disabled = true;
|
||||
"crowdview".disabled = false;
|
||||
"crowdview".weight = 0.5;
|
||||
"curlie".disabled = true;
|
||||
"ddg definitions".disabled = false;
|
||||
"ddg definitions".weight = 2;
|
||||
"wikibooks".disabled = false;
|
||||
"wikidata".disabled = false;
|
||||
"wikiquote".disabled = true;
|
||||
"wikisource".disabled = true;
|
||||
"wikispecies".disabled = false;
|
||||
"wikispecies".weight = 0.5;
|
||||
"wikiversity".disabled = false;
|
||||
"wikiversity".weight = 0.5;
|
||||
"wikivoyage".disabled = false;
|
||||
"wikivoyage".weight = 0.5;
|
||||
"currency".disabled = true;
|
||||
"dictzone".disabled = true;
|
||||
"lingva".disabled = true;
|
||||
"bing images".disabled = false;
|
||||
"brave.images".disabled = true;
|
||||
"duckduckgo images".disabled = false;
|
||||
"google images".disabled = false;
|
||||
"qwant images".disabled = true;
|
||||
"1x".disabled = true;
|
||||
"artic".disabled = false;
|
||||
"deviantart".disabled = true;
|
||||
"flickr".disabled = true;
|
||||
"imgur".disabled = false;
|
||||
"library of congress".disabled = false;
|
||||
"material icons".disabled = true;
|
||||
"material icons".weight = 0.2;
|
||||
"openverse".disabled = false;
|
||||
"pinterest".disabled = true;
|
||||
"svgrepo".disabled = false;
|
||||
"unsplash".disabled = false;
|
||||
"wallhaven".disabled = false;
|
||||
"wikicommons.images".disabled = false;
|
||||
"yacy images".disabled = true;
|
||||
"bing videos".disabled = true;
|
||||
"brave.videos".disabled = true;
|
||||
"duckduckgo videos".disabled = false;
|
||||
"google videos".disabled = false;
|
||||
"qwant videos".disabled = false;
|
||||
"dailymotion".disabled = true;
|
||||
"google play movies".disabled = true;
|
||||
"invidious".disabled = false;
|
||||
"odysee".disabled = true;
|
||||
"peertube".disabled = false;
|
||||
"piped".disabled = true;
|
||||
"rumble".disabled = false;
|
||||
"sepiasearch".disabled = false;
|
||||
"vimeo".disabled = true;
|
||||
"youtube".disabled = true;
|
||||
"brave.news".disabled = true;
|
||||
"google news".disabled = true;
|
||||
};
|
||||
|
||||
# Outgoing requests
|
||||
outgoing = {
|
||||
request_timeout = 5.0;
|
||||
max_request_timeout = 15.0;
|
||||
pool_connections = 100;
|
||||
pool_maxsize = 15;
|
||||
enable_http2 = true;
|
||||
};
|
||||
|
||||
# Enabled plugins
|
||||
enabled_plugins = [
|
||||
"Basic Calculator"
|
||||
"Hash plugin"
|
||||
"Hostnames plugin"
|
||||
"Self Information"
|
||||
"Tor check plugin"
|
||||
"Open Access DOI rewrite"
|
||||
"Hostnames plugin"
|
||||
"Unit converter plugin"
|
||||
"Tracker URL remover"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Systemd configuration
|
||||
#systemd.services.nginx.serviceConfig.ProtectHome = false;
|
||||
|
||||
# User management
|
||||
users.groups.searx.members = ["nginx"];
|
||||
|
||||
|
||||
}
|
||||