Compare commits
69 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
53dfdb1cc0
|
|||
|
88e31d3ce4
|
|||
|
773d28e40b
|
|||
|
35856afcad
|
|||
|
77b908c4bb
|
|||
|
6d14f79d4a
|
|||
|
89e98df9e5
|
|||
|
f0a1793889
|
|||
|
98f6c0ea21
|
|||
|
84219edfc9
|
|||
|
626d2682ae
|
|||
|
1337c9d44f
|
|||
|
dc6229aaac
|
|||
|
8282295824
|
|||
|
91dc8e5070
|
|||
|
206b170d3e
|
|||
|
a5836d3637
|
|||
|
af888d5838
|
|||
|
84d7137aa5
|
|||
|
673b32c33b
|
|||
|
d27f63a0f7
|
|||
|
90f6102481
|
|||
|
e44acd9b06
|
|||
|
177ce475a9
|
|||
|
1411f6c47e
|
|||
|
d1bee6c14d
|
|||
|
5514d347c7
|
|||
|
06519d555b
|
|||
|
ce94f09dd4
|
|||
|
171d635b72
|
|||
|
3bc4e3dd15
|
|||
|
4b7a64c8ac
|
|||
|
9024d2c744
|
|||
|
d13d81c60a
|
|||
|
88cf103332
|
|||
|
9431a71539
|
|||
|
6fa865644a
|
|||
|
154d0e4ddb
|
|||
|
cae0357dbe
|
|||
|
477a0b7372
|
|||
|
5b12250fd5
|
|||
|
b8c88cae25
|
|||
|
63bd1471d8
|
|||
|
647432314d
|
|||
|
bfaaee0f36
|
|||
|
ab089afefd
|
|||
|
79e3156bb3
|
|||
|
5e8db88008
|
|||
|
ff39f983f9
|
|||
|
6088946973
|
|||
|
0f213ed01f
|
|||
|
097ce13793
|
|||
|
efa9be4314
|
|||
|
7223b63fca
|
|||
|
32b3c81b46
|
|||
|
5e934f87a3
|
|||
|
0927313f6d
|
|||
|
8fa1d2e111
|
|||
|
54e8beecfd
|
|||
|
21e85fc77b
|
|||
|
b4a57a8f64
|
|||
|
b8ed5984df
|
|||
|
a35d536b75
|
|||
|
0815dd3a30
|
|||
|
35541ea5ae
|
|||
|
e90fb1fa0d
|
|||
|
c8fd643085
|
|||
|
5d9efbb651
|
|||
|
582460d8f4
|
@@ -1,11 +1,7 @@
|
|||||||
# -*- mode: sh; -*-
|
# -*- mode: sh; -*-
|
||||||
if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then
|
|
||||||
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs="
|
|
||||||
fi
|
|
||||||
|
|
||||||
watch_file flake.nix
|
watch_file flake.nix
|
||||||
watch_file flake.lock
|
watch_file flake.lock
|
||||||
if ! use flake . --no-pure-eval
|
if ! use flake . --no-pure-eval
|
||||||
then
|
then
|
||||||
echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2
|
echo "dev shell could not be built. The environment was not loaded. Make the necessary changes to flake.nix and hit enter to try again." >&2
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
keys:
|
keys:
|
||||||
|
- &elcafe age1tkywsvddjj6r6ukuqgz9aql92jfx85rz57dhmkkndysh6yx6p5rs0zj0qr
|
||||||
|
- &elcafe-host age17p69ktg7yfzgdsk00f32mupe4n4fevdpw2wsv7ft30yvpeseau6s7t0zdg
|
||||||
- &gampo age1ajemtm502nn2n4q7v4j8meyd5mxtcqngkkedxq2pqzuwu78zp93qnw8q48
|
- &gampo age1ajemtm502nn2n4q7v4j8meyd5mxtcqngkkedxq2pqzuwu78zp93qnw8q48
|
||||||
- &gampo-host age197lfdanym647wdaz9uy8hrfqjwj9fs8rm7vs3fsrctceu8mr9gms2jedhz
|
- &gampo-host age197lfdanym647wdaz9uy8hrfqjwj9fs8rm7vs3fsrctceu8mr9gms2jedhz
|
||||||
- &marpa age17pn6suvz2f7zmrm9zxj5hr0putvcvdamqxqt7ewhncgg6ccgmp2qr00xm2
|
- &marpa age17pn6suvz2f7zmrm9zxj5hr0putvcvdamqxqt7ewhncgg6ccgmp2qr00xm2
|
||||||
@@ -19,3 +21,5 @@ creation_rules:
|
|||||||
- *tilo-host
|
- *tilo-host
|
||||||
- *NaroMk3
|
- *NaroMk3
|
||||||
- *NaroMk3-host
|
- *NaroMk3-host
|
||||||
|
- *elcafe
|
||||||
|
- *elcafe-host
|
||||||
|
|||||||
@@ -1,6 +1,18 @@
|
|||||||
# NixOS Configuration
|
<h1 align="center">NixOS Configuration</h1>
|
||||||
|
<div align="center">
|
||||||
|
<strong>
|
||||||
|
Personal NixOS configuration for my machines, using Nix Flakes for reproducible and shareable setups.
|
||||||
|
</strong>
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<!-- Wakapi -->
|
||||||
|
<img alt="Coding Time Badge" src="https://clock.phundrak.com/api/badge/phundrak/interval:any/project:.dotfiles">
|
||||||
|
<!-- Emacs -->
|
||||||
|
<a href="https://www.gnu.org/software/emacs/"><img src="https://img.shields.io/badge/Emacs-30.2-blueviolet.svg?style=flat-square&logo=GNU%20Emacs&logoColor=white" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
Personal NixOS configuration for my machines, using Nix Flakes for reproducible and shareable setups.
|
|
||||||
|
|
||||||
## Repository Structure
|
## Repository Structure
|
||||||
|
|
||||||
@@ -8,7 +20,6 @@ Personal NixOS configuration for my machines, using Nix Flakes for reproducible
|
|||||||
- **hosts/**: Contains the host-specific NixOS configurations.
|
- **hosts/**: Contains the host-specific NixOS configurations.
|
||||||
- **system/**: Holds system-wide configuration modules that can be shared across different hosts. This includes things like boot settings, desktop environments, hardware configurations, networking, packages, security, and system services.
|
- **system/**: Holds system-wide configuration modules that can be shared across different hosts. This includes things like boot settings, desktop environments, hardware configurations, networking, packages, security, and system services.
|
||||||
- **users/**: Manages user-specific configurations. It's split into `modules` for reusable home-manager configurations and `phundrak` for my personal configuration.
|
- **users/**: Manages user-specific configurations. It's split into `modules` for reusable home-manager configurations and `phundrak` for my personal configuration.
|
||||||
- **keys/**: Public keys for various machines.
|
|
||||||
- **secrets/**: Encrypted secrets managed with `sops-nix`.
|
- **secrets/**: Encrypted secrets managed with `sops-nix`.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|||||||
Generated
+270
-238
@@ -1,35 +1,26 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"cachix": {
|
"alejandra": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"devenv": [
|
"fenix": "fenix",
|
||||||
"devenv"
|
"flakeCompat": "flakeCompat",
|
||||||
],
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"git-hooks": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"devenv",
|
"jj-cz",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1760971495,
|
"lastModified": 1744324181,
|
||||||
"narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=",
|
"narHash": "sha256-Oi1n2ncF4/AWeY6X55o2FddIRICokbciqFYK64XorYk=",
|
||||||
"owner": "cachix",
|
"owner": "kamadorueda",
|
||||||
"repo": "cachix",
|
"repo": "alejandra",
|
||||||
"rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2",
|
"rev": "3e2a85506627062313e131bf8a85315f3387c8e0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "cachix",
|
"owner": "kamadorueda",
|
||||||
"ref": "latest",
|
"ref": "4.0.0",
|
||||||
"repo": "cachix",
|
"repo": "alejandra",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -44,11 +35,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768655473,
|
"lastModified": 1780375472,
|
||||||
"narHash": "sha256-iWnILPS2mP9ubbjRAhNv6Fqg1J/upxmD9OQTZQR4O2w=",
|
"narHash": "sha256-Q8RAJoYlakA6B2I5DVcuxzNbhCNU1nnIjqQZYP1KGrM=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "cli",
|
"repo": "cli",
|
||||||
"rev": "7de6c6063119a7cef27c6bd4c88f2c5ac4cbc064",
|
"rev": "d1c8c8fc09738d1b40576e97c274b4a11a2e0ac7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -60,17 +51,18 @@
|
|||||||
"caelestia-shell": {
|
"caelestia-shell": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"caelestia-cli": "caelestia-cli",
|
"caelestia-cli": "caelestia-cli",
|
||||||
|
"m3shapes": "m3shapes",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"quickshell": "quickshell"
|
"quickshell": "quickshell"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769226446,
|
"lastModified": 1780845600,
|
||||||
"narHash": "sha256-YasBiXBgCkJ5oE6r9UtWXShD3OGtdRlioFErX5A1Z1Q=",
|
"narHash": "sha256-cPAXoIsoPd9d8Mqh1JEZcHFgndAiIe2/z0ZAlgjjKMw=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "shell",
|
"repo": "shell",
|
||||||
"rev": "8430fa572500382e187a49f1ac677bfdeb7edca2",
|
"rev": "8f49fdb4057c65fb7e591cdc5195d28086e56eb7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -79,85 +71,66 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"devenv": {
|
"copyparty": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"cachix": "cachix",
|
"flake-utils": "flake-utils",
|
||||||
"flake-compat": "flake-compat",
|
|
||||||
"flake-parts": "flake-parts",
|
|
||||||
"git-hooks": "git-hooks",
|
|
||||||
"nix": "nix",
|
|
||||||
"nixd": "nixd",
|
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769201893,
|
"lastModified": 1779822991,
|
||||||
"narHash": "sha256-x6VW1lQikNZAVm59gb3tzpDU5QCHT8U1e4dU11F2evY=",
|
"narHash": "sha256-r6e4eHEyQJEDhT6gkW3B9+OgB0pZebw2+du4bvN3vww=",
|
||||||
"owner": "cachix",
|
"owner": "9001",
|
||||||
"repo": "devenv",
|
"repo": "copyparty",
|
||||||
"rev": "685a86068d3a7f9b04e18340187e288413cb5887",
|
"rev": "6e75faa62349a59f4df328a4939ba8626d89ee1a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "cachix",
|
"owner": "9001",
|
||||||
"repo": "devenv",
|
"repo": "copyparty",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat": {
|
"fenix": {
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1761588595,
|
|
||||||
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": [
|
"nixpkgs": [
|
||||||
"devenv",
|
"jj-cz",
|
||||||
|
"alejandra",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"rust-analyzer-src": "rust-analyzer-src"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1760948891,
|
"lastModified": 1730615655,
|
||||||
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
|
"narHash": "sha256-2HBR3zLn57LXKNRtxBb+O+uDqHM4n0pz51rPayMl4cg=",
|
||||||
"owner": "hercules-ci",
|
"owner": "nix-community",
|
||||||
"repo": "flake-parts",
|
"repo": "fenix",
|
||||||
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
|
"rev": "efeb50e2535b17ffd4a135e6e3e5fd60a525180c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "hercules-ci",
|
"owner": "nix-community",
|
||||||
"repo": "flake-parts",
|
"repo": "fenix",
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-root": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1723604017,
|
|
||||||
"narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=",
|
|
||||||
"owner": "srid",
|
|
||||||
"repo": "flake-root",
|
|
||||||
"rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "srid",
|
|
||||||
"repo": "flake-root",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1678901627,
|
||||||
|
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
@@ -175,51 +148,55 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"git-hooks": {
|
"flake-utils_3": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"systems": "systems_2"
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"gitignore": "gitignore",
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1760663237,
|
"lastModified": 1731533236,
|
||||||
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
"owner": "cachix",
|
"owner": "numtide",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "flake-utils",
|
||||||
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "cachix",
|
"owner": "numtide",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "flake-utils",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gitignore": {
|
"flake-utils_4": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"systems": "systems_3"
|
||||||
"devenv",
|
|
||||||
"git-hooks",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1709087332,
|
"lastModified": 1731533236,
|
||||||
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
"owner": "hercules-ci",
|
"owner": "numtide",
|
||||||
"repo": "gitignore.nix",
|
"repo": "flake-utils",
|
||||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "hercules-ci",
|
"owner": "numtide",
|
||||||
"repo": "gitignore.nix",
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flakeCompat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696426674,
|
||||||
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -230,11 +207,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769187349,
|
"lastModified": 1780679734,
|
||||||
"narHash": "sha256-clG+nT6I2qxjIgk5WoSDKJyNhzKJs9jzbCujPF2S/yg=",
|
"narHash": "sha256-KmRNvpNOb7QEORa06bVgjW9kITcx0VhsI7w0vhmZyD8=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "082a4cd87c6089d1d9c58ebe52655f9e07245fcb",
|
"rev": "b2b7db486e06e098711dc291bb25db82850e1d16",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -243,43 +220,60 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix": {
|
"jj-cz": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"alejandra": "alejandra",
|
||||||
"devenv",
|
"flake-utils": "flake-utils_3",
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"flake-parts": [
|
|
||||||
"devenv",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"git-hooks-nix": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"nixpkgs-23-11": [
|
"rust-overlay": "rust-overlay"
|
||||||
"devenv"
|
|
||||||
],
|
|
||||||
"nixpkgs-regression": [
|
|
||||||
"devenv"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769197468,
|
"lastModified": 1780841807,
|
||||||
"narHash": "sha256-EhbVSjqhjykjIzF1FetpEwxjSMXg4ubHpkuEnE0y23A=",
|
"narHash": "sha256-7N3iYAUmNjt0wgfpb1ZMVP5xRcXSrihQqOxZPM5N0Tc=",
|
||||||
"owner": "cachix",
|
"ref": "develop",
|
||||||
"repo": "nix",
|
"rev": "0e6b559d002cc7a9bcb758384623de0e8e034bbe",
|
||||||
"rev": "6174571301a92afce9b7296d5babdc56972695b7",
|
"revCount": 45,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://labs.phundrak.com/phundrak/jj-cz"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"ref": "develop",
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://labs.phundrak.com/phundrak/jj-cz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"m3shapes": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1777812556,
|
||||||
|
"narHash": "sha256-E5nqOucRQBWKuT31AMekmfgMywRdHgSbU86R7t4BKKA=",
|
||||||
|
"owner": "soramanew",
|
||||||
|
"repo": "m3shapes",
|
||||||
|
"rev": "356825d31f16052a782735cce264331cba0cb71b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "cachix",
|
"owner": "soramanew",
|
||||||
"ref": "devenv-2.32",
|
"repo": "m3shapes",
|
||||||
"repo": "nix",
|
"rev": "356825d31f16052a782735cce264331cba0cb71b",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mobile-nixos": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772289954,
|
||||||
|
"narHash": "sha256-iDdtwk/dFb6AsXMtcOpZixxXl6C1HNUPe6cglxxHO7M=",
|
||||||
|
"owner": "mobile-nixos",
|
||||||
|
"repo": "mobile-nixos",
|
||||||
|
"rev": "1a9e0af79dc7b5e29ed772f1a8a76fcbd9d45fdf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "mobile-nixos",
|
||||||
|
"repo": "mobile-nixos",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -290,11 +284,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1765267181,
|
"lastModified": 1780816331,
|
||||||
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
|
"narHash": "sha256-0BYqs8yKWkOz2Q7+SP18N5E5gmDKSo6LSxIVIa0wWes=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
|
"rev": "1a2ea89c917781e88508d9fd2b507f2d2a0e173c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -303,40 +297,13 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixd": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": [
|
|
||||||
"devenv",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"flake-root": "flake-root",
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"treefmt-nix": "treefmt-nix"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1763964548,
|
|
||||||
"narHash": "sha256-JTRoaEWvPsVIMFJWeS4G2isPo15wqXY/otsiHPN0zww=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixd",
|
|
||||||
"rev": "d4bf15e56540422e2acc7bc26b20b0a0934e3f5e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixd",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769018530,
|
"lastModified": 1780243769,
|
||||||
"narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=",
|
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "88d3861acdd3d2f0e361767018218e51810df8a1",
|
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -346,45 +313,28 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgsStable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768564909,
|
"lastModified": 1780511130,
|
||||||
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
|
"narHash": "sha256-2v9lT4ya59Lh1FqPeLnz1MoX9y/wz2huqfe9RtQZITk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
|
"rev": "535f3e6942cb1cead3929c604320d3db54b542b9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"id": "nixpkgs",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-25.11",
|
||||||
"repo": "nixpkgs",
|
"type": "indirect"
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_3": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1769018530,
|
|
||||||
"narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "88d3861acdd3d2f0e361767018218e51810df8a1",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable-small",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pumo-system-info": {
|
"pumo-system-info": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils_4",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748984111,
|
"lastModified": 1748984111,
|
||||||
@@ -408,11 +358,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768689040,
|
"lastModified": 1780303737,
|
||||||
"narHash": "sha256-Tlnr5BulJcMers/cb+YvmBQW4nKHjdKo9loInJkyO2k=",
|
"narHash": "sha256-7HgdJBG4BgAPDyHKKxWtxj7nziqsQo6zQCXtwy+L9fs=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "7a427ce1979ce7447e885c4f30129b40f3d466f5",
|
"rev": "b66495fcc5022681b56b61f928c7acbe910e722c",
|
||||||
"revCount": 729,
|
"revCount": 821,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
},
|
},
|
||||||
@@ -421,21 +371,91 @@
|
|||||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rockchip": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgsStable": [
|
||||||
|
"nixpkgsStable"
|
||||||
|
],
|
||||||
|
"nixpkgsUnstable": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": [
|
||||||
|
"flake-utils"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1778273074,
|
||||||
|
"narHash": "sha256-gPbn0KjsgS2cJa/ENSMtjN0h8dIEy+2N6g8tw9915pM=",
|
||||||
|
"owner": "raboof",
|
||||||
|
"repo": "nixos-rockchip",
|
||||||
|
"rev": "2aab433a41cc9ba862ae73012acdd2eec3547667",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "raboof",
|
||||||
|
"ref": "pinetab-linux-7.0",
|
||||||
|
"repo": "nixos-rockchip",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"caelestia-shell": "caelestia-shell",
|
"caelestia-shell": "caelestia-shell",
|
||||||
"devenv": "devenv",
|
"copyparty": "copyparty",
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
|
"jj-cz": "jj-cz",
|
||||||
|
"mobile-nixos": "mobile-nixos",
|
||||||
"nix-index-database": "nix-index-database",
|
"nix-index-database": "nix-index-database",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixpkgsStable": "nixpkgsStable",
|
||||||
"pumo-system-info": "pumo-system-info",
|
"pumo-system-info": "pumo-system-info",
|
||||||
|
"rockchip": "rockchip",
|
||||||
"sops-nix": "sops-nix",
|
"sops-nix": "sops-nix",
|
||||||
"spicetify": "spicetify",
|
"spicetify": "spicetify",
|
||||||
"srvos": "srvos",
|
"srvos": "srvos",
|
||||||
"zen-browser": "zen-browser"
|
"zen-browser": "zen-browser"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rust-analyzer-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730555913,
|
||||||
|
"narHash": "sha256-KNHZUlqsEibg3YtfUyOFQSofP8hp1HKoY+laoesBxRM=",
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"rev": "f17a5bbfd0969ba2e63a74505a80e55ecb174ed9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"ref": "nightly",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"rust-overlay": {
|
"rust-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"jj-cz",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1779992051,
|
||||||
|
"narHash": "sha256-4YWGv/0NkAdtTW1MXfaLYpfC9BhpCy9k1pWkR0xI9uw=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "e93ad0df1073b2c969a8f0c1f10b84e870469d40",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-overlay_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"pumo-system-info",
|
"pumo-system-info",
|
||||||
@@ -463,11 +483,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768863606,
|
"lastModified": 1780547341,
|
||||||
"narHash": "sha256-1IHAeS8WtBiEo5XiyJBHOXMzECD6aaIOJmpQKzRRl64=",
|
"narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "c7067be8db2c09ab1884de67ef6c4f693973f4a2",
|
"rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -478,15 +498,17 @@
|
|||||||
},
|
},
|
||||||
"spicetify": {
|
"spicetify": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": [
|
||||||
"systems": "systems_2"
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": "systems_4"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768656845,
|
"lastModified": 1780422259,
|
||||||
"narHash": "sha256-xNlXMyn7yc3Z/NOsz4NchO7gWFwsoCvtJ26pys4s2/M=",
|
"narHash": "sha256-dWGk4SEdI189kQW5cE4Uo1Mc+P+kQEdgMcyMgTtmQOA=",
|
||||||
"owner": "Gerg-L",
|
"owner": "Gerg-L",
|
||||||
"repo": "spicetify-nix",
|
"repo": "spicetify-nix",
|
||||||
"rev": "8bd7e49d5ac62756bee6e4b02221fb96bfc3c99a",
|
"rev": "8414bbf2fcc7bc0a22c675e498e3c7365c1aec0a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -497,14 +519,16 @@
|
|||||||
},
|
},
|
||||||
"srvos": {
|
"srvos": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_3"
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769046412,
|
"lastModified": 1780545143,
|
||||||
"narHash": "sha256-LbjKkSB4Nar9pX+AxHs2FGH2ZAFpKWUvr79uyEhFVqc=",
|
"narHash": "sha256-y9aFcK8A3pctkW9G9LdppzPDsuBa3VzToADnacjir/A=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "srvos",
|
"repo": "srvos",
|
||||||
"rev": "a78abbc16a5352ee848e454c99166c97415fbf39",
|
"rev": "bc0ca7b0f7c8ca9dc55166438fec4dc2dd74f8a4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -543,25 +567,33 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"treefmt-nix": {
|
"systems_3": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixd",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734704479,
|
"lastModified": 1681028828,
|
||||||
"narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=",
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
"owner": "numtide",
|
"owner": "nix-systems",
|
||||||
"repo": "treefmt-nix",
|
"repo": "default",
|
||||||
"rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f",
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "numtide",
|
"owner": "nix-systems",
|
||||||
"repo": "treefmt-nix",
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -572,11 +604,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1769228180,
|
"lastModified": 1780637620,
|
||||||
"narHash": "sha256-94KY0JNjdd3CcSyKlHPCPswlqmUrWT6+MfOHektsdB8=",
|
"narHash": "sha256-ngPdHinPyF0AMxRr32qt+TZCv0sagmooBW14u6DfjSU=",
|
||||||
"owner": "youwen5",
|
"owner": "youwen5",
|
||||||
"repo": "zen-browser-flake",
|
"repo": "zen-browser-flake",
|
||||||
"rev": "ef1663c14b7c3c2b84bcf140232534be5a2a0257",
|
"rev": "8c62bc6a72ac5a5b8d1b41b2b88dfed9d9932c48",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
@@ -2,12 +2,9 @@
|
|||||||
description = "Home Manager configuration of phundrak";
|
description = "Home Manager configuration of phundrak";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgsStable.url = "nixpkgs/nixos-25.11";
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
devenv = {
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
url = "github:cachix/devenv";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
@@ -19,14 +16,36 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
caelestia-shell = {
|
||||||
|
url = "github:caelestia-dots/shell";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
copyparty = {
|
||||||
|
url = "github:9001/copyparty";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
jj-cz = {
|
||||||
|
url = "git+https://labs.phundrak.com/phundrak/jj-cz?ref=develop";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
mobile-nixos = {
|
||||||
|
url = "github:mobile-nixos/mobile-nixos";
|
||||||
|
flake = false; # It is not as a flake
|
||||||
|
};
|
||||||
|
|
||||||
pumo-system-info = {
|
pumo-system-info = {
|
||||||
url = "git+https://labs.phundrak.com/phundrak/pumo-system-info";
|
url = "git+https://labs.phundrak.com/phundrak/pumo-system-info";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
caelestia-shell = {
|
rockchip = {
|
||||||
url = "github:caelestia-dots/shell";
|
url = "github:raboof/nixos-rockchip/pinetab-linux-7.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.utils.follows = "flake-utils";
|
||||||
|
inputs.nixpkgsStable.follows = "nixpkgsStable";
|
||||||
|
inputs.nixpkgsUnstable.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
sops-nix = {
|
sops-nix = {
|
||||||
@@ -34,9 +53,15 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
spicetify.url = "github:Gerg-L/spicetify-nix";
|
spicetify = {
|
||||||
|
url = "github:Gerg-L/spicetify-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
srvos.url = "github:nix-community/srvos";
|
srvos = {
|
||||||
|
url = "github:nix-community/srvos";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
zen-browser = {
|
zen-browser = {
|
||||||
url = "github:youwen5/zen-browser-flake";
|
url = "github:youwen5/zen-browser-flake";
|
||||||
@@ -45,118 +70,146 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=";
|
extra-trusted-public-keys = [
|
||||||
extra-substituters = "https://devenv.cachix.org";
|
"marpa-local:XoO+dFN4PeauF52pYuy3Vh4Sdtl2qIdxu5aUasWKv6Q="
|
||||||
|
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
|
||||||
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
|
];
|
||||||
|
extra-substituters = [
|
||||||
|
"http://marpa:5000?priority=5"
|
||||||
|
"https://phundrak.cachix.org?priority=10"
|
||||||
|
"https://nix-community.cachix.org?priority=20"
|
||||||
|
"https://cache.nixos.org?priority=40"
|
||||||
|
];
|
||||||
|
extra-experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
http-connections = 128;
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
home-manager,
|
home-manager,
|
||||||
devenv,
|
rockchip,
|
||||||
|
mobile-nixos,
|
||||||
srvos,
|
srvos,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs:
|
||||||
inherit (self) outputs;
|
flake-utils.lib.eachDefaultSystem (
|
||||||
system = "x86_64-linux";
|
system: let
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
inherit (self) outputs;
|
||||||
in {
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
formatter.${system} = pkgs.alejandra;
|
in {
|
||||||
|
formatter = pkgs.alejandra;
|
||||||
|
devShells.default = pkgs.mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.nh
|
||||||
|
pkgs.jujutsu
|
||||||
|
pkgs.git
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
packages.${system} = {
|
packages = {
|
||||||
devenv-up = self.devShells.${system}.default.config.procfileScript;
|
homeConfigurations = let
|
||||||
devenv-test = self.devShells.${system}.default.config.test;
|
extraSpecialArgs = {inherit inputs outputs system;};
|
||||||
};
|
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||||
|
defaultUserModules = [
|
||||||
devShells.${system}.default = devenv.lib.mkShell {
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
inherit inputs pkgs;
|
inputs.spicetify.homeManagerModules.default
|
||||||
modules = [
|
inputs.caelestia-shell.homeManagerModules.default
|
||||||
(
|
];
|
||||||
{pkgs, ...}: {
|
withUserModules = modules: nixpkgs.lib.lists.flatten (defaultUserModules ++ [modules]);
|
||||||
packages = [pkgs.nh];
|
in {
|
||||||
git-hooks.hooks = {
|
"phundrak@alys" = home-manager.lib.homeManagerConfiguration {
|
||||||
alejandra.enable = true;
|
inherit extraSpecialArgs pkgs;
|
||||||
commitizen.enable = true;
|
modules = withUserModules ./users/phundrak/host/alys.nix;
|
||||||
detect-private-keys.enable = true;
|
|
||||||
end-of-file-fixer.enable = true;
|
|
||||||
deadnix.enable = true;
|
|
||||||
ripsecrets.enable = true;
|
|
||||||
statix.enable = true;
|
|
||||||
};
|
};
|
||||||
}
|
"creug@elcafe" = home-manager.lib.homeManagerConfiguration {
|
||||||
)
|
inherit extraSpecialArgs pkgs;
|
||||||
];
|
modules = withUserModules ./users/creug/host/elcafe.nix;
|
||||||
};
|
};
|
||||||
|
"phundrak@elcafe" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit extraSpecialArgs pkgs;
|
||||||
|
modules = withUserModules ./users/phundrak/host/elcafe.nix;
|
||||||
|
};
|
||||||
|
"phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit extraSpecialArgs pkgs;
|
||||||
|
modules = withUserModules ./users/phundrak/host/gampo.nix;
|
||||||
|
};
|
||||||
|
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit extraSpecialArgs pkgs;
|
||||||
|
modules = withUserModules ./users/phundrak/host/marpa.nix;
|
||||||
|
};
|
||||||
|
"phundrak@NaroMk3" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit extraSpecialArgs pkgs;
|
||||||
|
modules = withUserModules ./users/phundrak/host/naromk3.nix;
|
||||||
|
};
|
||||||
|
"phundrak@pinetab2" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit extraSpecialArgs pkgs;
|
||||||
|
modules = withUserModules ./users/phundrak/host/pinetab2.nix;
|
||||||
|
};
|
||||||
|
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit extraSpecialArgs pkgs;
|
||||||
|
modules = withUserModules ./users/phundrak/host/tilo.nix;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
homeConfigurations = let
|
nixosConfigurations = let
|
||||||
extraSpecialArgs = {inherit inputs outputs system;};
|
specialArgs = {inherit inputs outputs;};
|
||||||
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
defaultSystemModules = [
|
||||||
defaultUserModules = [
|
inputs.sops-nix.nixosModules.sops
|
||||||
inputs.sops-nix.homeManagerModules.sops
|
inputs.copyparty.nixosModules.default
|
||||||
inputs.spicetify.homeManagerModules.default
|
];
|
||||||
];
|
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]);
|
||||||
withUserModules = modules: nixpkgs.lib.lists.flatten (defaultUserModules ++ [modules]);
|
pinetabConfig = import ./utils/pinetab.nix {
|
||||||
in {
|
inherit nixpkgs rockchip specialArgs;
|
||||||
"phundrak@alys" = home-manager.lib.homeManagerConfiguration {
|
additionalModules = defaultSystemModules;
|
||||||
inherit extraSpecialArgs pkgs;
|
};
|
||||||
modules = withUserModules ./users/phundrak/host/alys.nix;
|
in {
|
||||||
};
|
alys = nixpkgs.lib.nixosSystem {
|
||||||
"phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
|
inherit specialArgs;
|
||||||
inherit extraSpecialArgs pkgs;
|
modules = withSystemModules ./hosts/alys/configuration.nix;
|
||||||
modules = withUserModules [
|
};
|
||||||
inputs.caelestia-shell.homeManagerModules.default
|
elcafe = nixpkgs.lib.nixosSystem {
|
||||||
./users/phundrak/host/marpa.nix
|
inherit specialArgs;
|
||||||
];
|
modules = withSystemModules ./hosts/elcafe/configuration.nix;
|
||||||
};
|
};
|
||||||
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
|
gampo = nixpkgs.lib.nixosSystem {
|
||||||
inherit extraSpecialArgs pkgs;
|
inherit specialArgs;
|
||||||
modules = withUserModules [
|
modules = withSystemModules ./hosts/gampo/configuration.nix;
|
||||||
inputs.caelestia-shell.homeManagerModules.default
|
};
|
||||||
./users/phundrak/host/marpa.nix
|
marpa = nixpkgs.lib.nixosSystem {
|
||||||
];
|
inherit specialArgs;
|
||||||
};
|
modules = withSystemModules ./hosts/marpa;
|
||||||
"phundrak@NaroMk3" = home-manager.lib.homeManagerConfiguration {
|
};
|
||||||
inherit extraSpecialArgs pkgs;
|
NaroMk3 = nixpkgs.lib.nixosSystem {
|
||||||
modules = withUserModules ./users/phundrak/host/naromk3.nix;
|
inherit specialArgs;
|
||||||
};
|
modules = withSystemModules [
|
||||||
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
|
srvos.nixosModules.server
|
||||||
inherit extraSpecialArgs pkgs;
|
srvos.nixosModules.hardware-hetzner-cloud
|
||||||
modules = withUserModules ./users/phundrak/host/tilo.nix;
|
srvos.nixosModules.mixins-terminfo
|
||||||
};
|
./hosts/naromk3/configuration.nix
|
||||||
};
|
];
|
||||||
|
};
|
||||||
nixosConfigurations = let
|
pinetab2 = pinetabConfig "x86_64-linux" ./hosts/pinetab2/gnome.nix;
|
||||||
specialArgs = {inherit inputs outputs;};
|
pumo = nixpkgs.lib.nixosSystem {
|
||||||
defaultSystemModules = [
|
system = "aarch64-linux";
|
||||||
inputs.sops-nix.nixosModules.sops
|
inherit specialArgs;
|
||||||
];
|
modules = withSystemModules [
|
||||||
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]);
|
(import "${mobile-nixos}/lib/configuration.nix" {device = "oneplus-enchilada";})
|
||||||
in {
|
./hosts/pumo
|
||||||
alys = nixpkgs.lib.nixosSystem {
|
];
|
||||||
inherit specialArgs;
|
};
|
||||||
modules = withSystemModules ./hosts/alys/configuration.nix;
|
tilo = nixpkgs.lib.nixosSystem {
|
||||||
};
|
inherit specialArgs;
|
||||||
gampo = nixpkgs.lib.nixosSystem {
|
modules = withSystemModules ./hosts/tilo/configuration.nix;
|
||||||
inherit specialArgs;
|
};
|
||||||
modules = withSystemModules ./hosts/gampo/configuration.nix;
|
};
|
||||||
};
|
};
|
||||||
marpa = nixpkgs.lib.nixosSystem {
|
}
|
||||||
inherit specialArgs;
|
);
|
||||||
modules = withSystemModules ./hosts/marpa/configuration.nix;
|
|
||||||
};
|
|
||||||
NaroMk3 = nixpkgs.lib.nixosSystem {
|
|
||||||
inherit specialArgs;
|
|
||||||
modules = withSystemModules [
|
|
||||||
srvos.nixosModules.server
|
|
||||||
srvos.nixosModules.hardware-hetzner-cloud
|
|
||||||
srvos.nixosModules.mixins-terminfo
|
|
||||||
./hosts/naromk3/configuration.nix
|
|
||||||
];
|
|
||||||
};
|
|
||||||
tilo = nixpkgs.lib.nixosSystem {
|
|
||||||
inherit specialArgs;
|
|
||||||
modules = withSystemModules ./hosts/tilo/configuration.nix;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,10 +20,7 @@
|
|||||||
domain = "phundrak.com";
|
domain = "phundrak.com";
|
||||||
id = "41157110";
|
id = "41157110";
|
||||||
};
|
};
|
||||||
packages.nix = {
|
packages.nix.gc.automatic = true;
|
||||||
gc.automatic = true;
|
|
||||||
trusted-users = ["root" "phundrak"];
|
|
||||||
};
|
|
||||||
services = {
|
services = {
|
||||||
endlessh.enable = true;
|
endlessh.enable = true;
|
||||||
ssh = {
|
ssh = {
|
||||||
@@ -34,7 +31,10 @@
|
|||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
root.disablePassword = true;
|
root.disablePassword = true;
|
||||||
phundrak.enable = true;
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
system.stateVersion = "23.11";
|
system.stateVersion = "23.11";
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
../../system
|
||||||
|
];
|
||||||
|
|
||||||
|
sops.secrets = {
|
||||||
|
"elcafe/traefik/env".restartUnits = ["traefik.service"];
|
||||||
|
"elcafe/traefik/dynamic".restartUnits = ["traefik.service"];
|
||||||
|
# "elcafe/copyparty/passwords/creug" = {
|
||||||
|
# restartUnits = ["copyparty.service"];
|
||||||
|
# owner = "creug";
|
||||||
|
# };
|
||||||
|
# "elcafe/copyparty/passwords/phundrak" = {
|
||||||
|
# restartUnits = ["copyparty.service"];
|
||||||
|
# owner = "phundrak";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
mySystem = {
|
||||||
|
boot = {
|
||||||
|
kernel = {
|
||||||
|
hardened = true;
|
||||||
|
cpuVendor = "intel";
|
||||||
|
};
|
||||||
|
grub = {
|
||||||
|
enable = true;
|
||||||
|
device = "/dev/sdh";
|
||||||
|
};
|
||||||
|
zfs = {
|
||||||
|
enable = true;
|
||||||
|
pools = ["tank"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
dev.docker = {
|
||||||
|
enable = true;
|
||||||
|
storage = "/tank/docker/";
|
||||||
|
};
|
||||||
|
misc.keymap = "fr";
|
||||||
|
networking = {
|
||||||
|
hostname = "elcafe";
|
||||||
|
id = "501c7fb9";
|
||||||
|
};
|
||||||
|
packages.nix.gc.automatic = true;
|
||||||
|
services = {
|
||||||
|
endlessh.enable = true;
|
||||||
|
ssh = {
|
||||||
|
enable = true;
|
||||||
|
allowedUsers = ["phundrak"];
|
||||||
|
passwordAuthentication = true;
|
||||||
|
};
|
||||||
|
traefik = {
|
||||||
|
enable = false;
|
||||||
|
environmentFiles = [config.sops.secrets."elcafe/traefik/env".path];
|
||||||
|
dynamicConfigFile = config.sops.secrets."elcafe/traefik/dynamic".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
users = {
|
||||||
|
root.disablePassword = true;
|
||||||
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
|
creug = {
|
||||||
|
enable = true;
|
||||||
|
sudo = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# services.copyparty = import ./copyparty.nix {
|
||||||
|
# passwordFiles = {
|
||||||
|
# creug = config.sops.secrets."elcafe/copyparty/passwords/creug".path;
|
||||||
|
# phundrak = config.sops.secrets."elcafe/copyparty/passwords/phundrak".path;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# 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 = "23.11"; # Did you read the comment?
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{passwordFiles}: {
|
||||||
|
enable = true;
|
||||||
|
user = "creug";
|
||||||
|
group = "users";
|
||||||
|
accounts = {
|
||||||
|
creug.passwordFile = passwordFiles.creug;
|
||||||
|
phundrak.passwordFile = passwordFiles.phundrak;
|
||||||
|
};
|
||||||
|
volumes = {
|
||||||
|
"/plex" = {
|
||||||
|
path = "/plex";
|
||||||
|
access.rwmd = ["creug" "phundrak"];
|
||||||
|
flags = {
|
||||||
|
e2dsa = true;
|
||||||
|
e2ts = true;
|
||||||
|
xdev = true;
|
||||||
|
xvol = true;
|
||||||
|
dedup = true;
|
||||||
|
nohash = "\\.iso$";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
initrd = {
|
||||||
|
availableKernelModules = ["ahci" "xhci_pci" "ehci_pci" "megaraid_sas" "usbhid" "usb_storage" "sd_mod" "sr_mod"];
|
||||||
|
kernelModules = [];
|
||||||
|
};
|
||||||
|
kernelModules = ["kvm-intel"];
|
||||||
|
extraModulePackages = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/d2e703f7-90e0-43e7-9872-ce036f201c4b";
|
||||||
|
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;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
};
|
};
|
||||||
hardware = {
|
hardware = {
|
||||||
bluetooth.enable = true;
|
bluetooth.enable = true;
|
||||||
|
fingerprint.enable = true;
|
||||||
input = {
|
input = {
|
||||||
corne.allowHidAccess = true;
|
corne.allowHidAccess = true;
|
||||||
ibmTrackpoint.disable = true;
|
ibmTrackpoint.disable = true;
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
};
|
};
|
||||||
sound.enable = true;
|
sound.enable = true;
|
||||||
};
|
};
|
||||||
|
i18n.input.enable = true;
|
||||||
misc.keymap = "fr-bepo";
|
misc.keymap = "fr-bepo";
|
||||||
networking = {
|
networking = {
|
||||||
hostname = "gampo";
|
hostname = "gampo";
|
||||||
@@ -49,8 +51,8 @@
|
|||||||
appimage.enable = true;
|
appimage.enable = true;
|
||||||
flatpak.enable = true;
|
flatpak.enable = true;
|
||||||
nix = {
|
nix = {
|
||||||
|
gc.automatic = true;
|
||||||
nix-ld.enable = true;
|
nix-ld.enable = true;
|
||||||
trusted-users = ["root" "phundrak"];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
programs.steam.enable = true;
|
programs.steam.enable = true;
|
||||||
@@ -60,7 +62,10 @@
|
|||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
root.disablePassword = true;
|
root.disablePassword = true;
|
||||||
phundrak.enable = true;
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,11 +46,14 @@
|
|||||||
|
|
||||||
mySystem = {
|
mySystem = {
|
||||||
boot = {
|
boot = {
|
||||||
extraModprobeConfig = ''
|
|
||||||
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
|
|
||||||
'';
|
|
||||||
plymouth.enable = true;
|
plymouth.enable = true;
|
||||||
kernel.cpuVendor = "amd";
|
kernel = {
|
||||||
|
cpuVendor = "amd";
|
||||||
|
v4l2loopback.enable = true;
|
||||||
|
extraModprobeConfig = ''
|
||||||
|
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
|
||||||
|
'';
|
||||||
|
};
|
||||||
systemd-boot = true;
|
systemd-boot = true;
|
||||||
};
|
};
|
||||||
desktop = {
|
desktop = {
|
||||||
@@ -79,10 +82,12 @@
|
|||||||
};
|
};
|
||||||
sound = {
|
sound = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
noisetorch = true;
|
||||||
jack = true;
|
jack = true;
|
||||||
scarlett.enable = true;
|
scarlett.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
i18n.input.enable = true;
|
||||||
misc.keymap = "fr-bepo";
|
misc.keymap = "fr-bepo";
|
||||||
networking = {
|
networking = {
|
||||||
hostname = "marpa";
|
hostname = "marpa";
|
||||||
@@ -98,32 +103,39 @@
|
|||||||
packages = {
|
packages = {
|
||||||
appimage.enable = true;
|
appimage.enable = true;
|
||||||
flatpak.enable = true;
|
flatpak.enable = true;
|
||||||
nix = {
|
nix.nix-ld.enable = true;
|
||||||
nix-ld.enable = true;
|
|
||||||
trusted-users = ["root" "phundrak"];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
programs.steam.enable = true;
|
programs.steam.enable = true;
|
||||||
services = {
|
services = {
|
||||||
fwupd.enable = true;
|
fwupd.enable = true;
|
||||||
|
harmonia = {
|
||||||
|
enable = true;
|
||||||
|
signKeyPaths = [config.sops.secrets."marpa/nix-cache-priv-key".path];
|
||||||
|
};
|
||||||
|
languagetool.enable = true;
|
||||||
printing.enable = true;
|
printing.enable = true;
|
||||||
ssh.enable = true;
|
ssh.enable = true;
|
||||||
sunshine = {
|
sunshine = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autostart = true;
|
autostart = true;
|
||||||
};
|
};
|
||||||
languagetool.enable = true;
|
|
||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
root.disablePassword = true;
|
root.disablePassword = true;
|
||||||
phundrak.enable = true;
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
sops.secrets.extraHosts = {
|
sops.secrets = {
|
||||||
inherit (config.users.users.root) group;
|
"marpa/nix-cache-priv-key" = {};
|
||||||
owner = config.users.users.phundrak.name;
|
extraHosts = {
|
||||||
mode = "0440";
|
inherit (config.users.users.root) group;
|
||||||
|
owner = config.users.users.phundrak.name;
|
||||||
|
mode = "0440";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.udev.extraHwdb = ''
|
services.udev.extraHwdb = ''
|
||||||
@@ -29,10 +29,7 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
packages.nix = {
|
packages.nix.gc.automatic = true;
|
||||||
gc.automatic = true;
|
|
||||||
trusted-users = ["phundrak"];
|
|
||||||
};
|
|
||||||
services = {
|
services = {
|
||||||
endlessh.enable = false;
|
endlessh.enable = false;
|
||||||
ssh = {
|
ssh = {
|
||||||
@@ -44,7 +41,10 @@
|
|||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
root.disablePassword = true;
|
root.disablePassword = true;
|
||||||
phundrak.enable = true;
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -10,25 +10,31 @@
|
|||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
|
boot = {
|
||||||
boot.initrd.kernelModules = [];
|
initrd = {
|
||||||
boot.kernelModules = [];
|
availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
|
||||||
boot.extraModulePackages = [];
|
kernelModules = [];
|
||||||
|
};
|
||||||
fileSystems."/" = {
|
kernelModules = [];
|
||||||
device = "/dev/disk/by-uuid/28b965a5-940b-4990-87fe-039c9f373bf0";
|
extraModulePackages = [];
|
||||||
fsType = "ext4";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
fileSystems = {
|
||||||
device = "/dev/disk/by-uuid/EBAD-6B85";
|
"/" = {
|
||||||
fsType = "vfat";
|
device = "/dev/disk/by-uuid/28b965a5-940b-4990-87fe-039c9f373bf0";
|
||||||
options = ["fmask=0022" "dmask=0022"];
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/tank" = {
|
"/boot" = {
|
||||||
device = "/dev/disk/by-uuid/ed00871e-a14a-428f-b6e4-5b56febd756a";
|
device = "/dev/disk/by-uuid/EBAD-6B85";
|
||||||
fsType = "ext4";
|
fsType = "vfat";
|
||||||
|
options = ["fmask=0022" "dmask=0022"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/tank" = {
|
||||||
|
device = "/dev/disk/by-uuid/ed00871e-a14a-428f-b6e4-5b56febd756a";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [];
|
swapDevices = [];
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
../../system/desktop
|
||||||
|
../../system/dev
|
||||||
|
../../system/hardware
|
||||||
|
../../system/i18n
|
||||||
|
../../system/misc.nix
|
||||||
|
../../system/network
|
||||||
|
../../system/packages
|
||||||
|
../../system/security
|
||||||
|
../../system/services
|
||||||
|
../../system/users
|
||||||
|
];
|
||||||
|
|
||||||
|
system.stateVersion = "25.11";
|
||||||
|
# documentation.nixos.enable = false;
|
||||||
|
# nix.settings.trusted-users = ["root" "@wheel"];
|
||||||
|
|
||||||
|
mySystem = {
|
||||||
|
desktop = {
|
||||||
|
hyprland.enable = true;
|
||||||
|
niri.enable = true;
|
||||||
|
waydroid.enable = true;
|
||||||
|
xserver = {
|
||||||
|
enable = true;
|
||||||
|
de = "gnome";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
dev.docker = {
|
||||||
|
enable = true;
|
||||||
|
podman.enable = true;
|
||||||
|
autoprune.enable = true;
|
||||||
|
};
|
||||||
|
hardware = {
|
||||||
|
bluetooth.enable = true;
|
||||||
|
input.opentablet.enable = true;
|
||||||
|
sound.enable = true;
|
||||||
|
};
|
||||||
|
i18n.input.enable = true;
|
||||||
|
misc.keymap = "fr-bepo";
|
||||||
|
networking = {
|
||||||
|
hostname = "pinetab2";
|
||||||
|
id = "99a11b15";
|
||||||
|
wifi.disablePowersave = true;
|
||||||
|
};
|
||||||
|
packages = {
|
||||||
|
appimage.enable = true;
|
||||||
|
flatpak.enable = true;
|
||||||
|
nix = {
|
||||||
|
gc.automatic = true;
|
||||||
|
nix-ld.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.ssh.enable = true;
|
||||||
|
users = {
|
||||||
|
root.disablePassword = true;
|
||||||
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sops.secrets.extraHosts = {
|
||||||
|
inherit (config.users.users.root) group;
|
||||||
|
owner = config.users.users.phundrak.name;
|
||||||
|
mode = "0440";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# https://github.com/systemd/systemd/pull/35304#issuecomment-3855146191
|
||||||
|
# gnome autorotate expects 'normal' is the _display panel_ normal, but
|
||||||
|
# mutter autoconfiguration rotates by 90deg.
|
||||||
|
# compensating with gdctl for now, though it would be better to 'properly'
|
||||||
|
# fix this.
|
||||||
|
services.udev = {
|
||||||
|
extraHwdb = ''
|
||||||
|
sensor:modalias:*sc7a20:*
|
||||||
|
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 0, 1; 0, 1, 0
|
||||||
|
'';
|
||||||
|
extraRules = ''
|
||||||
|
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1018", ATTRS{idProduct}=="1006", ENV{SYSTEMD_WANTS}+="landscape.service", TAG+="systemd"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
systemd.services.landscape = {
|
||||||
|
script = ''
|
||||||
|
${pkgs.mutter}/bin/gdctl set --logical-monitor --primary --monitor=DSI-1 --transform normal
|
||||||
|
'';
|
||||||
|
serviceConfig.User = "phundrak";
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
environment = {
|
||||||
|
"DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/${toString config.users.users."phundrak".uid}/bus";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
gnomeExtensions.arc-menu
|
||||||
|
gnomeExtensions.dash-to-dock
|
||||||
|
gnomeExtensions.dash-to-panel
|
||||||
|
gnomeExtensions.gjs-osk
|
||||||
|
gnomeExtensions.one-window-wonderland
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
# Minimal configuration for OnePlus 6 (enchilada) NixOS Mobile
|
||||||
|
# Focus on essentials: SSH, wireless, and basic tools
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
../../system
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.config.permittedInsecurePackages = ["olm-3.2.16"];
|
||||||
|
|
||||||
|
mySystem = {
|
||||||
|
desktop = {
|
||||||
|
hyprland.enable = true;
|
||||||
|
niri.enable = true;
|
||||||
|
waydroid.enable = true;
|
||||||
|
xserver = {
|
||||||
|
enable = true;
|
||||||
|
de = "gnome";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
dev.docker = {
|
||||||
|
enable = true;
|
||||||
|
podman.enable = true;
|
||||||
|
autoprune.enable = true;
|
||||||
|
};
|
||||||
|
hardware = {
|
||||||
|
bluetooth.enable = true;
|
||||||
|
sound = {
|
||||||
|
enable = true;
|
||||||
|
usePulseaudio = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
i18n.input.enable = true;
|
||||||
|
misc = {
|
||||||
|
keymap = "fr-bepo";
|
||||||
|
mobile = true;
|
||||||
|
};
|
||||||
|
networking = {
|
||||||
|
hostname = "pumo";
|
||||||
|
id = "93595b88";
|
||||||
|
};
|
||||||
|
packages = {
|
||||||
|
appimage.enable = true;
|
||||||
|
flatpak.enable = true;
|
||||||
|
nix.nix-ld.enable = true;
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
languagetool.enable = true;
|
||||||
|
printing.enable = true;
|
||||||
|
ssh.enable = true;
|
||||||
|
};
|
||||||
|
users = {
|
||||||
|
root.disablePassword = true;
|
||||||
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
extraGroups = ["feedbackd"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
dconf.enable = true;
|
||||||
|
calls.enable = true;
|
||||||
|
zsh.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware.sensor.iio.enable = true;
|
||||||
|
|
||||||
|
# Minimal essential packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
chatty # IM and SMS
|
||||||
|
epiphany
|
||||||
|
nixd
|
||||||
|
git
|
||||||
|
vim
|
||||||
|
emacs
|
||||||
|
wget
|
||||||
|
curl
|
||||||
|
jujutsu
|
||||||
|
firefox
|
||||||
|
kitty
|
||||||
|
];
|
||||||
|
|
||||||
|
system.stateVersion = "25.11";
|
||||||
|
}
|
||||||
@@ -30,10 +30,7 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
packages.nix = {
|
packages.nix.gc.automatic = true;
|
||||||
gc.automatic = true;
|
|
||||||
trusted-users = ["root" "phundrak"];
|
|
||||||
};
|
|
||||||
services = {
|
services = {
|
||||||
calibre.enable = true;
|
calibre.enable = true;
|
||||||
endlessh.enable = true;
|
endlessh.enable = true;
|
||||||
@@ -50,7 +47,10 @@
|
|||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
root.disablePassword = true;
|
root.disablePassword = true;
|
||||||
phundrak.enable = true;
|
phundrak = {
|
||||||
|
enable = true;
|
||||||
|
trusted = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# https://handy.computer/
|
||||||
|
{
|
||||||
|
appimageTools,
|
||||||
|
fetchurl,
|
||||||
|
lib,
|
||||||
|
}: let
|
||||||
|
name = "Handy";
|
||||||
|
pname = lib.strings.toLower name;
|
||||||
|
version = "0.8.0";
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/cjpais/${name}/releases/download/v${version}/${name}_${version}_amd64.AppImage";
|
||||||
|
hash = "sha256-PLcssfd6iMx51mglAJ7D4+67HFazwfhJMImgU9WiNDk=";
|
||||||
|
};
|
||||||
|
appimageContent = appimageTools.extractType2 {inherit pname version src;};
|
||||||
|
in
|
||||||
|
appimageTools.wrapType2 {
|
||||||
|
inherit pname version src;
|
||||||
|
extraPkgs = pkgs: [pkgs.wtype];
|
||||||
|
extraInstallCommands = ''
|
||||||
|
install -m 444 -D ${appimageContent}/${name}.desktop $out/share/applications/${name}.desktop
|
||||||
|
install -m 444 -D ${appimageContent}/${name}.png $out/share/icons/hicolor/256x256/apps/${name}.png
|
||||||
|
install -m 444 -D ${appimageContent}/${pname}.png $out/share/icons/hicolor/256x256/apps/${pname}.png
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
obs-studio,
|
||||||
|
fetchFromGitHub,
|
||||||
|
cmake,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
stdenv.mkDerivation (finalAttrs: rec {
|
||||||
|
pname = "obs-image-reaction";
|
||||||
|
version = "0.1.0";
|
||||||
|
# https://github.com/scaledteam/obs-image-reaction
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "scaledteam";
|
||||||
|
repo = pname;
|
||||||
|
rev = "4cd345e78c714e80e894cfb51c72b94135a6014d";
|
||||||
|
hash = "sha256-mC1B8tveHx35pfbAcOlosB8YKaBVg87MjXbr79sf7+k=";
|
||||||
|
};
|
||||||
|
nativeBuildInputs = [cmake];
|
||||||
|
buildInputs = [obs-studio];
|
||||||
|
postInstall = "rm -rf $out/obs-plugins $out/data";
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "OBS Plugin with image that reacts to sound source";
|
||||||
|
homepage = "https://github.com/scaledteam/obs-image-reaction";
|
||||||
|
license = lib.licenses.gpl2;
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
};
|
||||||
|
})
|
||||||
+94
-64
@@ -1,85 +1,115 @@
|
|||||||
extraHosts: ENC[AES256_GCM,data:buAUbxVALT7zjwYfySVQ7E6RsI4EaVBUFN/ZXOuSaj42DLoLPM45PSgkxjner9o4g6a3s58Snp3siO8l0KPSTYyPUPBZ7dgbCcsWp5t8Q3K111d4TPTlx+gcluK5BvwNvFB4esRXJOgpm5jK498COKq/UZJECM0D5Emid0CKkzZynUYdbQeHkQEKIXV2LxJNro87xHtU/l11nox37Na0+t+eqp8/jcQh9pGnKmppPhviJeCy6GoiDPNFHDalQUmd204gi6EaTx0p3r7gRK61RfTwSCiX1Y7N5muzPvJQJt8lwgqznw5Etjud8wn6HF+fmb/BbYtioO9TjOVJnjVOlB4iUMApx3XY4VOuBPJm7D9ET+2J8Umw4OD5pB9A5WF+gVseAqYYNZYpe2hlHBoXMw4IZh8qOgxR/noE71PHxRe5gSB/2Hq0lKwG0e8lyFEeJKZdXsl47CtQE39RfC/+ik2COaRmYxY8fHHs2/yTylopv/pSM6K2TGF5B3dwVS18LU5AR48C1Ip7CseMgjgAWvjQ43KBc+P74a+237tlRFlFsU3HNk9Hk4fF53DPUX67+l42W6sNcgrszFHb/dm939qDKYqdNcWEjaaVSdDo34I6NGhmTUI7FxCVYipe,iv:SehibPtT3k9Ufen8Gri3HcFthUe0S7dMT+486fwOK0w=,tag:oatCeFr2j3EPHwXc6eU66w==,type:str]
|
elcafe:
|
||||||
|
copyparty:
|
||||||
|
passwords:
|
||||||
|
creug: ENC[AES256_GCM,data:bWiDsIB9xbCC8N3VNzoXQ/ciyh5LyX5gaH5HrCR1n18=,iv:UOUUs/dXMQ4gF5x1UZuSs/DZh14OErWq1EJjv1B5+No=,tag:gMrL7RlaIegw+gXE4Du0KQ==,type:str]
|
||||||
|
phundrak: ENC[AES256_GCM,data:0kdrtlw2KeF4ZGqhejdnf1j59Lm5Gchh+wka2lOf8jU=,iv:4XG7M6oqRL0ZQiWMBe4oQ+mHjONkvuIXGa6m2Zqfd/A=,tag:A54LlE+7W2wXYn3HfCfBDw==,type:str]
|
||||||
|
traefik:
|
||||||
|
env: ENC[AES256_GCM,data:HUdWGYoEPp2v8dnDuVsl7YmPxuBfHmXzGrvKWeiqPlmAwMqVZrZ1j8on/7QKvYDJoTJ40XY2qNynSA==,iv:Vgc/fZERnNp7hSMeRd9EgB3IenKAFTAhwC0bk8CX4DE=,tag:SdfhOST/o29Lt1zRdXXRyQ==,type:str]
|
||||||
|
dynamic: ENC[AES256_GCM,data:BKsjTfqpZhrocHOUfxjCNS61DVb1oSdPW99IrwmNjpFcs68WvyfD0+QZ9F362L88CQDTnDSXWAbc7mcBtxhqfhkjtsdxkhtLHMGG0WxlnYungTnROh9EDJRLNyjy/RCYWOIVOXIEUE5lLwnQkboZLEiruw1Ri+r27WYmGpD5DaR4XWDankb6BQPJA6f2ziPyynjNYZaRhMIQUDFLM3QRAXPYD00eaYIQtx253z8Uocz4LpOw2JReAQkI2zc+6Oe1O4fP/Cg8klF0owR6NkNUWoIUVwLqFmU7Yr45VO+T/f96Ev0hlDaMklxYJGNOS8kRbSqpaiuMCmL2mQ6rsZGFVfdMdImSL2j51lrPFJCsg/hNGXHAxQ0/OpHtcZz/cwn5nSHBXg6gX21kOpkWGY1+BRA15X0k5sUqXkZWjkP9wkSCV6pQTbr8a3GrX2VvGwguAC4EpTCkCobXw/d9a7bMfZFeJqFhwjpU/dfBi6OjF7bniOQ7k3+5RZRDqAxJiPaBk7NKVN1FzUCvFBjKifbfICOJaPJr1CmayNuBZtsSlj0MXBYx8D8oShzhsCo/+pyni4poMYyfNC9jQKWCBsjKEa6eWb1+TfOHv4W+lSlBFg3vGm4NDxCPnACKWlhKB4WoJGRHqnp809XF2fqP4lZN8S7+sB2rhNlr2CICk9oM80FNmW/8TTtIgbpfEeFeJwNTM+S95cFSqaIRg3kfcqB/bHG37BYthcL1SC85/lxhL2LJ/O0qXxbioyxVAaBIumAO8BB1qrdbOozHZZAU1IIKylDWMWUoJMyMdhMGnOxxxWcbV2jPUXUv03DYNp3G/5F2Hlr+h0bPIJEFZ2kb14wTK+25MsgfBgky26f8qjNwROqKA+bPeB2yUKSSCJb//PzzE4xyqu1mq2/1zTal0eSRTCEnAUCj0wDqCLBMO6GnL0PS4PtGJ9n/IbOjFXZeixWGJzUTcmxPAmsClH6FV8brEMVs5bfrjLieXQvcn0b8b9/1W2jV4dJGUE1TxUQ2B92VG7PrA39O/FO8tQJZrAMXO9iMv495w0Nxbt0HYN6wsFTUwlQ+3DCXxgmmVBqVSf1OtHuhxcznl1oR+sgPSgBRLVB22mv5677ErQGCWp1luyPSF6xvhIaKe9BDwxBwJ+RsqSn4w5t1qJM9uYqFunSJPY5439B4zWG+lUy1ZDNn1oHUaX3hZUhzc9tEm+0CWFNXxH2hiRFb2nYP6Pv/GNqjZCsflY0YYty0UJBqRELGpUO3Sd+zbyJmWtvDjto726/0jHB/jb0RVThUem0PzWmmIUth0ucKp0M7zqEWNyVPbvWOK6rWQW9eaW87bFeMhrD1PC+U0ilq9DKG1J3ldc0lEBrguc4fk72T3I62pw5KdGnsmB+FjAc8kdTFKhM52ylChsAnJGFu0LyBUgjGIzZ03XkO8RbYs/wzc9VQOvyikvB67wImXMu8PJDzMxXnu58y7C4U86kvLdUfYm5bz+MxZmXsDA1L7C4si6oLf7rOCfLLc4A1a/X/aMSk330SARW/UAZ/NaFDXhotYXZUSbr41Z6b0qRPZjjZfOkdeKxTp+r07+8oJpPOaIaaOIlNRkGyRCnbCGvJ4CuUfTQuywIefBHlawGzhsDvOKorWYTuim7MbJcd19bYMG6k8qqTQlNeHjZJaDLKJ/rnSAIGDSNYRP4uUUo0gqSp82E9bXUUn5VuFSPcJ55uvFXZD0f6tLZGIyUuG5tqw3xNQF2cA+4ZXzbxi6VIZQ+ahZELkoBR+dVXQ0yGkDJusNf61A1lfI2bd7JQnJ7YVhbF1gXNnDXdWO0F8zsnZyhSSJY3ZoXLdYn+v39+AxQvE3mpX7zNsk7+0WUHuqAh6JG6OBt7jF5OVwD3bfuQfDhPlfD7YOU5/C+rekDGXmfZOMXxadvQgWFcpHdgbV7NwKqdgj6pJDVoGO8/4HGtlb94/o6dtXzfheSLUhCUZ2Im81yduu8386fCYLHX/ZsP+CuuC2wlXQaSCgoODRXXDz7jsRcQNfW2ohmFT9iDn95NI5ylCgt49t2Cr06ft7Pd0tWjh69VQ8TjNlfqm3Sxlf/Gb9ihwOOytmbDv4bNKhpRIPC0jIZv3aaA7vgdLCbySVeMo1tfMx3Xvf6q8XqlsQ/HgwBxAMmjakIAukNwtU74oJ2AYpIO/Oc47081JR2sVtGWer6l7C8KMy9O0xYtABsofkc9kHQWtAvn82sSQTuI/UgD5ttfdfVZZaanHek3vgJyTYI3sPQDVJ6SXrC0a+fqMlTL7Jux/0B70gK1z46j5C54IBCChNa4CwXhvxofyoDgyF6DVC2qZxoKXGl1veQKJh68q9hCiDlYEpiwuRCs3j6uSUG4Rssc9TKfdY3AQltVrhykEORVEgZe1HWmlms=,iv:3G3geSZRziwGiKcUMVNZ7j5s/4YA6Uk7wCSb4aFNSMo=,tag:FxARskR9+wdV7/xCKP8UdA==,type:str]
|
||||||
|
marpa:
|
||||||
|
nix-cache-priv-key: ENC[AES256_GCM,data:H5VsN0nOogvgxWHXHF66BbzJe17zelZCG6mU4vmVJqBoi7a5cQxzU7WnV4k1EOpMJPDj6floVmrsG4DM86FthxcTwixCNDINmaemwAXQnUkgWXFKYY7Ovzten81UVKrtkN4n1S8=,iv:pxnHD5YqyTeNZnxyEJeXAUixZEz8Uq9b2HFZZBsMOzk=,tag:xI+4tFG+Q4Z5IVxlATayJA==,type:str]
|
||||||
|
opencode:
|
||||||
|
cors: ENC[AES256_GCM,data:ubvZLYOSbwUSlpyO+1R1BvgxI17gBTNmN3dK9as=,iv:vPEZPvrber41NdOFB299fpIH7o2IFsSdA5EhIdw4CNk=,tag:KufSrvozf0ov7VBpMz/Bfg==,type:str]
|
||||||
|
extraHosts: ENC[AES256_GCM,data:4lp7w0snYle7vGVLJq3zlTxoC8eVpaSreW3P8Aq+O6oRJoWo3IASpwi7zSx6nxmLo5LGPeupVXfy3xOkG9d5QFNU2uU6vXKvOnnm6wrpS+UcYp/4U/z+R3rFnFsI5PsCgmlL1bSUFCFkXlrLDIyoW50Q/DLXDS8QaUYAtto1DcRUXc9j8RnunYF38HFlAOD/Xa4DY048pvZu8TMsmLQjM5txZnZBq4+P8aBjY3SF+K9cqZ+SgQkU+gdGo0/S/N5OUZJ3ATJ6mglPl/Nplw/Dh9HvC7jEMJZKrVzWiYquTOn0/IytqOCS2SkhsmVMRqf06hpvhlz6sFXzkDfxKMIRTULEkjZDkZ7QioSbLeqmQePSg7xs28SvToiVKSpg0PxeH5LvJE73hgX3ATUXA2BmRvqQuqBwLaDU6TPm8xkYe7qbabaN5oFtXCI/XydZTao5Glqw/BZQRTise/qGgn3Bfl/ieMYQOqCMEdHzR0Beipur6spliGFC4YnwL3Nh4CO6qOB/j61a7rqY6nLyo54jWtjvHX42pTuGWhvhGH1z4NRZqcKks+KCMB4PcCXgul1hrb04wLXYVu7R/7QqOACp4SZBUFZCj+izcsnB1sKdKliL87VBUkwOSF+1JUCY,iv:5A3jCWLkooCkuOMiybbeQ9+TRA7CoiW3qbzmJLVarSc=,tag:qLsGhrFHs65Vesj4Ot4I/g==,type:str]
|
||||||
mopidy:
|
mopidy:
|
||||||
spotify: ENC[AES256_GCM,data:89vPpgJ53eYou01qgxfqxOO6G/raBA0Vzck31PLchE4Jhi6HcNnoW4wwhHW3pG0AfCu5sE1CuryhRpWTc62fXIBoenKiCiU7chFhBF0UNq3Fcie26l6hdEx+XYVcM/MNBBbkb8VZq1mR0sgGmUESuZVzeI3LMykF,iv:n+LxuijWCZGW2YacrYQ2QIF2BTSilLmJ72piFRK25vw=,tag:iOQatj2UJdlMvn6C40IILg==,type:str]
|
spotify: ENC[AES256_GCM,data:6i9BzQmlndnROuT1H2zgN/3I6hBiFf14BlcS+XL2PbTiiEQZe2yE3tnZo3KXU9S5CjS3MwxsVdytKOFMQt2s1bVjcibBhJzoKEQByaapdzn1mK3kQLdJfhPf4Hf9YZV9Dlc60ngS7ESLZakdFVlj4rlbV5XReLhK,iv:fYd78r4U0kTyq1TZjBVXkjdNiOQ29gLJ53kwTXsi8W0=,tag:oWaeOuzdHWS4joZAdeA2pg==,type:str]
|
||||||
bandcamp: ENC[AES256_GCM,data:Sas5Sk0gNaq2E1XnsK8lvaZEzsaFZKY+zDxvgTiqTm2hrI2BnWieRWcZV6u1yRKjLAhh1rdSYhnZJHWUGIAY9qnFOk4vUVUHLtxnkxO/bJN/sykc4qwXRg4/NNap+8TcsN/S1AFJYKmXYn1Otx/02wbMEzHIuw==,iv:VGC7COqF3goMyyJvasiT0yVxOk4QKLOuXd2FbHjuRwk=,tag:pvyX4Q+dvlWFkdSJzTlgwA==,type:str]
|
bandcamp: ENC[AES256_GCM,data:3uWlk1W6pgExsUkLpqpFXpMceYEdMfWMxNUq8iGEyq8/P3OAjzg7pvvPBGcVwmh4jSgNilRiqmmGrtYLwdqPUMlmbFB56K6ZLDIcC2yg2SRfulYcObvimOkIkx7ITr1u6jSzjMkTR5ekIlzlPBxFQzEfBbgdrQ==,iv:IY1VH/8vjNCPz8LGbYbyr5U3FcmhV+YhK3fHnLfWiak=,tag:lB78PRuEuFen54csc7jHIQ==,type:str]
|
||||||
emailPassword: ENC[AES256_GCM,data:RXmfWKIm5CzZrqhT6bAPZdijByO1NvrSwN1YO4/huVQnQh5p1g==,iv:lh/mxH5sPce+to6TsK2f0SrpHJuuGUiKWzrNmQfJcY0=,tag:EyR7Nml7Jyh4Modsq7DuBw==,type:str]
|
emailPassword: ENC[AES256_GCM,data:RUuXzEfkqu1hEg12vBko17MtvdcFIxPofB+nFOuuMdWqjqJgEg==,iv:725/ttk8jHmSIj16gqvLykOu8D8rUbzzvOyxyZx8Jds=,tag:jv1ZO14WsKyWFsfqzRzZPg==,type:str]
|
||||||
ssh:
|
ssh:
|
||||||
hosts: ENC[AES256_GCM,data:CnSHwOiLbrA3C902LrkyLKvZOd4Lv1RCBF+IVVbNcx1aCibpMHlFN6Ov+CFNrHG1ZVd3tarnZdGX5kScJJa0khDOVtrUF1gtvifqn1A9tUDP2M+iu3JrVxDw6cPeVyoxWL1hwuWwfO3zgApBGT3CvzAy9V85cNEdS7ukx08VRTgnM6rXYLJKLvjwaDnhnB43Am8XpZQkI0I6DkhCAQuGCrxsqtEE/mQXItZUGlOp/Al8B1XEs35b16odMJEextf85bnzpYYbpV9n4OCMTgoZ8ciQgTbi7u9FD8vmKs5W15pZvL4sxFIcbegn29SvRd7sfsotQ6xNgXHqAQtTa+VcUPA7bSjDw5KHs0iC8AkxdHwGL1kY0GSb992BIZ7PqKdNRLAikttGslFM98Ce6fpHQXj3soYYMdsm9vj7av1+P4N6SQ2cmhpVDrbnrmXQ5MT5gbQlecu32b0Yqf6rfjGyZ+SCZmMzTwAsEpHSnIgYPin38ztDsMMPaouxaTR8V1TXK715ITtA9ojrZhTBbWlaJWVybicc6tT164ZDKyurGdPHf2KrakkVYZghuCkWZWM/yc4GoW1o7/XxWnwQDkUvte8kPDwB2Rvc1jjG6SFvhdXouIqfNNxrdbSoFURBuouZIbfamVqU3MfSF0JRBrpRerA5tqrWYOPL4rXqsqGWyQ==,iv:92tBq0zjlJ44Ia5ug2zk9PgspWzA6QlT0A+j9T74T7U=,tag:XTB7zG14DsPw1uNXTpD7Bg==,type:str]
|
hosts: ENC[AES256_GCM,data:WTgCxNIyKTwFxDVlWkJcxrvUjYuVionDQSWgSqSc0SZ5mGbl228mv7Z6mXvwbN78+jIwTuuUtfmTsDoaUaSqyIReaXFsrIHAoCGoSMbJ10RiAbyDfCEH9vbHamAX22Ccfnyh7eUOb3AsAQo/pJs/95bdCpKEPy4SXcpB0tc+KpgrEijVLpRJFyB6UGl+2qg/hVfo8no5l4tZMUBxzS5KEU7pEEcA/SLfdVMM/4+aeVmJudxJPi3RsqnA8qORVpvJC0y/ln71OrFdRVrX4e47NEXzX2Hfr+hiFbW190xBp6a/kZypQl4vk4fzn8RUathQMOVmf1r4v7eJOYRWeGeZinZtQNe7SFWtiYc0pTbQ6GNyOMwzk3bMjlyzhlrTe1MqFqVbAHSsKk6ydpcjtXt4DgQ93IL4BU6emJu7HBFBOuQ9QWEvDubhB/0Y68BWUqGqY/2lPdllGJrXL87h5KJrLHSMyUX4mF9Je84aC0cv1N3d78kepo2wCz7jrfsxixT+qN7ufu/TurLloC6y2skOCmB+gcRo79Jzk4LRi+Zf+RWnWiXw5HsZWwO7so5JIDlgApkERif6vwup12jhdu+ZxcqFfjMt1wEFceS8YGNvUl0XWPgvmM9kdqn/4XXOYCnysbpcfZaBMGDOBUlbhLUybHdDzvGYV/kMU5m8xoXAjA==,iv:Gf2f71TluSEQtiHf7CIHE2tFX8N4Y17AjP1PnNuWuNA=,tag:sGmZR1lKbbOeEhPvrHHO8Q==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- recipient: age1ajemtm502nn2n4q7v4j8meyd5mxtcqngkkedxq2pqzuwu78zp93qnw8q48
|
- enc: |
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLMG1wWDcrSjN0NjEzY05q
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2S3VaTmg3b2QxMGtVeStr
|
||||||
YVBWbXJ1ZTlMYkdxZmRMakNZdm9qQnFxYzBFClMzS3RUVzM1aVRoazhXNkxwZFdv
|
WWRpb0RhVFNWM3RJNEV4ZTdRVmJUa2d6YVZrCnFTOWwwTlNhc2hqM2pwZ1hkcWd1
|
||||||
OVVIQWlWS0dLS2puN0ZZVjNwaGpWeE0KLS0tIGtaVWJoZmN3bnFtbWt6RmhvUnpK
|
QlE2N0FtSGFFR1NHbzFOSzI5Um4rVTQKLS0tIEFaMHprc3Jlclk3MGtvc2NzZ3cr
|
||||||
NnlaM2VmdnRVQitxUXZueGxXeWdhQlkK99cfnUusVZO/icWY2pDLExVveLtf1xPp
|
blMrcWVSVFB3TVc0aTQ0RUYvbDFJS0kKmGisf9VDK2RPA1uQCK5udt7sdeDyh344
|
||||||
43QVMMWTnkF8fS1SyM6KT7T12gFOeCIxa06IDKs1AIvuOuaq6OxEhw==
|
IKhPHzEHAHjKEkE6sWc6TB/l8K3IfL9zdHQZ9ZqTvCiS8CBZOwPQeg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age197lfdanym647wdaz9uy8hrfqjwj9fs8rm7vs3fsrctceu8mr9gms2jedhz
|
recipient: age1ajemtm502nn2n4q7v4j8meyd5mxtcqngkkedxq2pqzuwu78zp93qnw8q48
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2SjlaZGdmNWZOKzRUYU5B
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTRzRqTzlzVWpGMVFEbjV5
|
||||||
NlpDeEREOUlkamhINnREeVFoYUJqSkNlc1U0CkU2QUpBTi9DUDI0RmV3M3U3Vmgv
|
R1RXS1RBMzZGaGZjUkFZc3RLb2JkSzlRQlJZCnp5c0pMOHBZUkhralArcUhLSmx5
|
||||||
UTJ5ZXBlaEcxeUtzUjcwcGw0MG9xKzAKLS0tIFpWeHRMWDlDekVMOWtLWFR2S05y
|
Uk41cGRUR3RxR1FYVHBWU3d6ZXJpcFUKLS0tIFdLclpadHV0QlRuYmJhYVZGWVc5
|
||||||
MHNUYUlJVHc4cnRwdGpKYXJOUE9ydWcKrJmvP3y+xVMGvS17iIzAzrKjvO4LAFOH
|
eHRMV2o0TXhoVkcyaXZqU0tsR0o2eDQKdYwEuPeQ1fntKQKIlOlxet+SJ0rT5I1y
|
||||||
mQV2c2WwZpNFYb63zwKKVxxRsTMCZjQviMXywCB7GRuUk1/aCEjZyA==
|
WDpfGZUVvghx5dwdd6EMq3sQUeoFSfjrlgIAwNtHRwMC19A68ubzhQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age17pn6suvz2f7zmrm9zxj5hr0putvcvdamqxqt7ewhncgg6ccgmp2qr00xm2
|
recipient: age197lfdanym647wdaz9uy8hrfqjwj9fs8rm7vs3fsrctceu8mr9gms2jedhz
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvMlUrWnFoZGZuZi8yVUJW
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxUEtOZ3Zac01HTjVZVXNF
|
||||||
R1lJeUYydHZCMWZFeTZBNGVVRDQxTmlGZ0RjCmVKZ3BocEVLTUl3M1VoWjRvTi96
|
endFNVprclpJMmh1eTA2ZmVJRTJlbjI3dEVNCjA4K2U5QWlOdkI0R3JwbVpNRWJG
|
||||||
SzNaWUIrUkxpVjZPVytJTmNEV2g5SkkKLS0tIDlyY1E4T1cxSXNuZDFtT3lhdFVl
|
T0VQWS9uS2UrRVk0YU9VcGhSUkJ6S2sKLS0tIGJZY1VSM1o3QUR5Mk9vNmhsRWxr
|
||||||
c2pDd2hCUE9RWHRCN1pXZ2prRk9iNFEKFWnDpPTFbi/l+aJnILF5NWwXLdpzzA7P
|
YURQR2kxdExKR00vYVJMVVQxekdVOE0KDkPOMeCo1MoM5R89t1rsMWR/bGIx592Z
|
||||||
RWoYja2qWNyIH8+6p+hazvezEVOpGECK5EVCH1dkLv52utuznmwsYg==
|
wvbVmE/El4Z0QzuvXl0XK3CFlKGuwgNw5TvtQ9QZP1aAL3yN0+T5oQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1cnnpnglkvgw5ffv8qpgwpqvj203lh4uwt698y9mxjwklxt8nysmsa8hepn
|
recipient: age17pn6suvz2f7zmrm9zxj5hr0putvcvdamqxqt7ewhncgg6ccgmp2qr00xm2
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtMkZ6dC84cHY5ZGtOd0cv
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQQTV1dkxMK3dxbGhiTGJG
|
||||||
RERqSXI3ejB2andMcldDVmp2SjNVc1hzZlIwCmVoWEFwMXdtVUU3dTVZZ05mRkhB
|
bkVQTUFOU1I4SXAyV21PdThSZFNOTTA0cmpFCkpXcmRXdlE0eVRYWWErQUxSWFN4
|
||||||
Z2ZCMnY3SUlkV0xRQUVlUDE3VE1aTzgKLS0tIHdiYXh1aE5nb3FSZTlpdVNZOUlF
|
bjI5bkU1NE84V1FTNVZiYUpLSnhSL2cKLS0tIFl6YmxmM1JLSlpxcDcxTnRnT1k3
|
||||||
ZEpsL25rcGFZaXBaTXFKbjd2UFpYRzQKNytlpy3cD1OC3FOSfSADjMMzD9qcsLrg
|
M25EQU5zckVMa1VSK29iYW5PbHRJcVEK6+gstHbcPBdeRNvZa21nZB5sT1SdHWHs
|
||||||
A4w6NqhU8E1DJBln/AiElZ58AhzAb5okPsKRGWMQSb73XN0pLLRwXw==
|
8St5tYl5I3CxNWFgFjOrHqteRKc+ZTcj3euAJ6Wathbw0YMiA3gz0Q==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1g68hxv73llkyc7etzh499ztcrt93pwawy0n8p93px4taqu58mehsp88vjq
|
recipient: age1cnnpnglkvgw5ffv8qpgwpqvj203lh4uwt698y9mxjwklxt8nysmsa8hepn
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4M1hKditZLytKeVErbit5
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYRGYyUGhlL2NJelZTQ1g0
|
||||||
UEwyQW13bG1jakphRVA1WEd0WUtFa0I1UUc0ClV6NlUwRkZpZlhmY2t4RVliVExK
|
UEhJMFlkVmdlU1E2cGE2UHF2dytVYmhQMlIwCmdrOEZjUUFrQjMzK2FxVjF0NGY1
|
||||||
a2k4RkFFampEUUFkQVhvSWJwd1JPVVEKLS0tIDVzdGV4NFFveStkVUROWE1mUHAz
|
UStNT3ZXbEJlUGxzSXlBTmYwUzRIalEKLS0tIHFuWWIrTGN6eUxyNEhybHIydzRp
|
||||||
Z3R3MTRIRVZPc0pNVVhHYWhaSXdtbW8KorG+7fRAt1RT1fUD8Z4b2CJaIwCb+1br
|
cUFid1RwRXA4cExWd3poK2hEaVd5Q00KjjiEiQw2OxcGv/qDudLmbM6aysYhLTxi
|
||||||
Wt1E8hWeYVoHGnZuuJgrorv/GnqpRDkMrXix/qqGKuBlAgTDab5eYg==
|
Qjmh133pyznFs+pLVLdYnId42zvojAeuJD9cJYxuwwgPA2ZlKdSVrg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1awytvphvty4f9wmdn86xnjg9kgetqjx8qlwj5d2882t4fyyzy58s3vg5k4
|
recipient: age1g68hxv73llkyc7etzh499ztcrt93pwawy0n8p93px4taqu58mehsp88vjq
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxTDRWRUJNelRPMitSTm1H
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRbUs1Qm1hUnJldDNZNUR0
|
||||||
U1FTY0xsTXZrWnF2VXdsQWNLcE5zeHJ6bGg4CkRZckY3Q0hBNTgxMUVDdUh3YWZS
|
N3d0YXp5NWtjV0xvc1ZrM3ArZllIbmJtRXpnCnp2TVRyQVFqNC9kWXpBa0NnbW9X
|
||||||
STgwOEZ5cGFkVHFEOWNnNjNONDZIZm8KLS0tIGg1TUZjbmQ5MFU2bG1sZFcycnRR
|
VVFONnNleG9wN2IwdkhSWjBObmVGd3cKLS0tIHVDVmVNazdLWUpOQVlTNFRwL1c5
|
||||||
cDVwRVIxeTVmcmJLekpXcG13cTZJVG8KwXR0NOiHcd0njWwRWzEyGf0vb1kXp766
|
bkdsaXNINEZpZjdMdHAwdElpWFQ0aW8K0guO/BF8hp1LDToVBFY5JKdz8WXOwK2P
|
||||||
FhBxX0RoUToq/UgTQGBWvEODrZTnNd/zXr1J8gA1TeacTEbkoWEkpA==
|
prGKdxPsTAfW8xTq97LHHRsLC7+4TVXnjF4LS4SM8EXIX9KCl5FIGA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age1erkn7dd022e90ktyj66aux9j9xvl0uzd6ru5cmrjsvcm5rtr5pfs7q6k9h
|
recipient: age1awytvphvty4f9wmdn86xnjg9kgetqjx8qlwj5d2882t4fyyzy58s3vg5k4
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZQUwxenU2aFN5My9wcHpu
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4ZEVtVzM0dFhJYWd5UXZO
|
||||||
c2prSCtvbW4xanlxZGhDT1dpT0V2ZUtmcGlvCkNrRkJ2OXVOSFhFcGxSYUdJMHBn
|
ajIzSFp1VENuSjlaYSs4ZUdBSS90aEoyM25JCnhrd0lyUVN0dEV5a2tQUjZwSlFx
|
||||||
M2VydHhVSW5MWTdvTW8vSWlXT3ZnV1UKLS0tIGpydEc5TXNpdXc4czVvNk54K0JO
|
eVlLT1kyejhuZDdGeHpDQnRMTllCSHMKLS0tIHZVS1JDVzBaaG1Oend1eDFiT1F4
|
||||||
RTlDblJHcUczdmtOdGc4VjUrYk1PTWMKVM07fdDfLWf4T3ELq8G4jsPhR4ZukOjP
|
NU1vREt6SXBWYU1xdW1JSm1uUGZQRVEKtaDeDNo817rXXoMkBHo0MZWtm4LayqwC
|
||||||
SATCHMTn3wG4qeGTI4R+4m4iqa3k7CFJUJapmBNHqXWOZeO5w9IonA==
|
NN8vbhGcgT+M+ehnmZ1HdPk8VWRvlQ+SMpG+a6DjK8BjYtAWcO16RQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
- recipient: age16crkeglm3j3f6rveylytuerptjf9mwtv3hl89ywkmnnvdkntfchsuvrsk5
|
recipient: age1erkn7dd022e90ktyj66aux9j9xvl0uzd6ru5cmrjsvcm5rtr5pfs7q6k9h
|
||||||
enc: |
|
- enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1SUtkZysyMU05Q0tlSHZh
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6eUFYSC82YVM1WVEwc2Fz
|
||||||
V21acktNUTA1SjBMNFJtcE9XVHVFWWFvcEhNCm9hRFY3QjZkTk05UTJXZkpyTytE
|
aEl3TG5oOFU5MUFhQ0JhbC9yRVYxOFo0bUVJCnpwQzMyZmN4ZTlNVW5pZTY5bkdY
|
||||||
N01WS3E1TERmcVlCTEluT2RoODR0RFUKLS0tIHpoNmkxNlc0YmcvTHBZNUZPRks0
|
bjhaSnFxS0Vrb3pHTlJkWjVvczBSOG8KLS0tIHlsbjhxODdvcnd4c21aWUNpK01M
|
||||||
VkdKMUVOemNhUnpYSFFocnZRQmxPaUEKgCne7JJRIuvFtDMtaqO21IKjRoDW8D+3
|
ZW1hTUFtVE15QzVIVU93ZExlUWZjYzAKUZj+/NtMHCPjFFqbJ/8b2ASljV6GEk6p
|
||||||
V5tGfZOQADuef3n8ZG1j5t1OtNNBu4PjpxZynGx3/nR7+FThsK4vMg==
|
FbqV9LezRZrfl9GXBVUpB4Oeb9v2yp151aSda07/AG5YO0/jRAV/Bg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2026-01-25T02:54:23Z"
|
recipient: age16crkeglm3j3f6rveylytuerptjf9mwtv3hl89ywkmnnvdkntfchsuvrsk5
|
||||||
mac: ENC[AES256_GCM,data:nIOwiSAT3YCRabbPwfO2XBFhb/qH5cFLsMUQUCUa7trBnLeerzWLpngB96T0ZkDmsVsdJLhfv5ZWWZlgIg+K9uIww+DzvK48B3+EyVpNCJ4cDfgz3gZXlnp41Eu8LSklQ+sk9lVFEbHNPPhbTliXma9Kr1ldkdP035lQmYXUz6Y=,iv:sp7oiTUvO/FchubMlCuaaWDpNO9+aLIyehjS9+8pEPw=,tag:/PvIJTM17nFi5YIq0b1LyQ==,type:str]
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxdjFYN01HcXZMNVBJckVm
|
||||||
|
eklKZHAxeWgvVlcwWk9yWUJpcFFBUnpUV0FZCi85dGE2L3d3OS9CdW5sL0pZTTM2
|
||||||
|
SFJkcUN0emh6S3hMenhCcXBhNWF6eVUKLS0tIExwNEVyRmpGRXRLMjgxY1dqbkxQ
|
||||||
|
bk04K1luNnJVTjZQY25KRXNSVG0venMK7uM4tqqmq/o4QgMlE/x/FXkQsPRkofNO
|
||||||
|
I6C93RYgp1OcGPH14Kmp5lXtK4/pdToaRnVXPGenDQJsFhwWCEI+Fg==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1tkywsvddjj6r6ukuqgz9aql92jfx85rz57dhmkkndysh6yx6p5rs0zj0qr
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsOTFXaHE0SDRCTnE4di9N
|
||||||
|
S2JIbHF2a1pzNzU4UFIvQmpZMVpOUjJqd0RJClVxcTd3d05aRDN1RGVmWVpQS2lI
|
||||||
|
L1RVU3FUM3d4SU9pYXlwSko2RW5uWjgKLS0tIEplR1l1bGlad3p1ZkNBbFY3YmlM
|
||||||
|
dUpXZis2N2VyN0ZFbjlPRXdwRFQ1aHMKm1Mk6MPKxFmwdATCYUANRSY5rHKgmQer
|
||||||
|
LBlqqWKt1JiIUAYtazQeQ6KYxmjVlQPY7AZw2t+EhBEPrqbTL3vOiw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age17p69ktg7yfzgdsk00f32mupe4n4fevdpw2wsv7ft30yvpeseau6s7t0zdg
|
||||||
|
lastmodified: "2026-06-07T11:56:26Z"
|
||||||
|
mac: ENC[AES256_GCM,data:kQv2go+ITBpkicwlcy5OIFdU7DrSZCqGFKqmdHJN0hGYzGrabgiomBI7r2bqQPrzlvXNL/GSp9yv2cBO3nlgLdRakXB2ubZ+xGDkarErxuT4B1wG3ps8DaZzdG+Ed9aiHhhM3Fo5tzjF8CAFUAbIy+K45691lP/aXns2slQWVg8=,iv:PZBL1RQ4243vwlbrhRtAG7wt5i1TomQZ4mFy7bjjKRU=,tag:62St2XZxDh0kGd2OupnFPA==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.11.0
|
version: 3.13.0
|
||||||
|
|||||||
+15
-19
@@ -8,13 +8,6 @@ with lib; let
|
|||||||
cfg = config.mySystem.boot;
|
cfg = config.mySystem.boot;
|
||||||
in {
|
in {
|
||||||
options.mySystem.boot = {
|
options.mySystem.boot = {
|
||||||
extraModprobeConfig = mkOption {
|
|
||||||
type = types.lines;
|
|
||||||
default = "";
|
|
||||||
example = ''
|
|
||||||
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
kernel = {
|
kernel = {
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.raw;
|
type = types.raw;
|
||||||
@@ -29,12 +22,15 @@ in {
|
|||||||
type = types.enum ["intel" "amd"];
|
type = types.enum ["intel" "amd"];
|
||||||
default = "amd";
|
default = "amd";
|
||||||
};
|
};
|
||||||
v4l2loopback = mkOption {
|
v4l2loopback.enable = mkEnableOption "Enables v4l2loopback kernel module";
|
||||||
description = "Enables v4l2loopback";
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
|
||||||
};
|
|
||||||
hardened = mkEnableOption "Enables hardened Linux kernel";
|
hardened = mkEnableOption "Enables hardened Linux kernel";
|
||||||
|
extraModprobeConfig = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
example = ''
|
||||||
|
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
systemd-boot = mkOption {
|
systemd-boot = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
@@ -44,7 +40,7 @@ in {
|
|||||||
grub = {
|
grub = {
|
||||||
enable = mkEnableOption "Does the system use GRUB? (Disables systemd-boot)";
|
enable = mkEnableOption "Does the system use GRUB? (Disables systemd-boot)";
|
||||||
device = mkOption {
|
device = mkOption {
|
||||||
type = types.str;
|
type = types.path;
|
||||||
description = "The GRUB device";
|
description = "The GRUB device";
|
||||||
default = "";
|
default = "";
|
||||||
};
|
};
|
||||||
@@ -58,12 +54,16 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config.boot = {
|
config.boot = mkIf (! config.mySystem.misc.mobile) {
|
||||||
initrd.kernelModules = lib.lists.singleton (
|
initrd.kernelModules = lib.lists.singleton (
|
||||||
if config.mySystem.hardware.amdgpu.enable
|
if config.mySystem.hardware.amdgpu.enable
|
||||||
then "amdgpu"
|
then "amdgpu"
|
||||||
else "i915"
|
else "i915"
|
||||||
);
|
);
|
||||||
|
extraModprobeConfig =
|
||||||
|
strings.concatLines
|
||||||
|
([cfg.kernel.extraModprobeConfig]
|
||||||
|
++ lists.optional cfg.kernel.v4l2loopback.enable ''options v4l2loopback exclusive_caps=1 devices=1 video_nr=0 card_label="OBS Studio"'');
|
||||||
loader = {
|
loader = {
|
||||||
systemd-boot.enable = cfg.systemd-boot;
|
systemd-boot.enable = cfg.systemd-boot;
|
||||||
efi.canTouchEfiVariables = cfg.systemd-boot;
|
efi.canTouchEfiVariables = cfg.systemd-boot;
|
||||||
@@ -73,14 +73,10 @@ in {
|
|||||||
};
|
};
|
||||||
supportedFilesystems = mkIf cfg.zfs.enable ["zfs"];
|
supportedFilesystems = mkIf cfg.zfs.enable ["zfs"];
|
||||||
zfs.extraPools = mkIf cfg.zfs.enable cfg.zfs.pools;
|
zfs.extraPools = mkIf cfg.zfs.enable cfg.zfs.pools;
|
||||||
kernelPackages =
|
kernelPackages = cfg.kernel.package;
|
||||||
if cfg.kernel.hardened
|
|
||||||
then pkgs.linuxPackages_hardened
|
|
||||||
else cfg.kernel.package;
|
|
||||||
kernelModules =
|
kernelModules =
|
||||||
cfg.kernel.modules
|
cfg.kernel.modules
|
||||||
++ ["kvm-${cfg.kernel.cpuVendor}"]
|
++ ["kvm-${cfg.kernel.cpuVendor}"]
|
||||||
++ lists.optional cfg.kernel.v4l2loopback "v4l2loopback"
|
|
||||||
++ lists.optional cfg.kernel.hardened "tcp_bbr";
|
++ lists.optional cfg.kernel.hardened "tcp_bbr";
|
||||||
kernel.sysctl = mkIf cfg.kernel.hardened {
|
kernel.sysctl = mkIf cfg.kernel.hardened {
|
||||||
"kernel.sysrq" = 0; # Disable magic SysRq key
|
"kernel.sysrq" = 0; # Disable magic SysRq key
|
||||||
|
|||||||
+1
-30
@@ -1,44 +1,15 @@
|
|||||||
{
|
{
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.mySystem.misc;
|
|
||||||
in {
|
|
||||||
imports = [
|
imports = [
|
||||||
./boot
|
./boot
|
||||||
./desktop
|
./desktop
|
||||||
./dev
|
./dev
|
||||||
./hardware
|
./hardware
|
||||||
./i18n
|
./i18n
|
||||||
|
./misc.nix
|
||||||
./network
|
./network
|
||||||
./packages
|
./packages
|
||||||
./security
|
./security
|
||||||
./services
|
./services
|
||||||
./users
|
./users
|
||||||
];
|
];
|
||||||
|
|
||||||
options.mySystem.misc = {
|
|
||||||
timezone = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "Europe/Paris";
|
|
||||||
};
|
|
||||||
keymap = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "fr";
|
|
||||||
example = "fr-bepo";
|
|
||||||
description = "Keymap to use in the TTY console";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
boot.tmp.cleanOnBoot = true;
|
|
||||||
time.timeZone = cfg.timezone;
|
|
||||||
console.keyMap = cfg.keymap;
|
|
||||||
services = {
|
|
||||||
orca.enable = false;
|
|
||||||
envfs.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ with lib; let
|
|||||||
in {
|
in {
|
||||||
options.mySystem.desktop.waydroid.enable = mkEnableOption "Enables Waydroid";
|
options.mySystem.desktop.waydroid.enable = mkEnableOption "Enables Waydroid";
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
virtualisation.waydroid.enable = cfg.enable;
|
virtualisation.waydroid = {
|
||||||
|
enable = cfg.enable;
|
||||||
|
package = pkgs.waydroid-nftables;
|
||||||
|
};
|
||||||
environment.systemPackages = [pkgs.waydroid-helper];
|
environment.systemPackages = [pkgs.waydroid-helper];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ in {
|
|||||||
games.enable = false;
|
games.enable = false;
|
||||||
gnome-remote-desktop.enable = true;
|
gnome-remote-desktop.enable = true;
|
||||||
gnome-online-accounts.enable = true;
|
gnome-online-accounts.enable = true;
|
||||||
|
gnome-keyring.enable = true;
|
||||||
sushi.enable = true;
|
sushi.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+12
-1
@@ -12,9 +12,17 @@ in {
|
|||||||
podman.enable = mkEnableOption "Enable Podman rather than Docker";
|
podman.enable = mkEnableOption "Enable Podman rather than Docker";
|
||||||
nvidia.enable = mkEnableOption "Activate Nvidia support";
|
nvidia.enable = mkEnableOption "Activate Nvidia support";
|
||||||
autoprune.enable = mkEnableOption "Enable autoprune";
|
autoprune.enable = mkEnableOption "Enable autoprune";
|
||||||
|
storage = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
example = "/path/to/docker/storage";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
mySystem.users.phundrak = mkIf config.mySystem.users.phundrak.enable {
|
||||||
|
extraGroups = ["docker"] ++ lists.optional cfg.podman.enable "podman";
|
||||||
|
};
|
||||||
environment.systemPackages = with pkgs;
|
environment.systemPackages = with pkgs;
|
||||||
[
|
[
|
||||||
dive # A tool for exploring each layer in a docker image
|
dive # A tool for exploring each layer in a docker image
|
||||||
@@ -24,11 +32,14 @@ in {
|
|||||||
podman-compose
|
podman-compose
|
||||||
podman-desktop
|
podman-desktop
|
||||||
];
|
];
|
||||||
virtualisation = mkIf cfg.enable {
|
virtualisation = {
|
||||||
docker = mkIf (!cfg.podman.enable) {
|
docker = mkIf (!cfg.podman.enable) {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableNvidia = cfg.nvidia.enable;
|
enableNvidia = cfg.nvidia.enable;
|
||||||
autoPrune.enable = cfg.autoprune.enable;
|
autoPrune.enable = cfg.autoprune.enable;
|
||||||
|
daemon.settings = mkIf (cfg.storage != null) {
|
||||||
|
"data-root" = cfg.storage;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
podman = mkIf cfg.podman.enable {
|
podman = mkIf cfg.podman.enable {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
{
|
{lib, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
./amdgpu.nix
|
./amdgpu.nix
|
||||||
./bluetooth.nix
|
./bluetooth.nix
|
||||||
./sound.nix
|
./fingerprint.nix
|
||||||
./input
|
./input
|
||||||
|
./pinetab2.nix
|
||||||
|
./sound.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
hardware.enableAllFirmware = lib.mkDefault true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.hardware.fingerprint;
|
||||||
|
in {
|
||||||
|
options.mySystem.hardware.fingerprint.enable = mkEnableOption "Enable fingerprint reader";
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
hardware.facter.detected.fingerprint.enable = cfg.enable;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -7,8 +7,11 @@ with lib; let
|
|||||||
cfg = config.mySystem.hardware.input.opentablet;
|
cfg = config.mySystem.hardware.input.opentablet;
|
||||||
in {
|
in {
|
||||||
options.mySystem.hardware.input.opentablet.enable = mkEnableOption "Enables OpenTablet drivers";
|
options.mySystem.hardware.input.opentablet.enable = mkEnableOption "Enables OpenTablet drivers";
|
||||||
config.hardware.opentabletdriver = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
inherit (cfg) enable;
|
hardware.opentabletdriver = {
|
||||||
daemon.enable = true;
|
inherit (cfg) enable;
|
||||||
|
daemon.enable = true;
|
||||||
|
};
|
||||||
|
boot.kernelModules = ["wacom"];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.hardware.pinetab2;
|
||||||
|
in {
|
||||||
|
options.mySystem.hardware.pinetab2.enable = mkEnableOption "Activate support for the PineTab2";
|
||||||
|
config = {
|
||||||
|
boot.kernelParams = ["console=tty0" "console=ttyS2,1500000n8" "rootwait" "root=LABEL=NIXOS_SD" "rw"];
|
||||||
|
hardware.sensor.iio.enable = true;
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -8,7 +8,9 @@ with lib; let
|
|||||||
cfg = config.mySystem.hardware.sound;
|
cfg = config.mySystem.hardware.sound;
|
||||||
in {
|
in {
|
||||||
options.mySystem.hardware.sound = {
|
options.mySystem.hardware.sound = {
|
||||||
enable = mkEnableOption "Whether to enable sounds with Pipewire";
|
enable = mkEnableOption "Whether to enable sounds";
|
||||||
|
noisetorch = mkEnableOption "Whether to activate noisetorch support";
|
||||||
|
usePulseaudio = mkEnableOption "Activate sound support with Pulseaudio";
|
||||||
scarlett.enable = mkEnableOption "Activate support for Scarlett sound card";
|
scarlett.enable = mkEnableOption "Activate support for Scarlett sound card";
|
||||||
alsa = mkOption {
|
alsa = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
@@ -32,16 +34,19 @@ in {
|
|||||||
|
|
||||||
config = {
|
config = {
|
||||||
environment.systemPackages = mkIf cfg.scarlett.enable [pkgs.alsa-scarlett-gui];
|
environment.systemPackages = mkIf cfg.scarlett.enable [pkgs.alsa-scarlett-gui];
|
||||||
services.pipewire = mkIf cfg.enable {
|
services = {
|
||||||
enable = true;
|
pipewire = mkIf (cfg.enable && ! cfg.usePulseaudio) {
|
||||||
alsa = mkIf cfg.alsa {
|
enable = true;
|
||||||
enable = mkDefault true;
|
alsa = mkIf cfg.alsa {
|
||||||
support32Bit = mkDefault true;
|
enable = mkDefault true;
|
||||||
|
support32Bit = mkDefault true;
|
||||||
|
};
|
||||||
|
jack.enable = mkDefault cfg.jack;
|
||||||
};
|
};
|
||||||
jack.enable = mkDefault cfg.jack;
|
pulseaudio.enable = cfg.usePulseaudio;
|
||||||
};
|
};
|
||||||
programs.noisetorch = mkIf cfg.enable {
|
programs.noisetorch = mkIf cfg.enable {
|
||||||
inherit (cfg) enable;
|
enable = cfg.noisetorch;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./input.nix
|
||||||
./locale.nix
|
./locale.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.i18n.input;
|
||||||
|
in {
|
||||||
|
options.mySystem.i18n.input.enable = mkEnableOption "Enable i18n input with fcitx5";
|
||||||
|
|
||||||
|
config.i18n.inputMethod = mkIf cfg.enable {
|
||||||
|
enable = true;
|
||||||
|
type = "fcitx5";
|
||||||
|
fcitx5.addons = with pkgs; [
|
||||||
|
fcitx5-gtk
|
||||||
|
fcitx5-mozc-ut # Japanese input support
|
||||||
|
fcitx5-nord
|
||||||
|
fcitx5-table-other # X-SAMPA to IPA support
|
||||||
|
qt6Packages.fcitx5-chinese-addons # allow to load table addons
|
||||||
|
qt6Packages.fcitx5-configtool
|
||||||
|
qt6Packages.fcitx5-with-addons
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.misc;
|
||||||
|
in {
|
||||||
|
options.mySystem.misc = {
|
||||||
|
timezone = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "Europe/Paris";
|
||||||
|
};
|
||||||
|
keymap = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "fr";
|
||||||
|
example = "fr-bepo";
|
||||||
|
description = "Keymap to use in the TTY console";
|
||||||
|
};
|
||||||
|
mobile = mkEnableOption "Enable if using Mobile NixOS";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
boot.tmp.cleanOnBoot = true;
|
||||||
|
console.keyMap = cfg.keymap;
|
||||||
|
time.timeZone = cfg.timezone;
|
||||||
|
environment.pathsToLink = [
|
||||||
|
"/share/bash-completion"
|
||||||
|
"/share/zsh"
|
||||||
|
];
|
||||||
|
services = {
|
||||||
|
orca.enable = false;
|
||||||
|
envfs.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nix.settings = {
|
||||||
|
substituters = [
|
||||||
|
"http://marpa:5000?priority=5"
|
||||||
|
"https://phundrak.cachix.org?priority=10"
|
||||||
|
"https://nix-community.cachix.org?priority=20"
|
||||||
|
"https://cache.nixos.org?priority=40"
|
||||||
|
];
|
||||||
|
trusted-public-keys = [
|
||||||
|
"marpa-local:XoO+dFN4PeauF52pYuy3Vh4Sdtl2qIdxu5aUasWKv6Q="
|
||||||
|
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
|
||||||
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
|
];
|
||||||
|
http-connections = 128;
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -51,12 +51,20 @@ in {
|
|||||||
default = null;
|
default = null;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
wifi.disablePowersave = mkEnableOption ''
|
||||||
|
Disables powersave for Wifi.
|
||||||
|
|
||||||
|
Used mainly for the PineTab2, as leaving WiFi powersave with the bes2600 can cause stability issues.
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
config.networking = {
|
config.networking = {
|
||||||
hostName = cfg.hostname; # Define your hostname.
|
hostName = cfg.hostname; # Define your hostname.
|
||||||
hostId = cfg.id;
|
hostId = cfg.id;
|
||||||
networkmanager.enable = true;
|
networkmanager = {
|
||||||
|
enable = true;
|
||||||
|
wifi.powersave = ! cfg.wifi.disablePowersave;
|
||||||
|
};
|
||||||
inherit (cfg) hostFiles domain;
|
inherit (cfg) hostFiles domain;
|
||||||
firewall = {
|
firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
config.services.tailscale = {
|
config.services.tailscale = {
|
||||||
enable = cfg.enable;
|
inherit (cfg) enable;
|
||||||
extraSetFlags = [
|
extraSetFlags = [
|
||||||
"--accept-dns"
|
"--accept-dns"
|
||||||
"--accept-routes"
|
"--accept-routes"
|
||||||
|
|||||||
@@ -11,12 +11,8 @@ in {
|
|||||||
enable = mkEnableOption "Enable Flatpak support";
|
enable = mkEnableOption "Enable Flatpak support";
|
||||||
builder.enable = mkEnableOption "Enable Flatpak builder";
|
builder.enable = mkEnableOption "Enable Flatpak builder";
|
||||||
};
|
};
|
||||||
config = {
|
config = mkIf cfg.enable {
|
||||||
services.flatpak = mkIf cfg.enable {
|
environment.systemPackages = lists.optional cfg.builder.enable pkgs.flatpak-builder;
|
||||||
inherit (cfg) enable;
|
services.flatpak.enable = true;
|
||||||
};
|
|
||||||
environment.systemPackages = mkIf cfg.builder.enable [
|
|
||||||
pkgs.flatpak-buildR
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ in {
|
|||||||
trusted-users = mkOption {
|
trusted-users = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
example = ["alice" "bob"];
|
example = ["alice" "bob"];
|
||||||
default = [];
|
default = ["@wheel" "root"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,4 +2,5 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./sops.nix
|
./sops.nix
|
||||||
];
|
];
|
||||||
|
security.rtkit.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
./calibre.nix
|
./calibre.nix
|
||||||
./endlessh.nix
|
./endlessh.nix
|
||||||
./fwupd.nix
|
./fwupd.nix
|
||||||
|
./harmonia.nix
|
||||||
./jellyfin.nix
|
./jellyfin.nix
|
||||||
./languagetool.nix
|
./languagetool.nix
|
||||||
./plex.nix
|
./plex.nix
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.services.harmonia;
|
||||||
|
in {
|
||||||
|
options.mySystem.services.harmonia = {
|
||||||
|
enable = mkEnableOption "Harmonia Nix binary cache server";
|
||||||
|
port = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
default = 5000;
|
||||||
|
description = "Port to listen on";
|
||||||
|
};
|
||||||
|
priority = mkOption {
|
||||||
|
type = types.ints.between 0 100;
|
||||||
|
default = 50;
|
||||||
|
description = "Cache priority (lower = higher priority, 0-100)";
|
||||||
|
};
|
||||||
|
signKeyPaths = mkOption {
|
||||||
|
type = types.listOf types.path;
|
||||||
|
description = "Paths to the signing keys to use for signing the cache.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.harmonia.cache = {
|
||||||
|
enable = true;
|
||||||
|
inherit (cfg) signKeyPaths;
|
||||||
|
settings = {
|
||||||
|
inherit (cfg) priority;
|
||||||
|
bind = "[::]:${toString cfg.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -15,33 +15,53 @@ in {
|
|||||||
autoStart = cfg.autostart;
|
autoStart = cfg.autostart;
|
||||||
capSysAdmin = true;
|
capSysAdmin = true;
|
||||||
openFirewall = true;
|
openFirewall = true;
|
||||||
settings.sunshine_name = config.mySystem.networking.hostname;
|
settings = {
|
||||||
applications.apps = [
|
sunshine_name = config.mySystem.networking.hostname;
|
||||||
|
locale = "en_GB";
|
||||||
|
system_tray = "enabled";
|
||||||
|
output_name = 1;
|
||||||
|
};
|
||||||
|
applications.apps = let
|
||||||
|
defaultPrep = [
|
||||||
|
{
|
||||||
|
do = "sh -c \"hyprctl -i 0 keyword monitor \\\"DP-2,\${SUNSHINE_CLIENT_WIDTH}x\${SUNSHINE_CLIENT_HEIGHT}@\${SUNSHINE_CLIENT_FPS},0x0,1\\\"\"";
|
||||||
|
undo = "sh -c \"hyprctl -i 0 keyword monitor 'DP-2,2560x1080@60,0x0,1,transform,1'\"";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
in [
|
||||||
{
|
{
|
||||||
name = "Desktop";
|
name = "Desktop";
|
||||||
image-path = "desktop.png";
|
image-path = "desktop.png";
|
||||||
|
prep-cmd = defaultPrep;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "Low Res Desktop";
|
name = "Low Res Desktop";
|
||||||
image-path = "desktop.png";
|
image-path = "desktop.png";
|
||||||
|
prep-cmd = defaultPrep;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "Steam Big Picture";
|
name = "Steam Big Picture";
|
||||||
detached = ["setsid steam steam://open/bigpicture"];
|
detached = ["setsid steam steam://open/bigpicture"];
|
||||||
prep-cmd = {
|
prep-cmd = defaultPrep;
|
||||||
do = "";
|
|
||||||
undo = "setsid steam steam://close/bigpicture";
|
|
||||||
};
|
|
||||||
image-path = "steam.png";
|
image-path = "steam.png";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "OpenTTD";
|
name = "OpenTTD";
|
||||||
cmd = "openttd";
|
cmd = "openttd";
|
||||||
image-path = "/home/phundrak/.config/sunshine/covers/igdb_18074.png";
|
image-path = "/home/phundrak/.config/sunshine/covers/igdb_18074.png";
|
||||||
|
prep-cmd = defaultPrep;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "OpenMW";
|
name = "OpenMW";
|
||||||
cmd = "openmw";
|
cmd = "openmw";
|
||||||
|
image-path = "/home/phundrak/.config/sunshine/covers/igdb_24775.png";
|
||||||
|
prep-cmd = defaultPrep;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Vintage Story";
|
||||||
|
cmd = "flatpak run at.vintagestory.VintageStory";
|
||||||
|
image-path = "/home/phundrak/.config/sunshine/covers/igdb_69547.png";
|
||||||
|
prep-cmd = defaultPrep;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
+21
-10
@@ -8,18 +8,28 @@ with lib; let
|
|||||||
in {
|
in {
|
||||||
options.mySystem.services.traefik = {
|
options.mySystem.services.traefik = {
|
||||||
enable = mkEnableOption "Enable Traefik";
|
enable = mkEnableOption "Enable Traefik";
|
||||||
dataDir = mkOption {
|
|
||||||
type = types.path;
|
|
||||||
default = "/tank/traefik";
|
|
||||||
};
|
|
||||||
email = mkOption {
|
email = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
};
|
};
|
||||||
|
dataDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/tank/traefik";
|
||||||
|
example = "/path/to/traefik/data";
|
||||||
|
};
|
||||||
|
environmentFiles = mkOption {
|
||||||
|
type = types.listOf types.path;
|
||||||
|
example = ["/var/traefik/traefik.env"];
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
dynamicConfigFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "${cfg.dataDir}/traefik.yaml";
|
||||||
|
example = "/var/traefik/dynamic.yaml";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
config.services.traefik = {
|
config.services.traefik = {
|
||||||
inherit (cfg) enable;
|
inherit (cfg) enable dynamicConfigFile environmentFiles;
|
||||||
dynamicConfigFile = "${cfg.dataDir}/dynamic_config.toml";
|
|
||||||
staticConfigOptions = {
|
staticConfigOptions = {
|
||||||
api.dashboard = true;
|
api.dashboard = true;
|
||||||
log = {
|
log = {
|
||||||
@@ -29,18 +39,18 @@ in {
|
|||||||
};
|
};
|
||||||
accessLog.filePath = "${cfg.dataDir}/access.log";
|
accessLog.filePath = "${cfg.dataDir}/access.log";
|
||||||
entryPoints = {
|
entryPoints = {
|
||||||
http = {
|
web = {
|
||||||
address = ":80";
|
address = ":80";
|
||||||
asDefault = true;
|
asDefault = true;
|
||||||
http.redirections.entrypoint = {
|
http.redirections.entrypoint = {
|
||||||
to = "https";
|
to = "websecure";
|
||||||
scheme = "https";
|
scheme = "https";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
https = {
|
websecure = {
|
||||||
address = ":443";
|
address = ":443";
|
||||||
asDefault = true;
|
asDefault = true;
|
||||||
httpChallenge.entryPoint = "https";
|
httpChallenge.entryPoint = "websecure";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
providers.docker = {
|
providers.docker = {
|
||||||
@@ -53,6 +63,7 @@ in {
|
|||||||
dnsChallenge = {
|
dnsChallenge = {
|
||||||
provider = "cloudflare";
|
provider = "cloudflare";
|
||||||
resolvers = ["1.1.1.1:53" "1.0.0.1:53"];
|
resolvers = ["1.1.1.1:53" "1.0.0.1:53"];
|
||||||
|
propagation.delayBeforeChecks = 60;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.users.creug;
|
||||||
|
in {
|
||||||
|
options.mySystem.users.creug = {
|
||||||
|
enable = mkEnableOption "Enables user creug";
|
||||||
|
sudo = mkEnableOption "Make the user a superuser";
|
||||||
|
trusted = mkOption {
|
||||||
|
description = "Mark the user as trusted by Nix";
|
||||||
|
default = cfg.sudo;
|
||||||
|
example = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
users.users.creug = mkIf cfg.enable {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Greg";
|
||||||
|
extraGroups =
|
||||||
|
["networkmanager" "dialout" "games" "audio" "input"]
|
||||||
|
++ lists.optional config.mySystem.dev.docker.enable "docker"
|
||||||
|
++ lists.optional config.mySystem.dev.docker.podman.enable "podman"
|
||||||
|
++ lists.optional cfg.sudo "wheel";
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
openssh.authorizedKeys.keyFiles = lib.filesystem.listFilesRecursive ../../users/creug/keys;
|
||||||
|
};
|
||||||
|
nix.settings = mkIf cfg.trusted {
|
||||||
|
trusted-users = ["creug"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./creug.nix
|
||||||
./phundrak.nix
|
./phundrak.nix
|
||||||
|
./root.nix
|
||||||
];
|
];
|
||||||
|
programs.zsh.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-17
@@ -5,27 +5,30 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.mySystem.users;
|
cfg = config.mySystem.users.phundrak;
|
||||||
in {
|
in {
|
||||||
options.mySystem.users = {
|
options.mySystem.users.phundrak = {
|
||||||
root.disablePassword = mkEnableOption "Disables root password";
|
enable = mkEnableOption "Enables user phundrak";
|
||||||
phundrak.enable = mkEnableOption "Enables users phundrak";
|
trusted = mkEnableOption "Mark the user as trusted by Nix";
|
||||||
|
extraGroups = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
example = ["feedbackd"];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
users.users = {
|
users.users.phundrak = mkIf cfg.enable {
|
||||||
root = {
|
isNormalUser = true;
|
||||||
hashedPassword = mkIf cfg.root.disablePassword "*";
|
description = "Lucien Cartier-Tilet";
|
||||||
shell = pkgs.zsh;
|
extraGroups =
|
||||||
};
|
["networkmanager" "wheel" "dialout" "plugdev" "games" "audio" "input"]
|
||||||
phundrak = mkIf cfg.phundrak.enable {
|
++ cfg.extraGroups;
|
||||||
isNormalUser = true;
|
shell = pkgs.zsh;
|
||||||
description = "Lucien Cartier-Tilet";
|
openssh.authorizedKeys.keyFiles = lib.filesystem.listFilesRecursive ../../users/phundrak/keys;
|
||||||
extraGroups = ["networkmanager" "wheel" "docker" "dialout" "podman" "plugdev" "games" "audio" "input"];
|
};
|
||||||
shell = pkgs.zsh;
|
nix.settings = mkIf cfg.trusted {
|
||||||
openssh.authorizedKeys.keyFiles = lib.filesystem.listFilesRecursive ../../keys;
|
trusted-users = ["phundrak"];
|
||||||
};
|
|
||||||
};
|
};
|
||||||
programs.zsh.enable = true;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.mySystem.users.root;
|
||||||
|
in {
|
||||||
|
options.mySystem.users.root.disablePassword = mkEnableOption "Disables root password";
|
||||||
|
config = {
|
||||||
|
users.users.root = {
|
||||||
|
hashedPassword = mkIf cfg.disablePassword "*";
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.home.creug;
|
||||||
|
in {
|
||||||
|
imports = [../modules];
|
||||||
|
options.home.creug = {
|
||||||
|
sshKey = {
|
||||||
|
content = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
example = "ssh-ed25519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
file = mkOption {
|
||||||
|
type = with types; nullOr path;
|
||||||
|
default = "/home/creug/.ssh/id_ed25519.pub";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
home = {
|
||||||
|
username = "creug";
|
||||||
|
homeDirectory = "/home/creug";
|
||||||
|
packages = [pkgs.tree pkgs.ncdu];
|
||||||
|
preferXdgDirectories = true;
|
||||||
|
|
||||||
|
creug.sshKey.file = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
|
||||||
|
|
||||||
|
dev.vcs = {
|
||||||
|
name = "Creug";
|
||||||
|
email = "gregory.foulachon@gmail.com";
|
||||||
|
editor = "${pkgs.nano}/bin/nano";
|
||||||
|
jj = {
|
||||||
|
enable = true;
|
||||||
|
cz = {
|
||||||
|
enable = true;
|
||||||
|
alias = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
git.enable = true;
|
||||||
|
publicKey = cfg.sshKey;
|
||||||
|
};
|
||||||
|
|
||||||
|
security.ssh.enable = true;
|
||||||
|
|
||||||
|
shell = {
|
||||||
|
bash.enable = true;
|
||||||
|
zsh.enable = true;
|
||||||
|
starship.enable = true;
|
||||||
|
tmux.enable = false;
|
||||||
|
zoxide.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
stateVersion = "24.11"; # Do not modify!
|
||||||
|
};
|
||||||
|
|
||||||
|
manual.manpages.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
imports = [../home.nix];
|
||||||
|
home = {
|
||||||
|
cli.nh.flake = "/home/creug/.dotfiles";
|
||||||
|
dev.editors.emacs.enable = false;
|
||||||
|
creug.sshKey.content = builtins.readFile ../keys/id_elcafe.pub;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdd4cNNhONjhuH4jWZ8Z8K1gbBmeDNqRybKRHMQEvZj gregoryfoulachon@googlemail.com
|
||||||
@@ -1,10 +1,20 @@
|
|||||||
{pkgs, ...}: {
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (config.home) gpuType;
|
||||||
|
in {
|
||||||
programs.btop = {
|
programs.btop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.btop.override {
|
package =
|
||||||
rocmSupport = true;
|
if gpuType != null
|
||||||
cudaSupport = true;
|
then
|
||||||
};
|
pkgs.btop.override {
|
||||||
|
rocmSupport = gpuType == "amd";
|
||||||
|
cudaSupport = gpuType == "nvidia";
|
||||||
|
}
|
||||||
|
else pkgs.btop;
|
||||||
settings = {
|
settings = {
|
||||||
color_theme = "${pkgs.btop}/share/btop/themes/nord.theme";
|
color_theme = "${pkgs.btop}/share/btop/themes/nord.theme";
|
||||||
cpu_bottom = false;
|
cpu_bottom = false;
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
pkgs.writeShellScriptBin "app-launcher" ''
|
||||||
|
LOG_FILE="$HOME/.local/share/app-launcher.log"
|
||||||
|
|
||||||
|
logger() {
|
||||||
|
local level="$1"
|
||||||
|
local message="$2"
|
||||||
|
local timestamp
|
||||||
|
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
|
||||||
|
printf "[%s] [%-7s] %s\n" "$timestamp" "''${level^^}" "$message" >> "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
CAELESTIA_ACTIVE=$(systemctl --user is-active caelestia.service)
|
||||||
|
logger debug "Caelestia activity: $CAELESTIA_ACTIVE"
|
||||||
|
|
||||||
|
if systemctl --user is-active caelestia.service | grep 'active' &> /dev/null ; then
|
||||||
|
logger info "Using Caelestia app launcher"
|
||||||
|
caelestia shell drawers toggle launcher || \
|
||||||
|
logger error "failed to launch Caelestia app launcher"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
rofi -show drun
|
||||||
|
''
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
pkgs.writeShellScriptBin "mp42webm" ''
|
pkgs.writeShellScriptBin "mp42webm" ''
|
||||||
${pkgs.ffmpeg}/bin/ffmpeg -i "$1" -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis "$1".webm''
|
${pkgs.ffmpeg}/bin/ffmpeg -i "$1" -c:v libvpx -crf 10 -b:v 1M -c:a -hwaccel=auto libvorbis "$1".webm''
|
||||||
|
|||||||
@@ -1,16 +1,40 @@
|
|||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
pkgs.writeShellScriptBin "plock" ''
|
pkgs.writeShellScriptBin "plock" ''
|
||||||
|
LOG_FILE="$HOME/.local/share/plock.log"
|
||||||
|
|
||||||
|
logger() {
|
||||||
|
local level="$1"
|
||||||
|
local message="$2"
|
||||||
|
local timestamp
|
||||||
|
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
|
||||||
|
printf "[%s] [%-7s] %s\n" "$timestamp" "''${level^^}" "$message" >> "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
CAELESTIA_ACTIVE=$(systemctl --user is-active caelestia.service)
|
||||||
|
logger debug "Caelestia activity: $CAELESTIA_ACTIVE"
|
||||||
|
if systemctl --user is-active caelestia.service | grep 'active' &> /dev/null ; then
|
||||||
|
logger info "locking Caelestia session"
|
||||||
|
caelestia shell lock lock || \
|
||||||
|
logger error "failed to lock Caelestia session"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
TMPBG="/tmp/screen.png"
|
TMPBG="/tmp/screen.png"
|
||||||
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
|
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
|
||||||
|
logger info "wayland session detected"
|
||||||
SCREENER=${pkgs.grim}/bin/grim
|
SCREENER=${pkgs.grim}/bin/grim
|
||||||
LOCKER="${pkgs.swaylock}/bin/swaylock -feF"
|
LOCKER="${pkgs.swaylock}/bin/swaylock -feF"
|
||||||
else
|
else
|
||||||
|
logger info "x11 session detected"
|
||||||
SCREENER=${pkgs.scrot}/bin/scrot
|
SCREENER=${pkgs.scrot}/bin/scrot
|
||||||
LOCKER="${pkgs.i3lock}/bin/i3lock -ef"
|
LOCKER="${pkgs.i3lock}/bin/i3lock -ef"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$SCREENER "$TMPBG"
|
$SCREENER "$TMPBG"
|
||||||
${pkgs.corrupter}/bin/corrupter -add 0 "$TMPBG" "$TMPBG"
|
logger info "generating lock screen image"
|
||||||
|
${pkgs.corrupter}/bin/corrupter -add 0 "$TMPBG" "$TMPBG" || logger error "failed to generate lock screen image"
|
||||||
|
logger info "locking screen"
|
||||||
|
logger debug "locking screen with command `''${SCREENER}`"
|
||||||
$LOCKER -ti "$TMPBG"
|
$LOCKER -ti "$TMPBG"
|
||||||
rm "$TMPBG"
|
rm "$TMPBG"
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -17,13 +17,20 @@ in {
|
|||||||
./shell
|
./shell
|
||||||
];
|
];
|
||||||
|
|
||||||
options.home.fullDesktop = mkEnableOption "Enable most modules";
|
options.home = {
|
||||||
|
fullDesktop = mkEnableOption "Enable most modules";
|
||||||
|
gpuType = mkOption {
|
||||||
|
type = types.nullOr (types.enum ["nvidia" "amd" "intel"]);
|
||||||
|
default = null;
|
||||||
|
example = "amd";
|
||||||
|
};
|
||||||
|
};
|
||||||
config.home = {
|
config.home = {
|
||||||
cli.fullDesktop = mkDefault cfg.fullDesktop;
|
cli.fullDesktop = mkDefault cfg.fullDesktop;
|
||||||
desktop.fullDesktop = mkDefault cfg.fullDesktop;
|
desktop.fullDesktop = mkDefault cfg.fullDesktop;
|
||||||
dev.fullDesktop = mkDefault cfg.fullDesktop;
|
dev.fullDesktop = mkDefault cfg.fullDesktop;
|
||||||
media.fullDesktop = mkDefault cfg.fullDesktop;
|
media.fullDesktop = mkDefault cfg.fullDesktop;
|
||||||
security.fullDesktop = mkDefault cfg.fullDesktop;
|
security.fullDesktop = mkDefault cfg.fullDesktop;
|
||||||
services.fullDesktop = mkDefault cfg.fullDesktop;
|
myServices.fullDesktop = mkDefault cfg.fullDesktop;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,7 @@ in {
|
|||||||
systemd = {
|
systemd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
target = "graphical-session.target";
|
target = "graphical-session.target";
|
||||||
environment = [
|
environment = ["QT3_QPA_PLATFORMTHEME=gtk3"];
|
||||||
"QT3_QPA_PLATFORMTHEME=gtk3"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
paths.wallpaperDir = "~/Pictures/Wallpapers/nord";
|
paths.wallpaperDir = "~/Pictures/Wallpapers/nord";
|
||||||
@@ -27,9 +25,10 @@ in {
|
|||||||
explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"];
|
explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"];
|
||||||
};
|
};
|
||||||
idle = {
|
idle = {
|
||||||
|
inhibitWhenAudio = true;
|
||||||
timeouts = [
|
timeouts = [
|
||||||
{
|
{
|
||||||
timeout = 300;
|
timeout = 3600;
|
||||||
idleAction = "lock";
|
idleAction = "lock";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -52,6 +51,7 @@ in {
|
|||||||
wallpapers = true;
|
wallpapers = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
osd.enableMicrophone = true;
|
||||||
bar = {
|
bar = {
|
||||||
status = {
|
status = {
|
||||||
showAudio = true;
|
showAudio = true;
|
||||||
@@ -59,13 +59,20 @@ in {
|
|||||||
};
|
};
|
||||||
tray.compact = true;
|
tray.compact = true;
|
||||||
};
|
};
|
||||||
services.gpuType = "amd";
|
services = mkIf (config.home.gpuType != null) {
|
||||||
|
inherit (config.home) gpuType;
|
||||||
|
};
|
||||||
session.commands = {
|
session.commands = {
|
||||||
logout = ["uwsm" "stop"];
|
logout = ["uwsm" "stop"];
|
||||||
shutdown = ["systemctl" "poweroff"];
|
shutdown = ["systemctl" "poweroff"];
|
||||||
hibernate = ["systemctl" "hibernate"];
|
hibernate = ["systemctl" "hibernate"];
|
||||||
reboot = ["systemctl" "reboot"];
|
reboot = ["systemctl" "reboot"];
|
||||||
};
|
};
|
||||||
|
utilities.toasts = {
|
||||||
|
capsLockChanged = false;
|
||||||
|
numLockChanged = false;
|
||||||
|
kbLayoutChanged = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
cli = {
|
cli = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -8,32 +8,32 @@ with lib; let
|
|||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./caelestia.nix
|
./caelestia.nix
|
||||||
./eww.nix
|
./firefox.nix
|
||||||
./hyprland.nix
|
./hyprland.nix
|
||||||
./kdeconnect.nix
|
./kdeconnect.nix
|
||||||
./kitty.nix
|
./kitty.nix
|
||||||
./obs.nix
|
./obs.nix
|
||||||
./qt.nix
|
|
||||||
./rofi
|
./rofi
|
||||||
./spotify.nix
|
./spotify.nix
|
||||||
./swaync.nix
|
./swaync.nix
|
||||||
./theme.nix
|
./theme.nix
|
||||||
./waybar.nix
|
./waybar.nix
|
||||||
|
./wl-kbptr.nix
|
||||||
./wlr-which-key.nix
|
./wlr-which-key.nix
|
||||||
./wlsunset.nix
|
./wlsunset.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
options.home.desktop.fullDesktop = mkEnableOption "Enable options for graphical environments";
|
options.home.desktop.fullDesktop = mkEnableOption "Enable options for graphical environments";
|
||||||
config.home.desktop = {
|
config.home.desktop = {
|
||||||
eww.enable = mkDefault cfg.fullDesktop;
|
firefox.enable = mkDefault cfg.fullDesktop;
|
||||||
hyprland.enable = mkDefault cfg.fullDesktop;
|
hyprland.enable = mkDefault cfg.fullDesktop;
|
||||||
kdeconnect.enable = mkDefault cfg.fullDesktop;
|
kdeconnect.enable = mkDefault cfg.fullDesktop;
|
||||||
kitty.enable = mkDefault cfg.fullDesktop;
|
kitty.enable = mkDefault cfg.fullDesktop;
|
||||||
obs.enable = mkDefault cfg.fullDesktop;
|
obs.enable = mkDefault cfg.fullDesktop;
|
||||||
qt.enable = mkDefault cfg.fullDesktop;
|
|
||||||
rofi.enable = mkDefault cfg.fullDesktop;
|
rofi.enable = mkDefault cfg.fullDesktop;
|
||||||
spotify.enable = mkDefault cfg.fullDesktop;
|
spotify.enable = mkDefault cfg.fullDesktop;
|
||||||
spotify.spicetify.enable = mkDefault cfg.fullDesktop;
|
spotify.spicetify.enable = mkDefault cfg.fullDesktop;
|
||||||
|
theme.enable = mkDefault cfg.fullDesktop;
|
||||||
wlr-which-key.enable = mkDefault cfg.fullDesktop;
|
wlr-which-key.enable = mkDefault cfg.fullDesktop;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
(defwindow example
|
|
||||||
:monitor 0
|
|
||||||
:geometry (geometry :x "0%"
|
|
||||||
:y "20%"
|
|
||||||
:width "90%"
|
|
||||||
:height "30px"
|
|
||||||
:anchor "top center")
|
|
||||||
:stacking "fg"
|
|
||||||
:reserve (struts :distance "40px" :side "top")
|
|
||||||
:windowtype "dock"
|
|
||||||
:wm-ignore false
|
|
||||||
"example content")
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.home.desktop.eww;
|
|
||||||
in {
|
|
||||||
options.home.desktop.eww.enable = mkEnableOption "Enable eww support";
|
|
||||||
config.programs.eww = mkIf cfg.enable {
|
|
||||||
inherit (cfg) enable;
|
|
||||||
configDir = ./eww-config;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.home.desktop.firefox;
|
||||||
|
inherit (pkgs.stdenv.hostPlatform) system;
|
||||||
|
zen = inputs.zen-browser.packages.${system}.default;
|
||||||
|
settingsToLines = settings:
|
||||||
|
concatStringsSep "\n" (mapAttrsToList (name: value: "set ${name} ${toString value}") settings);
|
||||||
|
in {
|
||||||
|
options.home.desktop.firefox = {
|
||||||
|
enable = mkEnableOption "enable Firefox";
|
||||||
|
useZen = mkEnableOption "use Zen instead of Firefox";
|
||||||
|
tridactyl = {
|
||||||
|
enable = mkEnableOption "enable Tridactyl";
|
||||||
|
preConfig = mkOption {
|
||||||
|
description = "Lines to add to the beginning of tridactylrc";
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
config = mkOption {
|
||||||
|
type = with types;
|
||||||
|
attrsOf (oneOf [
|
||||||
|
int
|
||||||
|
str
|
||||||
|
bool
|
||||||
|
]);
|
||||||
|
description = "Tridactyl settings (converted to 'set key value' lines)";
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
smoothscroll = true;
|
||||||
|
history = 1000;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraConfig = mkOption {
|
||||||
|
description = "Extra lines to add to tridactylrc (for bindings, autocmds, etc)";
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.sessionVariables.MOZ_ENABLE_WAYLAND = "1";
|
||||||
|
programs.firefox = {
|
||||||
|
inherit (cfg) enable;
|
||||||
|
package =
|
||||||
|
if cfg.useZen
|
||||||
|
then zen
|
||||||
|
else pkgs.firefox;
|
||||||
|
nativeMessagingHosts = lists.optional cfg.tridactyl.enable pkgs.tridactyl-native;
|
||||||
|
configPath = ".mozilla/firefox";
|
||||||
|
};
|
||||||
|
xdg.configFile."tridactyl/tridactylrc" = mkIf cfg.tridactyl.enable {
|
||||||
|
text = concatStringsSep "\n" (filter (s: s != "") [
|
||||||
|
cfg.tridactyl.preConfig
|
||||||
|
(settingsToLines (cfg.tridactyl.config
|
||||||
|
// {
|
||||||
|
browser =
|
||||||
|
if cfg.useZen
|
||||||
|
then "zen"
|
||||||
|
else "firefox";
|
||||||
|
}))
|
||||||
|
cfg.tridactyl.extraConfig
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -50,22 +50,28 @@ in {
|
|||||||
systemd.enable = false;
|
systemd.enable = false;
|
||||||
importantPrefixes = ["$left" "$right" "$up" "$down" "$menu"];
|
importantPrefixes = ["$left" "$right" "$up" "$down" "$menu"];
|
||||||
settings = {
|
settings = {
|
||||||
|
env = [
|
||||||
|
"XMODIFIERS,@im=fcitx"
|
||||||
|
"XCURSOR_SIZE,12"
|
||||||
|
];
|
||||||
input = {
|
input = {
|
||||||
kb_layout = "fr,us";
|
kb_layout = "fr,us";
|
||||||
kb_variant = "bepo_afnor,";
|
kb_variant = "bepo_afnor,";
|
||||||
# kb_options = "caps:ctrl_modifier";
|
|
||||||
numlock_by_default = true;
|
numlock_by_default = true;
|
||||||
follow_mouse = 1;
|
follow_mouse = 1;
|
||||||
touchpad.natural_scroll = false;
|
touchpad.natural_scroll = false;
|
||||||
sensitivity = "0";
|
sensitivity = "0";
|
||||||
};
|
};
|
||||||
|
device = {
|
||||||
|
name = "wacom-usb-bamboo-pad-finger";
|
||||||
|
sensitivity = 0.5;
|
||||||
|
};
|
||||||
monitor =
|
monitor =
|
||||||
{
|
{
|
||||||
"marpa" = [
|
"marpa" = [
|
||||||
"DP-1, 3440x1440@144, 1080x550, 1"
|
"DP-1, 3440x1440@144, 1080x550, 1"
|
||||||
|
# "DP-1, 2560x1440@144, 1080x550, 1" # streaming
|
||||||
"DP-2, 2560x1080@60, 0x0, 1, transform, 1"
|
"DP-2, 2560x1080@60, 0x0, 1, transform, 1"
|
||||||
# "DP-2, 1366x768@60, 0x0, 1"
|
|
||||||
# "DP-2, 1829x1143@60, 0x0, 1"
|
|
||||||
];
|
];
|
||||||
"gampo" = [];
|
"gampo" = [];
|
||||||
}."${cfg.host}";
|
}."${cfg.host}";
|
||||||
@@ -82,8 +88,9 @@ in {
|
|||||||
new_status = "inherit";
|
new_status = "inherit";
|
||||||
};
|
};
|
||||||
workspace = [
|
workspace = [
|
||||||
"10, layoutopt:orientation:bottom"
|
|
||||||
"1, layoutopt:orientation:bottom"
|
"1, layoutopt:orientation:bottom"
|
||||||
|
"9, layoutopt:orientation:bottom"
|
||||||
|
"10, layoutopt:orientation:bottom"
|
||||||
];
|
];
|
||||||
decoration = {
|
decoration = {
|
||||||
rounding = 20;
|
rounding = 20;
|
||||||
@@ -108,10 +115,18 @@ in {
|
|||||||
"pactl load-module module-switch-on-connect"
|
"pactl load-module module-switch-on-connect"
|
||||||
"${pkgs.mpc}/bin/mpc stop"
|
"${pkgs.mpc}/bin/mpc stop"
|
||||||
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
|
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
|
||||||
|
"${pkgs.mozc}/lib/mozc/mozc_server"
|
||||||
|
"${pkgs.fcitx5}/bin/fcitx5 -d"
|
||||||
]
|
]
|
||||||
++ lib.lists.optional (! caelestiaEnabled) "${pkgs.networkmanagerapplet}/bin/nm-applet";
|
++ lib.lists.optional (! caelestiaEnabled) "${pkgs.networkmanagerapplet}/bin/nm-applet";
|
||||||
};
|
};
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
device {
|
||||||
|
name = wacom-usb-bamboo-pad-finger
|
||||||
|
sensitivity = 0.5
|
||||||
|
accel_profile = adaptive
|
||||||
|
}
|
||||||
|
|
||||||
$left = c
|
$left = c
|
||||||
$right = r
|
$right = r
|
||||||
$up = s
|
$up = s
|
||||||
|
|||||||
@@ -29,84 +29,86 @@ in {
|
|||||||
detect_urls = true;
|
detect_urls = true;
|
||||||
background_opacity = 0.7;
|
background_opacity = 0.7;
|
||||||
};
|
};
|
||||||
keybindings = {
|
keybindings = let
|
||||||
|
prefix = "kitty_mod+space";
|
||||||
|
in {
|
||||||
"alt+c" = "copy_to_clipboard";
|
"alt+c" = "copy_to_clipboard";
|
||||||
"kitty_mod+c" = "copy_to_clipboard";
|
"kitty_mod+c" = "copy_to_clipboard";
|
||||||
"alt+v" = "paste_from_clipboard";
|
"alt+v" = "paste_from_clipboard";
|
||||||
"kitty_mod+v" = "paste_from_clipboard";
|
"kitty_mod+v" = "paste_from_clipboard";
|
||||||
|
|
||||||
"kitty_mod+s>c" = "show_scrollback";
|
"${prefix}>s>c" = "show_scrollback";
|
||||||
"kitty_mod+s>down" = "scroll_line_down";
|
"${prefix}>s>down" = "scroll_line_down";
|
||||||
"kitty_mod+s>t" = "scroll_line_down";
|
"${prefix}>s>t" = "scroll_line_down";
|
||||||
"kitty_mod+s>up" = "scroll_line_up";
|
"${prefix}>s>up" = "scroll_line_up";
|
||||||
"kitty_mod+s>s" = "scroll_line_up";
|
"${prefix}>s>s" = "scroll_line_up";
|
||||||
"kitty_mod+s>end" = "scroll_end";
|
"${prefix}>s>end" = "scroll_end";
|
||||||
"kitty_mod+s>home" = "scroll_home";
|
"${prefix}>s>home" = "scroll_home";
|
||||||
"kitty_mod+s>page_down" = "scroll_page_down";
|
"${prefix}>s>page_down" = "scroll_page_down";
|
||||||
"kitty_mod+s>page_up" = "scroll_page_up";
|
"${prefix}>s>page_up" = "scroll_page_up";
|
||||||
|
|
||||||
"kitty_mod+enter" = "new_window";
|
"${prefix}>enter" = "new_window";
|
||||||
"kitty_mod+w>q" = "close_window";
|
"${prefix}>w>q" = "close_window";
|
||||||
"kitty_mod+w>p" = "next_window";
|
"${prefix}>w>p" = "next_window";
|
||||||
"kitty_mod+w>n" = "previous_window";
|
"${prefix}>w>n" = "previous_window";
|
||||||
"kitty_mod+w>f" = "move_window_forward";
|
"${prefix}>w>f" = "move_window_forward";
|
||||||
"kitty_mod+w>b" = "move_window_backward";
|
"${prefix}>w>b" = "move_window_backward";
|
||||||
"kitty_mod+w>t" = "move_window_to_top";
|
"${prefix}>w>t" = "move_window_to_top";
|
||||||
"kitty_mod+w>r" = "start_resizing_window";
|
"${prefix}>w>r" = "start_resizing_window";
|
||||||
"kitty_mod+w>1" = "first_window";
|
"${prefix}>w>1" = "first_window";
|
||||||
"kitty_mod+w>2" = "second_window";
|
"${prefix}>w>2" = "second_window";
|
||||||
"kitty_mod+w>3" = "third_window";
|
"${prefix}>w>3" = "third_window";
|
||||||
"kitty_mod+w>4" = "fourth_window";
|
"${prefix}>w>4" = "fourth_window";
|
||||||
"kitty_mod+w>5" = "fifth_window";
|
"${prefix}>w>5" = "fifth_window";
|
||||||
"kitty_mod+w>6" = "sixth_window";
|
"${prefix}>w>6" = "sixth_window";
|
||||||
"kitty_mod+w>7" = "seventh_window";
|
"${prefix}>w>7" = "seventh_window";
|
||||||
"kitty_mod+w>8" = "eighth_window";
|
"${prefix}>w>8" = "eighth_window";
|
||||||
"kitty_mod+w>9" = "ninth_window";
|
"${prefix}>w>9" = "ninth_window";
|
||||||
"kitty_mod+w>0" = "tenth_window";
|
"${prefix}>w>0" = "tenth_window";
|
||||||
|
|
||||||
"kitty_mod+tab>n" = "next_tab";
|
"${prefix}>tab>n" = "next_tab";
|
||||||
"kitty_mod+tab>p" = "previous_tab";
|
"${prefix}>tab>p" = "previous_tab";
|
||||||
"kitty_mod+tab>c" = "new_tab";
|
"${prefix}>tab>c" = "new_tab";
|
||||||
"kitty_mod+tab>q" = "close_tab";
|
"${prefix}>tab>q" = "close_tab";
|
||||||
"kitty_mod+tab>shift+n" = "move_tab_backward";
|
"${prefix}>tab>shift+n" = "move_tab_backward";
|
||||||
"kitty_mod+tab>shift+p" = "move_tab_forward";
|
"${prefix}>tab>shift+p" = "move_tab_forward";
|
||||||
"kitty_mod+tab>t" = "set_tab_title";
|
"${prefix}>tab>t" = "set_tab_title";
|
||||||
|
|
||||||
"kitty_mod+l" = "next_layout";
|
"${prefix}>l" = "next_layout";
|
||||||
|
|
||||||
"kitty_mod+f>equal" = "change_font_size all 0";
|
"${prefix}>f>equal" = "change_font_size all 0";
|
||||||
"kitty_mod+f>kp_add" = "change_font_size all +2.0";
|
"${prefix}>f>kp_add" = "change_font_size all +2.0";
|
||||||
"kitty_mod+f>plus" = "change_font_size all +2.0";
|
"${prefix}>f>plus" = "change_font_size all +2.0";
|
||||||
"kitty_mod+f>kp_subtract" = "change_font_size all -2.0";
|
"${prefix}>f>kp_subtract" = "change_font_size all -2.0";
|
||||||
"kitty_mod+f>minus" = "change_font_size all -2.0";
|
"${prefix}>f>minus" = "change_font_size all -2.0";
|
||||||
|
|
||||||
"kitty_mod+shift+h" = "kitten hints";
|
"${prefix}>shift+h" = "kitten hints";
|
||||||
"kitty_mod+h>p" = "kitten hints --type path --program -";
|
"${prefix}>h>p" = "kitten hints --type path --program -";
|
||||||
"kitty_mod+h>shift+p" = "kitten hints --type path";
|
"${prefix}>h>shift+p" = "kitten hints --type path";
|
||||||
"kitty_mod+h>l" = "kitten hints --type line --program -";
|
"${prefix}>h>l" = "kitten hints --type line --program -";
|
||||||
"kitty_mod+h>w" = "kitten hints --type word --program -";
|
"${prefix}>h>w" = "kitten hints --type word --program -";
|
||||||
"kitty_mod+h>h" = "kitten hints --type hash --program -";
|
"${prefix}>h>h" = "kitten hints --type hash --program -";
|
||||||
"kitty_mod+h>n" = "kitten hints --type linenum";
|
"${prefix}>h>n" = "kitten hints --type linenum";
|
||||||
"kitty_mod+h>y" = "kitten hints --type hyperlink";
|
"${prefix}>h>y" = "kitten hints --type hyperlink";
|
||||||
|
|
||||||
"kitty_mod+f10" = "toggle_maximized";
|
"${prefix}>f10" = "toggle_maximized";
|
||||||
"kitty_mod+f11" = "toggle_fullscreen";
|
"${prefix}>f11" = "toggle_fullscreen";
|
||||||
|
|
||||||
"kitty_mod+a>equal" = "set_background_opacity 1";
|
"${prefix}>a>equal" = "set_background_opacity 1";
|
||||||
"kitty_mod+a>d" = "set_background_opacity default";
|
"${prefix}>a>d" = "set_background_opacity default";
|
||||||
"kitty_mod+a>plus" = "set_background_opacity +0.1";
|
"${prefix}>a>plus" = "set_background_opacity +0.1";
|
||||||
"kitty_mod+a>up" = "set_background_opacity +0.1";
|
"${prefix}>a>up" = "set_background_opacity +0.1";
|
||||||
"kitty_mod+a>kp_add" = "set_background_opacity +0.1";
|
"${prefix}>a>kp_add" = "set_background_opacity +0.1";
|
||||||
"kitty_mod+a>minus" = "set_background_opacity -0.1";
|
"${prefix}>a>minus" = "set_background_opacity -0.1";
|
||||||
"kitty_mod+a>down" = "set_background_opacity -0.1";
|
"${prefix}>a>down" = "set_background_opacity -0.1";
|
||||||
"kitty_mod+a>kp_substract" = "set_background_opacity -0.1";
|
"${prefix}>a>kp_substract" = "set_background_opacity -0.1";
|
||||||
|
|
||||||
"kitty_mod+delete" = "clear_terminal reset active";
|
"${prefix}>delete" = "clear_terminal reset active";
|
||||||
"kitty_mod+escape" = "kitty_shell window";
|
"${prefix}>escape" = "kitty_shell window";
|
||||||
"kitty_mod+f2" = "edit_config_file";
|
"${prefix}>f2" = "edit_config_file";
|
||||||
"kitty_mod+n" = "new_os_window";
|
"${prefix}>n" = "new_os_window";
|
||||||
"kitty_mod+o" = "pass_selection_to_program";
|
"${prefix}>o" = "pass_selection_to_program";
|
||||||
"kitty_mod+u" = "kitten unicode_input";
|
"${prefix}>u" = "kitten unicode_input";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.desktop.obs;
|
cfg = config.home.desktop.obs;
|
||||||
|
obs-image-reaction = pkgs.callPackage ../../../packages/obs-image-reaction.nix {};
|
||||||
in {
|
in {
|
||||||
options.home.desktop.obs.enable = mkEnableOption "Enables OBS Studio";
|
options.home.desktop.obs.enable = mkEnableOption "Enables OBS Studio";
|
||||||
config.programs.obs-studio = mkIf cfg.enable {
|
config.programs.obs-studio = mkIf cfg.enable {
|
||||||
@@ -13,11 +14,14 @@ in {
|
|||||||
plugins = with pkgs.obs-studio-plugins; [
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
input-overlay
|
input-overlay
|
||||||
obs-backgroundremoval
|
obs-backgroundremoval
|
||||||
|
obs-markdown
|
||||||
obs-mute-filter
|
obs-mute-filter
|
||||||
obs-pipewire-audio-capture
|
obs-pipewire-audio-capture
|
||||||
|
obs-scale-to-sound
|
||||||
obs-source-clone
|
obs-source-clone
|
||||||
obs-source-record
|
obs-source-record
|
||||||
obs-tuna
|
obs-tuna
|
||||||
|
obs-image-reaction
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.home.desktop.qt;
|
|
||||||
in {
|
|
||||||
options.home.desktop.qt.enable = mkEnableOption "Enable Qt support";
|
|
||||||
config.qt.enable = cfg.enable;
|
|
||||||
}
|
|
||||||
@@ -6,8 +6,8 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
|
inherit (pkgs.stdenv.hostPlatform) system;
|
||||||
cfg = config.home.desktop.spotify;
|
cfg = config.home.desktop.spotify;
|
||||||
system = pkgs.stdenv.hostPlatform.system;
|
|
||||||
spicePkgs = inputs.spicetify.legacyPackages.${system};
|
spicePkgs = inputs.spicetify.legacyPackages.${system};
|
||||||
in {
|
in {
|
||||||
options.home.desktop.spotify = {
|
options.home.desktop.spotify = {
|
||||||
|
|||||||
@@ -1,26 +1,34 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
gtk = {
|
with lib; let
|
||||||
enable = true;
|
cfg = config.home.desktop.theme;
|
||||||
colorScheme = "dark";
|
in {
|
||||||
iconTheme = {
|
options.home.desktop.theme.enable = mkEnableOption "Enable theme options";
|
||||||
name = "Nordzy-icons";
|
config = mkIf cfg.enable {
|
||||||
package = pkgs.nordzy-icon-theme;
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
colorScheme = "dark";
|
||||||
|
iconTheme = {
|
||||||
|
name = "Nordzy-icons";
|
||||||
|
package = pkgs.nordzy-icon-theme;
|
||||||
|
};
|
||||||
|
theme = {
|
||||||
|
package = pkgs.nordic;
|
||||||
|
name = "Nordic";
|
||||||
|
};
|
||||||
|
gtk4.theme = config.gtk.theme;
|
||||||
};
|
};
|
||||||
theme = {
|
home.pointerCursor = {
|
||||||
package = pkgs.nordic;
|
enable = true;
|
||||||
name = "Nordic";
|
gtk.enable = true;
|
||||||
|
hyprcursor.enable = config.home.desktop.hyprland.enable;
|
||||||
|
name = "Nordzy-cursors";
|
||||||
|
package = pkgs.nordzy-cursor-theme;
|
||||||
};
|
};
|
||||||
|
qt.enable = true;
|
||||||
};
|
};
|
||||||
home.pointerCursor = {
|
|
||||||
enable = true;
|
|
||||||
gtk.enable = true;
|
|
||||||
hyprcursor.enable = config.home.desktop.hyprland.enable;
|
|
||||||
name = "Nordzy-cursors";
|
|
||||||
package = pkgs.nordzy-cursor-theme;
|
|
||||||
};
|
|
||||||
qt.enable = true;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
configDir = config.xdg.configHome;
|
||||||
|
cfg = config.home.desktop.wl-kbptr;
|
||||||
|
iniFormat = pkgs.formats.ini {};
|
||||||
|
in {
|
||||||
|
options.home.desktop.wl-kbptr = {
|
||||||
|
enable = mkEnableOption "enable wl-kbptr";
|
||||||
|
config = mkOption {
|
||||||
|
inherit (iniFormat) type;
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Options to add to the {file}`config` file. See
|
||||||
|
<https://github.com/moverest/wl-kbptr/blob/main/config.example>
|
||||||
|
for options.
|
||||||
|
'';
|
||||||
|
example = {
|
||||||
|
general = {
|
||||||
|
home_row_keys = "abcd";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home = {
|
||||||
|
packages = [pkgs.wl-kbptr];
|
||||||
|
file."${configDir}/wl-kbptr/config" = mkIf (cfg.config != {}) {
|
||||||
|
source = iniFormat.generate "wl-kbptr-config" cfg.config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
# Recursively filter out null values and convert kebab-case keys to snake_case
|
# Recursively filter out null values and convert kebab-case keys to snake_case
|
||||||
filterNulls = value:
|
filterNulls = value:
|
||||||
if lib.isAttrs value
|
if lib.isAttrs value
|
||||||
then lib.mapAttrs' (n: v: lib.nameValuePair (toSnakeCase n) (filterNulls v)) (lib.filterAttrs (n: v: v != null) value)
|
then lib.mapAttrs' (n: v: lib.nameValuePair (toSnakeCase n) (filterNulls v)) (lib.filterAttrs (_: v: v != null) value)
|
||||||
else if lib.isList value
|
else if lib.isList value
|
||||||
then map filterNulls value
|
then map filterNulls value
|
||||||
else value;
|
else value;
|
||||||
|
|||||||
@@ -6,16 +6,23 @@
|
|||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.dev.ai.claude;
|
cfg = config.home.dev.ai.claude;
|
||||||
|
jsonFormat = pkgs.formats.json {};
|
||||||
in {
|
in {
|
||||||
options.home.dev.ai.claude.enable = mkEnableOption "Enables Claude-related packages";
|
options.home.dev.ai.claude = {
|
||||||
|
enable = mkEnableOption "Enables Claude-related packages";
|
||||||
|
mcpServers = mkOption {
|
||||||
|
inherit (jsonFormat) type;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = let
|
home.packages = let
|
||||||
claude-jj = pkgs.writeShellScriptBin "claude-jj" ''
|
claude-jj = pkgs.writeShellScriptBin "claude-jj" ''
|
||||||
${pkgs.claude-code}/bin/claude --append-system-prompt 'CRITICAL: This repository uses Jujutsu (jj), NOT git. Never use git commands. Use jj equivalents. See CLAUDE.md.' "$@"
|
${pkgs.claude-code}/bin/claude --append-system-prompt 'CRITICAL: This repository uses Jujutsu (jj), NOT git. Never use git commands. Use jj equivalents.' "$@"
|
||||||
'';
|
'';
|
||||||
in [claude-jj];
|
in [claude-jj pkgs.sox];
|
||||||
programs.claude-code = {
|
programs.claude-code = {
|
||||||
inherit (cfg) enable;
|
inherit (cfg) enable mcpServers;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,18 +6,36 @@
|
|||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.dev.ai;
|
cfg = config.home.dev.ai;
|
||||||
|
jsonFormat = pkgs.formats.json {};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./ollama.nix
|
|
||||||
./claude.nix
|
./claude.nix
|
||||||
|
./ollama.nix
|
||||||
|
./opencode.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
options.home.dev.ai.enable = mkEnableOption "Enables AI features";
|
options.home.dev.ai = {
|
||||||
config.home = mkIf cfg.enable {
|
enable = mkEnableOption "Enables AI features";
|
||||||
dev.ai = {
|
mcpServers = mkOption {
|
||||||
ollama.enable = mkDefault cfg.enable;
|
inherit (jsonFormat) type;
|
||||||
claude.enable = mkDefault cfg.enable;
|
default = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
home = mkIf cfg.enable {
|
||||||
|
dev.ai = {
|
||||||
|
claude = {
|
||||||
|
enable = mkDefault cfg.enable;
|
||||||
|
mcpServers = mkDefault cfg.mcpServers;
|
||||||
|
};
|
||||||
|
ollama.enable = mkDefault cfg.enable;
|
||||||
|
opencode.enable = mkDefault cfg.enable;
|
||||||
|
};
|
||||||
|
packages = [pkgs.lmstudio];
|
||||||
|
};
|
||||||
|
programs.mcp = mkIf (cfg.mcpServers != {}) {
|
||||||
|
enable = true;
|
||||||
|
servers = cfg.mcpServers;
|
||||||
};
|
};
|
||||||
packages = [pkgs.lmstudio];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
inherit (pkgs.stdenv.hostPlatform) system;
|
||||||
|
cfg = config.home.dev.ai.opencode;
|
||||||
|
defaultPackageCli = inputs.opencode.packages.${system}.opencode;
|
||||||
|
defaultPackageDesktop = inputs.opencode.packages.${system}.desktop;
|
||||||
|
corsList = domains: lists.remove "" (lists.forEach (strings.splitString "," domains) trim);
|
||||||
|
in {
|
||||||
|
options.home.dev.ai.opencode = {
|
||||||
|
enable = mkEnableOption "Enables OpenCode";
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = defaultPackageCli;
|
||||||
|
description = "The CLI package for OpenCode";
|
||||||
|
};
|
||||||
|
settings = mkOption {
|
||||||
|
type = types.json;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
tui = mkOption {
|
||||||
|
type = types.json;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
desktop = {
|
||||||
|
enable = mkEnableOption "Enables the desktop app";
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = defaultPackageDesktop;
|
||||||
|
description = "The desktop package for OpenCode";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
web = {
|
||||||
|
enable = mkEnableOption "Enables OpenCode web";
|
||||||
|
extraArgs = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
example = [
|
||||||
|
"--hostname"
|
||||||
|
"0.0.0.0"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
cors = mkOption {
|
||||||
|
type = types.nullOr (types.either types.str types.path);
|
||||||
|
default = null;
|
||||||
|
example = "opencode.example.com,code.example.com";
|
||||||
|
description = ''
|
||||||
|
Either a string containing the domain allowed to connect to OpenCode’s web instance, or a file containing the target value. The latter is useful when using secret management if you don’t want to publicize the hostname of your OpenCode instance.
|
||||||
|
|
||||||
|
If you want to use multiple domains, you can separate them with a comma.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
mdns = {
|
||||||
|
enable = mkEnableOption "Enables mDNS with OpenCode";
|
||||||
|
hostname = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
example = "opencode.local";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config.programs.opencode = mkIf cfg.enable {
|
||||||
|
inherit (cfg) enable tui;
|
||||||
|
enableMcpIntegration = true;
|
||||||
|
extraPackages = with pkgs; [uv];
|
||||||
|
settings =
|
||||||
|
{
|
||||||
|
server = mkIf cfg.web.mdns.enable {
|
||||||
|
mdns = true;
|
||||||
|
mdnsDomain = mkIf (cfg.web.mdns.hostname != null) cfg.web.mdns.hostname;
|
||||||
|
cors = corsList cfg.web.cors;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// cfg.settings;
|
||||||
|
web = {
|
||||||
|
inherit (cfg.web) enable extraArgs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -48,6 +48,10 @@ in {
|
|||||||
enable = mkDefault true;
|
enable = mkDefault true;
|
||||||
inherit (cfg) name email editor;
|
inherit (cfg) name email editor;
|
||||||
signing.sshKey = mkDefault (cfg.publicKey.file or cfg.publicKey.content);
|
signing.sshKey = mkDefault (cfg.publicKey.file or cfg.publicKey.content);
|
||||||
|
cz = {
|
||||||
|
enable = mkDefault true;
|
||||||
|
alias = mkDefault true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,6 +127,14 @@ in {
|
|||||||
|
|
||||||
"dist/"
|
"dist/"
|
||||||
];
|
];
|
||||||
|
signing = {
|
||||||
|
format =
|
||||||
|
if cfg.publicKeyFile != null
|
||||||
|
then "ssh"
|
||||||
|
else "openpgp";
|
||||||
|
key = cfg.publicKeyFile;
|
||||||
|
signByDefault = true;
|
||||||
|
};
|
||||||
settings = {
|
settings = {
|
||||||
user = {
|
user = {
|
||||||
inherit (cfg) name email;
|
inherit (cfg) name email;
|
||||||
@@ -151,8 +159,6 @@ in {
|
|||||||
renames = "copy";
|
renames = "copy";
|
||||||
interHunkContext = 10;
|
interHunkContext = 10;
|
||||||
};
|
};
|
||||||
commit.gpgsign = cfg.publicKeyFile != null;
|
|
||||||
gpg.format = "ssh";
|
|
||||||
gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
||||||
init.defaultBranch = "main";
|
init.defaultBranch = "main";
|
||||||
pull.rebase = true;
|
pull.rebase = true;
|
||||||
@@ -168,7 +174,6 @@ in {
|
|||||||
updateRefs = true;
|
updateRefs = true;
|
||||||
};
|
};
|
||||||
help.autocorrect = "prompt";
|
help.autocorrect = "prompt";
|
||||||
user.signingkey = mkIf (cfg.publicKeyFile != null) cfg.publicKeyFile;
|
|
||||||
web.browser = mkIf (cfg.browser != null) cfg.browser;
|
web.browser = mkIf (cfg.browser != null) cfg.browser;
|
||||||
sendemail = mkIf cfg.sendmail.enable {
|
sendemail = mkIf cfg.sendmail.enable {
|
||||||
smtpserver = cfg.sendmail.server;
|
smtpserver = cfg.sendmail.server;
|
||||||
|
|||||||
@@ -2,10 +2,13 @@
|
|||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
inputs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
|
inherit (pkgs.stdenv.hostPlatform) system;
|
||||||
cfg = config.home.dev.vcs.jj;
|
cfg = config.home.dev.vcs.jj;
|
||||||
|
jj-cz = inputs.jj-cz.packages.${system}.default;
|
||||||
in {
|
in {
|
||||||
options.home.dev.vcs.jj = {
|
options.home.dev.vcs.jj = {
|
||||||
enable = mkEnableOption "enables jj";
|
enable = mkEnableOption "enables jj";
|
||||||
@@ -33,65 +36,96 @@ in {
|
|||||||
description = "Path to the private SSH key for signing.";
|
description = "Path to the private SSH key for signing.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
cz = {
|
||||||
|
enable = mkEnableOption "Enables jj-cz";
|
||||||
|
alias = mkEnableOption "Enable `jj cz` as an alias to `jj-cz`";
|
||||||
|
};
|
||||||
|
# used in my shell .nix files
|
||||||
|
shellCompletion = mkOption {
|
||||||
|
description = "Enable Jujutsu shell completion";
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config.programs.jujutsu = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
enable = true;
|
home.packages = mkIf cfg.cz.enable [jj-cz];
|
||||||
settings = {
|
programs.jujutsu = {
|
||||||
user = {
|
enable = true;
|
||||||
inherit (cfg) name email;
|
settings = {
|
||||||
};
|
user = {
|
||||||
ui = {
|
inherit (cfg) name email;
|
||||||
default-command = "st";
|
};
|
||||||
pager = ":builtin";
|
ui = {
|
||||||
show-cryptographic-signatures = true;
|
default-command = "st";
|
||||||
conflict-marker-style = "git"; # Support for vc-jj.el
|
pager = ":builtin";
|
||||||
diff-formatter = ":git"; # Support for vc-jj.el
|
show-cryptographic-signatures = true;
|
||||||
diff-editor = ":builtin";
|
diff-editor = ":builtin";
|
||||||
inherit (cfg) editor;
|
merge-editort = ":builtin";
|
||||||
};
|
inherit (cfg) editor;
|
||||||
signing = mkIf cfg.signing.enable {
|
};
|
||||||
behavior = "own";
|
signing = mkIf cfg.signing.enable {
|
||||||
backend = "ssh";
|
behavior = "own";
|
||||||
key = cfg.signing.sshKey;
|
backend = "ssh";
|
||||||
backends.ssh.allowed-signers = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
key = cfg.signing.sshKey;
|
||||||
backends.ssh.program = "${pkgs.openssh}/bin/ssh-keygen";
|
backends.ssh.allowed-signers = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
||||||
};
|
backends.ssh.program = "${pkgs.openssh}/bin/ssh-keygen";
|
||||||
aliases = {
|
};
|
||||||
blame = ["file" "annotate"];
|
aliases = {
|
||||||
consume = ["squash" "--into" "@" "--from"];
|
blame = ["file" "annotate"];
|
||||||
eject = ["squash" "--from" "@" "--into"];
|
consume = ["squash" "--into" "@" "--from"];
|
||||||
d = ["diff"];
|
cz = mkIf cfg.cz.alias ["util" "exec" "--" "${jj-cz}/bin/jj-cz"];
|
||||||
dm = ["desc" "-m"];
|
eject = ["squash" "--from" "@" "--into"];
|
||||||
l = ["log"];
|
d = ["diff"];
|
||||||
lc = ["log" "-r" "(remote_bookmarks()..@)::"];
|
dm = ["desc" "-m"];
|
||||||
ll = ["log" "-T" "builtin_log_detailed"];
|
gc = ["git" "clone"];
|
||||||
open = ["log" "-r" "open()"];
|
gcc = ["git" "clone" "--colocate"];
|
||||||
n = ["new"];
|
l = ["log"];
|
||||||
nd = ["new" "dev()"];
|
la = ["log" "-r" "::"];
|
||||||
nt = ["new" "trunk()"];
|
lc = ["log" "-r" "(remote_bookmarks()..@)::"];
|
||||||
s = ["show"];
|
ll = ["log" "-T" "builtin_log_detailed"];
|
||||||
tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"];
|
open = ["log" "-r" "open()"];
|
||||||
};
|
n = ["new"];
|
||||||
revset-aliases = {
|
nd = ["new" "dev()"];
|
||||||
"user(x)" = "author(x) | committer(x)";
|
nt = ["new" "trunk()"];
|
||||||
"gh_pages()" = "ancestors(remote_bookmarks(exact:\"gh-pages\"))";
|
revlog = ["evolog"];
|
||||||
"trunk()" = "latest((present(main) | present(master)) & remote_bookmarks())";
|
s = ["show"];
|
||||||
"dev()" = "latest((present(dev) | present(develop)) & remote_bookmarks())";
|
tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"];
|
||||||
"wip()" = "description(glob:\"wip:*\")";
|
};
|
||||||
"private()" = "description(glob:\"private:*\")";
|
colors.working_copy.underline = true;
|
||||||
"blacklist()" = "wip() | private()";
|
git = {
|
||||||
# stack(x, n) is the set of mutable commits reachable from
|
private-commits = "blacklist()";
|
||||||
# 'x', with 'n' parents. 'n' is often useful to customize the
|
colocate = true;
|
||||||
# display and return set for certain operations. 'x' can be
|
subprocess = true;
|
||||||
# used to target the set of 'roots' to traverse, e.g. @ is the
|
};
|
||||||
# current stack.
|
revset-aliases = {
|
||||||
"stack()" = "ancestors(reachable(@, mutable()), 2)";
|
"immutable_heads()" = "present(trunk()) | tags()";
|
||||||
"stack(x)" = "ancestors(reachable(x, mutable()), 2)";
|
# Resolves by default to latest main/master remote bookmarks
|
||||||
"stack(x, n)" = "ancestors(reachable(x, mutable()), n)";
|
"trunk()" = "latest((present(main) | present(master)) & remote_bookmarks())";
|
||||||
|
# Same as trunk() but for `dev` or `develop` bookmarks
|
||||||
|
"dev()" = "latest((present(dev) | present(develop)) & remote_bookmarks())";
|
||||||
|
|
||||||
"open()" = "stack(dev().. & mine(), 1)";
|
"user(x)" = "author(x) | committer(x)";
|
||||||
"ready()" = "open() ~ blacklist()::";
|
"gh_pages()" = "ancestors(remote_bookmarks(exact:\"gh-pages\"))";
|
||||||
|
|
||||||
|
#Private and WIP commits that should never be pushed
|
||||||
|
"wip()" = "description(glob:\"wip:*\")";
|
||||||
|
"private()" = "description(glob:\"private:*\")";
|
||||||
|
"blacklist()" = "wip() | private()";
|
||||||
|
|
||||||
|
# stack(x, n) is the set of mutable commits reachable from
|
||||||
|
# 'x', with 'n' parents. 'n' is often useful to customize the
|
||||||
|
# display and return set for certain operations. 'x' can be
|
||||||
|
# used to target the set of 'roots' to traverse, e.g. @ is the
|
||||||
|
# current stack.
|
||||||
|
"stack()" = "ancestors(reachable(@, mutable()), 2)";
|
||||||
|
"stack(x)" = "ancestors(reachable(x, mutable()), 2)";
|
||||||
|
"stack(x, n)" = "ancestors(reachable(x, mutable()), n)";
|
||||||
|
|
||||||
|
"open()" = "stack(dev().. & mine(), 1)";
|
||||||
|
"ready()" = "open() ~ blacklist()::";
|
||||||
|
};
|
||||||
|
remotes.origin.auto-track-bookmarks = "*";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ in {
|
|||||||
./mpd.nix
|
./mpd.nix
|
||||||
./mpd-mpris.nix
|
./mpd-mpris.nix
|
||||||
./mpv.nix
|
./mpv.nix
|
||||||
|
./ncmpcpp.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
options.home.media.fullDesktop = mkEnableOption "Enables everything";
|
options.home.media.fullDesktop = mkEnableOption "Enables everything";
|
||||||
@@ -18,5 +19,6 @@ in {
|
|||||||
mopidy.enable = mkDefault cfg.fullDesktop;
|
mopidy.enable = mkDefault cfg.fullDesktop;
|
||||||
mpd.enable = mkDefault (cfg.fullDesktop or cfg.mpd-mpris.enable);
|
mpd.enable = mkDefault (cfg.fullDesktop or cfg.mpd-mpris.enable);
|
||||||
mpv.enable = mkDefault cfg.fullDesktop;
|
mpv.enable = mkDefault cfg.fullDesktop;
|
||||||
|
ncmpcpp.enable = mkDefault config.home.media.mpd.enable;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ in {
|
|||||||
bind_to_address "localhost"
|
bind_to_address "localhost"
|
||||||
auto_update "yes"
|
auto_update "yes"
|
||||||
|
|
||||||
|
audio_output {
|
||||||
|
type "pipewire"
|
||||||
|
name "PipeWire"
|
||||||
|
}
|
||||||
|
|
||||||
audio_output {
|
audio_output {
|
||||||
type "fifo"
|
type "fifo"
|
||||||
name "my_fifo"
|
name "my_fifo"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ in {
|
|||||||
force-seekable = true; # force streams to be seekable
|
force-seekable = true; # force streams to be seekable
|
||||||
slang = "jpn,jp,eng,en,fra,fr";
|
slang = "jpn,jp,eng,en,fra,fr";
|
||||||
alang = "eng,en,fra,fr";
|
alang = "eng,en,fra,fr";
|
||||||
gpu-api = "vulkan";
|
gpu-api = "auto";
|
||||||
osc = true;
|
osc = true;
|
||||||
profile = "gpu-hq";
|
profile = "gpu-hq";
|
||||||
# geometry = "50%x50%";
|
# geometry = "50%x50%";
|
||||||
@@ -44,7 +44,7 @@ in {
|
|||||||
encode
|
encode
|
||||||
inhibit-gnome
|
inhibit-gnome
|
||||||
mpris
|
mpris
|
||||||
mpv-cheatsheet
|
mpv-cheatsheet-ng
|
||||||
quality-menu
|
quality-menu
|
||||||
sponsorblock
|
sponsorblock
|
||||||
thumbfast
|
thumbfast
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.home.media.ncmpcpp;
|
||||||
|
in {
|
||||||
|
options.home.media.ncmpcpp.enable = mkEnableOption "Enable ncmpcpp";
|
||||||
|
config.programs.ncmpcpp = let
|
||||||
|
musicDir = config.services.mpd.musicDirectory;
|
||||||
|
in
|
||||||
|
mkIf cfg.enable {
|
||||||
|
inherit (cfg) enable;
|
||||||
|
mpdMusicDir = musicDir;
|
||||||
|
settings = {
|
||||||
|
# directories
|
||||||
|
ncmpcpp_directory = "${config.home.homeDirectory}/.config/ncmpcpp";
|
||||||
|
lyrics_directory = "${musicDir}/.lyrics";
|
||||||
|
|
||||||
|
# MPD
|
||||||
|
mpd_host = "localhost";
|
||||||
|
mpd_port = 6600;
|
||||||
|
mpd_connection_timeout = 5;
|
||||||
|
mpd_crossfade_time = 0;
|
||||||
|
|
||||||
|
# music visualizer
|
||||||
|
visualizer_output_name = "my_fifo";
|
||||||
|
visualizer_in_stereo = "yes";
|
||||||
|
# visualizer_type = "spectrum";
|
||||||
|
visualizer_look = "+|";
|
||||||
|
visualizer_color = "blue, cyan, green, yellow, magenta, red";
|
||||||
|
|
||||||
|
system_encoding = "UTF-8";
|
||||||
|
|
||||||
|
# song format
|
||||||
|
song_list_format = "(6)[]{} (23)[red]{a} (26)[yellow]{t|f} (40)[green]{b} (4)[blue]{l}";
|
||||||
|
now_playing_prefix = "$b";
|
||||||
|
now_playing_suffix = "$8$/b";
|
||||||
|
|
||||||
|
# columns settings
|
||||||
|
song_columns_list_format = "(6)[]{} (23)[red]{a} (26)[yellow]{t|f} (40)[green]{b} (4)[blue]{l}";
|
||||||
|
|
||||||
|
playlist_shorten_total_times = "yes";
|
||||||
|
playlist_display_mode = "columns";
|
||||||
|
browser_display_mode = "columns";
|
||||||
|
search_engine_display_mode = "columns";
|
||||||
|
playlist_editor_display_mode = "columns";
|
||||||
|
autocenter_mode = "yes";
|
||||||
|
centered_cursor = "yes";
|
||||||
|
|
||||||
|
progressbar_look = "─> ";
|
||||||
|
header_visibility = "no";
|
||||||
|
statusbar_visibility = "no";
|
||||||
|
titles_visibility = "no";
|
||||||
|
allow_for_physical_item_deletion = "yes";
|
||||||
|
|
||||||
|
lastfm_preferred_language = "en";
|
||||||
|
space_add_mode = "add_remove";
|
||||||
|
|
||||||
|
locked_screen_width_part = "50";
|
||||||
|
ask_for_locked_screen_width_part = "yes";
|
||||||
|
jump_to_now_playing_song_at_start = "yes";
|
||||||
|
ask_before_clearing_playlists = "yes";
|
||||||
|
clock_display_seconds = "no";
|
||||||
|
display_volume_level = "yes";
|
||||||
|
display_bitrate = "no";
|
||||||
|
display_remaining_time = "yes";
|
||||||
|
regular_expressions = "extended";
|
||||||
|
ignore_leading_the = "yes";
|
||||||
|
ignore_diacritics = "yes";
|
||||||
|
mouse_support = "no";
|
||||||
|
tags_separator = ";";
|
||||||
|
enable_window_title = "yes";
|
||||||
|
search_engine_default_search_mode = 1;
|
||||||
|
external_editor = "emacsclient -c";
|
||||||
|
use_console_editor = "yes";
|
||||||
|
|
||||||
|
# colours
|
||||||
|
colors_enabled = "yes";
|
||||||
|
volume_color = "default";
|
||||||
|
progressbar_color = "black";
|
||||||
|
progressbar_elapsed_color = "white";
|
||||||
|
statusbar_color = "white";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.services.blanket;
|
cfg = config.home.myServices.blanket;
|
||||||
in {
|
in {
|
||||||
options.home.services.blanket.enable = mkEnableOption "Enable blanket";
|
options.home.myServices.blanket.enable = mkEnableOption "Enable blanket";
|
||||||
config.services.blanket.enable = cfg.enable;
|
config.services.blanket.enable = cfg.enable;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.services;
|
cfg = config.home.myServices;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./blanket.nix
|
./blanket.nix
|
||||||
@@ -12,8 +12,12 @@ in {
|
|||||||
./mpris-proxy.nix
|
./mpris-proxy.nix
|
||||||
./playerctld.nix
|
./playerctld.nix
|
||||||
];
|
];
|
||||||
options.home.services.fullDesktop = mkEnableOption "Enable all modules";
|
options.home.myServices.fullDesktop = mkOption {
|
||||||
config.home.services = {
|
description = "Enable all modules";
|
||||||
|
type = types.bool;
|
||||||
|
default = config.home.fullDesktop;
|
||||||
|
};
|
||||||
|
config.home.myServices = {
|
||||||
blanket.enable = mkDefault cfg.fullDesktop;
|
blanket.enable = mkDefault cfg.fullDesktop;
|
||||||
mbsync.enable = mkDefault cfg.fullDesktop;
|
mbsync.enable = mkDefault cfg.fullDesktop;
|
||||||
mpris-proxy.enable = mkDefault cfg.fullDesktop;
|
mpris-proxy.enable = mkDefault cfg.fullDesktop;
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.services.mbsync;
|
cfg = config.home.myServices.mbsync;
|
||||||
in {
|
in {
|
||||||
options.home.services.mbsync = {
|
options.home.myServices.mbsync = {
|
||||||
enable = mkEnableOption "Enables mbsync";
|
enable = mkEnableOption "Enables mbsync";
|
||||||
service.enable = mkOption {
|
service.enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.services.mpris-proxy;
|
cfg = config.home.myServices.mpris-proxy;
|
||||||
in {
|
in {
|
||||||
options.home.services.mpris-proxy.enable = mkEnableOption "Enable MPRIS forwarding towards bluetooth and MIDI";
|
options.home.myServices.mpris-proxy.enable = mkEnableOption "Enable MPRIS forwarding towards bluetooth and MIDI";
|
||||||
config.services.mpris-proxy.enable = cfg.enable;
|
config.services.mpris-proxy.enable = cfg.enable;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.services.playerctld;
|
cfg = config.home.myServices.playerctld;
|
||||||
in {
|
in {
|
||||||
options.home.services.playerctld.enable = mkEnableOption "Enable playerctld daemon";
|
options.home.myServices.playerctld.enable = mkEnableOption "Enable playerctld daemon";
|
||||||
config.services.playerctld.enable = cfg.enable;
|
config.services.playerctld.enable = cfg.enable;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ in {
|
|||||||
lns = "ln -si";
|
lns = "ln -si";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
autocompletion = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = config.home.shell.autocompletion;
|
||||||
|
example = true;
|
||||||
|
};
|
||||||
eatIntegration = mkEnableOption "Enable Emacs Eat integration";
|
eatIntegration = mkEnableOption "Enable Emacs Eat integration";
|
||||||
bashrcExtra = mkOption {
|
bashrcExtra = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
@@ -31,8 +36,10 @@ in {
|
|||||||
concatLines
|
concatLines
|
||||||
[
|
[
|
||||||
(strings.optionalString cfg.eatIntegration ''[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/bash"'')
|
(strings.optionalString cfg.eatIntegration ''[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/bash"'')
|
||||||
|
(strings.optionalString config.home.dev.vcs.jj.shellCompletion "source <(jj util completion bash)")
|
||||||
cfg.bashrcExtra
|
cfg.bashrcExtra
|
||||||
];
|
];
|
||||||
|
enableCompletion = cfg.autocompletion;
|
||||||
shellAliases = cfg.aliases;
|
shellAliases = cfg.aliases;
|
||||||
shellOptions = [
|
shellOptions = [
|
||||||
"histappend"
|
"histappend"
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ in {
|
|||||||
./fish.nix
|
./fish.nix
|
||||||
./starship.nix
|
./starship.nix
|
||||||
./tmux.nix
|
./tmux.nix
|
||||||
|
./zellij.nix
|
||||||
./zsh.nix
|
./zsh.nix
|
||||||
./zoxide.nix
|
./zoxide.nix
|
||||||
];
|
];
|
||||||
@@ -88,19 +89,23 @@ in {
|
|||||||
default = {};
|
default = {};
|
||||||
example = {la = "ls -a";};
|
example = {la = "ls -a";};
|
||||||
};
|
};
|
||||||
|
autocompletion = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
config.home.shell = {
|
config.home.shell = {
|
||||||
enableShellIntegration = cfg.bash.enable or cfg.zsh.enable or cfg.fish.enable;
|
enableShellIntegration = cfg.bash.enable or cfg.zsh.enable or cfg.fish.enable;
|
||||||
bash = {
|
bash = {
|
||||||
aliases = cfg.aliases // defaultAliases;
|
aliases = defaultAliases // cfg.aliases;
|
||||||
enable = mkDefault cfg.fullDesktop;
|
enable = mkDefault cfg.fullDesktop;
|
||||||
};
|
};
|
||||||
fish = {
|
fish = {
|
||||||
abbrs = cfg.aliases // defaultAliases;
|
abbrs = defaultAliases // cfg.aliases;
|
||||||
enable = mkDefault cfg.fullDesktop;
|
enable = mkDefault cfg.fullDesktop;
|
||||||
};
|
};
|
||||||
zsh = {
|
zsh = {
|
||||||
abbrs = cfg.aliases // defaultAliases;
|
abbrs = defaultAliases // cfg.aliases;
|
||||||
enable = mkDefault cfg.fullDesktop;
|
enable = mkDefault cfg.fullDesktop;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ in {
|
|||||||
lns = "ln -si";
|
lns = "ln -si";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
autocompletion = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = config.home.shell.autocompletion;
|
||||||
|
example = true;
|
||||||
|
};
|
||||||
extraShellInit = mkOption {
|
extraShellInit = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
default = "";
|
default = "";
|
||||||
@@ -26,6 +31,7 @@ in {
|
|||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
programs.fish = {
|
programs.fish = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
generateCompletions = cfg.autocompletion;
|
||||||
shellAbbrs = cfg.abbrs;
|
shellAbbrs = cfg.abbrs;
|
||||||
preferAbbrs = true;
|
preferAbbrs = true;
|
||||||
shellInit = with lib;
|
shellInit = with lib;
|
||||||
@@ -35,6 +41,7 @@ in {
|
|||||||
__fish_default_command_not_found_handler $argv
|
__fish_default_command_not_found_handler $argv
|
||||||
end
|
end
|
||||||
''
|
''
|
||||||
|
(strings.optionalString config.home.dev.vcs.jj.shellCompletion "jj util completion fish | source")
|
||||||
cfg.extraShellInit
|
cfg.extraShellInit
|
||||||
];
|
];
|
||||||
plugins = [
|
plugins = [
|
||||||
|
|||||||
@@ -6,8 +6,42 @@
|
|||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.home.shell.tmux;
|
cfg = config.home.shell.tmux;
|
||||||
|
keyType = types.submodule {
|
||||||
|
options = {
|
||||||
|
key = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "C-b";
|
||||||
|
};
|
||||||
|
action = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "resize-pane -Z";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
in {
|
in {
|
||||||
options.home.shell.tmux.enable = mkEnableOption "Enable tmux";
|
options.home.shell.tmux = with types; {
|
||||||
|
enable = mkEnableOption "Enable tmux";
|
||||||
|
bind = mkOption {
|
||||||
|
type = attrsOf (listOf keyType);
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
"prefix" = [
|
||||||
|
{
|
||||||
|
key = "C-r";
|
||||||
|
action = "resize-pane -R";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
unbind = mkOption {
|
||||||
|
type = listOf (either str (attrsOf (listOf str)));
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
extraConfig = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
config.programs.tmux = mkIf cfg.enable {
|
config.programs.tmux = mkIf cfg.enable {
|
||||||
inherit (cfg) enable;
|
inherit (cfg) enable;
|
||||||
baseIndex = 1;
|
baseIndex = 1;
|
||||||
@@ -25,71 +59,23 @@ in {
|
|||||||
sensible
|
sensible
|
||||||
yank
|
yank
|
||||||
];
|
];
|
||||||
extraConfig = ''
|
extraConfig = let
|
||||||
set-option -sa terminal-overrides ",xterm*:Tc"
|
generateBinds = concatLines (
|
||||||
|
mapAttrsToList (table: keys: concatMapStrings (key: "bind -T ${table} ${key.key} ${key.action}\n") keys) cfg.bind
|
||||||
|
);
|
||||||
|
generateUnbind =
|
||||||
|
concatMapStrings (
|
||||||
|
entry:
|
||||||
|
if builtins.isString entry
|
||||||
|
then "unbind ${entry}\n"
|
||||||
|
else concatStrings (mapAttrsToList (table: keys: concatMapStrings (key: "unbind -T ${table} ${key}\n") keys) entry)
|
||||||
|
)
|
||||||
|
cfg.unbind;
|
||||||
|
in ''
|
||||||
|
${cfg.extraConfig}
|
||||||
|
|
||||||
unbind C-b
|
${generateUnbind}
|
||||||
|
${generateBinds}
|
||||||
bind-key -T prefix « select-window -p
|
|
||||||
bind-key -T prefix » select-window -n
|
|
||||||
bind-key -T prefix Tab switch-client -T windows
|
|
||||||
bind-key -T prefix w switch-client -T pane
|
|
||||||
bind-key -T prefix y switch-client -T copy-mode
|
|
||||||
|
|
||||||
bind-key -T pane / split-window -h -c "#{pane-current_path}"
|
|
||||||
bind-key -T pane - split-window -v -c "#{pane-current_path}"
|
|
||||||
bind-key -T pane c select-pane -L
|
|
||||||
bind-key -T pane t select-pane -D
|
|
||||||
bind-key -T pane s select-pane -U
|
|
||||||
bind-key -T pane r select-pane -R
|
|
||||||
bind-key -T pane f resize-pane -Z
|
|
||||||
bind-key -T pane . switch-client -T pane-resize
|
|
||||||
|
|
||||||
bind-key -T pane-resize c resize-pane -L 5\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize t resize-pane -D 5\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize s resize-pane -U 5\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize r resize-pane -R 5\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize C resize-pane -L\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize T resize-pane -D\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize S resize-pane -U\; switch-client -T pane-resize
|
|
||||||
bind-key -T pane-resize R resize-pane -R\; switch-client -T pane-resize
|
|
||||||
|
|
||||||
bind-key -T windows c new-window
|
|
||||||
bind-key -T windows n next-window
|
|
||||||
bind-key -T windows p previous-window
|
|
||||||
|
|
||||||
bind-key -T windows \" select-window -t :=1
|
|
||||||
bind-key -T windows « select-window -t :=2
|
|
||||||
bind-key -T windows » select-window -t :=3
|
|
||||||
bind-key -T windows ( select-window -t :=4
|
|
||||||
bind-key -T windows ) select-window -t :=5
|
|
||||||
bind-key -T windows @ select-window -t :=6
|
|
||||||
bind-key -T windows + select-window -t :=7
|
|
||||||
bind-key -T windows - select-window -t :=8
|
|
||||||
bind-key -T windows / select-window -t :=9
|
|
||||||
bind-key -T windows * select-window -t :=10
|
|
||||||
|
|
||||||
unbind -T copy-mode-vi H
|
|
||||||
unbind -T copy-mode-vi J
|
|
||||||
unbind -T copy-mode-vi K
|
|
||||||
unbind -T copy-mode-vi L
|
|
||||||
unbind -T copy-mode-vi h
|
|
||||||
unbind -T copy-mode-vi j
|
|
||||||
unbind -T copy-mode-vi k
|
|
||||||
unbind -T copy-mode-vi l
|
|
||||||
|
|
||||||
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
|
||||||
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
|
|
||||||
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
|
|
||||||
bind-key -T copy-mode-vi C send-keys -X top-line
|
|
||||||
bind-key -T copy-mode-vi J send-keys -X jump-to-backward
|
|
||||||
bind-key -T copy-mode-vi S send-keys -X scroll-up
|
|
||||||
bind-key -T copy-mode-vi R send-keys -X bottom-line
|
|
||||||
bind-key -T copy-mode-vi T send-keys -X scroll-down
|
|
||||||
bind-key -T copy-mode-vi c send-keys -X cursor-left
|
|
||||||
bind-key -T copy-mode-vi t send-keys -X cursor-down
|
|
||||||
bind-key -T copy-mode-vi s send-keys -X cursor-up
|
|
||||||
bind-key -T copy-mode-vi r send-keys -X cursor-right
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,173 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.home.shell.zellij;
|
||||||
|
isEmpty = list: list == [];
|
||||||
|
keybind = {
|
||||||
|
options = {
|
||||||
|
bind = mkOption {
|
||||||
|
type = types.either types.str (types.listOf types.str);
|
||||||
|
example = "Alt j";
|
||||||
|
description = "Value used as a string after `bind` in zellij config";
|
||||||
|
};
|
||||||
|
actions = mkOption {
|
||||||
|
type = with types; let
|
||||||
|
allowed = oneOf [int str];
|
||||||
|
in
|
||||||
|
attrsOf (either (listOf allowed) allowed);
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
SwitchToMode = ["normal"];
|
||||||
|
SwitchFocus = [];
|
||||||
|
PaneNameInput = [0];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
useUnlockFirst = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Go back to locked mode after the actions are done.
|
||||||
|
|
||||||
|
Only works when `config.home.shell.zellij.useUnlockFirst` is true.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
convertBind = item: {
|
||||||
|
bind = let
|
||||||
|
useUnlockFirst = cfg.useUnlockFirst && item.useUnlockFirst;
|
||||||
|
children =
|
||||||
|
mapAttrsToList (action: args: let
|
||||||
|
actualArgs =
|
||||||
|
if isEmpty args
|
||||||
|
then {}
|
||||||
|
else {_args = lists.toList args;};
|
||||||
|
in {"${action}" = actualArgs;})
|
||||||
|
(item.actions
|
||||||
|
// (
|
||||||
|
if useUnlockFirst
|
||||||
|
then {SwitchToMode = ["locked"];}
|
||||||
|
else {}
|
||||||
|
));
|
||||||
|
in {
|
||||||
|
_args = lists.toList item.bind;
|
||||||
|
_children = children;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
keybindsModule = {
|
||||||
|
options = mergeAttrsList (forEach [
|
||||||
|
"normal"
|
||||||
|
"locked"
|
||||||
|
"resize"
|
||||||
|
"pane"
|
||||||
|
"move"
|
||||||
|
"tab"
|
||||||
|
"scroll"
|
||||||
|
"search"
|
||||||
|
"entersearch"
|
||||||
|
"renametab"
|
||||||
|
"renamepane"
|
||||||
|
"session"
|
||||||
|
"tmux"
|
||||||
|
]
|
||||||
|
(x: {
|
||||||
|
"${x}" = mkOption {
|
||||||
|
type = types.listOf (types.submodule keybind);
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
makeKeybinds = keybinds: let
|
||||||
|
values =
|
||||||
|
attrsets.concatMapAttrs (
|
||||||
|
mode: binds:
|
||||||
|
if (isEmpty binds)
|
||||||
|
then {}
|
||||||
|
else {
|
||||||
|
"${mode}"._children = lists.forEach binds convertBind;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
keybinds;
|
||||||
|
in
|
||||||
|
if values == {}
|
||||||
|
then {}
|
||||||
|
else {
|
||||||
|
keybinds = values;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.home.shell.zellij = let
|
||||||
|
jsonFormat = pkgs.formats.yaml {};
|
||||||
|
in {
|
||||||
|
enable = mkEnableOption "Enable Zellij";
|
||||||
|
clearDefaultKeybinds = mkEnableOption "Clear default keybinds";
|
||||||
|
settings = mkOption {
|
||||||
|
inherit (jsonFormat) type;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
layouts = mkOption {
|
||||||
|
inherit (jsonFormat) type;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
extraSettings = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
Extra configuration lines to add to `$XDG_CONFIG_HOME/zellij/config.kdl`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useUnlockFirst = mkEnableOption "Use Unlock-First (non-colliding) behaviour by default";
|
||||||
|
plugins = mkOption {
|
||||||
|
type = types.listOf (types.submodule plugin);
|
||||||
|
default = {};
|
||||||
|
example = [
|
||||||
|
{name = "about";}
|
||||||
|
{
|
||||||
|
name = "filepicker";
|
||||||
|
location = "zellij:strider";
|
||||||
|
options = {
|
||||||
|
cwd = "/";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
keybinds = mkOption {
|
||||||
|
type = types.submodule keybindsModule;
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
pane = [
|
||||||
|
{
|
||||||
|
bind = "c";
|
||||||
|
actions = [
|
||||||
|
{
|
||||||
|
action = "SwitchToMode";
|
||||||
|
args = ["renamepane"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "PaneNameInput";
|
||||||
|
args = [0];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config.programs.zellij = mkIf cfg.enable {
|
||||||
|
inherit (cfg) enable layouts;
|
||||||
|
extraConfig = cfg.extraSettings;
|
||||||
|
settings = let
|
||||||
|
resetKeybinds =
|
||||||
|
if cfg.clearDefaultKeybinds
|
||||||
|
then {
|
||||||
|
keybinds._props.clear-defaults = true;
|
||||||
|
}
|
||||||
|
else {};
|
||||||
|
keybinds = makeKeybinds cfg.keybinds;
|
||||||
|
in
|
||||||
|
cfg.settings // resetKeybinds // keybinds;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -17,6 +17,11 @@ in {
|
|||||||
lns = "ln -si";
|
lns = "ln -si";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
autocompletion = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = config.home.shell.autocompletion;
|
||||||
|
example = true;
|
||||||
|
};
|
||||||
eatIntegration = mkEnableOption "Enable Emacs Eat integration";
|
eatIntegration = mkEnableOption "Enable Emacs Eat integration";
|
||||||
zshrcExtra = lib.mkOption {
|
zshrcExtra = lib.mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
@@ -32,7 +37,7 @@ in {
|
|||||||
enable = true;
|
enable = true;
|
||||||
strategy = ["match_prev_cmd" "completion"];
|
strategy = ["match_prev_cmd" "completion"];
|
||||||
};
|
};
|
||||||
enableCompletion = true;
|
enableCompletion = cfg.autocompletion;
|
||||||
enableVteIntegration = true;
|
enableVteIntegration = true;
|
||||||
history = {
|
history = {
|
||||||
findNoDups = true;
|
findNoDups = true;
|
||||||
@@ -57,6 +62,11 @@ in {
|
|||||||
zstyle ':fzf-tab:complete:cd:*' fzf-preview '${pkgs.eza}/bin/eza $realpath'
|
zstyle ':fzf-tab:complete:cd:*' fzf-preview '${pkgs.eza}/bin/eza $realpath'
|
||||||
''
|
''
|
||||||
(strings.optionalString cfg.eatIntegration ''[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/zsh"'')
|
(strings.optionalString cfg.eatIntegration ''[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/zsh"'')
|
||||||
|
(strings.optionalString config.home.dev.vcs.jj.shellCompletion ''
|
||||||
|
autoload -U compinit
|
||||||
|
compinit
|
||||||
|
source <(jj util completion zsh)
|
||||||
|
'')
|
||||||
cfg.zshrcExtra
|
cfg.zshrcExtra
|
||||||
];
|
];
|
||||||
oh-my-zsh = {
|
oh-my-zsh = {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
|||||||
|
{config, ...}: {
|
||||||
|
home.dev.ai = {
|
||||||
|
enable = true;
|
||||||
|
opencode = {
|
||||||
|
tui = {
|
||||||
|
mouse = true;
|
||||||
|
theme = "nord";
|
||||||
|
attention = {
|
||||||
|
enabled = true;
|
||||||
|
notifications = true;
|
||||||
|
};
|
||||||
|
keybinds = {
|
||||||
|
leader = "ctrl+x";
|
||||||
|
"command_list" = "<leader><leader>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
autoupdate = false;
|
||||||
|
provider = {
|
||||||
|
ollama = {
|
||||||
|
npm = "@ai-sdk/openai-compatible";
|
||||||
|
name = "Ollama (marpa)";
|
||||||
|
options.baseURL = "http://marpa:11434/v1";
|
||||||
|
};
|
||||||
|
models = {
|
||||||
|
"qwen3.5:9b".name = "Qwen 3.5 Medium";
|
||||||
|
"gemma4:e4b".name = "Gemma E4B";
|
||||||
|
"qwen2.5-coder:1.5b-base".name = "Qwen 2.5 Coder Light";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
permission = {
|
||||||
|
"*" = "ask";
|
||||||
|
glob = "allow";
|
||||||
|
grep = "allow";
|
||||||
|
read = {
|
||||||
|
"*" = "allow";
|
||||||
|
"*.env" = "deny";
|
||||||
|
"*.env.*" = "deny";
|
||||||
|
"*.env.example" = "allow";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
formatter.nixfmt = {
|
||||||
|
command = ["nix" "fmt" "$FILE"];
|
||||||
|
extensions = [".nix"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
web = {
|
||||||
|
enable = true;
|
||||||
|
cors = config.sops.secrets."opencode/cors".path;
|
||||||
|
mdns.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
@@@ Sauvez un arbre, mangez un castor @@@
|
@@@ Sauvez un arbre, mangez un castor @@@
|
||||||
@@@ Save a tree, eat a beaver @@@
|
@@@ Save a tree, eat a beaver @@@
|
||||||
|
@@@ Bjarg tré, et bjórr @@@
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
home.file.".signature" = {
|
home.file.".signature" = {
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
config.home.desktop.firefox = {
|
||||||
|
enable = true;
|
||||||
|
useZen = true;
|
||||||
|
tridactyl = {
|
||||||
|
enable = true;
|
||||||
|
preConfig = "sanitise tridactyllocal tridactylsync";
|
||||||
|
config = {
|
||||||
|
editorcmd = "emacsclient -c";
|
||||||
|
keyboardlayoutbase = "bepo";
|
||||||
|
keyboardlayoutforce = "true";
|
||||||
|
hintchars = "auiectsr";
|
||||||
|
smothscroll = "true";
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
unbind h
|
||||||
|
unbind j
|
||||||
|
unbind k
|
||||||
|
unbind l
|
||||||
|
unbind c
|
||||||
|
unbind t
|
||||||
|
unbind s
|
||||||
|
unbind r
|
||||||
|
unbind H
|
||||||
|
unbind J
|
||||||
|
unbind K
|
||||||
|
unbind L
|
||||||
|
unbind C
|
||||||
|
unbind T
|
||||||
|
unbind S
|
||||||
|
unbind R
|
||||||
|
|
||||||
|
" === Bépo layout — scrolling (ctsr = hjkl) ===
|
||||||
|
bind c scrollpx -300 0
|
||||||
|
bind t scrollline 5
|
||||||
|
bind s scrollline -5
|
||||||
|
bind r scrollpx 300 0
|
||||||
|
|
||||||
|
" Half/full page scroll (replacing C-f/C-b/C-d/C-u)
|
||||||
|
bind <C-t> scrollpage 0.5
|
||||||
|
bind <C-s> scrollpage -0.5
|
||||||
|
|
||||||
|
" === History navigation (C/R = H/L) ===
|
||||||
|
bind C back
|
||||||
|
bind R forward
|
||||||
|
|
||||||
|
" === Tab navigation ===
|
||||||
|
bind T tabnext
|
||||||
|
bind S tabprev
|
||||||
|
|
||||||
|
" === Displaced commands ===
|
||||||
|
" reload was on r → move to h (bépo's 'replace' position)
|
||||||
|
bind h reload
|
||||||
|
bind H reloadhard
|
||||||
|
|
||||||
|
" tabopen was on t → move to j (bépo's 'find char to' position)
|
||||||
|
bind j fillcmdline tabopen
|
||||||
|
|
||||||
|
unbind ^http(s?)://youtube\.com f
|
||||||
|
unbind ^http(s?)://youtube\.com t
|
||||||
|
unbind ^http(s?)://youtube\.com l
|
||||||
|
unbind ^http(s?)://youtube\.com j
|
||||||
|
unbind ^http(s?)://twitch\.tv f
|
||||||
|
|
||||||
|
bind n findnext
|
||||||
|
bind N findnext -f
|
||||||
|
bind p findnext --reverse
|
||||||
|
bind P findnext -f --reverse
|
||||||
|
|
||||||
|
bind < urlincrement -1
|
||||||
|
bind > urlincrement 1
|
||||||
|
bind ypv js tri.native.run(`mpv --ytdl-format="[height >=? 480]" --ontop --fs "''${document.location.href}"`)
|
||||||
|
bind ypm hint -JF e => tri.native.run(`mpv --ytdl-format="[height >=? 480]" --ontop --fs "''${e.href}"`)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
+37
-12
@@ -5,9 +5,12 @@
|
|||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
|
./ai.nix
|
||||||
./light-home.nix
|
./light-home.nix
|
||||||
./packages.nix
|
./packages.nix
|
||||||
./email.nix
|
./email.nix
|
||||||
|
./firefox.nix
|
||||||
|
./tmux.nix
|
||||||
./wlr-which-key
|
./wlr-which-key
|
||||||
../modules
|
../modules
|
||||||
];
|
];
|
||||||
@@ -54,6 +57,7 @@
|
|||||||
emailPassword = {};
|
emailPassword = {};
|
||||||
"mopidy/bandcamp" = {};
|
"mopidy/bandcamp" = {};
|
||||||
"mopidy/spotify" = {};
|
"mopidy/spotify" = {};
|
||||||
|
"opencode/cors" = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
@@ -63,23 +67,44 @@
|
|||||||
LSP_USE_PLISTS = "true";
|
LSP_USE_PLISTS = "true";
|
||||||
OPENAI_API_URL = "http://localhost:1234/";
|
OPENAI_API_URL = "http://localhost:1234/";
|
||||||
};
|
};
|
||||||
desktop.caelestia.enable = true;
|
desktop = {
|
||||||
|
caelestia.enable = true;
|
||||||
|
spotify = {
|
||||||
|
enable = true;
|
||||||
|
spicetify.enable = true;
|
||||||
|
};
|
||||||
|
wl-kbptr = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
general = {
|
||||||
|
# first eight chars to select areas, last three chars
|
||||||
|
# for left, right, middle click
|
||||||
|
# First eigh chars to select areas: auiectsr
|
||||||
|
# last three chars for left, right, and middle click: tsr
|
||||||
|
home_row_keys = "auiectsrtsr";
|
||||||
|
modes = "tile,bisect,click";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
dev = {
|
dev = {
|
||||||
ai.claude.enable = true;
|
|
||||||
editors.emacs.package = emacsPackage;
|
editors.emacs.package = emacsPackage;
|
||||||
vcs.jj.signing.enable = true;
|
vcs.jj.signing.enable = true;
|
||||||
};
|
};
|
||||||
fullDesktop = true;
|
fullDesktop = true;
|
||||||
file."${config.home.homeDirectory}/.ssh/allowed_signers" = {
|
file = {
|
||||||
enable = true;
|
".XCompose".source = ./XCompose;
|
||||||
text = lib.strings.join "\n" (
|
"${config.home.homeDirectory}/.ssh/allowed_signers" = {
|
||||||
map (file: let
|
enable = true;
|
||||||
content = lib.strings.trim (builtins.readFile file);
|
text = lib.strings.join "\n" (
|
||||||
parts = lib.strings.splitString " " content;
|
map (file: let
|
||||||
email = lib.lists.last parts;
|
content = lib.strings.trim (builtins.readFile file);
|
||||||
in "${email} namespaces=\"git\" ${content}")
|
parts = lib.strings.splitString " " content;
|
||||||
(lib.filesystem.listFilesRecursive ../../keys)
|
email = lib.lists.last parts;
|
||||||
);
|
in "${email} namespaces=\"git\" ${content}")
|
||||||
|
(lib.filesystem.listFilesRecursive ./keys)
|
||||||
|
);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
imports = [../light-home.nix];
|
imports = [../light-home.nix];
|
||||||
home = {
|
home = {
|
||||||
cli.nh.flake = "${config.home.homeDirectory}/nixos";
|
cli.nh.flake = "${config.home.homeDirectory}/nixos";
|
||||||
phundrak.sshKey = {
|
phundrak.sshKey.content = builtins.readFile ../keys/id_alys.pub;
|
||||||
content = builtins.readFile ../../../keys/id_alys.pub;
|
|
||||||
# file = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
imports = [../light-home.nix];
|
||||||
|
home = {
|
||||||
|
cli.nh.flake = "/home/phundrak/.dotfiles";
|
||||||
|
dev.editors.emacs.enable = false;
|
||||||
|
phundrak.sshKey.content = builtins.readFile ../keys/id_elcafe.pub;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,8 +3,7 @@
|
|||||||
home = {
|
home = {
|
||||||
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
|
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
|
||||||
desktop.hyprland.host = "gampo";
|
desktop.hyprland.host = "gampo";
|
||||||
phundrak.sshKey = {
|
phundrak.sshKey.content = builtins.readFile ../keys/id_gampo.pub;
|
||||||
content = builtins.readFile ../../../keys/id_gampo.pub;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
programs.caelestia.settings.bar.persistent = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
{config, ...}: {
|
{config, ...}: {
|
||||||
imports = [../home.nix];
|
imports = [../home.nix];
|
||||||
home = {
|
home = {
|
||||||
|
gpuType = "amd";
|
||||||
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
|
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
|
||||||
dev.ai = {
|
dev.ai = {
|
||||||
enable = true;
|
enable = true;
|
||||||
ollama.gpu = "rocm";
|
ollama.gpu = "rocm";
|
||||||
};
|
};
|
||||||
desktop.hyprland.host = "marpa";
|
desktop.hyprland.host = "marpa";
|
||||||
phundrak.sshKey = {
|
phundrak.sshKey.content = builtins.readFile ../keys/id_marpa.pub;
|
||||||
content = builtins.readFile ../../../keys/id_marpa.pub;
|
};
|
||||||
};
|
programs.caelestia.settings.bar.status = {
|
||||||
|
showBattery = false;
|
||||||
|
showWifi = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
imports = [../light-home.nix];
|
imports = [../light-home.nix];
|
||||||
home = {
|
home = {
|
||||||
cli.nh.flake = "/home/phundrak/.dotfiles";
|
cli.nh.flake = "/home/phundrak/.dotfiles";
|
||||||
phundrak.sshKey.content = builtins.readFile ../../../keys/id_naromk3.pub;
|
phundrak.sshKey.content = builtins.readFile ../keys/id_naromk3.pub;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user