Compare commits
79 Commits
a7214db68c
...
feature/on
| Author | SHA1 | Date | |
|---|---|---|---|
|
800d0adeea
|
|||
|
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
|
|||
|
76d1a33a78
|
|||
|
f5fa1683b4
|
|||
|
36d5c90017
|
|||
|
5c9c3d199b
|
|||
|
be51aa7cc5
|
|||
|
f6fe7945bb
|
|||
|
f0398f4d9c
|
|||
|
a1842b22db
|
|||
|
615909867e
|
|||
|
a632ebbf07
|
|||
|
51f2c77c02
|
|||
|
e0226af16a
|
|||
|
7a1465bc3b
|
|||
|
87a7fc00fe
|
|||
|
c6b3abd1a7
|
|||
|
32c57b0671
|
|||
|
22bd5c7b2a
|
|||
|
813fc3026c
|
|||
|
5497d6df51
|
|||
|
1a43dcdad4
|
|||
|
93f009852f
|
|||
|
9071957b4c
|
|||
|
473a6f5b75
|
|||
|
521193d91d
|
|||
|
8adeeff9eb
|
|||
|
57788942b2
|
|||
|
6261e4f490
|
|||
|
e975e069d1
|
|||
|
6936ebeaf7
|
|||
|
5952720feb
|
|||
|
299d08a16a
|
|||
|
ea0af9342c
|
|||
|
7780f62cb5
|
|||
|
d98bb6cbdd
|
|||
|
405485f122
|
6
.envrc
6
.envrc
@@ -1,11 +1,7 @@
|
||||
# -*- 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.lock
|
||||
if ! use flake . --no-pure-eval
|
||||
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
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
keys:
|
||||
- &elcafe age1tkywsvddjj6r6ukuqgz9aql92jfx85rz57dhmkkndysh6yx6p5rs0zj0qr
|
||||
- &elcafe-host age17p69ktg7yfzgdsk00f32mupe4n4fevdpw2wsv7ft30yvpeseau6s7t0zdg
|
||||
- &gampo age1ajemtm502nn2n4q7v4j8meyd5mxtcqngkkedxq2pqzuwu78zp93qnw8q48
|
||||
- &gampo-host age197lfdanym647wdaz9uy8hrfqjwj9fs8rm7vs3fsrctceu8mr9gms2jedhz
|
||||
- &marpa age17pn6suvz2f7zmrm9zxj5hr0putvcvdamqxqt7ewhncgg6ccgmp2qr00xm2
|
||||
- &marpa-host age1cnnpnglkvgw5ffv8qpgwpqvj203lh4uwt698y9mxjwklxt8nysmsa8hepn
|
||||
- &tilo age1g68hxv73llkyc7etzh499ztcrt93pwawy0n8p93px4taqu58mehsp88vjq
|
||||
- &tilo-host age1awytvphvty4f9wmdn86xnjg9kgetqjx8qlwj5d2882t4fyyzy58s3vg5k4
|
||||
- &NaroMk3 age1erkn7dd022e90ktyj66aux9j9xvl0uzd6ru5cmrjsvcm5rtr5pfs7q6k9h
|
||||
- &NaroMk3-host age16crkeglm3j3f6rveylytuerptjf9mwtv3hl89ywkmnnvdkntfchsuvrsk5
|
||||
creation_rules:
|
||||
- path_regex: secrets/secrets.yaml$
|
||||
key_groups:
|
||||
@@ -15,3 +19,7 @@ creation_rules:
|
||||
- *marpa-host
|
||||
- *tilo
|
||||
- *tilo-host
|
||||
- *NaroMk3
|
||||
- *NaroMk3-host
|
||||
- *elcafe
|
||||
- *elcafe-host
|
||||
|
||||
17
README.md
17
README.md
@@ -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
|
||||
|
||||
@@ -8,7 +20,6 @@ Personal NixOS configuration for my machines, using Nix Flakes for reproducible
|
||||
- **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.
|
||||
- **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`.
|
||||
|
||||
## Usage
|
||||
|
||||
485
flake.lock
generated
485
flake.lock
generated
@@ -1,19 +1,47 @@
|
||||
{
|
||||
"nodes": {
|
||||
"alejandra": {
|
||||
"inputs": {
|
||||
"fenix": "fenix",
|
||||
"flakeCompat": "flakeCompat",
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1744324181,
|
||||
"narHash": "sha256-Oi1n2ncF4/AWeY6X55o2FddIRICokbciqFYK64XorYk=",
|
||||
"owner": "kamadorueda",
|
||||
"repo": "alejandra",
|
||||
"rev": "3e2a85506627062313e131bf8a85315f3387c8e0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "kamadorueda",
|
||||
"ref": "4.0.0",
|
||||
"repo": "alejandra",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"cachix": {
|
||||
"inputs": {
|
||||
"devenv": [
|
||||
"jj-cz",
|
||||
"devenv"
|
||||
],
|
||||
"flake-compat": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"git-hooks": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"git-hooks"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
@@ -33,7 +61,53 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"claude-desktop": {
|
||||
"caelestia-cli": {
|
||||
"inputs": {
|
||||
"caelestia-shell": [
|
||||
"caelestia-shell"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"caelestia-shell",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772764582,
|
||||
"narHash": "sha256-hSwjmpXHFqzSXrndVekA0IheKrbC7wi0IbfZTYwlmXw=",
|
||||
"owner": "caelestia-dots",
|
||||
"repo": "cli",
|
||||
"rev": "4bcd42f482d038b98145b0b03388244b68b7d35d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "caelestia-dots",
|
||||
"repo": "cli",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"caelestia-shell": {
|
||||
"inputs": {
|
||||
"caelestia-cli": "caelestia-cli",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"quickshell": "quickshell"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775660122,
|
||||
"narHash": "sha256-qMKB06TE0MY1anDQKBrzZEpktNPyvMxQQzTEEwWAA6I=",
|
||||
"owner": "caelestia-dots",
|
||||
"repo": "shell",
|
||||
"rev": "aa2b08dd45963dc9558de94dbff5e1615e347d02",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "caelestia-dots",
|
||||
"repo": "shell",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"copyparty": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
@@ -41,16 +115,16 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761825061,
|
||||
"narHash": "sha256-AeRQZKr8+1XQer+WmbwtQaQBy05UDgeNNE7YZjNLuS0=",
|
||||
"owner": "k3d3",
|
||||
"repo": "claude-desktop-linux-flake",
|
||||
"rev": "791cd93cfe216ad06ab740f0fdc142119b1d6ec2",
|
||||
"lastModified": 1775334496,
|
||||
"narHash": "sha256-dUopEMj5KhH1vnv43o29kMsayp0Ki+9EfIn4UAE9sAU=",
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"rev": "ede692925edfc6fca7a52f483414d543e9303237",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "k3d3",
|
||||
"repo": "claude-desktop-linux-flake",
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
@@ -61,16 +135,18 @@
|
||||
"flake-parts": "flake-parts",
|
||||
"git-hooks": "git-hooks",
|
||||
"nix": "nix",
|
||||
"nixd": "nixd",
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761922975,
|
||||
"narHash": "sha256-j4EB5ku/gDm7h7W7A+k70RYj5nUiW/l9wQtXMJUD2hg=",
|
||||
"lastModified": 1770304289,
|
||||
"narHash": "sha256-+g+XMyB1zi50h2N38GE32l7ZONX4oW7Nw6QSXzfNiwk=",
|
||||
"owner": "cachix",
|
||||
"repo": "devenv",
|
||||
"rev": "c9f0b47815a4895fadac87812de8a4de27e0ace1",
|
||||
"rev": "fd777e39027d393346e4df672d51ad2bf44b2a12",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -79,6 +155,29 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fenix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"alejandra",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730615655,
|
||||
"narHash": "sha256-2HBR3zLn57LXKNRtxBb+O+uDqHM4n0pz51rPayMl4cg=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "efeb50e2535b17ffd4a135e6e3e5fd60a525180c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@@ -98,6 +197,7 @@
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
@@ -116,7 +216,37 @@
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"systems": "systems"
|
||||
},
|
||||
@@ -134,7 +264,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"flake-utils_3": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
@@ -152,14 +282,50 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_4": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
]
|
||||
@@ -181,6 +347,7 @@
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"git-hooks",
|
||||
"nixpkgs"
|
||||
@@ -207,11 +374,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761878381,
|
||||
"narHash": "sha256-lCRaipHgszaFZ1Cs8fdGJguVycCisBAf2HEFgip5+xU=",
|
||||
"lastModified": 1775683737,
|
||||
"narHash": "sha256-oBYyowo6yfgb95Z78s3uTnAd9KkpJpwzjJbfnpLaM2Y=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "4ac96eb21c101a3e5b77ba105febc5641a8959aa",
|
||||
"rev": "7ba4ee4228ed36123c7cb75d50524b43514ef992",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -220,42 +387,88 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"jj-cz": {
|
||||
"inputs": {
|
||||
"alejandra": "alejandra",
|
||||
"devenv": "devenv",
|
||||
"flake-utils": "flake-utils_3",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775400071,
|
||||
"narHash": "sha256-uFoqOUB1wbqqDKRdHNEYdgyRQECYWhJBq4Oxjm3Dx9M=",
|
||||
"ref": "refs/heads/develop",
|
||||
"rev": "3da214ae4c14f57dc5f6ecd480330936f00e1a4f",
|
||||
"revCount": 35,
|
||||
"type": "git",
|
||||
"url": "https://labs.phundrak.com/phundrak/jj-cz"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://labs.phundrak.com/phundrak/jj-cz"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"nix": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"flake-compat"
|
||||
],
|
||||
"flake-parts": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"flake-parts"
|
||||
],
|
||||
"git-hooks-nix": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"git-hooks"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-23-11": [
|
||||
"jj-cz",
|
||||
"devenv"
|
||||
],
|
||||
"nixpkgs-regression": [
|
||||
"jj-cz",
|
||||
"devenv"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761648602,
|
||||
"narHash": "sha256-H97KSB/luq/aGobKRuHahOvT1r7C03BgB6D5HBZsbN8=",
|
||||
"lastModified": 1769708679,
|
||||
"narHash": "sha256-uFKkp2/SjIqbu5HtINg/hwHN6qaqcxLIbL/om7dT3kI=",
|
||||
"owner": "cachix",
|
||||
"repo": "nix",
|
||||
"rev": "3e5644da6830ef65f0a2f7ec22830c46285bfff6",
|
||||
"rev": "72bec37fabbfe378d677868ec42eeb83acf07a4c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"ref": "devenv-2.30.6",
|
||||
"ref": "devenv-2.32",
|
||||
"repo": "nix",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -267,11 +480,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761451000,
|
||||
"narHash": "sha256-qBJL6xEIjqYq9zOcG2vf2nPTeVBppNJzvO0LuQWMwMo=",
|
||||
"lastModified": 1775365369,
|
||||
"narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "ed6b293161b378a7368cda38659eb8d3d9a0dac4",
|
||||
"rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -280,13 +493,42 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixd": {
|
||||
"inputs": {
|
||||
"flake-parts": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"flake-parts"
|
||||
],
|
||||
"flake-root": "flake-root",
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"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": {
|
||||
"locked": {
|
||||
"lastModified": 1761907660,
|
||||
"narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=",
|
||||
"lastModified": 1775423009,
|
||||
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15",
|
||||
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -296,13 +538,34 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"opencode": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775336060,
|
||||
"narHash": "sha256-KkjMN2xA8jGBnj96UtzffvOeYJJZM05/5T36nSdpZkE=",
|
||||
"owner": "anomalyco",
|
||||
"repo": "opencode",
|
||||
"rev": "930e94a3ea098b9d56fcb6d08b545256d2546a82",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "anomalyco",
|
||||
"ref": "v1.3.15",
|
||||
"repo": "opencode",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pumo-system-info": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flake-utils": "flake-utils_4",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-overlay": "rust-overlay"
|
||||
"rust-overlay": "rust-overlay_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748984111,
|
||||
@@ -321,37 +584,81 @@
|
||||
"quickshell": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"caelestia-shell",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761897390,
|
||||
"narHash": "sha256-er4gYrIoThYLjlsOMTysoRfn67d1Gci+ZpqDrtQxrA0=",
|
||||
"lastModified": 1772925576,
|
||||
"narHash": "sha256-mMoiXABDtkSJxCYDrkhJ/TrrJf5M46oUfIlJvv2gkZ0=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "fc704e6b5d445899a1565955268c91942a4f263f",
|
||||
"revCount": 700,
|
||||
"rev": "15a84097653593dd15fad59a56befc2b7bdc270d",
|
||||
"revCount": 750,
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/quickshell/quickshell"
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/quickshell/quickshell"
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"claude-desktop": "claude-desktop",
|
||||
"devenv": "devenv",
|
||||
"caelestia-shell": "caelestia-shell",
|
||||
"copyparty": "copyparty",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"home-manager": "home-manager",
|
||||
"jj-cz": "jj-cz",
|
||||
"mobile-nixos": "mobile-nixos",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"opencode": "opencode",
|
||||
"pumo-system-info": "pumo-system-info",
|
||||
"quickshell": "quickshell",
|
||||
"sops-nix": "sops-nix",
|
||||
"spicetify": "spicetify",
|
||||
"srvos": "srvos",
|
||||
"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": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1770260791,
|
||||
"narHash": "sha256-ADTBfENFjRVDQMcCycyX/pAy6NFI/Ct6Mrar3gsmXI0=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "42ec85352e419e601775c57256a52f6d48a39906",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"pumo-system-info",
|
||||
@@ -379,11 +686,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760998189,
|
||||
"narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=",
|
||||
"lastModified": 1775682595,
|
||||
"narHash": "sha256-0E9PohY/VuESLq0LR4doaH7hTag513sDDW5n5qmHd1Q=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3",
|
||||
"rev": "d2e8438d5886e92bc5e7c40c035ab6cae0c41f76",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -392,6 +699,47 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"spicetify": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775421933,
|
||||
"narHash": "sha256-JkEbzFDFTsUlVtHEzA8Y4r3O9LInhb96eOCbtGjGnbM=",
|
||||
"owner": "Gerg-L",
|
||||
"repo": "spicetify-nix",
|
||||
"rev": "ec8d73085fdf807d55765335dc8126e14e7b2096",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Gerg-L",
|
||||
"repo": "spicetify-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"srvos": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775701952,
|
||||
"narHash": "sha256-xj9u8fz2hTTTELMorqox0hPWrmAvGRnQUEnlj+vCjFo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "srvos",
|
||||
"rev": "f56f1053ae9f878501d3a8ae1961c73d1d7abce3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "srvos",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
@@ -422,6 +770,59 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"jj-cz",
|
||||
"devenv",
|
||||
"nixd",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1734704479,
|
||||
"narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"zen-browser": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -429,11 +830,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761883599,
|
||||
"narHash": "sha256-ntnfAAqSuXI/+uqXAWUjbY5arB7sRK9cpgFbHbCZgK8=",
|
||||
"lastModified": 1775710180,
|
||||
"narHash": "sha256-sCokvdNvl8zIzsnjgG0TN5h3RUI7GJyWW9ErfmEj0rM=",
|
||||
"owner": "youwen5",
|
||||
"repo": "zen-browser-flake",
|
||||
"rev": "5355c0dc6857a2aa34b126fb4a93a454ed702f52",
|
||||
"rev": "2c138beb648d1cbbfae76695a8230ee04e4db25a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
266
flake.nix
266
flake.nix
@@ -2,12 +2,8 @@
|
||||
description = "Home Manager configuration of phundrak";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
devenv = {
|
||||
url = "github:cachix/devenv";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
@@ -19,13 +15,33 @@
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
pumo-system-info = {
|
||||
url = "git+https://labs.phundrak.com/phundrak/pumo-system-info";
|
||||
caelestia-shell = {
|
||||
url = "github:caelestia-dots/shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
quickshell = {
|
||||
url = "git+https://git.outfoxxed.me/quickshell/quickshell";
|
||||
copyparty = {
|
||||
url = "github:9001/copyparty";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
jj-cz = {
|
||||
url = "git+https://labs.phundrak.com/phundrak/jj-cz";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
mobile-nixos = {
|
||||
url = "github:mobile-nixos/mobile-nixos";
|
||||
flake = false; # It is not as a flake
|
||||
};
|
||||
|
||||
opencode = {
|
||||
url = "github:anomalyco/opencode/v1.3.15";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
pumo-system-info = {
|
||||
url = "git+https://labs.phundrak.com/phundrak/pumo-system-info";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
@@ -34,8 +50,13 @@
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
claude-desktop = {
|
||||
url = "github:k3d3/claude-desktop-linux-flake";
|
||||
spicetify = {
|
||||
url = "github:Gerg-L/spicetify-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
srvos = {
|
||||
url = "github:nix-community/srvos";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
@@ -46,113 +67,136 @@
|
||||
};
|
||||
|
||||
nixConfig = {
|
||||
extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=";
|
||||
extra-substituters = "https://devenv.cachix.org";
|
||||
extra-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="
|
||||
];
|
||||
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 = {
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
home-manager,
|
||||
devenv,
|
||||
mobile-nixos,
|
||||
srvos,
|
||||
...
|
||||
} @ inputs: let
|
||||
inherit (self) outputs;
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in {
|
||||
formatter.${system} = pkgs.alejandra;
|
||||
} @ inputs:
|
||||
flake-utils.lib.eachDefaultSystem (
|
||||
system: let
|
||||
inherit (self) outputs;
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in {
|
||||
formatter = pkgs.alejandra;
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = [
|
||||
pkgs.nh
|
||||
pkgs.jujutsu
|
||||
pkgs.git
|
||||
];
|
||||
};
|
||||
|
||||
packages.${system} = {
|
||||
devenv-up = self.devShells.${system}.default.config.procfileScript;
|
||||
devenv-test = self.devShells.${system}.default.config.test;
|
||||
};
|
||||
|
||||
devShells.${system}.default = devenv.lib.mkShell {
|
||||
inherit inputs pkgs;
|
||||
modules = [
|
||||
(
|
||||
{pkgs, ...}: {
|
||||
packages = [pkgs.nh];
|
||||
git-hooks.hooks = {
|
||||
alejandra.enable = true;
|
||||
commitizen.enable = true;
|
||||
detect-private-keys.enable = true;
|
||||
end-of-file-fixer.enable = true;
|
||||
deadnix.enable = true;
|
||||
ripsecrets.enable = true;
|
||||
statix.enable = true;
|
||||
packages = {
|
||||
homeConfigurations = let
|
||||
extraSpecialArgs = {inherit inputs outputs system;};
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||
defaultUserModules = [
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
inputs.spicetify.homeManagerModules.default
|
||||
inputs.caelestia-shell.homeManagerModules.default
|
||||
];
|
||||
withUserModules = modules: nixpkgs.lib.lists.flatten (defaultUserModules ++ [modules]);
|
||||
in {
|
||||
"phundrak@alys" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit extraSpecialArgs pkgs;
|
||||
modules = withUserModules ./users/phundrak/host/alys.nix;
|
||||
};
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
"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@tilo" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit extraSpecialArgs pkgs;
|
||||
modules = withUserModules ./users/phundrak/host/tilo.nix;
|
||||
};
|
||||
};
|
||||
|
||||
homeConfigurations = let
|
||||
extraSpecialArgs = {inherit inputs outputs system;};
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||
in {
|
||||
"phundrak@alys" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit extraSpecialArgs pkgs;
|
||||
modules = [
|
||||
./users/phundrak/host/alys.nix
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
];
|
||||
};
|
||||
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit extraSpecialArgs pkgs;
|
||||
modules = [
|
||||
./users/phundrak/host/marpa.nix
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
];
|
||||
};
|
||||
"phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit extraSpecialArgs pkgs;
|
||||
modules = [
|
||||
./users/phundrak/host/gampo.nix
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
];
|
||||
};
|
||||
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
|
||||
inherit extraSpecialArgs pkgs;
|
||||
modules = [
|
||||
./users/phundrak/host/tilo.nix
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
nixosConfigurations = let
|
||||
specialArgs = {inherit inputs outputs;};
|
||||
in {
|
||||
alys = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = [
|
||||
./hosts/alys/configuration.nix
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
];
|
||||
};
|
||||
gampo = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = [
|
||||
./hosts/gampo/configuration.nix
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
];
|
||||
};
|
||||
marpa = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = [
|
||||
./hosts/marpa/configuration.nix
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
];
|
||||
};
|
||||
tilo = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = [
|
||||
./hosts/tilo/configuration.nix
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
nixosConfigurations = let
|
||||
specialArgs = {inherit inputs outputs;};
|
||||
defaultSystemModules = [
|
||||
inputs.sops-nix.nixosModules.sops
|
||||
inputs.copyparty.nixosModules.default
|
||||
];
|
||||
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]);
|
||||
in {
|
||||
alys = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules ./hosts/alys/configuration.nix;
|
||||
};
|
||||
elcafe = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules ./hosts/elcafe/configuration.nix;
|
||||
};
|
||||
gampo = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules ./hosts/gampo/configuration.nix;
|
||||
};
|
||||
marpa = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules ./hosts/marpa;
|
||||
};
|
||||
NaroMk3 = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules [
|
||||
srvos.nixosModules.server
|
||||
srvos.nixosModules.hardware-hetzner-cloud
|
||||
srvos.nixosModules.mixins-terminfo
|
||||
./hosts/naromk3/configuration.nix
|
||||
];
|
||||
};
|
||||
pumo = nixpkgs.lib.nixosSystem {
|
||||
system = "aarch64-linux";
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules [
|
||||
(import "${mobile-nixos}/lib/configuration.nix" {device = "oneplus-enchilada";})
|
||||
./hosts/pumo
|
||||
];
|
||||
};
|
||||
tilo = nixpkgs.lib.nixosSystem {
|
||||
inherit specialArgs;
|
||||
modules = withSystemModules ./hosts/tilo/configuration.nix;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,10 +20,7 @@
|
||||
domain = "phundrak.com";
|
||||
id = "41157110";
|
||||
};
|
||||
packages.nix = {
|
||||
gc.automatic = true;
|
||||
trusted-users = ["root" "phundrak"];
|
||||
};
|
||||
packages.nix.gc.automatic = true;
|
||||
services = {
|
||||
endlessh.enable = true;
|
||||
ssh = {
|
||||
@@ -34,7 +31,10 @@
|
||||
};
|
||||
users = {
|
||||
root.disablePassword = true;
|
||||
phundrak.enable = true;
|
||||
phundrak = {
|
||||
enable = true;
|
||||
trusted = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
system.stateVersion = "23.11";
|
||||
|
||||
90
hosts/elcafe/configuration.nix
Normal file
90
hosts/elcafe/configuration.nix
Normal file
@@ -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?
|
||||
}
|
||||
23
hosts/elcafe/copyparty.nix
Normal file
23
hosts/elcafe/copyparty.nix
Normal file
@@ -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$";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
42
hosts/elcafe/hardware-configuration.nix
Normal file
42
hosts/elcafe/hardware-configuration.nix
Normal file
@@ -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;
|
||||
}
|
||||
@@ -16,7 +16,6 @@
|
||||
kernel = {
|
||||
cpuVendor = "intel";
|
||||
package = pkgs.linuxPackages;
|
||||
modules = ["i915"];
|
||||
};
|
||||
systemd-boot = true;
|
||||
};
|
||||
@@ -34,6 +33,7 @@
|
||||
};
|
||||
hardware = {
|
||||
bluetooth.enable = true;
|
||||
fingerprint.enable = true;
|
||||
input = {
|
||||
corne.allowHidAccess = true;
|
||||
ibmTrackpoint.disable = true;
|
||||
@@ -41,18 +41,18 @@
|
||||
};
|
||||
sound.enable = true;
|
||||
};
|
||||
i18n.input.enable = true;
|
||||
misc.keymap = "fr-bepo";
|
||||
networking = {
|
||||
hostname = "gampo";
|
||||
id = "0630b33f";
|
||||
hostFiles = [config.sops.secrets.extraHosts.path];
|
||||
};
|
||||
packages = {
|
||||
appimage.enable = true;
|
||||
flatpak.enable = true;
|
||||
nix = {
|
||||
gc.automatic = true;
|
||||
nix-ld.enable = true;
|
||||
trusted-users = ["root" "phundrak"];
|
||||
};
|
||||
};
|
||||
programs.steam.enable = true;
|
||||
@@ -62,7 +62,10 @@
|
||||
};
|
||||
users = {
|
||||
root.disablePassword = true;
|
||||
phundrak.enable = true;
|
||||
phundrak = {
|
||||
enable = true;
|
||||
trusted = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -9,13 +9,51 @@
|
||||
../../system
|
||||
];
|
||||
|
||||
fileSystems = {
|
||||
"/home".options = [
|
||||
"compress=zstd:3" # Good balance of compression vs speed
|
||||
"space_cache=v2" # Better performance
|
||||
"noatime" # Don't update access times (less writes)
|
||||
];
|
||||
"/mnt/ai" = {
|
||||
device = "/dev/disk/by-uuid/47e87286-caaa-4e43-b2fd-b9eceac90fe9";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
"compress=zstd:3" # Good balance of compression vs speed
|
||||
"space_cache=v2" # Better performance
|
||||
"noatime" # Don't update access times (less writes)
|
||||
];
|
||||
};
|
||||
"/mnt/games" = {
|
||||
device = "/dev/disk/by-uuid/a8453133-76dc-44bd-a825-444c3305fd9b";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
"compress=zstd:3" # Good balance of compression vs speed
|
||||
"space_cache=v2" # Better performance
|
||||
"noatime" # Don't update access times (less writes)
|
||||
];
|
||||
};
|
||||
"/games" = {
|
||||
device = "/dev/disk/by-uuid/77d32db8-2e85-4593-b6b8-55d4f9d14e1a";
|
||||
fsType = "ext4";
|
||||
};
|
||||
};
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
user = "phundrak";
|
||||
enable = true;
|
||||
};
|
||||
|
||||
mySystem = {
|
||||
boot = {
|
||||
extraModprobeConfig = ''
|
||||
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
|
||||
'';
|
||||
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;
|
||||
};
|
||||
desktop = {
|
||||
@@ -48,11 +86,11 @@
|
||||
scarlett.enable = true;
|
||||
};
|
||||
};
|
||||
i18n.input.enable = true;
|
||||
misc.keymap = "fr-bepo";
|
||||
networking = {
|
||||
hostname = "marpa";
|
||||
id = "7EA4A111";
|
||||
hostFiles = [config.sops.secrets.extraHosts.path];
|
||||
firewall.openPortRanges = [
|
||||
{
|
||||
# Sunshine
|
||||
@@ -64,32 +102,39 @@
|
||||
packages = {
|
||||
appimage.enable = true;
|
||||
flatpak.enable = true;
|
||||
nix = {
|
||||
nix-ld.enable = true;
|
||||
trusted-users = ["root" "phundrak"];
|
||||
};
|
||||
nix.nix-ld.enable = true;
|
||||
};
|
||||
programs.steam.enable = true;
|
||||
services = {
|
||||
fwupd.enable = true;
|
||||
harmonia = {
|
||||
enable = true;
|
||||
signKeyPaths = [config.sops.secrets."marpa/nix-cache-priv-key".path];
|
||||
};
|
||||
languagetool.enable = true;
|
||||
printing.enable = true;
|
||||
ssh.enable = true;
|
||||
sunshine = {
|
||||
enable = true;
|
||||
autostart = true;
|
||||
};
|
||||
languagetool.enable = true;
|
||||
};
|
||||
users = {
|
||||
root.disablePassword = true;
|
||||
phundrak.enable = true;
|
||||
phundrak = {
|
||||
enable = true;
|
||||
trusted = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
sops.secrets.extraHosts = {
|
||||
inherit (config.users.users.root) group;
|
||||
owner = config.users.users.phundrak.name;
|
||||
mode = "0440";
|
||||
sops.secrets = {
|
||||
"marpa/nix-cache-priv-key" = {};
|
||||
extraHosts = {
|
||||
inherit (config.users.users.root) group;
|
||||
owner = config.users.users.phundrak.name;
|
||||
mode = "0440";
|
||||
};
|
||||
};
|
||||
|
||||
services.udev.extraHwdb = ''
|
||||
@@ -102,11 +147,6 @@
|
||||
rtkit.enable = true;
|
||||
};
|
||||
|
||||
fileSystems."/games" = {
|
||||
device = "/dev/disk/by-uuid/77d32db8-2e85-4593-b6b8-55d4f9d14e1a";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# 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
|
||||
75
hosts/naromk3/configuration.nix
Normal file
75
hosts/naromk3/configuration.nix
Normal file
@@ -0,0 +1,75 @@
|
||||
{inputs, ...}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
../../system
|
||||
];
|
||||
|
||||
mySystem = {
|
||||
boot = {
|
||||
kernel = {
|
||||
hardened = true;
|
||||
cpuVendor = "amd";
|
||||
};
|
||||
grub = {
|
||||
enable = true;
|
||||
device = "/dev/sdb";
|
||||
};
|
||||
};
|
||||
dev.docker.enable = true;
|
||||
misc.keymap = "fr-bepo";
|
||||
networking = {
|
||||
hostname = "NaroMk3";
|
||||
id = "0003beef";
|
||||
firewall = {
|
||||
openPorts = [
|
||||
22 # Gitea SSH
|
||||
80 # HTTP
|
||||
443 # HTTPS
|
||||
];
|
||||
};
|
||||
};
|
||||
packages.nix.gc.automatic = true;
|
||||
services = {
|
||||
endlessh.enable = false;
|
||||
ssh = {
|
||||
enable = true;
|
||||
allowedUsers = ["phundrak"];
|
||||
passwordAuthentication = false;
|
||||
port = 2222; # port 22 will be used by Gitea
|
||||
};
|
||||
};
|
||||
users = {
|
||||
root.disablePassword = true;
|
||||
phundrak = {
|
||||
enable = true;
|
||||
trusted = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# This option defines the first version of NixOS you have installed
|
||||
# on this particular machine, and is used to maintain compatibility
|
||||
# with application data (e.g. databases) created on older NixOS
|
||||
# versions.
|
||||
#
|
||||
# Most users should NEVER change this value after the initial
|
||||
# install, for any reason, even if you've upgraded your system to a
|
||||
# new NixOS release.
|
||||
#
|
||||
# This value does NOT affect the Nixpkgs version your packages and
|
||||
# OS are pulled from, so changing it will NOT upgrade your system -
|
||||
# see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||
# to actually do that.
|
||||
#
|
||||
# This value being lower than the current NixOS release does NOT
|
||||
# mean your system is out of date, out of support, or vulnerable.
|
||||
#
|
||||
# Do NOT change this value unless you have manually inspected all
|
||||
# the changes it would make to your configuration, and migrated your
|
||||
# data accordingly.
|
||||
#
|
||||
# For more information, see `man configuration.nix` or
|
||||
# https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion
|
||||
system.stateVersion = "25.05"; # Did you read the comment?
|
||||
}
|
||||
50
hosts/naromk3/hardware-configuration.nix
Normal file
50
hosts/naromk3/hardware-configuration.nix
Normal file
@@ -0,0 +1,50 @@
|
||||
# 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.
|
||||
{
|
||||
lib,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot = {
|
||||
initrd = {
|
||||
availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
|
||||
kernelModules = [];
|
||||
};
|
||||
kernelModules = [];
|
||||
extraModulePackages = [];
|
||||
};
|
||||
|
||||
fileSystems = {
|
||||
"/" = {
|
||||
device = "/dev/disk/by-uuid/28b965a5-940b-4990-87fe-039c9f373bf0";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
"/boot" = {
|
||||
device = "/dev/disk/by-uuid/EBAD-6B85";
|
||||
fsType = "vfat";
|
||||
options = ["fmask=0022" "dmask=0022"];
|
||||
};
|
||||
|
||||
"/tank" = {
|
||||
device = "/dev/disk/by-uuid/ed00871e-a14a-428f-b6e4-5b56febd756a";
|
||||
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.enp1s0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
91
hosts/pumo/default.nix
Normal file
91
hosts/pumo/default.nix
Normal file
@@ -0,0 +1,91 @@
|
||||
# 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";
|
||||
}
|
||||
@@ -1,6 +1,3 @@
|
||||
# Edit this configuration file to define what should be installed on your
|
||||
# system. Help is available in the configuration.nix(5) man page and in
|
||||
# the NixOS manual (accessible by running ‘nixos-help’).
|
||||
{inputs, ...}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
@@ -33,10 +30,7 @@
|
||||
];
|
||||
};
|
||||
};
|
||||
packages.nix = {
|
||||
gc.automatic = true;
|
||||
trusted-users = ["root" "phundrak"];
|
||||
};
|
||||
packages.nix.gc.automatic = true;
|
||||
services = {
|
||||
calibre.enable = true;
|
||||
endlessh.enable = true;
|
||||
@@ -53,7 +47,10 @@
|
||||
};
|
||||
users = {
|
||||
root.disablePassword = true;
|
||||
phundrak.enable = true;
|
||||
phundrak = {
|
||||
enable = true;
|
||||
trusted = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
24
packages/handy.nix
Normal file
24
packages/handy.nix
Normal file
@@ -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
|
||||
'';
|
||||
}
|
||||
149
packages/inkdrop.nix
Normal file
149
packages/inkdrop.nix
Normal file
@@ -0,0 +1,149 @@
|
||||
# https://www.inkdrop.app/
|
||||
{
|
||||
lib,
|
||||
fetchurl,
|
||||
stdenv,
|
||||
autoPatchelfHook,
|
||||
makeWrapper,
|
||||
wrapGAppsHook3,
|
||||
alsa-lib,
|
||||
at-spi2-atk,
|
||||
at-spi2-core,
|
||||
cairo,
|
||||
cups,
|
||||
dbus,
|
||||
expat,
|
||||
gdk-pixbuf,
|
||||
glib,
|
||||
gtk3,
|
||||
libdrm,
|
||||
libnotify,
|
||||
libpulseaudio,
|
||||
libsecret,
|
||||
libuuid,
|
||||
libxkbcommon,
|
||||
mesa,
|
||||
nspr,
|
||||
nss,
|
||||
pango,
|
||||
systemd,
|
||||
libx11,
|
||||
libxscrnsaver,
|
||||
libxcomposite,
|
||||
libxcursor,
|
||||
libxdamage,
|
||||
libxext,
|
||||
libxfixes,
|
||||
libxi,
|
||||
libxrandr,
|
||||
libxrender,
|
||||
libxtst,
|
||||
libxcb,
|
||||
libxkbfile,
|
||||
libxshmfence,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "inkdrop";
|
||||
version = "5.11.8";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dist.inkdrop.app/v${version}/${pname}_${version}_amd64.deb";
|
||||
hash = "sha256-8aJSeUi5K9PgNJvfYAtnRnI2t+vM10jiqVAZmX+zni0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
makeWrapper
|
||||
wrapGAppsHook3
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
alsa-lib
|
||||
at-spi2-atk
|
||||
at-spi2-core
|
||||
cairo
|
||||
cups
|
||||
dbus
|
||||
expat
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk3
|
||||
libdrm
|
||||
libnotify
|
||||
libpulseaudio
|
||||
libsecret
|
||||
libuuid
|
||||
libxkbcommon
|
||||
mesa
|
||||
nspr
|
||||
nss
|
||||
pango
|
||||
systemd
|
||||
libx11
|
||||
libxscrnsaver
|
||||
libxcomposite
|
||||
libxcursor
|
||||
libxdamage
|
||||
libxext
|
||||
libxfixes
|
||||
libxi
|
||||
libxrandr
|
||||
libxrender
|
||||
libxtst
|
||||
libxcb
|
||||
libxkbfile
|
||||
libxshmfence
|
||||
];
|
||||
|
||||
dontBuild = true;
|
||||
dontConfigure = true;
|
||||
|
||||
# Ignore musl dependency since we're using glibc
|
||||
autoPatchelfIgnoreMissingDeps = ["libc.musl-x86_64.so.1"];
|
||||
|
||||
unpackPhase = ''
|
||||
runHook preUnpack
|
||||
|
||||
# Extract deb file manually to avoid setuid issues
|
||||
ar x $src
|
||||
tar xf data.tar.xz --no-same-permissions --no-same-owner
|
||||
|
||||
runHook postUnpack
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
# Create output directories
|
||||
mkdir -p $out/bin $out/share
|
||||
|
||||
# Copy the main application
|
||||
cp -r usr/lib/inkdrop $out/share/inkdrop
|
||||
|
||||
# Copy desktop file and icon
|
||||
cp -r usr/share/applications $out/share/
|
||||
cp -r usr/share/pixmaps $out/share/
|
||||
|
||||
# Fix desktop file to use absolute paths
|
||||
substituteInPlace $out/share/applications/inkdrop.desktop \
|
||||
--replace-quiet "Exec=inkdrop" "Exec=$out/bin/inkdrop" \
|
||||
--replace-quiet "Icon=inkdrop" "Icon=$out/share/pixmaps/inkdrop.png"
|
||||
|
||||
# Create wrapper script in bin
|
||||
makeWrapper $out/share/inkdrop/inkdrop $out/bin/inkdrop \
|
||||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
|
||||
--set-default ELECTRON_IS_DEV 0 \
|
||||
--inherit-argv0
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Notebook app for Markdown lovers";
|
||||
homepage = "https://www.inkdrop.app/";
|
||||
license = licenses.unfree;
|
||||
maintainers = [];
|
||||
platforms = ["x86_64-linux"];
|
||||
mainProgram = "inkdrop";
|
||||
};
|
||||
}
|
||||
@@ -1,67 +1,113 @@
|
||||
extraHosts: ENC[AES256_GCM,data:YRHvHINgAQv4z+8awMzHY1uZS/K9qSaFsk8G5J2zF5P5YOt4x62eefXgmhWeKZzJI5AIi0312iMQl5qGv+lAkP+VC7j/h1rh7peBDEBU6LvcMgFU2XqxidM/CoKfMkJF8+/4bb+3r1LC/rEeXITTUQsOmoacdyCeKe5yxLaHyic/FaZIJq13wCg/QQSLfenc2Db0Pbxv5/cbRILhKT+ssElVipA40aZpgL7QmD542vObSEa6K4fZd0rawF/nOyibfpPN7Ak8DrYvfygNMw/QAGKY2XosxC86tjxhrIBHRakqmWpV+smoUO6XBFjU2sbwalafYVFdrvYL9BVAPtMZ25Sc5QMm87RCHqzqYdQHKs8C3JpVBHWnyL+0e5DNQrFrml0/FD5nFYsT6zDKVb/rN3YmxvTvKl7FpPKpv3Kke9WG+HnPs90hPy8Jpmg52vLMhaybx6dpJxzcF+ctBSI3J78hfweOCGvNGshCKpME1dujMPctH/kfYcm2j/ixKLjl0ZSbYeI9+l9oURBDwKzmKjAqhwnjuo3sL++ZsRU5Ue1zz9gsxS40R9eYevbq7JiQPX331pY2du1SRoKOxvPpXsDqe+CY5pW2RgPszjEIuDxyoveZolXg/zjlk0Ic/cOxrbflp7bTfQCQqEC7YJ5tRmtctk2lRGQkOFIg9Tn8ReifFxfhDrPFzc8X5vZgH73aqZSd/OkVybI3vEILV5uas0fPL7AHAKnBmeDV3mBNvF8aoZhD5CG8iRd1otta/3AQ660QV8IDoauq8fySC8Kee5B3kG75sqHvwF4Gu6CpSChXkjpiIqVmW0PntJueVHifuGJYkvhkX/CTHK7xm1HhtANnGrk6cr2APjWk1vpOaCmjFNqKTOV9d1HjaNWYTz4AZ+Uq2Za3UzN3oZCtZb96,iv:Z64+4oR/AfSgA7oZ/NPDLOtcmcXO5B4OQIGjOEK1Pf4=,tag:0I/1gXnBH7u6HTbQUz5Fpw==,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]
|
||||
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:
|
||||
spotify: ENC[AES256_GCM,data:SaDT0iSWhsgVOi1s+Nzbr0Mur3t2Zd9z/KIUshGWtbPfkXXIoiJeJFtoZIz5NL/t5FooYsNfU1mGYgDeVYSD4BPibW8hiCYrX6L6OX+Q6ZEWXXx/1eBEs2/q0BrWGvy7frcurq/Px4R3ax0dXJe/YKbpAtU7+bQl,iv:F2zT+uMVBMnSEZqgcRmV8/fc3G/g2fKDuHuBzkyBRN0=,tag:CD8fuOQfe6QCrj4BUh0/xw==,type:str]
|
||||
bandcamp: ENC[AES256_GCM,data:diEx2fbkOR1oUav81jU5bNt/KNmbOaVzLV+G3zBUVXE7nEQpZNqVom0rgNrEVDGzH3u/IaA5eqG5ce9lE0BomeY8Z4MWI1xujhX5KsXdv21aw4UwsNgyLPuWhkN2POUMfCJlvekc/TFfFvJHyysx8aKxeI4dsg==,iv:cxx0cVkjOPG+hMD8JctJHdcICJt7ozpfRBVSCDBo6Ro=,tag:JRjwwvieGaGZJ+k56HWFaw==,type:str]
|
||||
emailPassword: ENC[AES256_GCM,data:LALAvyuNN9bfa8D6ZK1YiFXRfxLOBi9kXA0N0Kr7h18eAI4hWQ==,iv:WtidILFfWCMKylax52JP+X57GfZyYlxJtiwrC6SADik=,tag:NvOrsL3fbmxQZp06GZhUZA==,type:str]
|
||||
spotify: ENC[AES256_GCM,data:6i9BzQmlndnROuT1H2zgN/3I6hBiFf14BlcS+XL2PbTiiEQZe2yE3tnZo3KXU9S5CjS3MwxsVdytKOFMQt2s1bVjcibBhJzoKEQByaapdzn1mK3kQLdJfhPf4Hf9YZV9Dlc60ngS7ESLZakdFVlj4rlbV5XReLhK,iv:fYd78r4U0kTyq1TZjBVXkjdNiOQ29gLJ53kwTXsi8W0=,tag:oWaeOuzdHWS4joZAdeA2pg==,type:str]
|
||||
bandcamp: ENC[AES256_GCM,data:3uWlk1W6pgExsUkLpqpFXpMceYEdMfWMxNUq8iGEyq8/P3OAjzg7pvvPBGcVwmh4jSgNilRiqmmGrtYLwdqPUMlmbFB56K6ZLDIcC2yg2SRfulYcObvimOkIkx7ITr1u6jSzjMkTR5ekIlzlPBxFQzEfBbgdrQ==,iv:IY1VH/8vjNCPz8LGbYbyr5U3FcmhV+YhK3fHnLfWiak=,tag:lB78PRuEuFen54csc7jHIQ==,type:str]
|
||||
emailPassword: ENC[AES256_GCM,data:RUuXzEfkqu1hEg12vBko17MtvdcFIxPofB+nFOuuMdWqjqJgEg==,iv:725/ttk8jHmSIj16gqvLykOu8D8rUbzzvOyxyZx8Jds=,tag:jv1ZO14WsKyWFsfqzRzZPg==,type:str]
|
||||
ssh:
|
||||
hosts: ENC[AES256_GCM,data:Z+ODSCeKqt2ipgR9ZMV13kHZSZrwr7pY+kXM2Ej2Mc7WrBXoN25T+OWPJ6uf70yBGMID1faaWtbMUCjsp6gjqIVR7UH59yVfuKGDQIw5FSy3bdyvADITjASJMFIfO1xsu8iY0h18PdUBqNNYnt27c+3Bxn5SP0r6OCUC48SkSeCVhxtFIIMR4ZiVHZwQ2pD1GwLjmdUPPSpEJg5vpjFhFKB6Ab8z+qN5GaYMov2NKivMNVTBQUHpgmf58D6MI/AnjUbVsLuOmp0V3lhy8/qX33tgogpVv/RA6gAITVlAf9rGwaF+axZ0iy0T/gF7VJEGX6RUHbVUJoX1j8szDq/P4oqczFubrZdmRIbutG4tEcnYXltMu2NELFP+bl/G4y1gIV2b+s0k+UQJXn4KaiyXbtQXvOJ91+s7iMyTDi4QQd07l7nFqGGgzoKTYVfQK0e5ilEofRQrXwAb+p6Pwkvth8ktONFgD0sQHL75a8lS//8Mzvqopy5Vp0FQJ+OSW89Eeu2wrw9yNP2yuMDX9tvgDuZV4hgvDa9tTxvfGoMDXWARhSBt/F/a4ZkrNV9unjgEXbkrewezn1Jk+XWtAlussbTEXkKG87v2Q0V8zBa8gsB/5g514dIP6+UJdc3GEJzMLkQNcHYn9r3Ou8n+YgXD8zu5OnZXtNZ/x+J6NxH7tudiO5O0XctRwJQibidS2ONUhdkQGBt1JrAysGbNTuXC8Sn391rc11lsH+wIGpZg4zR+rdP4FWs68v/o9WtCJDCejnlyQ1DQ+avLc0aT4xxJZh8uM2iSsfi/TzRr9w0wVe2y3xAxsQMCfvhFcl9agfmAgGZcfVPCU9nc4dIfdGW1kTN7s3Izvy4mYaqd9mv0xxYARf7roJDGWie0VNxXQVt2o1tIQCqAhZ/bbgPG5VDyD15LGDI8BZCFaAOKlXn+beVMt6E1JJPlHa0vOwnbMVVKcUS/d5jA9nnb20Pwz4F3b532/ERmSkVlcZmCKqQOxo0YADb7Cm1fFBj6Eum0+F+jspg9QQmMjPPsb+NbMqnFd5DNDY+e95hr7tUEy4/yxiXiM0cu1w==,iv:I4TtUJdQFOVik5L26XHukxix0FCm/JNi6nVZg5qRMqs=,tag:vnO6DlUW5XnougyiJzwNdg==,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:
|
||||
age:
|
||||
- recipient: age1ajemtm502nn2n4q7v4j8meyd5mxtcqngkkedxq2pqzuwu78zp93qnw8q48
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiYU1MR2w4Njh2cVBocmJq
|
||||
YkxvSmVsWDdGT0h0S3NSbDYxb21EVTlxT21nCjB3WlVmK0hkR1B6Z2lhbndvNFdC
|
||||
aE9YMHphU1JoV2hwZ0RITXhHZnJmeTAKLS0tIDk4akc0T1FvbURLRFpXNHlRQ3Vx
|
||||
TUZMTENMbVNjeVFxMGVSc2FpZ0dXcDgKcacaFS2diAKeKwmVz7KghKjkNI2ij4Ns
|
||||
fYSd8sq/bEDTvn1wNpF1zLmzX9jmoXc5iORuRKaYcT8OaoUX7SsFvQ==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2S3VaTmg3b2QxMGtVeStr
|
||||
WWRpb0RhVFNWM3RJNEV4ZTdRVmJUa2d6YVZrCnFTOWwwTlNhc2hqM2pwZ1hkcWd1
|
||||
QlE2N0FtSGFFR1NHbzFOSzI5Um4rVTQKLS0tIEFaMHprc3Jlclk3MGtvc2NzZ3cr
|
||||
blMrcWVSVFB3TVc0aTQ0RUYvbDFJS0kKmGisf9VDK2RPA1uQCK5udt7sdeDyh344
|
||||
IKhPHzEHAHjKEkE6sWc6TB/l8K3IfL9zdHQZ9ZqTvCiS8CBZOwPQeg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age197lfdanym647wdaz9uy8hrfqjwj9fs8rm7vs3fsrctceu8mr9gms2jedhz
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUNlhkZzFoa21tR244dVJ0
|
||||
cXJWbDA0eVBrZWU4QVRVQm85bVVScFdYbHdnCjRWQWRNajIyQ0JoYTFFQ3RsOFA4
|
||||
cTZGNVhCN2k0NHBMb1Z4VmVqRzNjbEkKLS0tIFhJTVBCM0E4dTkweld6WUx5Z1hQ
|
||||
WXdwVFJ3cXQzUnFPUnV2NzdqcWwwZkkKqS9IQpB/MjnsVQ4IfIRtH6FESzLkdHq/
|
||||
GJnMHt0VcLt/gYrz+lrPc1ecQwNvVGH2Qt++BbSJxUFftoDLdEMlig==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTRzRqTzlzVWpGMVFEbjV5
|
||||
R1RXS1RBMzZGaGZjUkFZc3RLb2JkSzlRQlJZCnp5c0pMOHBZUkhralArcUhLSmx5
|
||||
Uk41cGRUR3RxR1FYVHBWU3d6ZXJpcFUKLS0tIFdLclpadHV0QlRuYmJhYVZGWVc5
|
||||
eHRMV2o0TXhoVkcyaXZqU0tsR0o2eDQKdYwEuPeQ1fntKQKIlOlxet+SJ0rT5I1y
|
||||
WDpfGZUVvghx5dwdd6EMq3sQUeoFSfjrlgIAwNtHRwMC19A68ubzhQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age17pn6suvz2f7zmrm9zxj5hr0putvcvdamqxqt7ewhncgg6ccgmp2qr00xm2
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtcVZPWVNBc1pFWm8zN3hm
|
||||
M1RtenlCbGl3Q0xhWlRWN1BmOUNDK3I0cVQwCk82Vm5IcmZZeVRBdlVUb0NtTXdz
|
||||
QTlVMEhCWkpJN0JOM09mSGtqbzl5ZUkKLS0tIE4vTGhEQlRDZ1Vma0VEQ0xtcU9V
|
||||
MitPc29VYUV3UmJSNXdmMUhwck9MOXMKLXHEKpNvzModiTR1Q6cE1xKSGewV/9PJ
|
||||
rEbTgsa0E9C4vm5sDKjSjuvpSF9tNOSByf5So5kzX0ZTxgjdTjsFbw==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxUEtOZ3Zac01HTjVZVXNF
|
||||
endFNVprclpJMmh1eTA2ZmVJRTJlbjI3dEVNCjA4K2U5QWlOdkI0R3JwbVpNRWJG
|
||||
T0VQWS9uS2UrRVk0YU9VcGhSUkJ6S2sKLS0tIGJZY1VSM1o3QUR5Mk9vNmhsRWxr
|
||||
YURQR2kxdExKR00vYVJMVVQxekdVOE0KDkPOMeCo1MoM5R89t1rsMWR/bGIx592Z
|
||||
wvbVmE/El4Z0QzuvXl0XK3CFlKGuwgNw5TvtQ9QZP1aAL3yN0+T5oQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1cnnpnglkvgw5ffv8qpgwpqvj203lh4uwt698y9mxjwklxt8nysmsa8hepn
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkeUlIL2QxQlhGN3RqOFZR
|
||||
K1p1bjc5R00yclEzL0hYY0c2OFJhRmN4Y0JvCkpIL0Q4Y1Nic3pFYjNIM1hMK2w2
|
||||
cFNGNVhHcW85R2loZ3JveVVZNGptd1kKLS0tIGYvYjlTMzRzUUNlM3padDJHNkFm
|
||||
VGJHL2c4Z05pTWlxellFMG4rRlp1MkUK4mwb2jMlfHb0ISInZKwbm9+EqBzWfZNU
|
||||
+L/WahvTo4Fe9uSOJffpSMleH0ZJS35loCJE5WIdmGnRQB6Mw7LWag==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQQTV1dkxMK3dxbGhiTGJG
|
||||
bkVQTUFOU1I4SXAyV21PdThSZFNOTTA0cmpFCkpXcmRXdlE0eVRYWWErQUxSWFN4
|
||||
bjI5bkU1NE84V1FTNVZiYUpLSnhSL2cKLS0tIFl6YmxmM1JLSlpxcDcxTnRnT1k3
|
||||
M25EQU5zckVMa1VSK29iYW5PbHRJcVEK6+gstHbcPBdeRNvZa21nZB5sT1SdHWHs
|
||||
8St5tYl5I3CxNWFgFjOrHqteRKc+ZTcj3euAJ6Wathbw0YMiA3gz0Q==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1g68hxv73llkyc7etzh499ztcrt93pwawy0n8p93px4taqu58mehsp88vjq
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIR3FWcElFL2RBRmdFS1cy
|
||||
emRTM201a1ltWndUcDJ5RXptd1RTNHdvWXpNCkxBTXZCNUxvd1dXMDhHK0ZFVUI1
|
||||
c2VkRlJJbDNYSzF0djJXN0J4YXltam8KLS0tIEFTZjdWd0NQTVEyU1Q4UCtQVGhy
|
||||
K3VUdlpjd0M3RVBHOVVjc04yZzV4UkUKcB8r+FiqZqwsxj40hCtVePnfIZ3S8DFR
|
||||
tgSRDMp8eEm6vXHbbf49E/cpV4iBwVel9zAe64tYs7atk9dcgMmOpw==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYRGYyUGhlL2NJelZTQ1g0
|
||||
UEhJMFlkVmdlU1E2cGE2UHF2dytVYmhQMlIwCmdrOEZjUUFrQjMzK2FxVjF0NGY1
|
||||
UStNT3ZXbEJlUGxzSXlBTmYwUzRIalEKLS0tIHFuWWIrTGN6eUxyNEhybHIydzRp
|
||||
cUFid1RwRXA4cExWd3poK2hEaVd5Q00KjjiEiQw2OxcGv/qDudLmbM6aysYhLTxi
|
||||
Qjmh133pyznFs+pLVLdYnId42zvojAeuJD9cJYxuwwgPA2ZlKdSVrg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1awytvphvty4f9wmdn86xnjg9kgetqjx8qlwj5d2882t4fyyzy58s3vg5k4
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0TkVLUnFDMnVoT3BUM0kr
|
||||
ZU5hZE1teGF1M21SbmY5MHZTMytKeWpkYnk0CmkwNXlBMDR1cEp2MkZPeWUyU0hZ
|
||||
Wlp4SFIwZUNQa25BRENsYWNoZmZoNjQKLS0tIEtIU3NRVS94SW80VXVGZy9hRkNQ
|
||||
QmJKNDJUY0RSakhwNWlkOVpib0trc1kK0tQxD9I82pjfs54eruu+IjzVUmcVBCPw
|
||||
9mp1xKiYRRMXt3YQn6MPiyuuX3l3UB5MH0RJMNtRq0D961rs+iiS5A==
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRbUs1Qm1hUnJldDNZNUR0
|
||||
N3d0YXp5NWtjV0xvc1ZrM3ArZllIbmJtRXpnCnp2TVRyQVFqNC9kWXpBa0NnbW9X
|
||||
VVFONnNleG9wN2IwdkhSWjBObmVGd3cKLS0tIHVDVmVNazdLWUpOQVlTNFRwL1c5
|
||||
bkdsaXNINEZpZjdMdHAwdElpWFQ0aW8K0guO/BF8hp1LDToVBFY5JKdz8WXOwK2P
|
||||
prGKdxPsTAfW8xTq97LHHRsLC7+4TVXnjF4LS4SM8EXIX9KCl5FIGA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-11-02T16:19:20Z"
|
||||
mac: ENC[AES256_GCM,data:2UFvzqhsR9OecqRX/n2O5wJ1fcdhetNE37Vj56rL6tRxT42uU8SKy7hxROS0LcrwKs59Km7P1oO/mYW6eyuLAZ7R5MAm18R5UYIYpKV8oevNUYMl0bsJkMnzl+nxz2i0ceg38rsioS9frK9a29hbJiV6Vr9yubHNdtZF4YqRmH0=,iv:Cx2nN4Gm0L+aWi6jbLuSuzhhzD8W5PzCLmJajyb/oEo=,tag:6wM1m8LB+7Rd/F9h62C4gg==,type:str]
|
||||
- recipient: age1erkn7dd022e90ktyj66aux9j9xvl0uzd6ru5cmrjsvcm5rtr5pfs7q6k9h
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4ZEVtVzM0dFhJYWd5UXZO
|
||||
ajIzSFp1VENuSjlaYSs4ZUdBSS90aEoyM25JCnhrd0lyUVN0dEV5a2tQUjZwSlFx
|
||||
eVlLT1kyejhuZDdGeHpDQnRMTllCSHMKLS0tIHZVS1JDVzBaaG1Oend1eDFiT1F4
|
||||
NU1vREt6SXBWYU1xdW1JSm1uUGZQRVEKtaDeDNo817rXXoMkBHo0MZWtm4LayqwC
|
||||
NN8vbhGcgT+M+ehnmZ1HdPk8VWRvlQ+SMpG+a6DjK8BjYtAWcO16RQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age16crkeglm3j3f6rveylytuerptjf9mwtv3hl89ywkmnnvdkntfchsuvrsk5
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6eUFYSC82YVM1WVEwc2Fz
|
||||
aEl3TG5oOFU5MUFhQ0JhbC9yRVYxOFo0bUVJCnpwQzMyZmN4ZTlNVW5pZTY5bkdY
|
||||
bjhaSnFxS0Vrb3pHTlJkWjVvczBSOG8KLS0tIHlsbjhxODdvcnd4c21aWUNpK01M
|
||||
ZW1hTUFtVE15QzVIVU93ZExlUWZjYzAKUZj+/NtMHCPjFFqbJ/8b2ASljV6GEk6p
|
||||
FbqV9LezRZrfl9GXBVUpB4Oeb9v2yp151aSda07/AG5YO0/jRAV/Bg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1tkywsvddjj6r6ukuqgz9aql92jfx85rz57dhmkkndysh6yx6p5rs0zj0qr
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxdjFYN01HcXZMNVBJckVm
|
||||
eklKZHAxeWgvVlcwWk9yWUJpcFFBUnpUV0FZCi85dGE2L3d3OS9CdW5sL0pZTTM2
|
||||
SFJkcUN0emh6S3hMenhCcXBhNWF6eVUKLS0tIExwNEVyRmpGRXRLMjgxY1dqbkxQ
|
||||
bk04K1luNnJVTjZQY25KRXNSVG0venMK7uM4tqqmq/o4QgMlE/x/FXkQsPRkofNO
|
||||
I6C93RYgp1OcGPH14Kmp5lXtK4/pdToaRnVXPGenDQJsFhwWCEI+Fg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age17p69ktg7yfzgdsk00f32mupe4n4fevdpw2wsv7ft30yvpeseau6s7t0zdg
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsOTFXaHE0SDRCTnE4di9N
|
||||
S2JIbHF2a1pzNzU4UFIvQmpZMVpOUjJqd0RJClVxcTd3d05aRDN1RGVmWVpQS2lI
|
||||
L1RVU3FUM3d4SU9pYXlwSko2RW5uWjgKLS0tIEplR1l1bGlad3p1ZkNBbFY3YmlM
|
||||
dUpXZis2N2VyN0ZFbjlPRXdwRFQ1aHMKm1Mk6MPKxFmwdATCYUANRSY5rHKgmQer
|
||||
LBlqqWKt1JiIUAYtazQeQ6KYxmjVlQPY7AZw2t+EhBEPrqbTL3vOiw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-05-01T13:20:34Z"
|
||||
mac: ENC[AES256_GCM,data:OueL0eHYmFKWfSyCZxburRJ2FS1xkowx7ha/Zv7r++26D85GSHDeIL9HdfByI5a1OhH90rH3WLxZrJgT3FiwBw27HhhHtS7Fs6MBFvTuPmSA7ZtMeGMWBRVjwbGAWN17BZAhJzMlZHq2nPX0xXIKT0HuTLVRPLuVCSlvDzMXsTE=,iv:+JN4Vzs8o8PJAam/uKBbUXt3ArxC88D6xR7rMeeGglg=,tag:S+OtbxLhVKFnqBZtyKDGyA==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
version: 3.12.2
|
||||
|
||||
@@ -8,13 +8,6 @@ with lib; let
|
||||
cfg = config.mySystem.boot;
|
||||
in {
|
||||
options.mySystem.boot = {
|
||||
extraModprobeConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = ''
|
||||
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
|
||||
'';
|
||||
};
|
||||
kernel = {
|
||||
package = mkOption {
|
||||
type = types.raw;
|
||||
@@ -29,18 +22,29 @@ in {
|
||||
type = types.enum ["intel" "amd"];
|
||||
default = "amd";
|
||||
};
|
||||
v4l2loopback = mkOption {
|
||||
description = "Enables v4l2loopback";
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
v4l2loopback.enable = mkEnableOption "Enables v4l2loopback kernel module";
|
||||
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 {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
default = !cfg.grub.enable;
|
||||
description = "Does the system use systemd-boot?";
|
||||
};
|
||||
grub = {
|
||||
enable = mkEnableOption "Does the system use GRUB? (Disables systemd-boot)";
|
||||
device = mkOption {
|
||||
type = types.path;
|
||||
description = "The GRUB device";
|
||||
default = "";
|
||||
};
|
||||
};
|
||||
zfs = {
|
||||
enable = mkEnableOption "Enables ZFS";
|
||||
pools = mkOption {
|
||||
@@ -50,22 +54,29 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
config.boot = {
|
||||
initrd.kernelModules = lists.optional config.mySystem.hardware.amdgpu.enable "amdgpu";
|
||||
config.boot = mkIf (! config.mySystem.misc.mobile) {
|
||||
initrd.kernelModules = lib.lists.singleton (
|
||||
if config.mySystem.hardware.amdgpu.enable
|
||||
then "amdgpu"
|
||||
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 = {
|
||||
systemd-boot.enable = cfg.systemd-boot;
|
||||
efi.canTouchEfiVariables = cfg.systemd-boot;
|
||||
grub = mkIf cfg.grub.enable {
|
||||
inherit (cfg.grub) enable device;
|
||||
};
|
||||
};
|
||||
supportedFilesystems = mkIf cfg.zfs.enable ["zfs"];
|
||||
zfs.extraPools = mkIf cfg.zfs.enable cfg.zfs.pools;
|
||||
kernelPackages =
|
||||
if cfg.kernel.hardened
|
||||
then pkgs.linuxPackages_hardened
|
||||
else cfg.kernel.package;
|
||||
kernelPackages = cfg.kernel.package;
|
||||
kernelModules =
|
||||
cfg.kernel.modules
|
||||
++ ["kvm-${cfg.kernel.cpuVendor}"]
|
||||
++ lists.optional cfg.kernel.v4l2loopback "v4l2loopback"
|
||||
++ lists.optional cfg.kernel.hardened "tcp_bbr";
|
||||
kernel.sysctl = mkIf cfg.kernel.hardened {
|
||||
"kernel.sysrq" = 0; # Disable magic SysRq key
|
||||
|
||||
@@ -30,11 +30,40 @@ in {
|
||||
example = "fr-bepo";
|
||||
description = "Keymap to use in the TTY console";
|
||||
};
|
||||
mobile = mkEnableOption "Enable if using Mobile NixOS";
|
||||
};
|
||||
|
||||
config = {
|
||||
boot.tmp.cleanOnBoot = true;
|
||||
time.timeZone = cfg.timezone;
|
||||
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"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ in {
|
||||
games.enable = false;
|
||||
gnome-remote-desktop.enable = true;
|
||||
gnome-online-accounts.enable = true;
|
||||
gnome-keyring.enable = true;
|
||||
sushi.enable = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -12,6 +12,11 @@ in {
|
||||
podman.enable = mkEnableOption "Enable Podman rather than Docker";
|
||||
nvidia.enable = mkEnableOption "Activate Nvidia support";
|
||||
autoprune.enable = mkEnableOption "Enable autoprune";
|
||||
storage = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/path/to/docker/storage";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
@@ -29,6 +34,9 @@ in {
|
||||
enable = true;
|
||||
enableNvidia = cfg.nvidia.enable;
|
||||
autoPrune.enable = cfg.autoprune.enable;
|
||||
daemon.settings = mkIf (cfg.storage != null) {
|
||||
"data-root" = cfg.storage;
|
||||
};
|
||||
};
|
||||
podman = mkIf cfg.podman.enable {
|
||||
enable = true;
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
{
|
||||
{lib, ...}: {
|
||||
imports = [
|
||||
./amdgpu.nix
|
||||
./bluetooth.nix
|
||||
./fingerprint.nix
|
||||
./sound.nix
|
||||
./input
|
||||
];
|
||||
|
||||
hardware.enableAllFirmware = lib.mkDefault true;
|
||||
}
|
||||
|
||||
13
system/hardware/fingerprint.nix
Normal file
13
system/hardware/fingerprint.nix
Normal file
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -8,7 +8,8 @@ with lib; let
|
||||
cfg = config.mySystem.hardware.sound;
|
||||
in {
|
||||
options.mySystem.hardware.sound = {
|
||||
enable = mkEnableOption "Whether to enable sounds with Pipewire";
|
||||
enable = mkEnableOption "Whether to enable sounds";
|
||||
usePulseaudio = mkEnableOption "Activate sound support with pulseaudio";
|
||||
scarlett.enable = mkEnableOption "Activate support for Scarlett sound card";
|
||||
alsa = mkOption {
|
||||
type = types.bool;
|
||||
@@ -32,13 +33,14 @@ in {
|
||||
|
||||
config = {
|
||||
environment.systemPackages = mkIf cfg.scarlett.enable [pkgs.alsa-scarlett-gui];
|
||||
services.pipewire = mkIf cfg.enable {
|
||||
enable = true;
|
||||
alsa = mkIf cfg.alsa {
|
||||
services = {
|
||||
pipewire.enable = mkForce (cfg.enable && ! cfg.usePulseaudio);
|
||||
pipewire.alsa = {
|
||||
enable = mkDefault true;
|
||||
support32Bit = mkDefault true;
|
||||
};
|
||||
jack.enable = mkDefault cfg.jack;
|
||||
pipewire.jack.enable = cfg.jack;
|
||||
pulseaudio.enable = cfg.usePulseaudio;
|
||||
};
|
||||
programs.noisetorch = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
./input.nix
|
||||
./locale.nix
|
||||
];
|
||||
}
|
||||
|
||||
25
system/i18n/input.nix
Normal file
25
system/i18n/input.nix
Normal file
@@ -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
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -12,5 +12,12 @@ in {
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
config.services.tailscale.enable = cfg.enable;
|
||||
config.services.tailscale = {
|
||||
inherit (cfg) enable;
|
||||
extraSetFlags = [
|
||||
"--accept-dns"
|
||||
"--accept-routes"
|
||||
"--ssh"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
@@ -11,12 +10,7 @@ in {
|
||||
enable = mkEnableOption "Enable Flatpak support";
|
||||
builder.enable = mkEnableOption "Enable Flatpak builder";
|
||||
};
|
||||
config = {
|
||||
services.flatpak = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
};
|
||||
environment.systemPackages = mkIf cfg.builder.enable [
|
||||
pkgs.flatpak-buildR
|
||||
];
|
||||
config.services.flatpak = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -17,6 +17,20 @@ in {
|
||||
localNetworkGameTransfers.openFirewall = true;
|
||||
gamescopeSession.enable = true;
|
||||
extraCompatPackages = [pkgs.proton-ge-bin];
|
||||
package = pkgs.steam.override {
|
||||
extraEnv = {
|
||||
MANGOHUD = true;
|
||||
OBS_VKCAPTURE = true;
|
||||
RADV_TEX_ANISO = 16;
|
||||
};
|
||||
extraLibraries = p: with p; [atk];
|
||||
extraPkgs = pkgs:
|
||||
with pkgs; [
|
||||
qt5.qtmultimedia
|
||||
qt5.qtbase
|
||||
libpulseaudio
|
||||
];
|
||||
};
|
||||
};
|
||||
gamescope = {
|
||||
enable = true;
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
./calibre.nix
|
||||
./endlessh.nix
|
||||
./fwupd.nix
|
||||
./harmonia.nix
|
||||
./jellyfin.nix
|
||||
./languagetool.nix
|
||||
./plex.nix
|
||||
./printing.nix
|
||||
./ssh.nix
|
||||
./sunshine.nix
|
||||
./traefik.nix
|
||||
];
|
||||
}
|
||||
|
||||
36
system/services/harmonia.nix
Normal file
36
system/services/harmonia.nix
Normal file
@@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -18,9 +18,14 @@ in {
|
||||
example = true;
|
||||
default = false;
|
||||
};
|
||||
port = mkOption {
|
||||
type = types.int;
|
||||
default = 22;
|
||||
};
|
||||
};
|
||||
config.services.openssh = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
ports = [cfg.port];
|
||||
settings = {
|
||||
AllowUsers = cfg.allowedUsers;
|
||||
PermitRootLogin = "no";
|
||||
|
||||
@@ -15,33 +15,53 @@ in {
|
||||
autoStart = cfg.autostart;
|
||||
capSysAdmin = true;
|
||||
openFirewall = true;
|
||||
settings.sunshine_name = config.mySystem.networking.hostname;
|
||||
applications.apps = [
|
||||
settings = {
|
||||
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";
|
||||
image-path = "desktop.png";
|
||||
prep-cmd = defaultPrep;
|
||||
}
|
||||
{
|
||||
name = "Low Res Desktop";
|
||||
image-path = "desktop.png";
|
||||
prep-cmd = defaultPrep;
|
||||
}
|
||||
{
|
||||
name = "Steam Big Picture";
|
||||
detached = ["setsid steam steam://open/bigpicture"];
|
||||
prep-cmd = {
|
||||
do = "";
|
||||
undo = "setsid steam steam://close/bigpicture";
|
||||
};
|
||||
prep-cmd = defaultPrep;
|
||||
image-path = "steam.png";
|
||||
}
|
||||
{
|
||||
name = "OpenTTD";
|
||||
cmd = "openttd";
|
||||
image-path = "/home/phundrak/.config/sunshine/covers/igdb_18074.png";
|
||||
prep-cmd = defaultPrep;
|
||||
}
|
||||
{
|
||||
name = "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;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
71
system/services/traefik.nix
Normal file
71
system/services/traefik.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.mySystem.services.traefik;
|
||||
in {
|
||||
options.mySystem.services.traefik = {
|
||||
enable = mkEnableOption "Enable Traefik";
|
||||
email = mkOption {
|
||||
type = types.str;
|
||||
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 = {
|
||||
inherit (cfg) enable dynamicConfigFile environmentFiles;
|
||||
staticConfigOptions = {
|
||||
api.dashboard = true;
|
||||
log = {
|
||||
level = "INFO";
|
||||
filePath = "${cfg.dataDir}/traefik.log";
|
||||
format = "json";
|
||||
};
|
||||
accessLog.filePath = "${cfg.dataDir}/access.log";
|
||||
entryPoints = {
|
||||
web = {
|
||||
address = ":80";
|
||||
asDefault = true;
|
||||
http.redirections.entrypoint = {
|
||||
to = "websecure";
|
||||
scheme = "https";
|
||||
};
|
||||
};
|
||||
websecure = {
|
||||
address = ":443";
|
||||
asDefault = true;
|
||||
httpChallenge.entryPoint = "websecure";
|
||||
};
|
||||
};
|
||||
providers.docker = {
|
||||
endpoint = "unix:///var/run/docker.sock";
|
||||
exposedByDefault = false;
|
||||
};
|
||||
certificatesResolvers.cloudflare.acme = {
|
||||
inherit (cfg) email;
|
||||
storage = "${cfg.dataDir}/acme.json";
|
||||
dnsChallenge = {
|
||||
provider = "cloudflare";
|
||||
resolvers = ["1.1.1.1:53" "1.0.0.1:53"];
|
||||
propagation.delayBeforeChecks = 60;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
36
system/users/creug.nix
Normal file
36
system/users/creug.nix
Normal file
@@ -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 = [
|
||||
./creug.nix
|
||||
./phundrak.nix
|
||||
./root.nix
|
||||
];
|
||||
programs.zsh.enable = true;
|
||||
}
|
||||
|
||||
@@ -5,27 +5,28 @@
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.mySystem.users;
|
||||
cfg = config.mySystem.users.phundrak;
|
||||
in {
|
||||
options.mySystem.users = {
|
||||
root.disablePassword = mkEnableOption "Disables root password";
|
||||
phundrak.enable = mkEnableOption "Enables users phundrak";
|
||||
options.mySystem.users.phundrak = {
|
||||
enable = mkEnableOption "Enables user phundrak";
|
||||
trusted = mkEnableOption "Mark the user as trusted by Nix";
|
||||
extraGroups = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
example = ["feedbackd"];
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
users.users = {
|
||||
root = {
|
||||
hashedPassword = mkIf cfg.root.disablePassword "*";
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
phundrak = mkIf cfg.phundrak.enable {
|
||||
isNormalUser = true;
|
||||
description = "Lucien Cartier-Tilet";
|
||||
extraGroups = ["networkmanager" "wheel" "docker" "dialout" "podman"];
|
||||
shell = pkgs.zsh;
|
||||
openssh.authorizedKeys.keyFiles = lib.filesystem.listFilesRecursive ../../keys;
|
||||
};
|
||||
users.users.phundrak = mkIf cfg.enable {
|
||||
isNormalUser = true;
|
||||
description = "Lucien Cartier-Tilet";
|
||||
extraGroups = ["networkmanager" "wheel" "docker" "dialout" "podman" "plugdev" "games" "audio" "input"] ++ cfg.extraGroups;
|
||||
shell = pkgs.zsh;
|
||||
openssh.authorizedKeys.keyFiles = lib.filesystem.listFilesRecursive ../../users/phundrak/keys;
|
||||
};
|
||||
nix.settings = mkIf cfg.trusted {
|
||||
trusted-users = ["phundrak"];
|
||||
};
|
||||
programs.zsh.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
17
system/users/root.nix
Normal file
17
system/users/root.nix
Normal file
@@ -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;
|
||||
};
|
||||
};
|
||||
}
|
||||
66
users/creug/home.nix
Normal file
66
users/creug/home.nix
Normal file
@@ -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;
|
||||
};
|
||||
}
|
||||
8
users/creug/host/elcafe.nix
Normal file
8
users/creug/host/elcafe.nix
Normal file
@@ -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;
|
||||
};
|
||||
}
|
||||
1
users/creug/keys/id_elcafe.pub
Normal file
1
users/creug/keys/id_elcafe.pub
Normal file
@@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdd4cNNhONjhuH4jWZ8Z8K1gbBmeDNqRybKRHMQEvZj gregoryfoulachon@googlemail.com
|
||||
@@ -1,10 +1,20 @@
|
||||
{pkgs, ...}: {
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
inherit (config.home) gpuType;
|
||||
in {
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
package = pkgs.btop.override {
|
||||
rocmSupport = true;
|
||||
cudaSupport = true;
|
||||
};
|
||||
package =
|
||||
if gpuType != null
|
||||
then
|
||||
pkgs.btop.override {
|
||||
rocmSupport = gpuType == "amd";
|
||||
cudaSupport = gpuType == "nvidia";
|
||||
}
|
||||
else pkgs.btop;
|
||||
settings = {
|
||||
color_theme = "${pkgs.btop}/share/btop/themes/nord.theme";
|
||||
cpu_bottom = false;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{pkgs, ...}:
|
||||
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.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"
|
||||
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
|
||||
logger info "wayland session detected"
|
||||
SCREENER=${pkgs.grim}/bin/grim
|
||||
LOCKER="${pkgs.swaylock}/bin/swaylock -feF"
|
||||
else
|
||||
logger info "x11 session detected"
|
||||
SCREENER=${pkgs.scrot}/bin/scrot
|
||||
LOCKER="${pkgs.i3lock}/bin/i3lock -ef"
|
||||
fi
|
||||
|
||||
$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"
|
||||
rm "$TMPBG"
|
||||
''
|
||||
|
||||
@@ -17,7 +17,14 @@ in {
|
||||
./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 = {
|
||||
cli.fullDesktop = mkDefault cfg.fullDesktop;
|
||||
desktop.fullDesktop = mkDefault cfg.fullDesktop;
|
||||
|
||||
78
users/modules/desktop/caelestia.nix
Normal file
78
users/modules/desktop/caelestia.nix
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.caelestia;
|
||||
in {
|
||||
options.home.desktop.caelestia.enable = mkEnableOption "Enables Caelestia Shell";
|
||||
config.programs.caelestia = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
systemd = {
|
||||
enable = true;
|
||||
target = "graphical-session.target";
|
||||
environment = [
|
||||
"QT3_QPA_PLATFORMTHEME=gtk3"
|
||||
];
|
||||
};
|
||||
settings = {
|
||||
paths.wallpaperDir = "~/Pictures/Wallpapers/nord";
|
||||
general = {
|
||||
apps = {
|
||||
terminal = ["kitty"];
|
||||
audio = ["pavucontrol"];
|
||||
playback = ["mpv"];
|
||||
explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"];
|
||||
};
|
||||
idle = {
|
||||
timeouts = [
|
||||
{
|
||||
timeout = 300;
|
||||
idleAction = "lock";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
background = {
|
||||
desktopClock.enabled = true;
|
||||
visualiser.enabled = true;
|
||||
};
|
||||
dashboard = {
|
||||
enabled = true;
|
||||
showOnHover = true;
|
||||
};
|
||||
launcher = {
|
||||
enabled = true;
|
||||
showOnHover = true;
|
||||
useFuzzy = {
|
||||
apps = true;
|
||||
schemes = true;
|
||||
wallpapers = true;
|
||||
};
|
||||
};
|
||||
osd.enableMicrophone = true;
|
||||
bar = {
|
||||
status = {
|
||||
showAudio = true;
|
||||
showKbLayout = false;
|
||||
};
|
||||
tray.compact = true;
|
||||
};
|
||||
services = mkIf (config.home.gpuType != null) {
|
||||
inherit (config.home) gpuType;
|
||||
};
|
||||
session.commands = {
|
||||
logout = ["uwsm" "stop"];
|
||||
shutdown = ["systemctl" "poweroff"];
|
||||
hibernate = ["systemctl" "hibernate"];
|
||||
reboot = ["systemctl" "reboot"];
|
||||
};
|
||||
};
|
||||
cli = {
|
||||
enable = true;
|
||||
settings.theme.enableGtk = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -7,15 +7,19 @@ with lib; let
|
||||
cfg = config.home.desktop;
|
||||
in {
|
||||
imports = [
|
||||
./caelestia.nix
|
||||
./eww.nix
|
||||
./firefox.nix
|
||||
./hyprland.nix
|
||||
./kdeconnect.nix
|
||||
./kitty.nix
|
||||
./obs.nix
|
||||
./qt.nix
|
||||
./rofi
|
||||
./spotify.nix
|
||||
./swaync.nix
|
||||
./theme.nix
|
||||
./waybar.nix
|
||||
./wl-kbptr.nix
|
||||
./wlr-which-key.nix
|
||||
./wlsunset.nix
|
||||
];
|
||||
@@ -23,12 +27,15 @@ in {
|
||||
options.home.desktop.fullDesktop = mkEnableOption "Enable options for graphical environments";
|
||||
config.home.desktop = {
|
||||
eww.enable = mkDefault cfg.fullDesktop;
|
||||
firefox.enable = mkDefault cfg.fullDesktop;
|
||||
hyprland.enable = mkDefault cfg.fullDesktop;
|
||||
kdeconnect.enable = mkDefault cfg.fullDesktop;
|
||||
kitty.enable = mkDefault cfg.fullDesktop;
|
||||
obs.enable = mkDefault cfg.fullDesktop;
|
||||
qt.enable = mkDefault cfg.fullDesktop;
|
||||
rofi.enable = mkDefault cfg.fullDesktop;
|
||||
spotify.enable = mkDefault cfg.fullDesktop;
|
||||
spotify.spicetify.enable = mkDefault cfg.fullDesktop;
|
||||
theme.enable = mkDefault cfg.fullDesktop;
|
||||
wlr-which-key.enable = mkDefault cfg.fullDesktop;
|
||||
};
|
||||
}
|
||||
|
||||
70
users/modules/desktop/firefox.nix
Normal file
70
users/modules/desktop/firefox.nix
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
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 {
|
||||
programs.firefox = {
|
||||
inherit (cfg) enable;
|
||||
package =
|
||||
if cfg.useZen
|
||||
then zen
|
||||
else pkgs.firefox;
|
||||
nativeMessagingHosts = lists.optional cfg.tridactyl.enable pkgs.tridactyl-native;
|
||||
};
|
||||
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
|
||||
]);
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
with lib; let
|
||||
cfg = config.home.desktop.hyprland;
|
||||
laptops = ["gampo"];
|
||||
caelestiaEnabled = config.home.desktop.caelestia.enable;
|
||||
in {
|
||||
imports = [
|
||||
./swaync.nix
|
||||
@@ -34,26 +35,28 @@ in {
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.desktop = {
|
||||
hyprpaper.enable = true;
|
||||
hyprpaper.enable = mkDefault (! caelestiaEnabled);
|
||||
rofi.enable = mkDefault true;
|
||||
swaync.enable = mkDefault true;
|
||||
swaync.enable = mkDefault (! caelestiaEnabled);
|
||||
waybar = {
|
||||
enable = mkDefault true;
|
||||
enable = mkDefault (! caelestiaEnabled);
|
||||
battery = mkDefault (builtins.elem cfg.host laptops);
|
||||
};
|
||||
wlsunset.enable = mkDefault true;
|
||||
};
|
||||
services.blueman-applet.enable = true;
|
||||
services.blueman-applet.enable = ! caelestiaEnabled;
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
xwayland.enable = true;
|
||||
systemd.enable = false;
|
||||
importantPrefixes = ["$left" "$right" "$up" "$down" "$menu"];
|
||||
settings = {
|
||||
env = [
|
||||
"XMODIFIERS,@im=fcitx"
|
||||
"XCURSOR_SIZE,12"
|
||||
];
|
||||
input = {
|
||||
kb_layout = "fr";
|
||||
kb_variant = "bepo_afnor";
|
||||
# kb_options = "caps:ctrl_modifier";
|
||||
kb_layout = "fr,us";
|
||||
kb_variant = "bepo_afnor,";
|
||||
numlock_by_default = true;
|
||||
follow_mouse = 1;
|
||||
touchpad.natural_scroll = false;
|
||||
@@ -64,8 +67,6 @@ in {
|
||||
"marpa" = [
|
||||
"DP-1, 3440x1440@144, 1080x550, 1"
|
||||
"DP-2, 2560x1080@60, 0x0, 1, transform, 1"
|
||||
# "DP-2, 1366x768@60, 0x0, 1"
|
||||
# "DP-2, 1829x1143@60, 0x0, 1"
|
||||
];
|
||||
"gampo" = [];
|
||||
}."${cfg.host}";
|
||||
@@ -86,7 +87,7 @@ in {
|
||||
"1, layoutopt:orientation:bottom"
|
||||
];
|
||||
decoration = {
|
||||
rounding = 5;
|
||||
rounding = 20;
|
||||
};
|
||||
animations = {
|
||||
enabled = true;
|
||||
@@ -103,11 +104,15 @@ in {
|
||||
pseudotile = true;
|
||||
preserve_split = true;
|
||||
};
|
||||
exec-once = [
|
||||
"pactl load-module module-switch-on-connect"
|
||||
"${pkgs.mpc}/bin/mpc stop"
|
||||
"${pkgs.networkmanagerapplet}/bin/nm-applet"
|
||||
];
|
||||
exec-once =
|
||||
[
|
||||
"pactl load-module module-switch-on-connect"
|
||||
"${pkgs.mpc}/bin/mpc stop"
|
||||
"${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";
|
||||
};
|
||||
extraConfig = ''
|
||||
$left = c
|
||||
@@ -120,111 +125,6 @@ in {
|
||||
bind = SUPER, Space, exec, ${pkgs.wlr-which-key}/bin/wlr-which-key
|
||||
bind = , Print, exec, ${pkgs.wlr-which-key}/bin/wlr-which-key -k s
|
||||
|
||||
submap = leader
|
||||
bind = , l, exec, plock
|
||||
bind = , l, submap, reset
|
||||
bind = , a, submap, apps
|
||||
bind = , b, submap, buffers
|
||||
bind = , w, submap, windows
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = apps
|
||||
bind = , b, exec, zen
|
||||
bind = , b, submap, reset
|
||||
bind = SHIFT, b, exec, qutebrowser
|
||||
bind = SHIFT, b, submap, reset
|
||||
bind = , d, exec, vesktop
|
||||
bind = , d, submap, reset
|
||||
bind = , e, exec, ${cfg.emacsPkg}/bin/emacsclient -c -n
|
||||
bind = , e, submap, reset
|
||||
bind = , g, exec, ${pkgs.gimp}/bin/gimp
|
||||
bind = , g, submap, reset
|
||||
bind = , n, exec, ${pkgs.nemo}/bin/nemo
|
||||
bind = , n, submap, reset
|
||||
bind = , r, submap, rofi
|
||||
bind = , u, exec, $menu
|
||||
bind = , u, submap, reset
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = buffers
|
||||
bind = , d, killactive,
|
||||
bind = , d, submap, reset
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = resize
|
||||
binde = , $left, resizeactive, -10 0
|
||||
binde = , $right, resizeactive, 10 0
|
||||
binde = , $up, resizeactive, 0 -10
|
||||
binde = , $down, resizeactive, 0 10
|
||||
bind = , q, submap, reset
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = rofi
|
||||
bind = , b, exec, rofi-bluetooth
|
||||
bind = , b, submap, reset
|
||||
bind = , e, exec, rofi -show emoji
|
||||
bind = , e, submap, reset
|
||||
bind = , r, exec, $menu
|
||||
bind = , r, submap, reset
|
||||
bind = , s, exec, rofi -show ssh
|
||||
bind = , r, submap, reset
|
||||
bind = , y, exec, ytplay
|
||||
bind = , y, submap, reset
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = screenshot
|
||||
bind = , Print, exec, screenshot
|
||||
bind = , Print, submap, reset
|
||||
bind = , d, exec, screenshot -d 3
|
||||
bind = , d, submap, reset
|
||||
bind = Shift, d, exec, screenshot -sced 3
|
||||
bind = Shift, d, submap, reset
|
||||
bind = , e, exec, screenshot -sec
|
||||
bind = , e, submap, reset
|
||||
bind = , s, exec, screenshot -s
|
||||
bind = , s, submap, reset
|
||||
bind = Shift, s, exec, screenshot -sc
|
||||
bind = Shift, s, submap, reset
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = windows
|
||||
bind = , period, submap, resize
|
||||
bind = , $left, movefocus, l
|
||||
bind = , $left, submap, reset
|
||||
bind = , $right, movefocus, r
|
||||
bind = , $right, submap, reset
|
||||
bind = , $up, movefocus, u
|
||||
bind = , $up, submap, reset
|
||||
bind = , $down, movefocus, d
|
||||
bind = , $down, submap, reset
|
||||
bind = SHIFT, $left, movewindow, l
|
||||
bind = SHIFT, $left, submap, reset
|
||||
bind = SHIFT, $right, movewindow, r
|
||||
bind = SHIFT, $right, submap, reset
|
||||
bind = SHIFT, $up, movewindow, u
|
||||
bind = SHIFT, $up, submap, reset
|
||||
bind = SHIFT, $down, movewindow, d
|
||||
bind = SHIFT, $down, submap, reset
|
||||
bind = CTRL_SHIFT, $left, moveworkspacetomonitor, e+0 +1
|
||||
bind = CTRL_SHIFT, $left, submap, reset
|
||||
bind = CTRL_SHIFT, $right, moveworkspacetomonitor, e+0 -1
|
||||
bind = CTRL_SHIFT, $right, submap, reset
|
||||
bind = , d, killactive,
|
||||
bind = , d, submap, reset
|
||||
bind = , f, fullscreen,
|
||||
bind = , f, submap, reset
|
||||
bind = SHIFT, f, togglefloating,
|
||||
bind = SHIFT, f, submap, reset
|
||||
bind = , escape, submap, reset
|
||||
bind = CTRL, g, submap, reset
|
||||
|
||||
submap = reset
|
||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPause, exec, playerctl pause
|
||||
bindl = , XF86AudioStop, exec, playerctl stop
|
||||
@@ -238,22 +138,17 @@ in {
|
||||
bindl = , XF86MonBrightnessDown, exec, xbacklight -perceived -dec 2
|
||||
bindl = , XF86KbdBrightnessUp, exec, xbacklight -perceived -inc 2
|
||||
bindl = , XF86KbdBrightnessDown, exec, xbacklight -perceived -dec 2
|
||||
bind = SUPER, a, exec, hyprctl switchxkblayout glove80-keyboard next
|
||||
bind = SUPER, $left, movefocus, l
|
||||
bind = SUPER, $right, movefocus, r
|
||||
bind = SUPER, $up, movefocus, u
|
||||
bind = SUPER, $down, movefocus, d
|
||||
bind = SUPER_SHIFT, $left, movewindow, l
|
||||
bind = SUPER_SHIFT, $left, submap, reset
|
||||
bind = SUPER_SHIFT, $right, movewindow, r
|
||||
bind = SUPER_SHIFT, $right, submap, reset
|
||||
bind = SUPER_SHIFT, $up, movewindow, u
|
||||
bind = SUPER_SHIFT, $up, submap, reset
|
||||
bind = SUPER_SHIFT, $down, movewindow, d
|
||||
bind = SUPER_SHIFT, $down, submap, reset
|
||||
bind = SUPER_CTRL_SHIFT, $left, moveworkspacetomonitor, e+0 +1
|
||||
bind = SUPER_CTRL_SHIFT, $left, submap, reset
|
||||
bind = SUPER_CTRL_SHIFT, $right, moveworkspacetomonitor, e+0 -1
|
||||
bind = SUPER_CTRL_SHIFT, $right, submap, reset
|
||||
bind = SUPER, Tab, cyclenext,
|
||||
bind = SUPER_SHIFT, Tab, cyclenext, prev
|
||||
bindm = SUPER, mouse:272, movewindow
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
25
users/modules/desktop/spotify.nix
Normal file
25
users/modules/desktop/spotify.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
cfg = config.home.desktop.spotify;
|
||||
spicePkgs = inputs.spicetify.legacyPackages.${system};
|
||||
in {
|
||||
options.home.desktop.spotify = {
|
||||
enable = mkEnableOption "Enable Spotify";
|
||||
spicetify.enable = mkEnableOption "Enable Spicetify";
|
||||
};
|
||||
config.programs = mkIf cfg.enable {
|
||||
spotify-player.enable = cfg.enable;
|
||||
spicetify = mkIf cfg.spicetify.enable {
|
||||
inherit (cfg.spicetify) enable;
|
||||
theme = spicePkgs.themes.sleek;
|
||||
colorScheme = "Nord";
|
||||
};
|
||||
};
|
||||
}
|
||||
34
users/modules/desktop/theme.nix
Normal file
34
users/modules/desktop/theme.nix
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.theme;
|
||||
in {
|
||||
options.home.desktop.theme.enable = mkEnableOption "Enable theme options";
|
||||
config = mkIf cfg.enable {
|
||||
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;
|
||||
};
|
||||
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;
|
||||
};
|
||||
}
|
||||
37
users/modules/desktop/wl-kbptr.nix
Normal file
37
users/modules/desktop/wl-kbptr.nix
Normal file
@@ -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
|
||||
filterNulls = 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
|
||||
then map filterNulls value
|
||||
else value;
|
||||
|
||||
@@ -1,18 +1,28 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
inputs,
|
||||
system,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.dev.ai.claude;
|
||||
jsonFormat = pkgs.formats.json {};
|
||||
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 {
|
||||
home.packages = [inputs.claude-desktop.packages.${system}.claude-desktop-with-fhs];
|
||||
home.packages = let
|
||||
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.' "$@"
|
||||
'';
|
||||
in [claude-jj pkgs.sox];
|
||||
programs.claude-code = {
|
||||
inherit (cfg) enable;
|
||||
inherit (cfg) enable mcpServers;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,19 +1,43 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.dev.ai;
|
||||
jsonFormat = pkgs.formats.json {};
|
||||
in {
|
||||
imports = [
|
||||
./ollama.nix
|
||||
./claude.nix
|
||||
./ollama.nix
|
||||
];
|
||||
|
||||
options.home.dev.ai.enable = mkEnableOption "Enables AI features";
|
||||
config.home.dev.ai = mkIf cfg.enable {
|
||||
ollama.enable = mkDefault cfg.enable;
|
||||
claude.enable = mkDefault cfg.enable;
|
||||
options.home.dev.ai = {
|
||||
enable = mkEnableOption "Enables AI features";
|
||||
mcpServers = mkOption {
|
||||
inherit (jsonFormat) type;
|
||||
default = {};
|
||||
};
|
||||
};
|
||||
config = {
|
||||
home = mkIf cfg.enable {
|
||||
dev.ai = {
|
||||
claude = {
|
||||
enable = mkDefault cfg.enable;
|
||||
mcpServers = mkDefault cfg.mcpServers;
|
||||
};
|
||||
ollama.enable = mkDefault cfg.enable;
|
||||
};
|
||||
packages = let
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
inherit (inputs.opencode.packages.${system}) opencode;
|
||||
in [pkgs.lmstudio opencode];
|
||||
};
|
||||
programs.mcp = mkIf (cfg.mcpServers != {}) {
|
||||
enable = true;
|
||||
servers = cfg.mcpServers;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -16,11 +16,17 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
config.services.ollama = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
acceleration = cfg.gpu;
|
||||
environmentVariables = {
|
||||
OLLAMA_CONTEXT_LENGTH = "8192";
|
||||
config = {
|
||||
services.ollama = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
acceleration = cfg.gpu;
|
||||
host = "0.0.0.0";
|
||||
environmentVariables = {
|
||||
OLLAMA_CONTEXT_LENGTH = "8192";
|
||||
OLLAMA_MAX_LOADED_MODELS = "1";
|
||||
OLLAMA_KEEP_ALIVE = "10m";
|
||||
};
|
||||
};
|
||||
home.sessionVariables.OLLAMA_API_BASE = "http://${config.services.ollama.host}:11434/";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -37,7 +37,12 @@ in {
|
||||
services.emacs = mkIf cfg.service {
|
||||
enable = true;
|
||||
inherit (cfg) package;
|
||||
defaultEditor = true;
|
||||
startWithUserSession = "graphical";
|
||||
client = {
|
||||
enable = true;
|
||||
arguments = ["-c" "-a" "${cfg.package}/bin/emacs"];
|
||||
};
|
||||
};
|
||||
|
||||
xdg.desktopEntries.mu4e = mkIf cfg.mu4eMime {
|
||||
|
||||
@@ -48,6 +48,10 @@ in {
|
||||
enable = mkDefault true;
|
||||
inherit (cfg) name email editor;
|
||||
signing.sshKey = mkDefault (cfg.publicKey.file or cfg.publicKey.content);
|
||||
cz = {
|
||||
enable = mkDefault true;
|
||||
alias = mkDefault true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -127,6 +127,14 @@ in {
|
||||
|
||||
"dist/"
|
||||
];
|
||||
signing = {
|
||||
format =
|
||||
if cfg.publicKeyFile != null
|
||||
then "ssh"
|
||||
else "openpgp";
|
||||
key = cfg.publicKeyFile;
|
||||
signByDefault = true;
|
||||
};
|
||||
settings = {
|
||||
user = {
|
||||
inherit (cfg) name email;
|
||||
@@ -151,8 +159,6 @@ in {
|
||||
renames = "copy";
|
||||
interHunkContext = 10;
|
||||
};
|
||||
commit.gpgsign = cfg.publicKeyFile != null;
|
||||
gpg.format = "ssh";
|
||||
gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = true;
|
||||
@@ -168,7 +174,6 @@ in {
|
||||
updateRefs = true;
|
||||
};
|
||||
help.autocorrect = "prompt";
|
||||
user.signingkey = mkIf (cfg.publicKeyFile != null) cfg.publicKeyFile;
|
||||
web.browser = mkIf (cfg.browser != null) cfg.browser;
|
||||
sendemail = mkIf cfg.sendmail.enable {
|
||||
smtpserver = cfg.sendmail.server;
|
||||
|
||||
@@ -2,10 +2,13 @@
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
cfg = config.home.dev.vcs.jj;
|
||||
jj-cz = inputs.jj-cz.packages.${system}.default;
|
||||
in {
|
||||
options.home.dev.vcs.jj = {
|
||||
enable = mkEnableOption "enables jj";
|
||||
@@ -33,65 +36,90 @@ in {
|
||||
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`";
|
||||
};
|
||||
};
|
||||
|
||||
config.programs.jujutsu = mkIf cfg.enable {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
inherit (cfg) name email;
|
||||
};
|
||||
ui = {
|
||||
default-command = "st";
|
||||
pager = ":builtin";
|
||||
show-cryptographic-signatures = true;
|
||||
conflict-marker-style = "git"; # Support for vc-jj.el
|
||||
diff-formatter = ":git"; # Support for vc-jj.el
|
||||
diff-editor = ":builtin";
|
||||
inherit (cfg) editor;
|
||||
};
|
||||
signing = mkIf cfg.signing.enable {
|
||||
behavior = "own";
|
||||
backend = "ssh";
|
||||
key = cfg.signing.sshKey;
|
||||
backends.ssh.allowed-signers = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
||||
backends.ssh.program = "${pkgs.openssh}/bin/ssh-keygen";
|
||||
};
|
||||
aliases = {
|
||||
blame = ["file" "annotate"];
|
||||
consume = ["squash" "--into" "@" "--from"];
|
||||
eject = ["squash" "--from" "@" "--into"];
|
||||
d = ["diff"];
|
||||
dm = ["desc" "-m"];
|
||||
l = ["log"];
|
||||
lc = ["log" "-r" "(remote_bookmarks()..@)::"];
|
||||
ll = ["log" "-T" "builtin_log_detailed"];
|
||||
open = ["log" "-r" "open()"];
|
||||
n = ["new"];
|
||||
nd = ["new" "dev()"];
|
||||
nt = ["new" "trunk()"];
|
||||
s = ["show"];
|
||||
tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"];
|
||||
};
|
||||
revset-aliases = {
|
||||
"user(x)" = "author(x) | committer(x)";
|
||||
"gh_pages()" = "ancestors(remote_bookmarks(exact:\"gh-pages\"))";
|
||||
"trunk()" = "latest((present(main) | present(master)) & remote_bookmarks())";
|
||||
"dev()" = "latest((present(dev) | present(develop)) & remote_bookmarks())";
|
||||
"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)";
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = mkIf cfg.cz.enable [jj-cz];
|
||||
programs.jujutsu = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
inherit (cfg) name email;
|
||||
};
|
||||
ui = {
|
||||
default-command = "st";
|
||||
pager = ":builtin";
|
||||
show-cryptographic-signatures = true;
|
||||
diff-editor = ":builtin";
|
||||
merge-editort = ":builtin";
|
||||
inherit (cfg) editor;
|
||||
};
|
||||
signing = mkIf cfg.signing.enable {
|
||||
behavior = "own";
|
||||
backend = "ssh";
|
||||
key = cfg.signing.sshKey;
|
||||
backends.ssh.allowed-signers = "${config.home.homeDirectory}/.ssh/allowed_signers";
|
||||
backends.ssh.program = "${pkgs.openssh}/bin/ssh-keygen";
|
||||
};
|
||||
aliases = {
|
||||
blame = ["file" "annotate"];
|
||||
consume = ["squash" "--into" "@" "--from"];
|
||||
cz = mkIf cfg.cz.alias ["util" "exec" "--" "${jj-cz}/bin/jj-cz"];
|
||||
eject = ["squash" "--from" "@" "--into"];
|
||||
d = ["diff"];
|
||||
dm = ["desc" "-m"];
|
||||
gc = ["git" "clone"];
|
||||
gcc = ["git" "clone" "--colocate"];
|
||||
l = ["log"];
|
||||
la = ["log" "-r" "::"];
|
||||
lc = ["log" "-r" "(remote_bookmarks()..@)::"];
|
||||
ll = ["log" "-T" "builtin_log_detailed"];
|
||||
open = ["log" "-r" "open()"];
|
||||
n = ["new"];
|
||||
nd = ["new" "dev()"];
|
||||
nt = ["new" "trunk()"];
|
||||
revlog = ["evolog"];
|
||||
s = ["show"];
|
||||
tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"];
|
||||
};
|
||||
colors.working_copy.underline = true;
|
||||
git = {
|
||||
private-commits = "blacklist()";
|
||||
colocate = true;
|
||||
subprocess = true;
|
||||
};
|
||||
revset-aliases = {
|
||||
"immutable_heads()" = "present(trunk()) | tags()";
|
||||
# Resolves by default to latest main/master remote bookmarks
|
||||
"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)";
|
||||
"ready()" = "open() ~ blacklist()::";
|
||||
"user(x)" = "author(x) | committer(x)";
|
||||
"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 = "*";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -15,7 +15,7 @@ in {
|
||||
force-seekable = true; # force streams to be seekable
|
||||
slang = "jpn,jp,eng,en,fra,fr";
|
||||
alang = "eng,en,fra,fr";
|
||||
gpu-api = "vulkan";
|
||||
gpu-api = "auto";
|
||||
osc = true;
|
||||
profile = "gpu-hq";
|
||||
# geometry = "50%x50%";
|
||||
@@ -44,7 +44,7 @@ in {
|
||||
encode
|
||||
inhibit-gnome
|
||||
mpris
|
||||
mpv-cheatsheet
|
||||
mpv-cheatsheet-ng
|
||||
quality-menu
|
||||
sponsorblock
|
||||
thumbfast
|
||||
|
||||
@@ -11,10 +11,7 @@ in {
|
||||
enable = mkEnableOption "Enable GPG";
|
||||
pinentry.package = mkOption {
|
||||
type = types.package;
|
||||
default =
|
||||
if config.home.dev.editors.emacs.enable
|
||||
then pkgs.pinentry-emacs
|
||||
else pkgs.pinentry-gtk2;
|
||||
default = pkgs.pinentry-gnome3;
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
@@ -25,7 +22,7 @@ in {
|
||||
};
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
enableSshSupport = true;
|
||||
enableSshSupport = false;
|
||||
pinentry.package = cfg.pinentry.package;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -16,6 +16,11 @@ in {
|
||||
lns = "ln -si";
|
||||
};
|
||||
};
|
||||
autocompletion = mkOption {
|
||||
type = types.bool;
|
||||
default = config.home.shell.autocompletion;
|
||||
example = true;
|
||||
};
|
||||
eatIntegration = mkEnableOption "Enable Emacs Eat integration";
|
||||
bashrcExtra = mkOption {
|
||||
type = types.lines;
|
||||
@@ -33,6 +38,7 @@ in {
|
||||
(strings.optionalString cfg.eatIntegration ''[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/bash"'')
|
||||
cfg.bashrcExtra
|
||||
];
|
||||
enableCompletion = cfg.autocompletion;
|
||||
shellAliases = cfg.aliases;
|
||||
shellOptions = [
|
||||
"histappend"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
aliases = {
|
||||
defaultAliases = {
|
||||
df = "df -H";
|
||||
diskspace = "sudo df -h | grep -E \"sd|lv|Size\"";
|
||||
du = "du -ch";
|
||||
@@ -78,22 +78,34 @@ in {
|
||||
./fish.nix
|
||||
./starship.nix
|
||||
./tmux.nix
|
||||
./zellij.nix
|
||||
./zsh.nix
|
||||
./zoxide.nix
|
||||
];
|
||||
options.home.shell.fullDesktop = mkEnableOption "Enable all shells";
|
||||
options.home.shell = {
|
||||
fullDesktop = mkEnableOption "Enable all shells";
|
||||
aliases = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = {la = "ls -a";};
|
||||
};
|
||||
autocompletion = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
config.home.shell = {
|
||||
enableShellIntegration = cfg.bash.enable or cfg.zsh.enable or cfg.fish.enable;
|
||||
bash = {
|
||||
aliases = mkDefault aliases;
|
||||
aliases = cfg.aliases // defaultAliases;
|
||||
enable = mkDefault cfg.fullDesktop;
|
||||
};
|
||||
fish = {
|
||||
abbrs = mkDefault aliases;
|
||||
abbrs = cfg.aliases // defaultAliases;
|
||||
enable = mkDefault cfg.fullDesktop;
|
||||
};
|
||||
zsh = {
|
||||
abbrs = mkDefault aliases;
|
||||
abbrs = cfg.aliases // defaultAliases;
|
||||
enable = mkDefault cfg.fullDesktop;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -17,6 +17,11 @@ in {
|
||||
lns = "ln -si";
|
||||
};
|
||||
};
|
||||
autocompletion = mkOption {
|
||||
type = types.bool;
|
||||
default = config.home.shell.autocompletion;
|
||||
example = true;
|
||||
};
|
||||
extraShellInit = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
@@ -26,6 +31,7 @@ in {
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
generateCompletions = cfg.autocompletion;
|
||||
shellAbbrs = cfg.abbrs;
|
||||
preferAbbrs = true;
|
||||
shellInit = with lib;
|
||||
|
||||
@@ -19,30 +19,58 @@ in {
|
||||
inherit (cfg) enable;
|
||||
enableTransience = true;
|
||||
settings = mkIf cfg.jjIntegration {
|
||||
custom.jj = {
|
||||
description = "The current jj status";
|
||||
detect_folders = [".jj"];
|
||||
symbol = "🥋 ";
|
||||
command = ''
|
||||
jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template '
|
||||
separate(" ",
|
||||
change_id.shortest(4),
|
||||
bookmarks,
|
||||
"|",
|
||||
concat(
|
||||
if(conflict, "💥"),
|
||||
if(divergent, "🚧"),
|
||||
if(hidden, "👻"),
|
||||
if(immutable, "🔒"),
|
||||
),
|
||||
raw_escape_sequence("\x1b[1;32m") ++ if(empty, "(empty)"),
|
||||
raw_escape_sequence("\x1b[1;32m") ++ coalesce(
|
||||
truncate_end(29, description.first_line(), "…"),
|
||||
"(no description set)",
|
||||
) ++ raw_escape_sequence("\x1b[0m"),
|
||||
)
|
||||
'
|
||||
'';
|
||||
# Disabling these so they can be enabled conditionally
|
||||
# See https://github.com/jj-vcs/jj/wiki/Starship
|
||||
git_status.disabled = true;
|
||||
git_commit.disabled = true;
|
||||
git_metrics.disabled = true;
|
||||
git_branch.disabled = true;
|
||||
custom = let
|
||||
when = "! jj --ignore-working-copy-root";
|
||||
description = "Only show if we’re not in a jj repository";
|
||||
style = "";
|
||||
in {
|
||||
git_status = {
|
||||
inherit when description style;
|
||||
command = "starship module git_status";
|
||||
};
|
||||
git_commit = {
|
||||
inherit when description style;
|
||||
command = "starship module git_commit";
|
||||
};
|
||||
git_metrics = {
|
||||
inherit when description style;
|
||||
command = "starship module git_metrics";
|
||||
};
|
||||
git_branch = {
|
||||
inherit when description style;
|
||||
command = "starship module git_branch";
|
||||
};
|
||||
jj = {
|
||||
description = "The current jj status";
|
||||
detect_folders = [".jj"];
|
||||
symbol = "🥋 ";
|
||||
command = ''
|
||||
jj log --revisions @ --no-graph --ignore-working-copy --color always --limit 1 --template '
|
||||
separate(" ",
|
||||
change_id.shortest(4),
|
||||
bookmarks,
|
||||
"|",
|
||||
concat(
|
||||
if(conflict, "💥"),
|
||||
if(divergent, "🚧"),
|
||||
if(hidden, "👻"),
|
||||
if(immutable, "🔒"),
|
||||
),
|
||||
raw_escape_sequence("\x1b[1;32m") ++ if(empty, "(empty)"),
|
||||
raw_escape_sequence("\x1b[1;32m") ++ coalesce(
|
||||
truncate_end(29, description.first_line(), "…"),
|
||||
"(no description set)",
|
||||
) ++ raw_escape_sequence("\x1b[0m"),
|
||||
)
|
||||
'
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
173
users/modules/shell/zellij.nix
Normal file
173
users/modules/shell/zellij.nix
Normal file
@@ -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";
|
||||
};
|
||||
};
|
||||
autocompletion = mkOption {
|
||||
type = types.bool;
|
||||
default = config.home.shell.autocompletion;
|
||||
example = true;
|
||||
};
|
||||
eatIntegration = mkEnableOption "Enable Emacs Eat integration";
|
||||
zshrcExtra = lib.mkOption {
|
||||
type = types.lines;
|
||||
@@ -32,7 +37,7 @@ in {
|
||||
enable = true;
|
||||
strategy = ["match_prev_cmd" "completion"];
|
||||
};
|
||||
enableCompletion = true;
|
||||
enableCompletion = cfg.autocompletion;
|
||||
enableVteIntegration = true;
|
||||
history = {
|
||||
findNoDups = true;
|
||||
|
||||
1673
users/phundrak/XCompose
Normal file
1673
users/phundrak/XCompose
Normal file
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@
|
||||
// "width": 1280, // Waybar width
|
||||
"spacing": 2, // Gaps between modules (4px)
|
||||
// Choose the order of the modules
|
||||
"modules-left": ["hyprland/workspaces", "hyprland/submap", "hyprland/window"],
|
||||
"modules-left": ["hyprland/workspaces", "hyprland/language", "hyprland/submap", "hyprland/window"],
|
||||
"modules-center": [],
|
||||
"modules-right": ["idle_inhibitor", "mpd", "pulseaudio", "network", "cpu",
|
||||
"memory", "temperature", "battery", "clock", "tray"],
|
||||
@@ -35,16 +35,12 @@
|
||||
"unlocked": ""
|
||||
}
|
||||
},
|
||||
"sway/mode": {
|
||||
"format": "<span style=\"italic\">{}</span>"
|
||||
},
|
||||
"sway/scratchpad": {
|
||||
"format": "{icon} {count}",
|
||||
"show-empty": false,
|
||||
"format-icons": ["", ""],
|
||||
"tooltip": true,
|
||||
"tooltip-format": "{app}: {title}"
|
||||
},
|
||||
{
|
||||
"hyprland/language": {
|
||||
"format": "Lang: {}",
|
||||
"format-en": "gaming",
|
||||
},
|
||||
},
|
||||
"mpd": {
|
||||
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
|
||||
"format-disconnected": "Disconnected ",
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
@@@ Sauvez un arbre, mangez un castor @@@
|
||||
@@@ Save a tree, eat a beaver @@@
|
||||
@@@ Bjarg tré, et bjórr @@@
|
||||
'';
|
||||
in {
|
||||
home.file.".signature" = {
|
||||
|
||||
@@ -58,28 +58,118 @@
|
||||
|
||||
home = {
|
||||
sessionVariables = {
|
||||
EDITOR = "${config.home.dev.editors.emacs.package}/bin/emacsclient -c -a ${config.home.dev.editors.emacs.package}/bin/emacs";
|
||||
LAUNCH_EDITOR = "${launchWithEmacsclient}/bin/launch-with-emacsclient";
|
||||
SUDO_ASKPASS = "${askpass}/bin/askpass";
|
||||
LSP_USE_PLISTS = "true";
|
||||
OPENAI_API_URL = "http://localhost:1234/";
|
||||
};
|
||||
desktop = {
|
||||
caelestia.enable = true;
|
||||
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 < 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}"`)
|
||||
'';
|
||||
};
|
||||
};
|
||||
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
|
||||
home_row_keys = "auiectsrtsr";
|
||||
modes = "tile,bisect";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
desktop.waybar.style = ./config/waybar/style.css;
|
||||
dev = {
|
||||
ai.claude.enable = true;
|
||||
editors.emacs.package = emacsPackage;
|
||||
vcs.jj.signing.enable = true;
|
||||
};
|
||||
fullDesktop = true;
|
||||
file."${config.home.homeDirectory}/.ssh/allowed_signers" = {
|
||||
enable = true;
|
||||
text = lib.strings.join "\n" (
|
||||
map (file: let
|
||||
content = lib.strings.trim (builtins.readFile file);
|
||||
parts = lib.strings.splitString " " content;
|
||||
email = lib.lists.last parts;
|
||||
in "${email} namespaces=\"git\" ${content}")
|
||||
(lib.filesystem.listFilesRecursive ../../keys)
|
||||
);
|
||||
file = {
|
||||
".XCompose".source = ./XCompose;
|
||||
"${config.home.homeDirectory}/.ssh/allowed_signers" = {
|
||||
enable = true;
|
||||
text = lib.strings.join "\n" (
|
||||
map (file: let
|
||||
content = lib.strings.trim (builtins.readFile file);
|
||||
parts = lib.strings.splitString " " content;
|
||||
email = lib.lists.last parts;
|
||||
in "${email} namespaces=\"git\" ${content}")
|
||||
(lib.filesystem.listFilesRecursive ./keys)
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
imports = [../light-home.nix];
|
||||
home = {
|
||||
cli.nh.flake = "${config.home.homeDirectory}/nixos";
|
||||
phundrak.sshKey = {
|
||||
content = builtins.readFile ../../../keys/id_alys.pub;
|
||||
# file = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
|
||||
};
|
||||
phundrak.sshKey.content = builtins.readFile ../keys/id_alys.pub;
|
||||
};
|
||||
}
|
||||
|
||||
8
users/phundrak/host/elcafe.nix
Normal file
8
users/phundrak/host/elcafe.nix
Normal file
@@ -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 = {
|
||||
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
|
||||
desktop.hyprland.host = "gampo";
|
||||
phundrak.sshKey = {
|
||||
content = builtins.readFile ../../../keys/id_gampo.pub;
|
||||
};
|
||||
phundrak.sshKey.content = builtins.readFile ../keys/id_gampo.pub;
|
||||
};
|
||||
programs.caelestia.settings.bar.persistent = false;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
{config, ...}: {
|
||||
imports = [../home.nix];
|
||||
home = {
|
||||
gpuType = "amd";
|
||||
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
|
||||
dev.ai.ollama = {
|
||||
dev.ai = {
|
||||
enable = true;
|
||||
gpu = "rocm";
|
||||
ollama.gpu = "rocm";
|
||||
};
|
||||
desktop.hyprland.host = "marpa";
|
||||
phundrak.sshKey = {
|
||||
content = builtins.readFile ../../../keys/id_marpa.pub;
|
||||
};
|
||||
phundrak.sshKey.content = builtins.readFile ../keys/id_marpa.pub;
|
||||
};
|
||||
programs.caelestia.settings.bar = {
|
||||
showBattery = false;
|
||||
showWifi = false;
|
||||
};
|
||||
}
|
||||
|
||||
7
users/phundrak/host/naromk3.nix
Normal file
7
users/phundrak/host/naromk3.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
imports = [../light-home.nix];
|
||||
home = {
|
||||
cli.nh.flake = "/home/phundrak/.dotfiles";
|
||||
phundrak.sshKey.content = builtins.readFile ../keys/id_naromk3.pub;
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
imports = [../light-home.nix];
|
||||
home = {
|
||||
cli.nh.flake = "/tank/phundrak/nixos";
|
||||
phundrak.sshKey.content = builtins.readFile ../../../keys/id_tilo.pub;
|
||||
cli.nh.flake = "/tank/phundrak/.dotfiles";
|
||||
phundrak.sshKey.content = builtins.readFile ../keys/id_tilo.pub;
|
||||
};
|
||||
}
|
||||
|
||||
1
users/phundrak/keys/id_elcafe.pub
Normal file
1
users/phundrak/keys/id_elcafe.pub
Normal file
@@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA+UvZISwPdbDUQKbcBksi6dKvsVccvRIbdOE0zDQt60 lucien@phundrak.com
|
||||
1
users/phundrak/keys/id_naromk3.pub
Normal file
1
users/phundrak/keys/id_naromk3.pub
Normal file
@@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID8C2Upks4/feloFsgZkQ6iOZBEJ6o87NdXdHeBYNUhg lucien@phundrak.com
|
||||
@@ -7,13 +7,13 @@
|
||||
with lib; let
|
||||
cfg = config.home.phundrak;
|
||||
in {
|
||||
imports = [../modules];
|
||||
imports = [../modules ./zellij.nix];
|
||||
|
||||
options.home.phundrak = {
|
||||
sshKey = {
|
||||
content = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
example = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGj+J6N6SO+4P8dOZqfR1oiay2yxhhHnagH52avUqw5h";
|
||||
example = "ssh-ed25519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
||||
default = null;
|
||||
};
|
||||
file = mkOption {
|
||||
@@ -46,6 +46,7 @@ in {
|
||||
username = "phundrak";
|
||||
homeDirectory = "/home/phundrak";
|
||||
packages = [pkgs.tree pkgs.ncdu];
|
||||
preferXdgDirectories = true;
|
||||
|
||||
phundrak.sshKey.file = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
|
||||
|
||||
|
||||
@@ -4,7 +4,13 @@
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; {
|
||||
with lib; let
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
handy = pkgs.callPackage ../../packages/handy.nix {};
|
||||
inkdrop = pkgs.callPackage ../../packages/inkdrop.nix {};
|
||||
pumo-system-info = inputs.pumo-system-info.packages.${system}.default;
|
||||
in {
|
||||
programs.bun.enable = true;
|
||||
home.packages = with pkgs; [
|
||||
# Terminal stuff
|
||||
duf
|
||||
@@ -26,27 +32,24 @@ with lib; {
|
||||
audacity
|
||||
plexamp
|
||||
plex-desktop
|
||||
spicetify-cli
|
||||
spotify
|
||||
pavucontrol # Volume control
|
||||
|
||||
# Social
|
||||
vesktop # Discord alternative that works well with wayland
|
||||
element-desktop
|
||||
signal-desktop-bin
|
||||
signal-desktop
|
||||
|
||||
# Misc
|
||||
bitwarden-desktop
|
||||
gplates
|
||||
# gplates
|
||||
qgis
|
||||
kicad
|
||||
handy
|
||||
libnotify
|
||||
nextcloud-client
|
||||
onlyoffice-desktopeditors
|
||||
pumo-system-info
|
||||
scrcpy
|
||||
syncthing
|
||||
watchmate
|
||||
inputs.zen-browser.packages.${system}.default
|
||||
inputs.pumo-system-info.packages.${system}.default
|
||||
inputs.quickshell.packages.${system}.default
|
||||
|
||||
# Games
|
||||
atlauncher
|
||||
@@ -56,9 +59,6 @@ with lib; {
|
||||
moonlight-qt
|
||||
|
||||
# Gnome stuff
|
||||
gnome-tweaks
|
||||
gnomeExtensions.docker
|
||||
gnomeExtensions.syncthing-indicator
|
||||
gnomeExtensions.tray-icons-reloaded
|
||||
gthumb
|
||||
|
||||
@@ -70,6 +70,7 @@ with lib; {
|
||||
# Dev
|
||||
dbeaver-bin
|
||||
devenv
|
||||
inkdrop
|
||||
nodejs
|
||||
sqlite
|
||||
tectonic # better LaTeX engine
|
||||
@@ -81,6 +82,7 @@ with lib; {
|
||||
docker-language-server
|
||||
kdePackages.qtdeclarative # For QML LSP
|
||||
nixd
|
||||
nixfmt
|
||||
marksman
|
||||
python3 # for Emacs and LSP
|
||||
vscode-json-languageserver
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
config.home.desktop.wlr-which-key.settings = {
|
||||
@@ -24,203 +25,226 @@
|
||||
float-window = import ./float-window.nix {inherit pkgs;};
|
||||
focus-urgent = import ./focus-urgent.nix {inherit pkgs;};
|
||||
fullscreen = import ./fullscreen.nix {inherit pkgs;};
|
||||
logout = import ./logout.nix {inherit pkgs;};
|
||||
ytplay = import ../../modules/cli/scripts/ytplay.nix {inherit pkgs;};
|
||||
in [
|
||||
{
|
||||
key = "a";
|
||||
desc = "Apps";
|
||||
submenu = [
|
||||
{
|
||||
key = "b";
|
||||
desc = "Browser";
|
||||
cmd = "zen";
|
||||
}
|
||||
{
|
||||
key = "B";
|
||||
desc = "Qutebrowser";
|
||||
cmd = "${pkgs.qutebrowser}/bin/qutebrowser";
|
||||
}
|
||||
{
|
||||
key = "d";
|
||||
desc = "Discord";
|
||||
cmd = "${pkgs.vesktop}/bin/vesktop";
|
||||
}
|
||||
{
|
||||
key = "e";
|
||||
desc = "Emacs";
|
||||
cmd = "${config.home.dev.editors.emacs.package}/bin/emacsclient -c -n";
|
||||
}
|
||||
{
|
||||
key = "g";
|
||||
desc = "Gimp";
|
||||
cmd = "${pkgs.gimp}/bin/gimp";
|
||||
}
|
||||
{
|
||||
key = "n";
|
||||
desc = "Nemo";
|
||||
cmd = "${pkgs.nemo}/bin/nemo";
|
||||
}
|
||||
{
|
||||
key = "N";
|
||||
desc = "Nextcloud";
|
||||
cmd = "${pkgs.nextcloud-client}/bin/nextcloud";
|
||||
}
|
||||
{
|
||||
key = "r";
|
||||
desc = "Rofi";
|
||||
submenu = [
|
||||
{
|
||||
key = "b";
|
||||
desc = "Bluetooth";
|
||||
cmd = "${pkgs.rofi-bluetooth}/bin/rofi-bluetooth";
|
||||
}
|
||||
{
|
||||
key = "c";
|
||||
desc = "calc";
|
||||
cmd = "rofi -show calc";
|
||||
}
|
||||
{
|
||||
key = "e";
|
||||
desc = "Emoji";
|
||||
cmd = "rofi -show emoji";
|
||||
}
|
||||
{
|
||||
key = "r";
|
||||
desc = "App Menu";
|
||||
cmd = "rofi -show drun";
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "SSH";
|
||||
cmd = "rofi -show ssh";
|
||||
}
|
||||
{
|
||||
key = "y";
|
||||
desc = "YouTube";
|
||||
cmd = "${ytplay}/bin/ytplay";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
key = "b";
|
||||
desc = "Buffers";
|
||||
submenu = [
|
||||
{
|
||||
key = "c";
|
||||
desc = "Center";
|
||||
cmd = "${center-window}/bin/center-window";
|
||||
}
|
||||
{
|
||||
key = "d";
|
||||
desc = "Close";
|
||||
cmd = "${close-window}/bin/close-window";
|
||||
}
|
||||
{
|
||||
key = "f";
|
||||
desc = "Fullscreen";
|
||||
cmd = "${fullscreen}/bin/fullscreen";
|
||||
}
|
||||
{
|
||||
key = "F";
|
||||
desc = "Float";
|
||||
cmd = "${float-window}/bin/float-window";
|
||||
}
|
||||
{
|
||||
key = "u";
|
||||
desc = "Urgent";
|
||||
cmd = "${focus-urgent}/bin/focus-urgent";
|
||||
}
|
||||
{
|
||||
key = ".";
|
||||
desc = "Resize";
|
||||
submenu = [
|
||||
{
|
||||
key = left;
|
||||
desc = "Decrease Width";
|
||||
cmd = "echo decrease width";
|
||||
keep-open = true;
|
||||
}
|
||||
{
|
||||
key = down;
|
||||
desc = "Increase Height";
|
||||
cmd = "echo decrease height";
|
||||
keep-open = true;
|
||||
}
|
||||
{
|
||||
key = up;
|
||||
desc = "Decrease Height";
|
||||
cmd = "echo decrease height";
|
||||
keep-open = true;
|
||||
}
|
||||
{
|
||||
key = right;
|
||||
desc = "Increase Width";
|
||||
cmd = "echo increase width";
|
||||
keep-open = true;
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
key = "p";
|
||||
desc = "Power";
|
||||
submenu = [
|
||||
{
|
||||
key = "s";
|
||||
desc = "Suspend";
|
||||
cmd = "systemctl suspend";
|
||||
}
|
||||
{
|
||||
key = "r";
|
||||
desc = "Reboot";
|
||||
cmd = "systemctl reboot";
|
||||
}
|
||||
{
|
||||
key = "o";
|
||||
desc = "Poweroff";
|
||||
cmd = "systemctl poweroff";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "Screenshots";
|
||||
submenu = [
|
||||
{
|
||||
key = "Print";
|
||||
desc = "Screenshot";
|
||||
cmd = "screenshot";
|
||||
}
|
||||
{
|
||||
key = "d";
|
||||
desc = "Delayed";
|
||||
cmd = "screenshot -d 3";
|
||||
}
|
||||
{
|
||||
key = "D";
|
||||
desc = "Select, Delay, Edit, and Copy";
|
||||
cmd = "screenshot -secd 3";
|
||||
}
|
||||
{
|
||||
key = "e";
|
||||
desc = "Select, Edit, and Copy";
|
||||
cmd = "screenshot -sec";
|
||||
}
|
||||
{
|
||||
key = "g";
|
||||
desc = "Select, Gimp, and Copy";
|
||||
cmd = "screenshot -sgc";
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "Select and Copy";
|
||||
cmd = "screenshot -sc";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
plock = import ../../modules/cli/scripts/plock.nix {inherit pkgs;};
|
||||
in
|
||||
[
|
||||
{
|
||||
key = "a";
|
||||
desc = "Apps";
|
||||
submenu = [
|
||||
{
|
||||
key = "b";
|
||||
desc = "Browser";
|
||||
cmd = "zen";
|
||||
}
|
||||
{
|
||||
key = "B";
|
||||
desc = "Qutebrowser";
|
||||
cmd = "${pkgs.qutebrowser}/bin/qutebrowser";
|
||||
}
|
||||
{
|
||||
key = "d";
|
||||
desc = "Discord";
|
||||
cmd = "${pkgs.vesktop}/bin/vesktop";
|
||||
}
|
||||
{
|
||||
key = "e";
|
||||
desc = "Emacs";
|
||||
cmd = "${config.home.dev.editors.emacs.package}/bin/emacsclient -c -n";
|
||||
}
|
||||
{
|
||||
key = "g";
|
||||
desc = "Gimp";
|
||||
cmd = "${pkgs.gimp}/bin/gimp";
|
||||
}
|
||||
{
|
||||
key = "h";
|
||||
desc = "Handy";
|
||||
cmd = "pkill -USR2 -n handy";
|
||||
}
|
||||
{
|
||||
key = "n";
|
||||
desc = "Nemo";
|
||||
cmd = "${pkgs.nemo-with-extensions}/bin/nemo";
|
||||
}
|
||||
{
|
||||
key = "N";
|
||||
desc = "Nextcloud";
|
||||
cmd = "${pkgs.nextcloud-client}/bin/nextcloud";
|
||||
}
|
||||
{
|
||||
key = "r";
|
||||
desc = "Rofi";
|
||||
submenu = [
|
||||
{
|
||||
key = "b";
|
||||
desc = "Bluetooth";
|
||||
cmd = "${pkgs.rofi-bluetooth}/bin/rofi-bluetooth";
|
||||
}
|
||||
{
|
||||
key = "c";
|
||||
desc = "calc";
|
||||
cmd = "rofi -show calc";
|
||||
}
|
||||
{
|
||||
key = "e";
|
||||
desc = "Emoji";
|
||||
cmd = "rofi -show emoji";
|
||||
}
|
||||
{
|
||||
key = "r";
|
||||
desc = "App Menu";
|
||||
cmd = "rofi -show drun";
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "SSH";
|
||||
cmd = "rofi -show ssh";
|
||||
}
|
||||
{
|
||||
key = "y";
|
||||
desc = "YouTube";
|
||||
cmd = "${ytplay}/bin/ytplay";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
key = "b";
|
||||
desc = "Buffers";
|
||||
submenu = [
|
||||
{
|
||||
key = "c";
|
||||
desc = "Center";
|
||||
cmd = "${center-window}/bin/center-window";
|
||||
}
|
||||
{
|
||||
key = "d";
|
||||
desc = "Close";
|
||||
cmd = "${close-window}/bin/close-window";
|
||||
}
|
||||
{
|
||||
key = "f";
|
||||
desc = "Fullscreen";
|
||||
cmd = "${fullscreen}/bin/fullscreen";
|
||||
}
|
||||
{
|
||||
key = "F";
|
||||
desc = "Float";
|
||||
cmd = "${float-window}/bin/float-window";
|
||||
}
|
||||
{
|
||||
key = "u";
|
||||
desc = "Urgent";
|
||||
cmd = "${focus-urgent}/bin/focus-urgent";
|
||||
}
|
||||
{
|
||||
key = ".";
|
||||
desc = "Resize";
|
||||
submenu = [
|
||||
{
|
||||
key = left;
|
||||
desc = "Decrease Width";
|
||||
cmd = "echo decrease width";
|
||||
keep-open = true;
|
||||
}
|
||||
{
|
||||
key = down;
|
||||
desc = "Increase Height";
|
||||
cmd = "echo decrease height";
|
||||
keep-open = true;
|
||||
}
|
||||
{
|
||||
key = up;
|
||||
desc = "Decrease Height";
|
||||
cmd = "echo decrease height";
|
||||
keep-open = true;
|
||||
}
|
||||
{
|
||||
key = right;
|
||||
desc = "Increase Width";
|
||||
cmd = "echo increase width";
|
||||
keep-open = true;
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
key = "l";
|
||||
desc = "Lock session";
|
||||
cmd = "${plock}/bin/plock";
|
||||
}
|
||||
{
|
||||
key = "p";
|
||||
desc = "Power";
|
||||
submenu = [
|
||||
{
|
||||
key = "l";
|
||||
desc = "Logout";
|
||||
cmd = "${logout}/bin/logout";
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "Suspend";
|
||||
cmd = "systemctl suspend";
|
||||
}
|
||||
{
|
||||
key = "r";
|
||||
desc = "Reboot";
|
||||
cmd = "systemctl reboot";
|
||||
}
|
||||
{
|
||||
key = "o";
|
||||
desc = "Poweroff";
|
||||
cmd = "systemctl poweroff";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "Screenshots";
|
||||
submenu = [
|
||||
{
|
||||
key = "Print";
|
||||
desc = "Screenshot";
|
||||
cmd = "screenshot";
|
||||
}
|
||||
{
|
||||
key = "d";
|
||||
desc = "Delayed";
|
||||
cmd = "screenshot -d 3";
|
||||
}
|
||||
{
|
||||
key = "D";
|
||||
desc = "Select, Delay, Edit, and Copy";
|
||||
cmd = "screenshot -secd 3";
|
||||
}
|
||||
{
|
||||
key = "e";
|
||||
desc = "Select, Edit, and Copy";
|
||||
cmd = "screenshot -sec";
|
||||
}
|
||||
{
|
||||
key = "g";
|
||||
desc = "Select, Gimp, and Copy";
|
||||
cmd = "screenshot -sgc";
|
||||
}
|
||||
{
|
||||
key = "s";
|
||||
desc = "Select and Copy";
|
||||
cmd = "screenshot -sc";
|
||||
}
|
||||
];
|
||||
}
|
||||
]
|
||||
++ lib.lists.optional config.home.desktop.wl-kbptr.enable {
|
||||
key = "m";
|
||||
desc = "Mouse Warp";
|
||||
cmd = "wl-kbptr";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
4
users/phundrak/wlr-which-key/logout.nix
Normal file
4
users/phundrak/wlr-which-key/logout.nix
Normal file
@@ -0,0 +1,4 @@
|
||||
{pkgs, ...}:
|
||||
pkgs.writeShellScriptBin "logout" ''
|
||||
${pkgs.procps}/bin/pidof -x Hyprland && uwsm stop
|
||||
''
|
||||
264
users/phundrak/zellij.nix
Normal file
264
users/phundrak/zellij.nix
Normal file
@@ -0,0 +1,264 @@
|
||||
{lib, ...}: {
|
||||
home.shell.zellij = with lib; {
|
||||
enable = true;
|
||||
clearDefaultKeybinds = true;
|
||||
useUnlockFirst = true;
|
||||
settings.copy_on_select = true;
|
||||
extraSettings = ''
|
||||
plugins {
|
||||
about location="zellij:about"
|
||||
compact-bar location="zellij:compact-bar"
|
||||
configuration location="zellij:configuration"
|
||||
filepicker location="zellij:strider" {
|
||||
cwd "/"
|
||||
}
|
||||
plugin-manager location="zellij:plugin-manager"
|
||||
session-manager location="zellij:session-manager"
|
||||
status-bar location="zellij:status-bar"
|
||||
strider location="zellij:strider"
|
||||
tab-bar location="zellij:tab-bar"
|
||||
welcome-screen location="zellij:session-manager" {
|
||||
welcome_screen true
|
||||
}
|
||||
}
|
||||
'';
|
||||
keybinds = let
|
||||
# bépo layout
|
||||
left = ["c" "Left"];
|
||||
down = ["t" "Down"];
|
||||
up = ["s" "Up"];
|
||||
right = ["r" "Right"];
|
||||
numRow = ["\"" "«" "»" "(" ")" "@" "+" "-" "/" "*"];
|
||||
in {
|
||||
locked = [
|
||||
{
|
||||
bind = "Ctrl Alt g";
|
||||
actions = {SwitchToMode = "normal";};
|
||||
}
|
||||
];
|
||||
pane = [
|
||||
{
|
||||
bind = left;
|
||||
actions = {MoveFocus = "Left";};
|
||||
}
|
||||
{
|
||||
bind = down;
|
||||
actions = {MoveFocus = "Down";};
|
||||
}
|
||||
{
|
||||
bind = up;
|
||||
actions = {MoveFocus = "Up";};
|
||||
}
|
||||
{
|
||||
bind = right;
|
||||
actions = {MoveFocus = "Right";};
|
||||
}
|
||||
{
|
||||
bind = "n";
|
||||
actions = {NewPane = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "T";
|
||||
actions = {NewPane = "Down";};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "R";
|
||||
actions = {NewPane = "Right";};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "S";
|
||||
actions = {NewPane = "stacked";};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "N";
|
||||
actions = {SwitchToMode = "normal";};
|
||||
}
|
||||
{
|
||||
bind = "e";
|
||||
actions = {TogglePaneEmbedOrFloating = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "i";
|
||||
actions = {TogglePanePinned = [];};
|
||||
}
|
||||
{
|
||||
bind = "f";
|
||||
actions = {ToggleFocusFullscreen = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "F";
|
||||
actions = {ToggleFloatingPanes = [];};
|
||||
}
|
||||
{
|
||||
bind = "q";
|
||||
actions = {CloseFocus = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "p";
|
||||
actions = {SwitchToMode = "normal";};
|
||||
}
|
||||
{
|
||||
bind = "P";
|
||||
actions = {
|
||||
SwitchToMode = "renamepane";
|
||||
PaneNameInput = 0;
|
||||
};
|
||||
}
|
||||
{
|
||||
bind = "z";
|
||||
actions = {TogglePaneFrames = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "tab";
|
||||
actions = {SwitchFocus = [];};
|
||||
}
|
||||
];
|
||||
resize = [
|
||||
{
|
||||
bind = "n";
|
||||
actions = {SwitchToMode = "locked";};
|
||||
}
|
||||
{
|
||||
bind = left;
|
||||
actions = {Resize = "Increase Left";};
|
||||
}
|
||||
{
|
||||
bind = down;
|
||||
actions = {Resize = "Increase Down";};
|
||||
}
|
||||
{
|
||||
bind = up;
|
||||
actions = {Resize = "Increase Up";};
|
||||
}
|
||||
{
|
||||
bind = right;
|
||||
actions = {Resize = "Increase Right";};
|
||||
}
|
||||
{
|
||||
bind = "C";
|
||||
actions = {Resize = "Decrease Left";};
|
||||
}
|
||||
{
|
||||
bind = "T";
|
||||
actions = {Resize = "Decrease Down";};
|
||||
}
|
||||
{
|
||||
bind = "S";
|
||||
actions = {Resize = "Decrease Up";};
|
||||
}
|
||||
{
|
||||
bind = "R";
|
||||
actions = {Resize = "Decrease Right";};
|
||||
}
|
||||
{
|
||||
bind = "+";
|
||||
actions = {Resize = "Increase";};
|
||||
}
|
||||
{
|
||||
bind = "-";
|
||||
actions = {Resize = "Decrease";};
|
||||
}
|
||||
];
|
||||
move = [
|
||||
{
|
||||
bind = left;
|
||||
actions = {MovePane = "left";};
|
||||
}
|
||||
{
|
||||
bind = down;
|
||||
actions = {MovePane = "down";};
|
||||
}
|
||||
{
|
||||
bind = up;
|
||||
actions = {MovePane = "up";};
|
||||
}
|
||||
{
|
||||
bind = right;
|
||||
actions = {MovePane = "right";};
|
||||
}
|
||||
{
|
||||
bind = "m";
|
||||
actions = {SwitchToMode = "normal";};
|
||||
}
|
||||
{
|
||||
bind = ["n" "tab"];
|
||||
actions = {MovePane = [];};
|
||||
}
|
||||
{
|
||||
bind = "p";
|
||||
actions = {MovePaneBackwards = [];};
|
||||
}
|
||||
];
|
||||
tab =
|
||||
[
|
||||
{
|
||||
bind = left ++ up;
|
||||
actions = {GoToPreviousTab = [];};
|
||||
}
|
||||
{
|
||||
bind = down ++ right;
|
||||
actions = {GoToNextTab = [];};
|
||||
}
|
||||
{
|
||||
bind = "[";
|
||||
actions = {BreakPaneLeft = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "]";
|
||||
actions = {BreakPaneRight = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "b";
|
||||
actions = {BreakPane = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "n";
|
||||
actions = {NewTab = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "R";
|
||||
actions = {
|
||||
SwitchToMode = "renametab";
|
||||
TabNameInput = 0;
|
||||
};
|
||||
}
|
||||
{
|
||||
bind = "s";
|
||||
actions = {ToggleActiveSyncTab = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "T";
|
||||
actions = {SwitchToMode = "normal";};
|
||||
}
|
||||
{
|
||||
bind = "x";
|
||||
actions = {CloseTab = [];};
|
||||
useUnlockFirst = true;
|
||||
}
|
||||
{
|
||||
bind = "tab";
|
||||
actions = {ToggleTab = [];};
|
||||
}
|
||||
]
|
||||
++ (lists.imap1 (i: key: {
|
||||
bind = key;
|
||||
actions = {GoToTab = i;};
|
||||
useUnlockFirst = true;
|
||||
})
|
||||
numRow);
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user