Compare commits

..

231 Commits

Author SHA1 Message Date
16980bf9f4 migrate to 25.11; remove teamspeak and jellyfin player due to webkit deprecation; 2025-11-28 00:42:44 +00:00
4fc8b0f4fa ignore container failures; lets try vesktop again; update resharper code 2025-11-26 17:29:22 +00:00
3a9d27adb8 move lsfg to gaming; add notes for 24.11 release; 2025-11-18 22:48:25 +00:00
079ba8a9d5 add oomd; swap back from tlp to power profiles; update resharper code; remove more mozilla bs 2025-11-17 16:01:31 +00:00
48c40f8124 update 2025-11-12 21:13:48 +00:00
c3171bd792 remove nftables (linux uses this by default now anyways i think?)
add busybox since its basically expected by some programs (comes with xz)
make virtualisation a proper module so i can flip between docker and podman (i will make podman work one day i swear)
add waydroid back in
electrum is busted for now
make resharper a bit more modular
add new firefox bs
2025-11-07 11:28:21 +00:00
a64a137724 Merge branch 'master' of https://git.worble.xyz/worble/nixos 2025-10-27 13:57:04 +00:00
d776ce0667 update ff profile 2025-10-27 13:56:41 +00:00
70a7c6d30a add nix path; remove openrgb due to build issues; use unstable teams cause mic issues; 2025-10-27 13:56:33 +00:00
f648311d04 flake update 2025-10-22 13:02:41 +01:00
8f5a18577f change to binary wrapper 2025-10-21 18:49:01 +01:00
4a49961bc0 omg i fixed vscode resharper i am a nix GOD 2025-10-21 18:23:20 +01:00
9f51eaf5fc finally embrace the sidebar revamp 2025-10-21 17:19:59 +01:00
bfc2435b43 add mkvtoolnix; remove kodi; move mangohud to gaming; playing with vscode resharper-code; 2025-10-21 11:33:52 +01:00
86abbf360e minor updates to firefox; change battery to balance power; tried adding resharper but doesnt work lmao 2025-10-15 14:37:23 +01:00
f33924569f update flake.lock 2025-10-15 13:30:09 +01:00
72558d3d07 fix flake paths 2025-10-14 21:58:42 +01:00
03f7b779bd Merge branch 'master' of https://git.worble.xyz/worble/nixos 2025-10-14 21:55:49 +01:00
21f1600fdc give each device its own flake.nix to stop constant lock file changes causing merge issues 2025-10-14 21:54:43 +01:00
c55f1eb9d7 update flake.lock 2025-10-14 21:50:02 +01:00
c7d7cb845b wrap wine and umu to avoid flooding session with variables 2025-10-14 14:31:38 +01:00
30441810be update flake.lock 2025-10-14 12:56:21 +01:00
531fafcb52 merge 2025-10-14 12:54:50 +01:00
89a15a63e8 minor cleanup; use gamescope default args instead of wrapper 2025-10-13 23:54:00 +01:00
66e7e4fdc0 update flake.lock 2025-10-13 21:38:47 +01:00
f66ef91e85 move ntsync to the correct option; make extra mpv stuff a config option; add some gaming helper scripts + default env vars 2025-10-13 17:59:46 +01:00
d5d9396b6d update flake.lock 2025-10-12 23:35:30 +01:00
fb5b7abbd4 update flake.lock 2025-10-12 01:38:26 +01:00
4684925c97 update flake.lock 2025-10-10 23:43:39 +01:00
c4b4e682b1 fix gnome; swap to appindicator 2025-10-10 23:39:06 +01:00
950fe60383 add tablet modes for firefox and gnome 2025-10-10 23:18:42 +01:00
6c69dab6fa remove random files 2025-10-10 16:26:37 +01:00
8a3698ce15 add gnome for starlite 2025-10-10 16:24:42 +01:00
869c6b4707 merge 2025-10-10 14:16:28 +01:00
25158bedf1 move more networking stuff to networking module; add ntsync to kernel for tuxedo; use unstable for wine 2025-10-10 14:15:24 +01:00
363f42c829 update flake.lock 2025-10-10 10:19:44 +01:00
38f691cacd update flake.lock 2025-10-09 23:29:34 +01:00
e592ca5e0a update flake.lock 2025-10-08 22:13:00 +01:00
bf6f379a4f merge 2025-10-08 22:11:29 +01:00
6378246c2c update flake.lock 2025-10-08 22:00:33 +01:00
300c36245e update flake.lock 2025-10-07 22:03:10 +01:00
9ef91f7ab5 update flake.lock 2025-10-05 16:56:04 +01:00
249afa0b65 update flake.lock 2025-10-04 00:20:42 +01:00
730b115bf8 update flake.lock 2025-10-02 23:08:15 +01:00
499900014e update flake.lock 2025-10-02 00:20:16 +01:00
80c13f0ee3 update flake.lock 2025-09-30 22:27:46 +01:00
7049373384 update flake.lock 2025-09-29 23:49:31 +01:00
12cab79679 update flake.lock 2025-09-28 00:52:59 +01:00
cf9b2a0cdb update flake.lock 2025-09-27 01:03:16 +01:00
6a45fca8d5 refactor and modularize base.nix futher; use default.nix when possible 2025-09-26 11:49:00 +01:00
db9826339f update flake.lock 2025-09-25 00:01:53 +01:00
00b67e55bc update flake.lock 2025-09-23 23:11:19 +01:00
3d037d2dbd update flake.lock 2025-09-22 23:34:19 +01:00
7adcf7baa5 update flake.lock 2025-09-21 00:08:49 +01:00
ac5216413e back to docker; add npmrc for not executing scripts; update hx script; 2025-09-20 21:12:50 +01:00
93cee2d49a update flake.lock 2025-09-19 23:19:43 +01:00
0a9037abaa update flake.lock 2025-09-18 23:47:14 +01:00
49bca53aa7 update flake.lock 2025-09-17 23:58:51 +01:00
3fe1471c0f update flake.lock 2025-09-16 23:11:45 +01:00
226188b263 update flake.lock 2025-09-12 23:14:58 +01:00
d3bf4cce17 update flake.lock 2025-09-11 21:07:47 +01:00
a8480384e7 update flake.lock 2025-09-10 23:14:41 +01:00
a60c7b8ca5 update flake.lock 2025-09-09 23:11:36 +01:00
a3073c0895 update flake.lock 2025-09-08 00:30:28 +01:00
8b472eae63 update flake.lock 2025-09-06 23:20:17 +01:00
190c58639f use zramswap instead of file; use sudo-rs; remove discover; readd docker compose; remove redundant comments (I cant believe fullscreen finally works and i didnt even change anything); joplin desktop needs unstable; 2025-09-04 17:10:42 +01:00
03efdeddc5 update flake.lock 2025-09-02 23:05:24 +01:00
edd7dbccfa update flake.lock 2025-08-31 00:18:58 +01:00
41dc3f8112 update flake.lock 2025-08-28 00:12:14 +01:00
e7233faed1 update flake.lock 2025-08-25 02:31:50 +01:00
dd4ca5a69e lots of updates; playing with wine 2025-08-23 14:51:32 +01:00
cd1aac83b2 update flake.lock 2025-08-23 00:40:05 +01:00
20d5a43dd7 update flake.lock 2025-08-20 23:17:35 +01:00
6ecc69eb2e update flake.lock 2025-08-15 23:16:57 +01:00
beac80516d update flake.lock 2025-08-15 00:26:00 +01:00
d6d6603df6 update flake.lock 2025-08-13 23:04:41 +01:00
4e6e74b2f8 update flake.lock 2025-08-12 00:57:53 +01:00
03e1cf00a1 update flake.lock 2025-08-09 01:16:47 +01:00
ab7b90bcb2 update flake.lock 2025-08-08 02:06:56 +01:00
e230dea138 update flake.lock 2025-08-05 23:23:44 +01:00
19fa7c2fc1 update flake.lock 2025-08-05 01:20:59 +02:00
c5d34c86b8 update flake.lock 2025-08-03 01:00:07 +01:00
3b557449c9 update flake.lock 2025-08-02 00:58:38 +01:00
074962e7a9 move mpv to own folder; remove unneccessary wayland support override 2025-08-01 10:12:30 +01:00
e4b45eeb4a add lsfg; use programs gpu screen recorder; remove unused programs; biome lsp is way out of date; 2025-08-01 09:55:42 +01:00
36264583b2 update flake.lock 2025-07-31 23:43:10 +01:00
c2dd8138aa update flake.lock 2025-07-31 14:52:13 +01:00
7d0c3d2751 update flake.lock 2025-07-30 22:36:23 +01:00
7a16c9dc40 update flake.lock 2025-07-28 00:12:45 +02:00
b7ada15fb9 update flake.lock 2025-07-26 01:02:02 +02:00
bd5507a366 update flake.lock 2025-07-22 23:56:53 +02:00
d8538369ef update flake.lock 2025-07-19 15:28:17 +02:00
8233861699 enable chrony as default nts provider; use automatic timezond for timezone; 2025-07-19 15:22:52 +02:00
b9e7e22ddd lots of changes yes im bad i should commit more often sue me 2025-07-15 09:58:45 +01:00
c08da164ac update flake.lock 2025-07-14 23:27:27 +01:00
2fbd529e59 update flake.lock 2025-07-13 00:12:00 +01:00
0dec323af5 update flake.lock 2025-07-11 23:31:39 +01:00
27b3ec6a46 update flake.lock 2025-07-10 00:14:07 +01:00
4c06e18113 update flake.lock 2025-07-06 00:03:18 +01:00
617cf08fc8 update flake.lock 2025-07-03 23:59:28 +01:00
761000913a update flake.lock 2025-07-01 00:23:51 +01:00
e5503bbf58 update flake.lock 2025-06-30 00:26:28 +01:00
a997dee6ba update flake.lock 2025-06-30 00:03:07 +01:00
739518cdac merge 2025-06-30 00:01:06 +01:00
72ae66c403 update flake.lock 2025-06-26 00:20:31 +01:00
fe9531c732 update flake.lock 2025-06-23 23:51:20 +01:00
a1f96ee51d update flake.lock 2025-06-23 00:25:29 +01:00
7b4c789cae update flake.lock 2025-06-21 00:43:28 +01:00
52d33c1204 update flake.lock 2025-06-19 23:27:55 +01:00
ed349bd4e6 yazi: manager -> mgr
helix: add ruff for python
2025-06-19 22:36:42 +01:00
55c0df89fd make nix index shallow
readd distrobox
add ts6-client
setup vscode for  python
2025-06-17 19:20:29 +01:00
6981f2cee2 update flake.lock 2025-06-16 22:34:22 +01:00
5a63b14c5b update flake.lock 2025-06-16 00:06:24 +01:00
730bfc0d28 update flake.lock 2025-06-12 23:41:23 +01:00
56467e6f40 update flake.lock 2025-06-10 23:28:00 +01:00
9fed42aba1 update flake.lock 2025-06-09 22:39:16 +01:00
c2472925bf update flake.lock 2025-06-08 00:09:59 +01:00
e192b9401d update flake.lock 2025-06-07 00:40:41 +01:00
60b79b65b5 update flake.lock 2025-06-06 00:17:28 +01:00
55a3afc085 update flake.lock 2025-06-04 23:31:12 +01:00
7acbaa0a6d update flake.lock 2025-06-03 14:12:14 +01:00
347cc444b9 update flake.lock 2025-06-03 00:17:04 +01:00
5159cf50c9 add shell command to fix nix when it gets in a tizz; add nix-index so fish no longer throws a wobbly when you call a commaand that doesnt exist; remove shell format since bash ide can now use it; add packages for gamescope to steam 2025-06-02 14:03:19 +01:00
2c1dfb7eb8 remove manual blesh in favor of bash.blesh.enable 2025-06-02 13:27:49 +01:00
2b1fa4df5b add fish 2025-06-02 13:26:56 +01:00
f72b5ef8a8 update flake.lock 2025-06-01 21:38:43 +01:00
c1ad79003d update flake.lock 2025-05-30 23:46:51 +01:00
f9e672cb8f remove tux since its broken for now; remove unneeded vscode exts; use initextraa instead of bashrc 2025-05-30 10:50:34 +01:00
ae21fe1426 update flake.lock 2025-05-29 23:21:44 +01:00
0e6929eeed update flake.lock 2025-05-28 23:13:45 +01:00
7767ff77ba fix emoji on firefox; use unstable joplin 2025-05-28 17:44:07 +01:00
a04a6b81f1 update flake.lock 2025-05-28 17:26:04 +01:00
57901ae14e update flake.lock 2025-05-27 23:24:06 +01:00
73325a848c update flake.lock 2025-05-26 21:32:46 +01:00
7da24cbbfb enable gamescope 2025-05-22 22:19:43 +01:00
fc60f584cf remove unused godot code 2025-05-22 15:18:52 +01:00
95608f2bfa add pipewire auto gain control block; update to 25.05; add wireshark gui; ryubing->stable; nerd-fonts new packaging; godot-mono->stable; update vscode 2025-05-22 15:18:30 +01:00
64eae63335 update flake.lock 2025-05-22 10:33:26 +01:00
f34bf9c853 update flake.lock 2025-05-22 10:29:57 +01:00
ce675dd168 update flake.lock 2025-05-21 21:07:25 +01:00
aa9a9df476 update flake.lock 2025-05-20 23:37:43 +01:00
32355dd7ee update flake.lock 2025-05-19 22:17:31 +01:00
218f8fa0e7 update flake.lock 2025-05-16 23:04:41 +01:00
3466a8aba0 update flake.lock 2025-05-15 00:08:52 +01:00
72cbcd5551 enable wireshark; add retry on systemd service; 2025-05-14 16:09:26 +01:00
340a2ab92f update flake.lock 2025-05-14 00:26:34 +01:00
6046f90c81 update flake.lock 2025-05-13 00:22:48 +01:00
3221c78b23 update flake.lock 2025-05-12 00:59:34 +01:00
ee264ae42d update flake.lock 2025-05-10 01:52:06 +01:00
8f5e6d6c10 update flake.lock 2025-05-08 00:26:42 +01:00
f83178aa06 update flake.lock 2025-05-06 23:52:38 +01:00
9c35d324b9 update flake.lock 2025-05-05 00:29:27 +01:00
e8ee2672c9 update flake.lock 2025-05-04 00:49:09 +01:00
82cbe88da2 update flake.lock 2025-05-03 00:34:26 +01:00
3aa4557971 add c# support to hx 2025-05-01 21:48:06 +01:00
18c9a5d628 update flake.lock 2025-04-30 23:34:17 +01:00
dbbfc3d8ff update flake.lock 2025-04-30 13:13:22 +01:00
769dc917b5 update flake.lock 2025-04-30 00:29:08 +01:00
5e771a9c2c always pull before updating; commit lock file if changed; add inputs to gaming dev; change vscode repo names 2025-04-29 21:57:03 +01:00
632a1f13c5 update flake.lock 2025-04-29 21:54:19 +01:00
e0d0619dcb update flake.lock 2025-04-29 13:25:00 +01:00
d89718daa3 readd godot 2025-04-29 13:11:10 +01:00
36fa73a3b6 Shallow clone all flake inputs
Change geoclue provider to beacondb
Add popsicle
Add interpolation to default mpv
Download from vscode store while openvsx is down
Remove webp extension
2025-04-29 13:07:33 +01:00
13a7e9b0db add appimage-run; update flake.lock; add proton-ge-bin; fix godot 2025-04-16 10:23:41 +01:00
89ceac6561 disable cdemu; add ruffle; add cheatengine and heroic; biome.requireConfigFile = true 2025-04-07 15:06:40 +01:00
aa1c23af60 working version of godot; remove waydroid 2025-03-17 11:24:43 +00:00
7ffb78ab59 remove autonumlock didnt work 2025-03-17 11:05:50 +00:00
d8ff719ba7 add mgba; change from podman to docker; 2025-03-17 11:05:39 +00:00
68bdb4862f make mpv config properly nixified 2025-03-07 18:41:00 +00:00
ac0d3e85a0 make mpv config properly nixified 2025-03-07 18:40:55 +00:00
88bc79b530 various updates 2025-03-07 17:14:21 +00:00
bbc1933f92 remove unneeded nextclound-client; new ryujinx name; add lots of git config; 2025-02-25 17:56:12 +00:00
Steam Deck User
6b166adadf add gitignore 2025-02-23 18:04:40 +00:00
Steam Deck User
9bc902cb90 add nix system graphics 2025-02-23 18:02:24 +00:00
Steam Deck User
3bda156ab4 add nixgl 2025-02-23 16:22:20 +00:00
b1199a7eda remove stevenblack as it caused issues with aspire; lock nix vdcode as it had a bad commit; more aggresively gc; add openrgb; add wifi kernel options (not sure this even helps); add kodi to tux 2025-02-20 12:35:36 +00:00
b05de0fb22 add syncthing and strawberry; add virtiofsd to virtualisation 2025-02-14 08:23:09 +00:00
6c3b82e000 base mpv config as mkdefault so it can be overriden 2025-02-12 21:44:48 +00:00
441bda36b5 starlite cleanup 2025-02-12 21:38:28 +00:00
8d7bb62014 add nixos hardware for starlite; enable all firmware; add base home manager for common config; add modproobe for tux wifi; add fooyin as fb2k replacement; 2025-02-12 21:38:18 +00:00
99768f0b4a another reorg; add options for full or minimal helix install 2025-02-08 17:27:13 +00:00
ea4e20e990 remove system from topgrade ignore 2025-02-08 14:00:45 +00:00
a3e808d71d fix home manager arguments 2025-02-08 13:47:38 +00:00
ead919a8ce disable system update steam deck 2025-02-08 13:37:03 +00:00
28628f2269 update deck user and home path 2025-02-08 13:28:38 +00:00
138d1bd1b3 use mkIf for conditionals 2025-02-08 13:26:08 +00:00
6d0f9224be allow unfree for deck 2025-02-08 12:36:42 +00:00
dc11021b22 extra special args for inputs 2025-02-08 12:34:19 +00:00
4cc8a23bd8 inherit inputs 2025-02-08 12:32:50 +00:00
8b71743b00 remove special args 2025-02-08 12:30:18 +00:00
92418c9f81 change deck home manager export 2025-02-08 12:24:03 +00:00
26d4d42153 add deck home manager to flake 2025-02-08 12:05:12 +00:00
0241c5ce3a add deck home manager 2025-02-08 11:49:52 +00:00
b31503e82b update helix; vscode; swap discord for vesktop 2025-02-07 13:03:04 +00:00
27e4661529 update flake.lock 2025-02-05 00:15:35 +00:00
d13a65eed6 add maalit to plasma wayland session in sddm 2025-02-03 23:17:07 +00:00
9374493029 remove fcitx cause it no work 2025-02-03 18:58:15 +00:00
12fb7ab7b0 add maliit keyboard to sddm 2025-02-03 16:43:57 +00:00
47e153f9a3 update flake.lock 2025-02-03 11:21:56 +00:00
20eeefc476 add dotenv vscode; update flake lock 2025-01-30 00:13:39 +00:00
ec307680fa add y function for yazi; update lock 2025-01-24 11:27:08 +00:00
ce84616e1c more vscode extensions; update flake 2025-01-23 00:26:51 +00:00
39ae22d7dc enable waydroid; use vscode tailwind extension because it supports the latest beta; update lock file 2025-01-21 00:31:24 +00:00
4e91adfd14 update vscode 2025-01-17 23:22:09 +00:00
320bbfda29 Merge branch 'master' of https://git.worble.xyz/worble/nixos 2025-01-17 23:19:07 +00:00
bf2a27399b update vscode 2025-01-17 23:18:49 +00:00
ec92d8ee9c add wasi core to vscode 2025-01-16 21:40:33 +00:00
98b968b8bb move development packages around 2025-01-16 15:42:01 +00:00
f00ba797a3 update flake.lock 2025-01-16 00:23:36 +00:00
33fdd4cb2b move auth second 2025-01-15 22:38:34 +00:00
dd5f6e9e04 update flake 2025-01-15 22:23:20 +00:00
2a7822d868 add flutter to vscode 2025-01-15 22:21:44 +00:00
4d3cbe3409 remove unused options 2025-01-15 12:08:07 +00:00
2c5429982a add worble credential 2025-01-15 12:01:33 +00:00
9f616076eb move some gaming packages to inbuild settings; manage git config declaritively 2025-01-15 11:56:51 +00:00
284945f7c0 fix lsp warnings 2025-01-14 14:18:54 +00:00
064c2b8490 fix lsp warnings 2025-01-14 14:17:24 +00:00
d1629cd8b0 Merge branch 'master' of https://git.worble.xyz/worble/nixos 2025-01-14 13:51:04 +00:00
8896c27e13 add lots of helix config; update vscode config; 2025-01-14 13:49:34 +00:00
5e5e1334aa fix settings for mpv 2025-01-14 00:29:32 +00:00
d164b95f21 update flake.lock 2025-01-13 21:35:47 +00:00
d530fd3d23 add swapfile 2025-01-13 21:29:48 +00:00
eafba50214 add arguments to update flake; add xdg icon fallback; organised applications in home manager 2025-01-13 17:36:49 +00:00
3062a5d444 update flake.lock; add firefox extensions as policies 2025-01-12 20:24:45 +00:00
239ffe5083 fix home manager reference 2025-01-11 23:54:59 +00:00
d08153e691 move home up a level 2025-01-11 23:48:55 +00:00
3b7d162a5a update flake 2025-01-11 23:26:36 +00:00
2a017e1523 hand gitconfig dotfile 2025-01-11 22:41:21 +00:00
b1d59bbb9e fix starlite paths 2025-01-11 22:25:49 +00:00
ed2d9c57f8 add starlite 2025-01-11 21:50:29 +00:00
63b3f5c9fa move virtualisation to module; update flake lock 2025-01-11 00:35:21 +00:00
63 changed files with 2207 additions and 765 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
result

View File

@@ -0,0 +1,13 @@
{ ... }:
{
imports = [
./fonts.nix
./location-time.nix
./networking.nix
./nix-settings.nix
./oomd.nix
./pipewire.nix
./programs.nix
];
}

View File

@@ -0,0 +1,29 @@
{ pkgs, ... }:
{
fonts = {
enableDefaultPackages = true;
fontconfig.useEmbeddedBitmaps = true;
packages = with pkgs; [
noto-fonts
noto-fonts-cjk-sans
noto-fonts-cjk-serif
];
};
# Select internationalisation properties.
i18n = {
defaultLocale = "en_GB.UTF-8";
supportedLocales = [
"en_GB.UTF-8/UTF-8"
"en_US.UTF-8/UTF-8"
"ja_JP.UTF-8/UTF-8"
];
};
console = {
# font = "Lat2-Terminus16";
keyMap = "uk";
# useXkbConfig = true; # use xkb.options in tty.
};
}

View File

@@ -0,0 +1,14 @@
{ ... }:
{
# Set your time zone.
# time.timeZone = "Europe/London";
services.automatic-timezoned.enable = true;
services.chrony = {
enable = true;
};
services.geoclue2 = {
enable = true;
geoProviderUrl = "https://api.beacondb.net/v1/geolocate";
};
}

View File

@@ -0,0 +1,41 @@
{ pkgs, ... }:
{
# networking.hostName = "nixos"; # Define your hostname.
# Pick only one of the below networking options.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
networking = {
networkmanager = {
# Easiest to use and most distros use this by default.
enable = true;
wifi.powersave = false;
};
firewall = {
enable = true;
};
};
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Open ports in the firewall.
# 443 Helldivers crashes internet otherwise
# networking.firewall.allowedTCPPorts = [ 443 ];
# networking.firewall.allowedUDPPorts = [ 443 ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Block list
# networking.stevenblack.enable = true;
# services.resolved.enable = true;
services.mullvad-vpn = {
enable = true;
package = pkgs.mullvad-vpn;
};
}

View File

@@ -0,0 +1,18 @@
{ inputs, ... }:
{
nixpkgs.config.allowUnfree = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nix.settings.auto-optimise-store = true;
nix.gc.automatic = true;
nix.gc.options = "--delete-older-than 7d";
# https://github.com/nix-community/nixd/blob/main/nixd/docs/configuration.md
nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
programs.nix-ld = {
enable = true;
# libraries = pkgs.steam-run.fhsenv.args.multiPkgs pkgs;
# libraries = pkgs.appimageTools.defaultFhsEnvArgs.targetPkgs pkgs;
};
}

View File

@@ -0,0 +1,10 @@
{ ... }:
{
systemd.oomd = {
enable = true;
enableRootSlice = true;
enableSystemSlice = true;
enableUserSlices = true;
};
}

View File

@@ -0,0 +1,35 @@
{ ... }:
{
# Enable sound.
# hardware.pulseaudio.enable = true;
# OR
services.pipewire = {
enable = true;
pulse.enable = true;
extraConfig.pipewire-pulse = {
"10-prevent-agc" = {
"pulse.rules" = [
{
matches = [
{ "application.process.binary" = "chrome"; }
{ "application.process.binary" = "Discord"; }
{ "application.process.binary" = "teams"; }
{ "application.process.binary" = "electron"; }
{ "application.process.binary" = "skypeforlinux"; }
{ "application.process.binary" = "telegram-desktop"; }
{ "application.process.binary" = "vivaldi"; }
{ "application.process.binary" = "chromium"; }
{ "application.process.binary" = "zoom"; }
];
actions = {
quirks = [
"block-source-volume"
];
};
}
];
};
};
};
}

View File

@@ -0,0 +1,37 @@
{ pkgs, ... }:
{
security.sudo-rs.enable = true;
services.fwupd.enable = true;
services.flatpak.enable = true;
programs.bash.blesh.enable = true;
programs.fish.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# utils
uutils-coreutils-noprefix
vim
curl
inetutils
dig
exfatprogs
rar
zstd
p7zip
busybox
libva-utils
smartmontools
appimage-run
# dicts
nuspell
hunspellDicts.en-gb-large
# For cursor in steam?
xsettingsd
xorg.xrdb
];
}

View File

@@ -2,84 +2,27 @@
# your system. Help is available in the configuration.nix(5) man page, on # your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). # https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, inputs, ... }: { pkgs, ... }:
{ {
imports = imports = [ ./base ];
[
./nix-settings.nix
./fonts.nix
./kde.nix
./virtualisation.nix
];
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = pkgs.linuxPackages_zen; boot.kernelPackages = pkgs.linuxPackages_latest;
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
hardware.enableRedistributableFirmware = true;
hardware.enableAllFirmware = true;
# networking.hostName = "nixos"; # Define your hostname. # Disks / Swap / etc
# Pick only one of the below networking options. # swapDevices = [{
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. # device = "/var/lib/swapfile";
networking.networkmanager = { # size = 16 * 1024; # 16 GB
# Easiest to use and most distros use this by default. # }];
enable = true; zramSwap.enable = true; # Creates a zram block device and uses it as a swap device
wifi.powersave = false;
};
# Set your time zone.
time.timeZone = "Europe/London";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
# hardware.pulseaudio.enable = true;
# OR
services.pipewire = {
enable = true;
pulse.enable = true;
};
services.fstrim.enable = true; services.fstrim.enable = true;
# services.resolved.enable = true;
services.mullvad-vpn = {
enable = true;
package = pkgs.mullvad-vpn;
};
services.fwupd.enable = true;
services.geoclue2.enable = true;
services.flatpak.enable = true;
programs.nix-ld.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs;
[
nixpkgs-fmt
gcc
vim
curl
wget
inetutils
rar
nuspell
hunspellDicts.en-gb-ise
libva-utils
smartmontools
];
# Some programs need SUID wrappers, can be configured further or are # Some programs need SUID wrappers, can be configured further or are
# started in user sessions. # started in user sessions.
@@ -94,13 +37,6 @@
# Enable the OpenSSH daemon. # Enable the OpenSSH daemon.
# services.openssh.enable = true; # services.openssh.enable = true;
# Open ports in the firewall.
# 443 Helldivers crashes internet otherwise
networking.firewall.allowedTCPPorts = [ 443 ];
networking.firewall.allowedUDPPorts = [ 443 ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system # Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you # (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix. # accidentally delete configuration.nix.
@@ -124,5 +60,4 @@
# #
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.05"; # Did you read the comment? system.stateVersion = "24.05"; # Did you read the comment?
} }

View File

@@ -1,35 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
fonts.enableDefaultPackages = true;
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk-sans
noto-fonts-cjk-serif
];
# Select internationalisation properties.
i18n = {
defaultLocale = "en_GB.UTF-8";
supportedLocales = [
"en_GB.UTF-8/UTF-8"
"en_US.UTF-8/UTF-8"
"ja_JP.UTF-8/UTF-8"
];
inputMethod = {
enable = true;
type = "fcitx5";
fcitx5 = {
waylandFrontend = true;
addons = with pkgs; [ fcitx5-mozc ];
};
};
};
console = {
# font = "Lat2-Terminus16";
keyMap = "uk";
# useXkbConfig = true; # use xkb.options in tty.
};
}

View File

@@ -1,23 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
services.xserver.enable = true; # optional
# Configure keymap in X11
# services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape";
services.displayManager.sddm.enable = true;
services.displayManager.sddm.wayland.enable = true;
services.desktopManager.plasma6.enable = true;
environment.systemPackages = with pkgs;
[ ] ++ (with kdePackages; [
sddm-kcm
plasma-disks
partitionmanager
filelight
ffmpegthumbs
kcalc
]);
}

View File

@@ -0,0 +1,43 @@
{ pkgs, ... }:
{
hardware.graphics.enable32Bit = true; # For 32 bit applications
hardware.steam-hardware.enable = true;
programs.gamemode.enable = true;
programs.gamescope = {
enable = true;
# capSysNice = true;
args = [
"-H 1080"
];
};
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
gamescopeSession.enable = true;
protontricks.enable = true;
extraCompatPackages = [ pkgs.proton-ge-bin ];
package = pkgs.steam.override {
extraPkgs = pkgs': with pkgs'; [
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib # Provides libstdc++.so.6
libkrb5
keyutils
];
};
};
programs.cdemu.enable = true; # Remember to add users to the cdrom group for this to work
environment.systemPackages = with pkgs;[
lsfg-vk
lsfg-vk-ui
];
}

View File

@@ -0,0 +1,27 @@
{ pkgs, config, lib, ... }:
with lib;
{
options.gnome.tablet = mkOption {
type = types.bool;
default = false;
};
config = {
services.xserver.enable = true;
services.xserver.displayManager.gdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
# To disable installing GNOME's suite of applications
# and only be left with GNOME shell.
# services.gnome.core-apps.enable = false;
services.gnome.core-developer-tools.enable = false;
services.gnome.games.enable = false;
environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-user-docs ];
environment.systemPackages = with pkgs.gnomeExtensions; [
appindicator
] ++ optionals config.gnome.tablet [
touchup
];
};
}

View File

@@ -0,0 +1,24 @@
{ pkgs, ... }:
{
# Install Japanese IME MOZC
i18n.inputMethod = {
enable = true;
type = "fcitx5";
# ibus = {
# engines = with pkgs.ibus-engines; [ mozc anthy ];
# panel = "${pkgs.kdePackages.plasma-desktop}/libexec/kimpanel-ibus-panel";
# };
fcitx5 = {
waylandFrontend = true;
addons = with pkgs; [
fcitx5-mozc
fcitx5-anthy
];
};
};
environment.systemPackages = [
pkgs.kdePackages.fcitx5-configtool
];
}

View File

@@ -0,0 +1,29 @@
{ pkgs, ... }:
{
services.xserver.enable = true; # optional
# Configure keymap in X11
# services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape";
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
};
services.desktopManager.plasma6.enable = true;
environment.plasma6.excludePackages = [ pkgs.kdePackages.discover ];
# For cursor in steam?
# xdg.icons.fallbackCursorThemes = [ "breeze_cursors" ];
programs.partition-manager.enable = true;
environment.systemPackages = with pkgs.kdePackages;[
sddm-kcm
plasma-disks
filelight
ffmpegthumbs
kcalc
];
}

View File

@@ -0,0 +1,21 @@
{ ... }:
{
services.power-profiles-daemon.enable = true;
# services.tlp = {
# enable = true;
# settings = {
# RESTORE_DEVICE_STATE_ON_STARTUP = 1;
# USB_AUTOSUSPEND = 0;
# PLATFORM_PROFILE_ON_AC = "performance";
# PLATFORM_PROFILE_ON_BAT = "low-power";
# CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
# CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
# CPU_BOOST_ON_AC = 1;
# CPU_BOOST_ON_BAT = 0;
# };
# };
# Enable touchpad support (enabled by default in most desktopManagers).
services.libinput.enable = true;
}

View File

@@ -0,0 +1,53 @@
{ pkgs, lib, config, ... }:
with lib;
{
options.virtualisation.containerManagement = mkOption {
type = types.enum [ "docker" "podman" ];
default = "docker";
};
config = {
virtualisation = {
containers = {
# Enable common container config files in /etc/containers
enable = true;
};
libvirtd = {
enable = true;
qemu = {
vhostUserPackages = [ pkgs.virtiofsd ];
};
};
# remember to add the necessary users to the podman group
podman = {
enable = if (config.virtualisation.containerManagement == "podman") then true else false;
dockerSocket.enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
};
# remember to add the necessary users to the docker group
docker = {
enable = if (config.virtualisation.containerManagement == "docker") then true else false;
storageDriver = "btrfs";
};
waydroid = {
enable = true;
package = pkgs.waydroid-nftables;
};
};
programs.virt-manager.enable = true;
environment.systemPackages = with pkgs;[
waydroid-helper
] ++ optionals (config.virtualisation.containerManagement == "podman") [
docker-compose
# podman-compose
podman-tui
podman-desktop
] ++ optionals (config.virtualisation.containerManagement == "docker") [
lazydocker
];
};
}

View File

@@ -1,10 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
nixpkgs.config.allowUnfree = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nix.settings.auto-optimise-store = true;
nix.gc.automatic = true;
nix.gc.options = "--delete-older-than 30d";
}

View File

@@ -1,22 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
virtualisation = {
containers = {
# Enable common container config files in /etc/containers
enable = true;
};
libvirtd = {
enable = true;
};
podman = {
enable = true;
# Create a `docker` alias for podman, to use it as a drop-in replacement
dockerCompat = true;
# Required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
};
};
programs.virt-manager.enable = true;
}

59
devices/deck/flake.nix Normal file
View File

@@ -0,0 +1,59 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11?shallow=1";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable?shallow=1"; # use by inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}".[package name]
home-manager = {
url = "github:nix-community/home-manager/release-25.11?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-index-database = {
url = "github:nix-community/nix-index-database?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions?shallow=1";
system-manager = {
url = "github:numtide/system-manager?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-system-graphics = {
url = "github:soupglasses/nix-system-graphics?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, home-manager, system-manager, nix-system-graphics, nix-index-database, ... }@inputs:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ system-manager.overlays.default ];
};
in
{
packages.${system}.homeConfigurations.deck = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = { inherit inputs; };
modules = [
nix-index-database.homeModules.nix-index
./home.nix
];
};
systemConfigs.deck = system-manager.lib.makeSystemConfig {
modules = [
nix-system-graphics.systemModules.default
{
config = {
nixpkgs.hostPlatform = "x86_64-linux";
system-manager.allowAnyDistro = true;
system-graphics.enable = true;
};
}
];
};
};
}

66
devices/deck/home.nix Normal file
View File

@@ -0,0 +1,66 @@
{ pkgs, ... }:
let
homeUpdateLocation = "/home/deck/Projects/nixos/devices/deck#deck";
in
{
imports = [
../../home-manager
../../home-manager/gaming.nix
../../home-manager/development/vscode.nix
];
terminal.homeUpdateLocation = homeUpdateLocation;
terminal.flakeUpdateLocation = "/home/deck/Projects/nixos/devices/deck";
nixpkgs.config = {
allowUnfree = true;
};
nix.gc.automatic = true;
home.username = "deck";
home.homeDirectory = "/home/deck";
home.stateVersion = "24.05";
home.packages = with pkgs;[
system-manager
];
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
"nix-steam-run.sh" = {
text = ''
unset LD_PRELOAD
# shellcheck source=/dev/null
source /etc/profile.d/nix.sh
exec "$@"
'';
executable = true;
};
};
programs = {
topgrade = {
settings = {
post_commands = {
nix-system-manager = "sudo system-manager switch --flake ${homeUpdateLocation}";
};
};
};
kodi = {
enable = true;
package = pkgs.kodi.withPackages (exts: [ exts.jellycon exts.joystick ]);
};
};
}

View File

@@ -0,0 +1,45 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ inputs, pkgs, ... }:
{
imports =
[
../../configuration
# Include the results of the hardware scan.
./hardware-configuration.nix
inputs.disko.nixosModules.default
./disk-config.nix
inputs.home-manager.nixosModules.default
../../configuration/modules/laptop.nix
../../configuration/modules/gnome.nix
];
gnome.tablet = true;
networking.hostName = "starlite"; # Define your hostname.
environment.systemPackages = with pkgs.gnomeExtensions; [
touchup
];
# Define a user account. Don't forget to set a password with passwd.
users.users.worble = {
initialPassword = "password";
isNormalUser = true;
extraGroups = [ "wheel" ]; # Enable sudo for the user.
linger = true;
};
home-manager.useGlobalPkgs = true;
home-manager = {
extraSpecialArgs = { inherit inputs; };
sharedModules = [
inputs.nix-index-database.homeModules.nix-index
];
users = {
"worble" = import ./home.nix;
};
};
}

View File

@@ -0,0 +1,37 @@
{
disko.devices = {
disk = {
main = {
type = "disk";
device = "/dev/nvme0n1";
content = {
type = "gpt";
partitions = {
ESP = {
priority = 1;
name = "ESP";
start = "1M";
end = "128M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = [ "-f" ]; # Override existing partition
mountpoint = "/";
mountOptions = [ "compress=zstd" "noatime" ];
};
};
};
};
};
};
};
}

View File

@@ -7,11 +7,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736437680, "lastModified": 1760701190,
"narHash": "sha256-9Sy17XguKdEU9M5peTrkWSlI/O5IAqjHzdzxbXnc30g=", "narHash": "sha256-y7UhnWlER8r776JsySqsbTUh2Txf7K30smfHlqdaIQw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "4d5d07d37ff773338e40a92088f45f4f88e509c8", "rev": "3a9450b26e69dcb6f8de6e2b07b3fc1c288d85f5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -20,40 +20,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat": {
"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"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -61,32 +27,50 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736373539, "lastModified": 1758463745,
"narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=", "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "bd65bc3cde04c16755955630b344bc9e35272c56", "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-24.11", "ref": "release-25.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"nix-index-database": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1760846226,
"narHash": "sha256-xmU8kAsRprJiTGBTaGrwmjBP3AMA9ltlrxHKFuy5JWc=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "5024e1901239a76b7bf94a4cd27f3507e639d49e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-index-database",
"type": "github"
}
},
"nix-vscode-extensions": { "nix-vscode-extensions": {
"inputs": { "inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1736388880, "lastModified": 1761098495,
"narHash": "sha256-lA+4MhhcdoanbMnFLjZW+jPdEKcsLs9st2GAst1iuVU=", "narHash": "sha256-aE2Vp0Q/Ra95sHk/YgQI6z9PvqPttgcIVUk3uSOWj9g=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-vscode-extensions", "repo": "nix-vscode-extensions",
"rev": "2a84ca07753e3ec608c96ed2907606361979467a", "rev": "bd4690e402591e99a091dcd49663d3d6c9bf0ada",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -95,29 +79,45 @@
"type": "github" "type": "github"
} }
}, },
"nixos-hardware": {
"locked": {
"lastModified": 1760958188,
"narHash": "sha256-2m1S4jl+GEDtlt2QqeHil8Ny456dcGSKJAM7q3j/BFU=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "d6645c340ef7d821602fd2cd199e8d1eed10afbc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1713805509, "lastModified": 1759770925,
"narHash": "sha256-YgSEan4CcrjivCNO5ZNzhg7/8ViLkZ4CB/GrGBVSudo=", "narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=",
"owner": "NixOS", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1e1dc66fe68972a76679644a5577828b6a7e8be4", "rev": "674c2b09c59a220204350ced584cadaacee30038",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "674c2b09c59a220204350ced584cadaacee30038",
"type": "github" "type": "github"
} }
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1736344531, "lastModified": 1760878510,
"narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", "narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", "rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -129,16 +129,16 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1736200483, "lastModified": 1760862643,
"narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=", "narHash": "sha256-PXwG0TM7Ek87DNx4LbGWuD93PbFeKAJs4FfALtp7Wo0=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751", "rev": "33c6dca0c0cb31d6addcd34e90a63ad61826b28c",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-24.11", "ref": "nixos-25.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@@ -147,25 +147,12 @@
"inputs": { "inputs": {
"disko": "disko", "disko": "disko",
"home-manager": "home-manager", "home-manager": "home-manager",
"nix-index-database": "nix-index-database",
"nix-vscode-extensions": "nix-vscode-extensions", "nix-vscode-extensions": "nix-vscode-extensions",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable" "nixpkgs-unstable": "nixpkgs-unstable"
} }
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View File

@@ -0,0 +1,35 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11?shallow=1";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable?shallow=1"; # use by inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}".[package name]
home-manager = {
url = "github:nix-community/home-manager/release-25.11?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-index-database = {
url = "github:nix-community/nix-index-database?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-hardware.url = "github:NixOS/nixos-hardware/master?shallow=1";
disko = {
url = "github:nix-community/disko?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions?shallow=1";
};
outputs = { nixpkgs, nixos-hardware, ... }@inputs:
{
nixosConfigurations.starlite = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
modules = [
nixos-hardware.nixosModules.starlabs-starlite-i5
./configuration.nix
];
};
};
}

View File

@@ -0,0 +1,27 @@
# 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 = [ "xhci_pci" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_usb_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
# 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.enp0s20f0u1u3.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

32
devices/starlite/home.nix Normal file
View File

@@ -0,0 +1,32 @@
{ pkgs, ... }:
{
imports = [
../../home-manager
../../home-manager/development/vscode.nix
];
terminal.nixUpdateLocation = "/home/worble/Projects/nixos/devices/starlite#starlite";
terminal.flakeUpdateLocation = "/home/worble/Projects/nixos/devices/starlite";
firefox.tablet = true;
home.username = "worble";
home.homeDirectory = "/home/worble";
home.stateVersion = "24.05";
home.packages = with pkgs;[ ];
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
}

View File

@@ -0,0 +1,98 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ inputs, pkgs, ... }:
{
imports =
[
../../configuration
# Include the results of the hardware scan.
./hardware-configuration.nix
inputs.disko.nixosModules.default
./disk-config.nix
inputs.home-manager.nixosModules.default
../../configuration/modules/laptop.nix
../../configuration/modules/virtualisation.nix
../../configuration/modules/gaming.nix
../../configuration/modules/kde.nix
../../configuration/modules/i18n.nix
];
networking.hostName = "tuxedo"; # Define your hostname.
# options iwlmvm power_scheme=1 https://wireless.docs.kernel.org/en/latest/en/users/drivers/iwlwifi.html#features
# options iwlwifi 11n_disable=4 https://wiki.gentoo.org/wiki/Iwlwifi#Network_crashes_under_heavy_load
boot.extraModprobeConfig = ''
options iwlmvm power_scheme=1
options iwlwifi 11n_disable=8 power_save=0
'';
boot.kernelModules = [
"ntsync"
];
# services.hardware.openrgb.enable = true;
virtualisation.containerManagement = "docker";
fileSystems."/mnt/HDD2" = {
fsType = "ext4";
label = "HDD2";
options = [
# If you don't have this options attribute, it'll default to "defaults"
# boot options for fstab. Search up fstab mount options you can use
"users" # Allows any user to mount and unmount
"nofail" # Prevent system from failing if this drive doesn't mount
"exec" # Permit execution of binaries and other executable files
];
};
# hardware.tuxedo-drivers.enable = true;
programs.wireshark = {
enable = true;
package = pkgs.wireshark;
dumpcap.enable = true;
};
# programs.gpu-screen-recorder.enable = true; # For promptless recording on both CLI and GUI
# programs.obs-studio = {
# enable = true;
# enableVirtualCamera = true;
# };
environment.systemPackages = with pkgs;[
distrobox
gpu-screen-recorder-gtk
];
# Define a user account. Don't forget to set a password with passwd.
users.users.worble = {
initialPassword = "password";
isNormalUser = true;
extraGroups = [
"wheel"
"gamemode"
"docker"
"podman"
"cdrom"
"wireshark"
"kvm" # for android studio
]; # Enable sudo for the user.
linger = true;
};
home-manager = {
useGlobalPkgs = true;
extraSpecialArgs = { inherit inputs; };
sharedModules = [
inputs.nix-index-database.homeModules.nix-index
];
users = {
"worble" = import ./home.nix;
};
};
}

143
devices/tuxedo/flake.lock generated Normal file
View File

@@ -0,0 +1,143 @@
{
"nodes": {
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1764110879,
"narHash": "sha256-xanUzIb0tf3kJ+PoOFmXEXV1jM3PjkDT/TQ5DYeNYRc=",
"owner": "nix-community",
"repo": "disko",
"rev": "aecba248f9a7d68c5d1ed15de2d1c8a4c994a3c5",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1764177491,
"narHash": "sha256-dhX2abFWxeXab3Aad4Pg1xGtn9W84/qetNXfmYUwktw=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "2217780c39169a9c77915200137550c2ef0fa974",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-25.11",
"repo": "home-manager",
"type": "github"
}
},
"nix-index-database": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1763870992,
"narHash": "sha256-NPyc76Wxmv/vAsXJ8F+/8fXECHYcv2YGSqdiSHp/F/A=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "d7423982c7a26586aa237d130b14c8b302c7a367",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-index-database",
"type": "github"
}
},
"nix-vscode-extensions": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1764208554,
"narHash": "sha256-9cHI5OyIcTuaWYrgq3ng7W0q+wgX8II2fkqCHNot5jY=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"rev": "8cd52edf9dea91d1610c50b494dc20636b61b862",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1759770925,
"narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "674c2b09c59a220204350ced584cadaacee30038",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "674c2b09c59a220204350ced584cadaacee30038",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1763966396,
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1764020296,
"narHash": "sha256-6zddwDs2n+n01l+1TG6PlyokDdXzu/oBmEejcH5L5+A=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a320ce8e6e2cc6b4397eef214d202a50a4583829",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"disko": "disko",
"home-manager": "home-manager",
"nix-index-database": "nix-index-database",
"nix-vscode-extensions": "nix-vscode-extensions",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable"
}
}
},
"root": "root",
"version": 7
}

33
devices/tuxedo/flake.nix Normal file
View File

@@ -0,0 +1,33 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11?shallow=1";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable?shallow=1"; # use by inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}".[package name]
home-manager = {
url = "github:nix-community/home-manager/release-25.11?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-index-database = {
url = "github:nix-community/nix-index-database?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko?shallow=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions?shallow=1";
};
outputs = { nixpkgs, ... }@inputs:
{
nixosConfigurations.tuxedo = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
modules = [
./configuration.nix
];
};
};
}

View File

@@ -1,7 +1,7 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, modulesPath, ... }:
{ {
imports = imports =

131
devices/tuxedo/home.nix Normal file
View File

@@ -0,0 +1,131 @@
{ pkgs, config, inputs, ... }:
{
imports = [
../../home-manager
../../home-manager/development
../../home-manager/gaming.nix
../../home-manager/streamlink.nix
];
terminal.nixUpdateLocation = "/home/worble/Projects/nixos/devices/tuxedo#tuxedo";
terminal.flakeUpdateLocation = "/home/worble/Projects/nixos/devices/tuxedo";
helix.fullInstall = true;
mpv.high-quality = true;
home.username = "worble";
home.homeDirectory = "/home/worble";
home.stateVersion = "24.05";
home.packages = with pkgs;[
# general
gimp-with-plugins
obsidian
# cmd line tools
rclone
inotify-tools
libnotify
ffmpeg-full
# comms
teams-for-linux
teamspeak6-client
# media
# TODO: disabled due to qt5-web-engine vulnerable https://github.com/NixOS/nixpkgs/pull/435067
# jellyfin-media-player
haruna
# misc
# TODO: uncomment when ecdsa is updated
# https://github.com/NixOS/nixpkgs/pull/456881
# electrum
dbeaver-bin
ruffle
popsicle
mkvtoolnix
# for headset tune
headsetcontrol
];
# Let Home Manager install and manage itself.
programs = {
firefox = {
profiles.work = (import ../../home-manager/firefox/firefox-profile.nix { tablet = config.firefox.tablet; }) // {
id = 1;
name = "work";
isDefault = false;
settings = {
# allow fonts
"browser.display.use_document_fonts" = 1;
# home page
"browser.startup.homepage" = "https://outlook.office.com|https://teams.microsoft.com/v2|https://dev.azure.com/binhsps/Connect/_boards/board/t/Development%20Team/Stories";
};
};
};
mpv = {
config = {
screenshot-directory = "/mnt/HDD2/Pictures/";
};
};
topgrade = {
settings = {
misc = {
ignore_failures = [ "containers" ];
};
};
};
};
systemd.user = {
services = {
rclone-media = {
Unit = {
Description = "rclone-media /mnt/HDD2/Videos/";
After = [ "network.target" "mnt-HDD2.mount" ];
# Maybe? https://unix.stackexchange.com/questions/281650/systemd-unit-requiresmountsfor-vs-conditionpathisdirectory
# RequiresMountsFor = "/mnt/HDD2/Videos/";
};
Install = {
WantedBy = [ "default.target" ];
};
Service = {
RestartSec = 10;
Restart = "on-failure";
Type = "exec";
ExecStart = "${pkgs.writeShellApplication {
name = "rclone-media";
runtimeInputs = [ pkgs.inotify-tools pkgs.libnotify pkgs.rclone ];
text = ''
function rclonecopy {
file=$1
changed_rel=''${file#"/mnt/HDD2/Videos"}
notify-send -a "rclone-media" "rclone for $file triggered"
if rclone copyto "$file" media:"media-7gM2gcrxRjXqfj$changed_rel" ; then
notify-send -a "rclone-media" "rclone complete for $file"
else
notify-send -u critical -a "rclone-media" "rclone failed for $file"
fi
}
inotifywait -mr \
--format '%w%f' \
-e close_write \
/mnt/HDD2/Videos/ |
while read -r file; do
rclonecopy "$file"
done
'';
}}/bin/rclone-media";
};
};
};
};
}

3
fix-nix.sh Normal file
View File

@@ -0,0 +1,3 @@
# Occasionally the nix store can get into a tizz and all updates will fail
# This should fix that
sudo nix-store --repair --verify --check-contents

View File

@@ -1,25 +0,0 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
};
outputs = { self, nixpkgs, ... }@inputs: {
nixosConfigurations.tuxedo = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
modules = [
./configuration/base.nix
./tuxedo/configuration.nix
];
};
};
}

2
home-manager-update.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
home-manager switch --flake "$HOME/Projects/nixos/devices/$(whoami)#$(whoami)"

View File

@@ -0,0 +1,9 @@
{ ... }:
{
imports = [
./fonts.nix
./mpv.nix
./terminal.nix
];
}

View File

@@ -1,11 +1,11 @@
{ inputs, config, pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs;[ home.packages = with pkgs;[
liberation_ttf
ubuntu-sans ubuntu-sans
ubuntu-sans-mono ubuntu-sans-mono
(nerdfonts.override { fonts = [ "SpaceMono" ]; }) nerd-fonts.space-mono
corefonts
]; ];
fonts.fontconfig = { fonts.fontconfig = {

72
home-manager/base/mpv.nix Normal file
View File

@@ -0,0 +1,72 @@
{ pkgs, lib, config, ... }:
with lib;
{
options.mpv = {
high-quality = mkOption {
type = types.bool;
default = false;
};
};
config = {
home.file = {
".config/mpv/shaders" = {
enable = config.mpv.high-quality;
source = pkgs.fetchzip {
url = "https://github.com/bloc97/Anime4K/releases/download/v4.0.1/Anime4K_v4.0.zip";
sha256 = "sha256-9B6U+KEVlhUIIOrDauIN3aVUjZ/gQHjFArS4uf/BpaM=";
stripRoot = false;
};
};
};
programs = {
mpv = {
enable = true;
package = (
pkgs.mpv-unwrapped.wrapper {
scripts = with pkgs.mpvScripts; [
uosc
sponsorblock
];
mpv = pkgs.mpv-unwrapped;
}
);
config = mkMerge [{
screenshot-directory = lib.mkDefault "~/Pictures/";
screenshot-template = lib.mkDefault "%F/%F_snapshot_%P";
sub-ass-use-video-data = lib.mkDefault "aspect-ratio";
}
(mkIf config.mpv.high-quality
{
profile = lib.mkDefault "gpu-hq";
vo = lib.mkDefault "gpu-next";
gpu-api = lib.mkDefault "auto";
gpu-context = lib.mkDefault "auto";
hwdec = lib.mkDefault "auto";
glsl-shaders = lib.mkDefault "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl";
})];
scriptOpts = {
uosc = {
time_precision = lib.mkDefault 3;
};
};
extraInput =
if config.mpv.high-quality then ''
# Optimized shaders for higher-end GPU:
CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)"
CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)"
CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)"
CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)"
CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)"
CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)"
CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared"
'' else "";
};
};
};
}

View File

@@ -0,0 +1,248 @@
{ lib, config, pkgs, ... }:
with lib;
{
imports = [
../development/helix.nix
];
options.terminal = {
nixUpdateLocation = mkOption {
type = types.nullOr types.str;
default = null;
};
flakeUpdateLocation = mkOption {
type = types.nullOr types.str;
default = null;
};
homeUpdateLocation = mkOption {
type = types.nullOr types.str;
default = null;
};
};
config = {
home.packages = with pkgs;[
nerd-fonts.space-mono
];
programs = {
bash = {
enable = true;
initExtra = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
};
fish = {
enable = true;
interactiveShellInit = ''
set fish_greeting # Disable greeting
'';
};
nix-index = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
};
delta = {
enable = true;
enableGitIntegration = true;
};
git = {
enable = true;
settings = {
credential = {
helper = [ "cache --timeout 21600" "${pkgs.git-credential-manager}/bin/git-credential-manager" "${pkgs.git-credential-oauth}/bin/git-credential-oauth" ];
credentialStore = "secretservice";
};
"credential \"https://dev.azure.com\"" = {
useHttpPath = true;
};
"credential \"https://git.worble.xyz\"" = {
provider = "generic";
};
# stealing from https://blog.gitbutler.com/how-git-core-devs-configure-git/
column = {
ui = "auto";
};
branch = {
sort = "-committerdate";
};
tag = {
sort = "version:refname";
};
diff = {
algorithm = "histogram";
colorMoved = "plain";
mnemonicPrefix = true;
renames = true;
};
push = {
followTags = true;
};
fetch = {
prune = true;
pruneTags = true;
all = true;
};
rebase = {
autoSquash = true;
autoStash = true;
updateRefs = true;
};
};
};
gitui = {
enable = true;
};
starship.enable = true;
atuin.enable = true;
zellij = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
settings = {
theme = "dracula";
show_startup_tips = false;
default_mode = "locked";
};
};
direnv = {
enable = true;
enableBashIntegration = true;
nix-direnv.enable = true;
};
helix = {
enable = true;
defaultEditor = true;
settings = {
theme = "dracula";
};
};
bat = {
enable = true;
};
eza = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
git = true;
extraOptions = [
"--color=auto"
"--icons=always"
"--group-directories-first"
"--header"
];
};
yazi = {
enable = true;
settings = {
mgr = {
sort_by = "natural";
show_hidden = true;
};
};
};
bottom = {
enable = true;
};
fd = {
enable = true;
};
ripgrep = {
enable = true;
};
topgrade = with config.terminal;{
enable = true;
settings = mkMerge [{
misc = {
assume_yes = true;
disable = [
"android_studio"
"jetbrains_aqua"
"jetbrains_clion"
"jetbrains_datagrip"
"jetbrains_dataspell"
"jetbrains_gateway"
"jetbrains_goland"
"jetbrains_idea"
"jetbrains_mps"
"jetbrains_phpstorm"
"jetbrains_pycharm"
"jetbrains_rider"
"jetbrains_rubymine"
"jetbrains_rustrover"
"jetbrains_toolbox"
"jetbrains_webstorm"
];
};
}
(mkIf (nixUpdateLocation != null) {
linux = {
nix_arguments = "--flake ${nixUpdateLocation}";
};
})
(mkIf (homeUpdateLocation != null) {
linux = {
home_manager_arguments = [ "--flake" homeUpdateLocation ];
};
})
(mkIf (flakeUpdateLocation != null) {
pre_commands = {
nix-flake-update = "${(pkgs.writeShellScriptBin "nix-flake-update" "sudo nix flake update --flake ${flakeUpdateLocation}")}/bin/nix-flake-update";
};
})];
};
alacritty = {
enable = true;
package = pkgs.alacritty;
settings = {
font = {
normal = {
family = "SpaceMono Nerd Font";
style = "Regular";
};
size = 14;
};
};
};
# eh not feeling it
# ghostty = {
# enable = true;
# enableBashIntegration = true;
# settings = {
# "font-family" = "SpaceMono Nerd Font";
# "font-size" = 14;
# theme = "Dracula";
# };
# };
yt-dlp = {
enable = true;
};
};
};
}

68
home-manager/default.nix Normal file
View File

@@ -0,0 +1,68 @@
{ pkgs, lib, ... }:
{
imports = [
./base
./firefox
];
home.packages = with pkgs;[
# general
thunderbird
qbittorrent
libreoffice-qt
# 25.11 Can move to stable when https://github.com/NixOS/nixpkgs/pull/460058 gets backported
joplin-desktop
# comms
# TODO: disabled due to qt5-web-engine vulnerable https://github.com/NixOS/nixpkgs/pull/435067
# teamspeak3
teamspeak6-client
discord
vesktop
# media
strawberry
];
# set breeze as default cursor
# For cursor in steam?
# home.file.".icons/default".source = "${pkgs.kdePackages.breeze}/share/icons/breeze_cursors";
home.file.".npmrc".text = lib.generators.toINIWithGlobalSection { } {
globalSection = {
ignore-scripts = "true";
};
};
xdg.configFile."capacitor/sysconfig.json".text = lib.generators.toJSON { } {
machine = "00000000-0000-0000-0000-000000000000";
signup = false;
telemetry = false;
};
home.sessionVariables = {
NIXOS_OZONE_WL = "1";
};
services.nextcloud-client = {
enable = true;
package = pkgs.nextcloud-client;
startInBackground = true;
};
programs = {
home-manager.enable = true;
chromium = {
enable = true;
package = pkgs.brave;
};
keepassxc = {
enable = true;
# add in 25.12?
# autostart = true;
};
};
}

View File

@@ -0,0 +1,36 @@
# { pkgs, ... }:
# let
# androidEnv = pkgs.androidenv.override { licenseAccepted = true; };
# androidComp = (
# androidEnv.composeAndroidPackages {
# toolsVersion = null;
# includeEmulator = true;
# includeNDK = true;
# platformVersions = [
# "latest"
# "25"
# ];
# includeSystemImages = true;
# systemImageTypes = [
# "default"
# ];
# abiVersions = [
# "x86_64"
# "armeabi-v7a"
# "arm64-v8a"
# ];
# }
# );
# android-studio = (pkgs.android-studio.withSdk androidComp.androidsdk);
# in
# {
# home.sessionVariables = {
# ANDROID_HOME = "${androidComp.androidsdk}/libexec/android-sdk";
# ANDROID_SDK_ROOT = "${androidComp.androidsdk}/libexec/android-sdk";
# ANDROID_NDK_ROOT = "${androidComp.androidsdk}/libexec/android-sdk/ndk-bundle";
# };
# home.packages = [
# pkgs.android-studio
# ];
# }

View File

@@ -0,0 +1,12 @@
{ ... }:
{
imports = [
# ./android.nix
./dotnet.nix
./games.nix
./helix.nix
./sql.nix
./vscode.nix
];
}

View File

@@ -1,15 +1,12 @@
{ inputs, config, pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs;[ home.packages = with pkgs;[
git-credential-manager
(with dotnetCorePackages; combinePackages [ (with dotnetCorePackages; combinePackages [
sdk_8_0 sdk_8_0
sdk_9_0 sdk_9_0
]) ])
jetbrains.rider jetbrains.rider
azure-cli azure-cli
azuredatastudio
rustup
]; ];
} }

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
home.packages = with pkgs;[
jetbrains.rider
godot-mono
];
}

View File

@@ -0,0 +1,117 @@
{ lib, config, pkgs, ... }:
with lib;
{
options.helix = {
fullInstall = mkOption {
type = types.bool;
default = false;
};
};
config = {
programs = {
helix = mkMerge [{
enable = true;
defaultEditor = true;
settings = {
theme = "dracula";
};
extraPackages = with pkgs;[
gcc
] ++ (optionals config.helix.fullInstall [
#nix
nixd
nixpkgs-fmt
#dotnet
omnisharp-roslyn
netcoredbg
# rust
rustfmt
clippy
rust-analyzer
lldb
#python
ruff
# shell
shfmt
bash-language-server
fish-lsp
# misc
hyprls
marksman
# web
superhtml
biome
] ++ (with nodePackages;[
vscode-langservers-extracted
typescript-language-server
]));
}
(mkIf config.helix.fullInstall {
languages = {
language = [
{
name = "bash";
formatter = { command = "shfmt"; };
}
{
name = "javascript";
language-servers = [
{ name = "biome"; }
{
name = "typescript-language-server";
except-features = [ "format" ];
}
];
auto-format = true;
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.js" ]; };
}
{
name = "typescript";
language-servers = [
{ name = "biome"; }
{
name = "typescript-language-server";
except-features = [ "format" ];
}
];
auto-format = true;
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.ts" ]; };
}
{
name = "jsx";
language-servers = [
{ name = "biome"; }
{
name = "typescript-language-server";
except-features = [ "format" ];
}
];
auto-format = true;
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.jsx" ]; };
}
{
name = "tsx";
language-servers = [
{ name = "biome"; }
{
name = "typescript-language-server";
except-features = [ "format" ];
}
];
auto-format = true;
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.tsx" ]; };
}
];
};
})];
};
};
}

View File

@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
home.packages = with pkgs;[
azuredatastudio
];
}

View File

@@ -1,11 +1,32 @@
{ inputs, config, pkgs, ... }: { inputs, pkgs, ... }:
let let
vs-extensions = inputs.nix-vscode-extensions.extensions.x86_64-linux.open-vsx; openvsx = inputs.nix-vscode-extensions.extensions.x86_64-linux.open-vsx;
vscode-marketplace = inputs.nix-vscode-extensions.extensions.x86_64-linux.vscode-marketplace;
resharper-code-version = "0.0.15";
resharper-code = (pkgs.vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "resharper-code";
version = resharper-code-version;
publisher = "jetbrains";
};
vsix = builtins.fetchurl {
name = "jetbrains.resharper-code.zip";
url = "https://download.jetbrains.com/product?code=VSCRS&latest&distribution=linuxX64&type=eap&version=${resharper-code-version}";
sha256 = "sha256:eef138c4fdd035031577f4c483c2155c4dd5ce91cfd1b9a2489c138aeb6cb99e";
};
}).overrideAttrs (old: {
nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.makeBinaryWrapper ];
postFixup = ''
wrapProgram $out/share/vscode/extensions/jetbrains.resharper-code/resharper/linux-x64/JetBrains.VsCode.Backend \
--prefix LD_LIBRARY_PATH : ${pkgs.dotnet-sdk.icu}/lib
'';
});
in in
{ {
home.packages = with pkgs;[ home.packages = with pkgs;[
(nerdfonts.override { fonts = [ "SpaceMono" ]; }) nerd-fonts.space-mono
]; ];
programs = { programs = {
@@ -13,35 +34,90 @@ in
enable = true; enable = true;
package = pkgs.vscodium; package = pkgs.vscodium;
mutableExtensionsDir = false; mutableExtensionsDir = false;
profiles.default = {
enableUpdateCheck = false;
enableExtensionUpdateCheck = false;
extensions = [ extensions = [
vs-extensions.biomejs.biome resharper-code # Requires DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
vs-extensions.mkhl.direnv ] ++ (with openvsx;[
vs-extensions.dracula-theme.theme-dracula biomejs.biome
vs-extensions.dbaeumer.vscode-eslint mkhl.direnv
vs-extensions.eamodio.gitlens dracula-theme.theme-dracula
vs-extensions.pkief.material-icon-theme dbaeumer.vscode-eslint
vs-extensions.jnoortheen.nix-ide pkief.material-icon-theme
vs-extensions.esbenp.prettier-vscode jnoortheen.nix-ide
vs-extensions.bradlc.vscode-tailwindcss esbenp.prettier-vscode
vs-extensions.humao.rest-client loriscro.super
]; mads-hartmann.bash-ide-vscode
userSettings = { ms-vscode.wasm-wasi-core
rust-lang.rust-analyzer
tamasfe.even-better-toml
mikestead.dotenv
ms-python.python
ms-python.debugpy
charliermarsh.ruff
]) ++ (with vscode-marketplace;[
bradlc.vscode-tailwindcss
]);
userSettings = with pkgs;{
"workbench.iconTheme" = "material-icon-theme"; "workbench.iconTheme" = "material-icon-theme";
"window.titleBarStyle" = "custom"; "window.titleBarStyle" = "custom";
"workbench.colorTheme" = "Dracula Theme"; "workbench.colorTheme" = "Dracula Theme";
"explorer.compactFolders" = false;
"chat.commandCenter.enabled" = false;
"terminal.integrated.automationProfile.linux" = {
"path" = "/bin/sh";
};
"editor.fontFamily" = "'SpaceMono Nerd Font', 'monospace', monospace"; "editor.fontFamily" = "'SpaceMono Nerd Font', 'monospace', monospace";
"editor.fontSize" = 16; "editor.fontSize" = 16;
"files.autoSave" = "onWindowChange";
"editor.formatOnSave" = true; "editor.formatOnSave" = true;
"editor.codeActionsOnSave" = { "editor.codeActionsOnSave" = {
"source.organizeImports" = "always"; "source.organizeImports" = "always";
}; };
"files.autoSave" = "onWindowChange";
"[typescript]" = {
"editor.defaultFormatter" = "biomejs.biome";
};
"[javascript]" = {
"editor.defaultFormatter" = "biomejs.biome";
};
"[javascriptreact]" = {
"editor.defaultFormatter" = "biomejs.biome";
};
"[typescriptreact]" = {
"editor.defaultFormatter" = "biomejs.biome";
};
"[json]" = {
"editor.defaultFormatter" = "biomejs.biome";
};
"[jsonc]" = {
"editor.defaultFormatter" = "biomejs.biome";
};
# "biome.lsp.bin" = "${biome}/bin/biome";
#"biome.requireConfigFile" = true;
"typescript.preferences.preferTypeOnlyAutoImports" = true; "typescript.preferences.preferTypeOnlyAutoImports" = true;
"chat.commandCenter.enabled" = false;
"nix.enableLanguageServer" = true; # Enable LSP.
"nix.serverPath" = "${nixd}/bin/nixd"; # The path to the LSP server executable.
"nix.serverSettings" = {
nixd = {
formatting.command = [ "${nixpkgs-fmt}/bin/nixpkgs-fmt" ];
};
};
"bashIde.shellcheckPath" = "${shellcheck}/bin/shellcheck";
"bashIde.shfmt.path" = "${shfmt}/bin/shfmt";
"rust-analyzer.rustfmt.overrideCommand" = [ "${rustfmt}/bin/rustfmt" ];
"tailwindCSS.classFunctions" = [ "cva" "cx" ];
};
}; };
}; };
}; };
} }

View File

@@ -0,0 +1,73 @@
{ lib, config, pkgs, ... }:
with lib;
{
options.firefox = {
tablet = mkOption {
type = types.bool;
default = false;
};
};
config = {
programs = {
firefox = {
enable = true;
package = pkgs.firefox;
languagePacks = [
"en-GB"
];
policies = {
"DisplayMenuBar" = if config.firefox.tablet then false else true;
"ExtensionSettings" = with builtins;
let
extension = shortId: uuid: {
name = uuid;
value = {
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
installation_mode = "normal_installed";
};
};
in
listToAttrs [
# Security / Privacy
(extension "ublock-origin" "uBlock0@raymondhill.net")
(extension "keepassxc-browser" "keepassxc-browser@keepassxc.org")
(extension "cookie-autodelete" "CookieAutoDelete@kennydo.com")
# Annoyances
(extension "sponsorblock" "sponsorBlocker@ajay.app")
(extension "bandcamp-player-volume-control" "{308ec088-284a-40fe-ae14-7c917526f694}")
# UI / CSS
(extension "darkreader" "addon@darkreader.org")
(extension "rsspreview" "{7799824a-30fe-4c67-8b3e-7094ea203c94}")
(extension "tree-style-tab" "treestyletab@piro.sakura.ne.jp")
(extension "traduzir-paginas-web" "{036a55b4-5e72-4d05-a06c-cba2dfcc134a}")
# Additional Functionality
(extension "betterttv" "firefox@betterttv.net")
(extension "multi-account-containers" "@testpilot-containers")
(extension "gumbo-twitch-companion" "{59a39734-1e66-452e-a7b8-cc79f72062f0}")
(extension "joplin-web-clipper" "{8419486a-54e9-11e8-9401-ac9e17909436}")
(extension "tab-reloader" "jid0-bnmfwWw2w2w4e4edvcdDbnMhdVg@jetpack")
(extension "tab-session-manager" "Tab-Session-Manager@sienori")
(extension "user-agent-string-switcher" "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}")
(extension "violentmonkey" "{aecec67f-0d10-4fa7-b7c7-609a2db280cf}")
];
# To add additional extensions, find it on addons.mozilla.org, find
# the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/)
# Then, download the XPI by filling it in to the install_url template, unzip it,
# run `jq .browser_specific_settings.gecko.id manifest.json` or
# `jq .applications.gecko.id manifest.json` to get the UUID
};
profiles.default = (import ./firefox-profile.nix { tablet = config.firefox.tablet; }) // {
id = 0;
name = "default";
isDefault = true;
};
};
};
};
}

View File

@@ -1,72 +1,195 @@
{ tablet ? false }:
{ {
settings = { settings = {
# data privacy # data privacy
"browser.contentblocking.category" = "strict";
"browser.discovery.enabled" = false; "browser.discovery.enabled" = false;
"datareporting.healthreport.uploadEnabled" = false;
"dom.security.https_only_mode" = true; "dom.security.https_only_mode" = true;
# no autofill # no autofill
"extensions.formautofill.addresses.enabled" = false; "extensions.formautofill.addresses.enabled" = false;
"extensions.formautofill.creditCards.enabled" = false; "extensions.formautofill.creditCards.enabled" = false;
# stop fonts # stop fonts
"browser.display.use_document_fonts" = 0; "browser.display.use_document_fonts" = 0;
# dont show about:config warning # dont show about:config warning
"browser.aboutConfig.showWarning" = false; "browser.aboutConfig.showWarning" = false;
# dont offer to save passwords # dont offer to save passwords
"signon.rememberSignons" = false; "signon.rememberSignons" = false;
# home page # home page
"browser.startup.homepage" = "chrome://browser/content/blanktab.html"; "browser.startup.homepage" = "about:blank";
# blank new tab # blank new tab
"browser.newtabpage.enabled" = false; "browser.newtabpage.enabled" = false;
# compact density # compact density
"browser.uidensity" = 1; "browser.uidensity" = if tablet then 2 else 1;
# dont draw tabs in titlebar
"browser.tabs.drawInTitlebar" = false;
# autoscroll middleclick
"general.autoScroll" = true;
# dont paste on middlemouse
"middlemouse.paste" = false;
# userChrome # userChrome
"toolkit.legacyUserProfileCustomizations.stylesheets" = true; "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
# dont draw tabs in titlebar
"browser.tabs.drawInTitlebar" = false;
# autoscroll middleclick
"general.autoScroll" = true;
# dont paste on middlemouse
"middlemouse.paste" = false;
# menu bar # menu bar
"ui.key.menuAccessKeyFocuses" = false; "ui.key.menuAccessKeyFocuses" = false;
# use kde file picker
# use desktop file picker
"widget.use-xdg-desktop-portal.file-picker" = 1; "widget.use-xdg-desktop-portal.file-picker" = 1;
# sidebar at right # sidebar at right
"sidebar.position_start" = false; "sidebar.position_start" = false;
# new sidebar
"sidebar.revamp" = true;
"sidebar.verticalTabs" = true;
"browser.tabs.hoverPreview.enabled" = false;
"browser.tabs.hoverPreview.showThumbnails" = false;
"browser.tabs.groups.hoverPreview.enabled" = false;
# disable pocket # disable pocket
"extensions.pocket.enabled" = false; "extensions.pocket.enabled" = false;
# browser links should be new tab # browser links should be new tab
"browser.link.open_newwindow.restriction" = 0; "browser.link.open_newwindow.restriction" = 0;
# allow custom search enginers
# allow custom search engines
"browser.urlbar.update2.engineAliasRefresh" = true; "browser.urlbar.update2.engineAliasRefresh" = true;
# do not retrieve suggestions as you type https://blog.mozilla.org/en/firefox/better-search-suggestions/
"browser.urlbar.quicksuggest.online.enabled" = false;
# do not trim http
"browser.urlbar.trimURLs" = false;
# force enable hardware accel # force enable hardware accel
"media.hardware-video-decoding.force-enabled" = true; "media.hardware-video-decoding.force-enabled" = true;
# vaapi # vaapi
"media.ffmpeg.vaapi.enabled" = true; "media.ffmpeg.vaapi.enabled" = true;
# downloads ask to save or open
# downloads
# ask to save or open
"browser.download.always_ask_before_handling_new_types" = true; "browser.download.always_ask_before_handling_new_types" = true;
# downloads always ask download location # always ask download location
"browser.download.useDownloadDir" = false; "browser.download.useDownloadDir" = false;
# download to tmp dir, NOT Downloads (seriously Mozilla?) # download to tmp dir, NOT Downloads (seriously Mozilla?)
"browser.download.start_downloads_in_tmp_dir" = true; "browser.download.start_downloads_in_tmp_dir" = true;
# widevine # widevine
"browser.eme.ui.enabled" = false; "browser.eme.ui.enabled" = false;
"media.eme.enabled" = false; "media.eme.enabled" = false;
# media control keys # media control keys
"media.hardwaremediakeys.enabled" = false; "media.hardwaremediakeys.enabled" = false;
# restore tabs on startup
"browser.startup.page" = 3;
# open in new tabs
"browser.tabs.loadBookmarksInTabs" = true;
# AI
"browser.ml.chat.page" = false;
# AI tab groups
"browser.tabs.groups.smart.userEnabled" = false;
/* Arkenfox Begin */
/* 0320: disable recommendation pane in about:addons (uses Google Analytics) ***/
"extensions.getAddons.showPane" = false;
/* 0321: disable recommendations in about:addons' Extensions and Themes panes [FF68+] ***/
"extensions.htmlaboutaddons.recommendations.enabled" = false;
/* 0330: disable new data submission [FF41+]
* If disabled, no policy is shown or upload takes place, ever
* [1] https://bugzilla.mozilla.org/1195552 ***/
"datareporting.policy.dataSubmissionEnabled" = false;
/* 0340: disable Studies
* [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to install and run studies ***/
"app.shield.optoutstudies.enabled" = false;
/* 0341: disable Normandy/Shield [FF60+]
* Shield is a telemetry system that can push and test "recipes"
* [1] https://mozilla.github.io/normandy/ ***/
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
/* 0350: disable Crash Reports ***/
"breakpad.reportURL" = "";
"browser.tabs.crashReporting.sendReport" = false;
/* 0351: enforce no submission of backlogged Crash Reports [FF58+]
* [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send backlogged crash reports ***/
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
/* 0403: disable SB checks for downloads (remote)
* To verify the safety of certain executable files, Firefox may submit some information about the
* file, including the name, origin, size and a cryptographic hash of the contents, to the Google
* Safe Browsing service which helps Firefox determine whether or not the file should be blocked
* [SETUP-SECURITY] If you do not understand this, or you want this protection, then override this ***/
"browser.safebrowsing.downloads.remote.enabled" = false;
"browser.safebrowsing.downloads.remote.url" = "";
/* 1201: require safe negotiation
* Blocks connections to servers that don't support RFC 5746 [2] as they're potentially vulnerable to a
* MiTM attack [3]. A server without RFC 5746 can be safe from the attack if it disables renegotiations
* but the problem is that the browser can't know that. Setting this pref to true is the only way for the
* browser to ensure there will be no unsafe renegotiations on the channel between the browser and the server
* [SETUP-WEB] SSL_ERROR_UNSAFE_NEGOTIATION: is it worth overriding this for that one site?
* [STATS] SSL Labs (May 2024) reports over 99.7% of top sites have secure renegotiation [4]
* [1] https://wiki.mozilla.org/Security:Renegotiation
* [2] https://datatracker.ietf.org/doc/html/rfc5746
* [3] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555
* [4] https://www.ssllabs.com/ssl-pulse/ ***/
"security.ssl.require_safe_negotiation" = true;
/* 1206: disable TLS1.3 0-RTT (round-trip time) [FF51+]
* This data is not forward secret, as it is encrypted solely under keys derived using
* the offered PSK. There are no guarantees of non-replay between connections
* [1] https://github.com/tlswg/tls13-spec/issues/1001
* [2] https://www.rfc-editor.org/rfc/rfc9001.html#name-replay-attacks-with-0-rtt
* [3] https://blog.cloudflare.com/tls-1-3-overview-and-q-and-a/ ***/
"security.tls.enable_0rtt_data" = false;
/* 2002: force WebRTC inside the proxy [FF70+] ***/
"media.peerconnection.ice.proxy_only_if_behind_proxy" = true;
/* 2003: force a single network interface for ICE candidates generation [FF42+]
* When using a system-wide proxy, it uses the proxy interface
* [1] https://developer.mozilla.org/docs/Web/API/RTCIceCandidate
* [2] https://wiki.mozilla.org/Media/WebRTC/Privacy ***/
"media.peerconnection.ice.default_address_only" = true;
/* 2701: enable ETP Strict Mode [FF86+]
* ETP Strict Mode enables Total Cookie Protection (TCP)
* [NOTE] Adding site exceptions disables all ETP protections for that site and increases the risk of
* cross-site state tracking e.g. exceptions for SiteA and SiteB means PartyC on both sites is shared
* [1] https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/
* [SETTING] to add site exceptions: Urlbar>ETP Shield
* [SETTING] to manage site exceptions: Options>Privacy & Security>Enhanced Tracking Protection>Manage Exceptions ***/
"browser.contentblocking.category" = "strict";
}; };
userChrome = '' userChrome = ''
/* Hide tab bar in FF Quantum */ /* Remove old sidebar header */
@-moz-document url(chrome://browser/content/browser.xul), url(chrome://browser/content/browser.xhtml) { #sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
#TabsToolbar { display: none;
visibility: collapse !important;
margin-bottom: 21px !important;
} }
#sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header { /* Remove sidebar revamp header */
visibility: collapse !important; #sidebar-panel-header {
display: none;
} }
/* Allow complete collapse of sidebar revamp */
#sidebar-main:not([sidebar-launcher-expanded]) {
width: 0;
} }
''; '';
} }

View File

@@ -1,20 +0,0 @@
{ inputs, config, pkgs, ... }:
{
programs = {
firefox = {
enable = true;
languagePacks = [
"en-GB"
];
policies = {
"DisplayMenuBar" = true;
};
profiles.default = import ./firefox-profile.nix // {
id = 0;
name = "default";
isDefault = true;
};
};
};
}

View File

@@ -1,11 +1,86 @@
{ inputs, config, pkgs, ... }: { pkgs, inputs, ... }:
let
pkgs_unstable = inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}";
# https://simpler-website.pages.dev/html/2021/1/wine-environment-variables/#wineesync
wine-wrapped = (pkgs.writeShellApplication {
name = "wine";
runtimeInputs = [ pkgs_unstable.wineWowPackages.stagingFull ];
text = ''
export WINEPREFIX="''${WINEPREFIX:-"$HOME/Games/wine/default"}"
wine "$@"
'';
});
# https://github.com/GloriousEggroll/proton-ge-custom?tab=readme-ov-file#modification
# These aren't yet documented in the README:
# PROTON_MEDIA_USE_GST=1 will tell proton to use the winegstreamer backend instead of the default winedmo backend (the winedmo backend was introduced in Proton 10 and is the current preferred video playback method). This can be useful for games with videos that may have worked in Proton 9 but regressed in Proton 10.
# PROTON_GST_VIDEO_ORIENTATION=<orientation> can be any of the following: vertical-flip, horizontal-flip, rotate-180, automatic. This is useful if some games have videos that are upside down or otherwise not oriented correctly.
umu-wrapped = (pkgs.writeShellApplication {
name = "umu-run";
runtimeInputs = [ pkgs_unstable.umu-launcher ];
text = ''
export PROTONPATH="''${PROTONPATH:-"GE-Proton"}"
export PROTON_ENABLE_WAYLAND="''${PROTON_ENABLE_WAYLAND:-"0"}"
umu-run "$@"
'';
});
# proton with ja_JP
umu-ja = (pkgs.writeShellApplication {
name = "umu-ja";
runtimeInputs = [ umu-wrapped ];
text = "LANG=ja_JP.utf8 umu-run \"$@\"";
});
# wine with ja_JP
wine-ja = (pkgs.writeShellApplication {
name = "wine-ja";
runtimeInputs = [ wine-wrapped ];
text = "LANG=ja_JP.utf8 wine \"$@\"";
});
in
{ {
home.packages = with pkgs;[ home.packages = with pkgs;[
steamguard-cli # Wine / Proton
umu-wrapped
umu-ja
wine-wrapped
wine-ja
pkgs_unstable.winetricks
bottles bottles
protontricks (heroic.override {
gamescope extraPkgs = pkgs: [
inputs.nixpkgs-unstable.legacyPackages."${pkgs.system}".ryujinx-greemdev pkgs.umu-launcher
pkgs.gamescope
pkgs.mangohud
]; ];
})
# Steam
steamguard-cli
# Emulators
pkgs_unstable.ryubing
mgba
# Cheat engine
scanmem
];
programs = {
mangohud = {
enable = true;
enableSessionWide = true;
settings = {
preset = 1;
};
settingsPerApplication = {
mpv = {
no_display = true;
};
};
};
};
} }

View File

@@ -0,0 +1,42 @@
{ pkgs, lib, ... }:
let
proxies = [
"https://eu.luminous.dev" # (Europe)
"https://eu2.luminous.dev" # (Europe 2)
"https://as.luminous.dev" # (Asia)
"https://lb-eu.cdn-perfprod.com" # (Europe)
"https://lb-eu2.cdn-perfprod.com" # (Europe 2)
"https://lb-eu4.cdn-perfprod.com" # (Europe 4)
"https://lb-eu5.cdn-perfprod.com" # (Europe 5)
"https://lb-eu3.cdn-perfprod.com" # (Europe 3, using Russia-only proxies)
"https://lb-na.cdn-perfprod.com" # (NA)
"https://lb-as.cdn-perfprod.com" # (Asia)
"https://lb-sa.cdn-perfprod.com" # (SA)
];
in
{
programs.streamlink = {
enable = true;
settings = {
player = "${pkgs.mpv}/bin/mpv";
player-args = "--cache 2048";
player-no-close = true;
twitch-low-latency = true;
twitch-disable-ads = true;
default-stream = "best";
};
plugins = {
# It is important this is called "twitch" and overwrites the default plugin
twitch = {
settings = {
twitch-proxy-playlist = lib.concatStringsSep "," proxies;
};
src = builtins.readFile (pkgs.fetchurl {
url = "https://github.com/2bc4/streamlink-ttvlol/releases/download/7.0.0-20241105/twitch.py";
hash = "sha256-WbxLNkxG64BlnfI/RwY5N0bqEkO/D6u14nYMyTuveN8=";
});
};
};
};
}

View File

@@ -1,119 +0,0 @@
{ lib, inputs, config, pkgs, ... }:
with lib;
let
cfg = config.programs.atuin;
in
{
options.terminal = {
nixUpdateLocation = mkOption {
type = types.str;
};
flakeUpdateLocation = mkOption {
type = types.str;
};
};
config = {
home.packages = with pkgs;[
blesh
(nerdfonts.override { fonts = [ "SpaceMono" ]; })
];
programs = {
bash = {
enable = true;
bashrcExtra = ''
source $(blesh-share)/ble.sh
bleopt canvas_winch_action=redraw-prev
'';
};
starship.enable = true;
atuin.enable = true;
zellij = {
enable = true;
enableBashIntegration = true;
settings = {
theme = "dracula";
};
};
direnv = {
enable = true;
enableBashIntegration = true;
nix-direnv.enable = true;
};
git = {
enable = true;
delta.enable = true;
};
gitui = {
enable = true;
};
helix.enable = true;
bat = {
enable = true;
};
eza = {
enable = true;
enableBashIntegration = true;
git = true;
extraOptions = [
"--color=auto"
"--icons=always"
"--group-directories-first"
"--header"
];
};
bottom = {
enable = true;
};
fd = {
enable = true;
};
ripgrep = {
enable = true;
};
topgrade = {
enable = true;
settings = {
misc = {
assume_yes = true;
};
linux = {
nix_arguments = "--flake ${config.terminal.nixUpdateLocation}";
};
pre_commands = {
nix-flake-update = "sudo nix flake update --flake ${config.terminal.flakeUpdateLocation}";
};
};
};
alacritty = {
enable = true;
settings = {
font = {
normal = {
family = "SpaceMono Nerd Font";
style = "Regular";
};
size = 14;
};
};
};
};
};
}

View File

@@ -1,17 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
hardware.graphics.enable32Bit = true; # For 32 bit applications
hardware.steam-hardware.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
#gamescopeSession.enable = true;
};
programs.gamemode.enable = true;
# ensure users who need access to this have `cdrom` as `extraGroups`
programs.cdemu.enable = true;
}

View File

@@ -1,21 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
{
services.power-profiles-daemon.enable = false;
services.tlp = {
enable = true;
settings = {
RESTORE_DEVICE_STATE_ON_STARTUP = 1;
USB_AUTOSUSPEND = 0;
PLATFORM_PROFILE_ON_AC = "performance";
PLATFORM_PROFILE_ON_BAT = "low-power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_BOOST_ON_AC = 1;
CPU_BOOST_ON_BAT = 0;
};
};
# Enable touchpad support (enabled default in most desktopManager).
services.libinput.enable = true;
}

2
nixos-update.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
sudo nixos-rebuild switch --flake "$HOME/Projects/nixos/devices/$(hostname)#$(hostname)"

View File

@@ -1,52 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, inputs, ... }:
{
imports =
[
# Include the results of the hardware scan.
./hardware-configuration.nix
inputs.disko.nixosModules.default
./disk-config.nix
inputs.home-manager.nixosModules.default
../modules/laptop.nix
../modules/gaming.nix
];
fileSystems."/mnt/HDD1" = {
#device = "/dev/disk/by-uuid/35763dc3-c736-4714-ade7-40bf49ad50dd";
fsType = "ext4";
label = "HDD1";
options = [
# If you don't have this options attribute, it'll default to "defaults"
# boot options for fstab. Search up fstab mount options you can use
"users" # Allows any user to mount and unmount
"nofail" # Prevent system from failing if this drive doesn't mount
"exec" # Permit execution of binaries and other executable files
];
};
hardware.tuxedo-drivers.enable = true;
programs.gpu-screen-recorder.enable = true;
# ......omit many configurations
# Define a user account. Don't forget to set a password with passwd.
users.users.worble = {
initialPassword = "password";
isNormalUser = true;
extraGroups = [ "wheel" "gamemode" "podman" "cdrom" ]; # Enable sudo for the user.
linger = true;
};
home-manager.useGlobalPkgs = true;
home-manager = {
extraSpecialArgs = { inherit inputs; };
users = {
"worble" = import ./home-manager/home.nix;
};
};
}

View File

@@ -1,205 +0,0 @@
{ inputs, config, pkgs, ... }:
{
imports = [
../../home-manager/fonts.nix
../../home-manager/terminal.nix
../../home-manager/firefox/firefox.nix
../../home-manager/development/tools.nix
../../home-manager/development/vscode.nix
../../home-manager/gaming.nix
];
terminal.nixUpdateLocation = "/home/worble/Projects/nixos#tuxedo";
terminal.flakeUpdateLocation = "/home/worble/Projects/nixos";
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "worble";
home.homeDirectory = "/home/worble";
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "24.05"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs;[
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
thunderbird
keepassxc
strawberry-qt6
rclone
qbittorrent
gimp-with-plugins
ffmpeg-full
yt-dlp
joplin-desktop
obsidian
teamspeak_client
webcord
libreoffice-qt
jellyfin-media-player
haruna
inotify-tools
libnotify
electrum
gpu-screen-recorder-gtk
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/worble/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = {
NIXOS_OZONE_WL = "1";
};
# home.sessionPath = [
# "$HOME/.local/bin"
# ];
services.nextcloud-client = {
enable = true;
startInBackground = true;
};
# Let Home Manager install and manage itself.
programs = {
home-manager.enable = true;
firefox = {
profiles.work = import ../../home-manager/firefox/firefox-profile.nix // {
id = 1;
name = "work";
isDefault = false;
settings = {
# allow fonts
"browser.display.use_document_fonts" = 1;
# home page
"browser.startup.homepage" = "https://outlook.office.com|https://teams.microsoft.com/v2|https://dev.azure.com/binhsps/Connect/_boards/board/t/Development%20Team/Stories";
};
};
};
chromium = {
enable = true;
package = pkgs.brave;
};
# install the shaders from anime4k directory for this to work
mpv = {
enable = true;
config = {
profile = "gpu-hq";
vo = "gpu-next";
gpu-api = "vulkan";
hwdec = "vulkan";
screenshot-directory = "/mnt/HDD1/Pictures/";
screenshot-template = "%F/%F_snapshot_%P";
glsl-shaders = "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl";
};
};
mangohud = {
enable = true;
enableSessionWide = true;
settings = {
preset = 1;
};
};
};
systemd.user = {
services = {
rclone-media = {
Unit = {
Description = "rclone-media /mnt/HDD1/Videos/";
After = [ "network.target" "mnt-HDD1.mount" ];
};
Install = {
WantedBy = [ "default.target" ];
};
Service = {
Type = "exec";
ExecStart = "${pkgs.writeShellApplication {
name = "rclone-media";
runtimeInputs = [ pkgs.inotify-tools pkgs.libnotify pkgs.rclone ];
text = ''
function rclonecopy {
file=$1
changed_rel=''${file#"/mnt/HDD1/Videos"}
notify-send -a "rclone-media" "rclone for $file triggered"
if rclone copyto "$file" media:"media-7gM2gcrxRjXqfj$changed_rel" ; then
notify-send -a "rclone-media" "rclone complete for $file"
else
notify-send -u critical -a "rclone-media" "rclone failed for $file"
fi
}
inotifywait -mr \
--format '%w%f' \
-e close_write \
/mnt/HDD1/Videos/ |
while read -r file; do
rclonecopy "$file"
done
'';
}}/bin/rclone-media";
};
};
};
};
}

View File

@@ -1,2 +0,0 @@
#!/usr/bin/env bash
sudo nixos-rebuild switch --flake '/home/worble/Projects/nixos#tuxedo'