Compare commits

...

486 commits

Author SHA1 Message Date
077aa1474b
chore(flake): bump inputs 2024-12-14 17:58:40 +08:00
df79c760bd
spec(eientei): add minecraft greedycraft instance 2024-12-14 17:47:10 +08:00
29ca6c9a85
home(gnome): link monitors.xml 2024-11-26 22:42:49 +08:00
dead3b78d3
spec(shatter): initial configuration 2024-11-22 04:52:45 +08:00
98be936f03
flake: bump inputs 2024-11-22 04:48:24 +08:00
d0e98e3526
flake: bump inputs 2024-11-14 11:00:55 +08:00
d1ba7ee3d5
flake: bump inputs 2024-11-08 14:54:30 +08:00
c9c8dad5c9
flake: bump inputs 2024-10-26 01:33:16 +08:00
72ea81a11b
flake: bump inputs 2024-10-26 01:14:54 +08:00
fb3d4b9493
global(zfs): split setup depend on secret mountpoint 2024-10-26 01:02:09 +08:00
3b6f7fb826
spec(chireiden): enable gnome 2024-10-26 01:01:06 +08:00
80212f4f58
spec(focus): nextcloud 29 -> 30 2024-10-24 15:08:00 +08:00
0330b1a88b
spec(eientei): nextcloud 29 -> 30 2024-10-21 22:11:31 +08:00
c8a1a00781
flake: bump inputs 2024-10-21 20:48:13 +08:00
64043d00b9
spec(yume): enable android 2024-10-21 20:48:04 +08:00
80315e3ade
flake: bump inputs 2024-09-28 16:52:28 +08:00
a378dd430a
home(gnome): intellihide from focused windows 2024-09-19 09:25:48 +08:00
1685c8f6c6
flake: bump inputs 2024-09-18 19:23:46 +08:00
9f69104395
spec(hakugyokurou): remove jovian mode 2024-09-13 12:32:12 +08:00
f0c5559b71
flake: bump inputs 2024-09-13 12:28:17 +08:00
880b0c47e4
home(gnome): update package 2024-09-13 12:14:49 +08:00
02b0848767
flake: bump inputs 2024-09-10 22:53:05 +08:00
e7257165e7
home(gnome): add monitors persist 2024-09-02 22:14:26 +08:00
79b3436531
home(gnome): add some gnome-specific theming 2024-08-31 21:25:47 +08:00
87ac53b876
flake: bump inputs 2024-08-28 22:15:58 +08:00
41af94ba54
spec(reimaden): disable unsandboxed minecraft 2024-08-18 13:33:29 +08:00
d2a3a326e9
global(io): udisks ignore zvols 2024-08-17 20:08:25 +08:00
ca1376c990
global(fs): add zfs option 2024-08-17 20:08:02 +08:00
0c036cbbb2
spec(reimaden): enable gnome 2024-08-17 20:07:47 +08:00
2b23003a9f
home(gnome): add extensions 2024-08-15 20:50:14 +08:00
c9bee6e93a
home(gnome): disable d2p multi-monitor 2024-08-15 18:26:59 +08:00
49ef382902
flake: bump inputs 2024-08-13 10:10:58 +08:00
7dc2f86672
home(util): remove persist unnecessary for flatpak 2024-08-07 23:01:06 +08:00
466302416d
global(flatpak): add var persist 2024-08-07 22:49:43 +08:00
6ee6f38210
home(gnome): set power profile toggle 2024-08-04 17:20:50 +08:00
39f5670533
home(gnome): add more shortcuts 2024-08-04 13:05:00 +08:00
f770641792
flake: bump inputs 2024-08-04 12:28:13 +08:00
056b6934de
spec(hakugyokurou): enable android 2024-08-04 12:27:11 +08:00
1d284464e3
home(gnome): add more shortcuts 2024-08-03 18:02:17 +08:00
ddeaf512ae
home(gnome): improve gtk3 theme consistency 2024-07-30 18:51:45 +08:00
64946b2c46
home(gnome): add some gnome-specific theming 2024-07-30 18:45:20 +08:00
fab1f9c088
home(gnome): move applications to flatpak 2024-07-29 23:44:44 +08:00
c931c7c9a1
spec(hakugyokurou): set plymouth scale 2024-07-29 20:01:06 +08:00
280ee4d897
home(gnome): disable theme 2024-07-29 19:56:16 +08:00
951b1562bb
home(gnome): enable flatpak by default 2024-07-29 15:40:59 +08:00
f184b281c5
global(flatpak): add portals and persist 2024-07-29 15:40:41 +08:00
4996bf46f1
spec(hakugyokurou): enable gnome 2024-07-29 14:43:01 +08:00
b7f2c65c16
home(gnome): update gtk theme names 2024-07-29 14:19:20 +08:00
e2c06f3b3d
flake: bump inputs 2024-07-28 16:06:12 +08:00
58fb9a6e7a
spec(koumakyou): set cursor theme 2024-07-27 23:05:13 +08:00
c52911cdb8
spec(hakugyokurou): correct Xwayland scale value 2024-07-27 23:03:53 +08:00
58a968f745
spec(hakugyokurou): initial configuration 2024-07-27 18:18:35 +08:00
67c3de80f8
flake: bump inputs 2024-07-26 15:46:49 +08:00
e135ab7483
home(catppuccin): enable catppuccin module even without gui 2024-07-21 16:37:39 +08:00
620ed3b39e
package(expresslrs-configurator): bump expresslrs-configurator 1.6.1 to 1.7.2 2024-07-21 10:59:09 +08:00
e811f827bc
package(photoview): bump photoview 2.3.13 to 2.4.0 2024-07-21 10:54:14 +08:00
6ec1a24da0
spec(chireiden): disable catppuccin for plymouth 2024-07-18 17:36:44 +08:00
64cd40c5ea
home(catppuccin): add i3status colours 2024-07-18 17:36:24 +08:00
af83b7cd04
spec(shinkirou): specialise plasma 2024-07-18 17:06:03 +08:00
ba098bf641
flake: bump inputs 2024-07-18 11:01:19 +08:00
1849e4836d
global(gpu): enable 32-bit drivers 2024-07-13 21:34:25 +08:00
251bfe0475
home(catppuccin): fix gtk theme name again 2024-07-13 21:05:28 +08:00
de9e8eda5a
package(tubesync): temporarily allow obsolete dependency 2024-07-12 23:42:33 +08:00
82ffac9620
home(catppuccin): set qt style 2024-07-12 19:41:43 +08:00
a79f83fe78
flake: bump inputs 2024-07-12 17:10:48 +08:00
3c4865a2a2
spec(yume): enable lanzaboote 2024-07-12 17:10:40 +08:00
006f38f4ea
global(gui): add nvidia options 2024-06-24 20:28:49 +08:00
12365b57e6
global(io): switch audio system to pipewire 2024-06-24 18:22:30 +08:00
96a6ac54e4
flake: bump inputs 2024-06-24 16:32:20 +08:00
32f726d7d0
home(vscode): update vscode color theme 2024-06-24 10:04:43 +08:00
f7a42fec82
flake: bump inputs 2024-06-24 09:56:37 +08:00
5752c8339f
home(gui): switch to catppuccin module 2024-06-24 09:56:31 +08:00
ab6b29a30a
spec(koumakyou): set max-performance on power disconnect 2024-06-13 08:56:50 +08:00
8592b666ba
spec(koumakyou): clean up jovian config 2024-06-11 11:53:49 +08:00
a88cabfc80
spec(koumakyou): enable jetbrains defaults 2024-06-11 08:24:40 +08:00
cc9d40b5a5
spec(koumakyou): add gamemode and enable decky 2024-06-10 17:08:44 +08:00
67b56d9805
flake: bump inputs 2024-06-10 10:11:39 +08:00
eb7fe8397a
spec(eientei): remove minecraft reverse proxy 2024-06-03 16:03:15 +08:00
68d72a076f
spec(eientei): add minecraft services 2024-06-03 11:05:58 +08:00
64ba8a8987
flake: bump inputs 2024-06-02 23:01:58 +08:00
ee4ea70851
global(fs): make syncoid delete target snapshots 2024-06-02 22:19:21 +08:00
47ea3ecb98
spec(koumakyou): minecraft retain app user 2024-05-31 14:01:32 +08:00
ab343f2e89
home(minecraft): make username configurable 2024-05-31 14:00:52 +08:00
331728d02f
home(minecraft): check gui condition in home 2024-05-31 11:20:56 +08:00
d098650c74
home: crop koishi profile pictures 2024-05-31 11:12:26 +08:00
debe03c516
home(minecraft): run minecraft under dedicated user 2024-05-31 11:09:20 +08:00
44ca762deb
home: improve profile pictures 2024-05-31 11:08:29 +08:00
4f04190a05
package(tubesync): temporarily allow obsolete dependency 2024-05-30 17:21:41 +08:00
b42f8f2f0e
spec(shinkirou): add mouse natural scrolling 2024-05-30 17:19:18 +08:00
845469eec0
spec(shinkirou): use plasma by default 2024-05-30 17:18:26 +08:00
92d57712b7
flake: bump inputs 2024-05-29 16:10:21 +08:00
48ed9e178c
flake: bump inputs 2024-05-25 16:03:26 +08:00
add24cc516
flake: bump inputs 2024-05-22 22:10:13 +08:00
77924de53f
spec(koumakyou): add kodi 2024-05-22 22:10:06 +08:00
bdaca3ccd0
spec(koumakyou): set console font 2024-05-22 21:11:06 +08:00
bd08b5e746
home(jetbrains): add go compiler 2024-05-20 09:18:26 +08:00
4fe24f10e8
spec(focus): nextcloud 28 -> 29 2024-05-20 09:01:46 +08:00
c5d10e3fc2
spec(focus): add nextcloud maintenance window 2024-05-20 09:00:57 +08:00
137157f542
spec(eientei): add nextcloud maintenance window 2024-05-20 08:59:26 +08:00
dd37b390fb
spec(eientei): nextcloud 28 -> 29 2024-05-20 08:34:37 +08:00
61e56b0a4f
flake: bump inputs 2024-05-18 21:57:57 +08:00
9c4d7673f9
flake: bump inputs 2024-05-14 20:10:30 +08:00
9f0b2ea52b
spec(yume): disable autolock 2024-05-14 20:03:10 +08:00
df532b1817
spec(koumakyou): disable autolock 2024-05-14 20:02:58 +08:00
3ec2a95865
home: fix profile icon installation 2024-05-14 19:59:29 +08:00
2e669cacf7
spec(yume): enable plasma 2024-05-14 17:31:05 +08:00
ed4113fe32
home(plasma): fix wallet persist 2024-05-14 17:29:54 +08:00
efc8432b22
spec(koumakyou): allow network management and xwayland scale 2024-05-14 12:14:35 +08:00
552677e8a9
home(plasma): persist wallet 2024-05-14 12:14:12 +08:00
e57e635104
spec(shinkirou): add Xwayland scale 2024-05-14 11:40:47 +08:00
990eea0b3c
home(plasma): do not back up gtkrc-2.0 2024-05-14 11:40:32 +08:00
79b810cd68
home(plasma): persist display output config 2024-05-14 11:26:39 +08:00
a28f8d6619
spec(shinkirou): configure plasma inputs 2024-05-14 11:21:11 +08:00
f541e81698
home(plasma): disable home-manager cursor and unify image 2024-05-14 11:20:51 +08:00
7a63fc2be3
global(io): reduce firewall spam 2024-05-14 10:48:16 +08:00
40722585aa
spec(shinkirou): enable plasma specialisation 2024-05-14 10:21:10 +08:00
26b30be953
spec(reimaden): enable plasma specialisation 2024-05-14 10:20:58 +08:00
a2ec7ea1ec
home(plasma): add specialise option 2024-05-14 10:20:46 +08:00
381e5e973c
home(plasma): set wallpaper 2024-05-13 11:39:48 +08:00
4e2625bc2c
spec(koumakyou): add plasma session 2024-05-13 09:43:33 +08:00
4be3aedcc1
spec(reimaden): add plasma specialisation 2024-05-13 09:23:43 +08:00
499635bee5
home(plasma): enable home-manager auto replace 2024-05-13 09:16:06 +08:00
45be0acacc
home(gui): set catppuccin iconTheme name 2024-05-13 09:15:41 +08:00
1434b2b9b0
flake: bump inputs 2024-05-13 08:56:11 +08:00
37326f6798
home(plasma): add plasma-manager 2024-05-13 08:55:58 +08:00
5cbc847d77
home(gui): cleaner defaults 2024-05-13 08:38:38 +08:00
1c016469f2
flake: bump inputs 2024-05-11 10:30:26 +08:00
fbaa388392
home(foot): disable terminal transparency 2024-05-11 10:30:20 +08:00
9f8c6f3bd8
spec(koumakyou): boot to gamescope 2024-05-11 00:03:05 +08:00
a94f464661
spec(koumakyou): disable decky 2024-05-08 15:22:12 +08:00
617f8db26b
flake: bump inputs 2024-05-05 23:13:53 +08:00
48adffb07b
spec(yume): enable jetbrains defaults 2024-05-05 20:52:07 +08:00
c097e3a387
spec(koumakyou): remove steamos cmdline 2024-05-01 01:48:58 +08:00
0f7dc7fbd7
flake: bump inputs 2024-04-30 19:50:42 +08:00
f4e43231ce
spec(koumakyou): init 2024-04-29 22:36:32 +08:00
baec4a2b39
spec(reimaden): enable jetbrains defaults 2024-04-28 11:00:10 +08:00
84bc862108
home(jetbrains): add jetbrains products and directories 2024-04-28 10:58:54 +08:00
24c1aa86b5
flake: bump inputs 2024-04-28 09:36:26 +08:00
d8eb1522a6
home(util): add jellyfin-media-player 2024-04-22 15:59:18 +08:00
56e4a7eaa2
flake: bump inputs 2024-04-22 12:54:50 +08:00
e67b6296b6
spec(reimaden): disable headless due to scaling bugs 2024-04-19 09:27:33 +08:00
caac44a27a
home(foot): enable terminal transparency 2024-04-19 09:24:37 +08:00
d1d687abc2
flake: bump inputs 2024-04-19 08:15:03 +08:00
857cccd809
flake: bump inputs 2024-04-15 10:33:03 +08:00
0e71ccfa38
spec(focus): update proxy address 2024-04-11 15:15:55 +08:00
5b3028c680
global(io): add compat to hosts 2024-04-11 14:44:32 +08:00
3e3b992f36
spec(chireiden): move trackpad workaround to powerManagement 2024-04-11 14:26:48 +08:00
5f29d6eb22
spec(eientei): disable vaultwarden registration 2024-04-09 12:17:05 +08:00
57e5147403
flake: bump inputs 2024-04-08 22:25:06 +08:00
e5fd0a2243
spec(eientei): add webauthn nextcloud app 2024-04-08 11:26:41 +08:00
8164401592
spec(focus): add webauthn nextcloud app 2024-04-08 11:25:24 +08:00
6af960d53a
home(auth): float Bitwarden windows 2024-04-08 11:24:37 +08:00
f7c76541d0
flake: bump inputs 2024-04-04 11:55:17 +08:00
f60137de02
spec(web): add home redirects 2024-04-01 11:00:44 +08:00
97cf83fe01
home(auth): fix allowed_signers file generation 2024-04-01 08:30:50 +08:00
2ea8ecb788
spec(reimaden): enable headless 2024-04-01 08:27:09 +08:00
ed4d3f6efb
home(headless): add headless module 2024-04-01 08:26:47 +08:00
d79a6fc908
global(auth): add utility port to firewall allow 2024-04-01 08:07:29 +08:00
800fe79132
global(auth): translate key list 2024-03-30 14:09:52 +08:00
a9f796476f
global(io): update redir address 2024-03-30 14:01:48 +08:00
fc6a007323
spec(focus): update proxy address 2024-03-29 21:47:16 +08:00
743b9d511f
global(gpu): remove i915 from initrd when arc is set 2024-03-29 11:02:13 +08:00
c3c2127576
global(io): add netvm to hosts 2024-03-29 10:33:23 +08:00
0149295825
global(io): add net-priv hosts 2024-03-29 10:29:57 +08:00
e0ddf2c4e7
flake: compact input lines 2024-03-28 08:37:04 +08:00
e7c31837d5
repo: update gitignore 2024-03-28 08:13:19 +08:00
db4bfb3089
flake: bump inputs 2024-03-28 08:01:16 +08:00
2c2637f7ac
package(tubesync): bump tubesync 0.13.3 to 0.13.6 2024-03-26 08:57:36 +08:00
6fed230ae7
global(fs): add ability to customise curl args in alert 2024-03-25 13:15:25 +08:00
f9d508ba32
spec(focus): enable zfs alerts 2024-03-25 12:46:45 +08:00
14a01168a8
spec(eientei): enable zfs alerts 2024-03-25 12:32:01 +08:00
efe0526c04
global(fs): add zfs alerts 2024-03-25 12:31:50 +08:00
22ccce5fc5
home(util): add sedutil 2024-03-25 09:36:56 +08:00
41998787b8
global(virtualbox): add kvm virtualbox host 2024-03-24 11:10:09 +08:00
b8a330f7f5
package(tubesync): patch ffmpeg 2024-03-21 17:11:58 +08:00
cd07d25c0d
package(tubesync): patch yt-dlp options to print newlines as progress 2024-03-21 09:06:23 +08:00
81ec04da13
flake: bump inputs 2024-03-21 08:30:13 +08:00
f46a896118
spec(eientei): set zfs_arc_max 2024-03-21 08:14:58 +08:00
185bbc4446
spec(eientei): enable vaultwarden 2024-03-19 09:50:08 +08:00
d16f1c824d
spec(eientei): fix frigate firewall interface names 2024-03-19 09:05:57 +08:00
710cec9d0f
home(auth): add ssh ports 2024-03-19 08:56:21 +08:00
dff75439a1
spec(eientei): proxy matrix health endpoint 2024-03-18 11:46:47 +08:00
3b525684f5
spec(web): enable uptime-kuma 2024-03-18 11:09:56 +08:00
2e4a4047ed
home(gyroflow): move package to module 2024-03-18 09:38:16 +08:00
ed5e5d4640
package(tubesync): patch yt-dlp options to disable continue 2024-03-14 18:51:59 +08:00
3cf03f2716
spec(eientei): fix photoprism persistence path 2024-03-14 17:41:14 +08:00
cb21340d22
global(fs): ensure /var/lib/private mode 2024-03-14 17:40:56 +08:00
e3f1827788
spec(eientei): enable photoview 2024-03-14 10:47:46 +08:00
7dddbfd6dd
flake: bump inputs 2024-03-14 10:46:52 +08:00
87b97d2799
package(tubesync): patch yt-dlp options to ensure integrity 2024-03-14 10:06:54 +08:00
e8e03c3d4d
global(libvirt): add virtiofsd to environment 2024-03-11 21:39:46 +08:00
e988b6dcf6
flake: bump inputs 2024-03-11 15:08:00 +08:00
e2924d633e
spec(eientei): photoprism update path 2024-03-10 15:04:33 +08:00
a782a9c025
home(sway): redirect output to file 2024-03-08 19:33:02 +08:00
f723565eb0
spec(eientei): photoprism switch to vaapi hwaccel 2024-03-07 21:54:15 +08:00
82377fd719
spec(eientei): photoprism remove limits 2024-03-07 08:53:58 +08:00
1cb345b90f
spec(eientei): photoprism use intel hwaccel 2024-03-07 08:49:53 +08:00
a18016c81c
spec(eientei): enable photoprism 2024-03-07 08:39:56 +08:00
85ac98af05
spec(eientei): disable photoview 2024-03-07 07:58:42 +08:00
4c97d7ebe4
home(gyroflow): add qtwayland 2024-03-06 14:03:08 +08:00
66e81a8f38
home(chrome): add ozone wayland environment variable 2024-03-06 13:48:49 +08:00
659bd0142f
spec(shinkirou): scale login screen 2024-03-06 10:26:31 +08:00
8faac7a846
flake: bump inputs 2024-03-06 09:09:06 +08:00
8c20a243c7
spec(eientei): enable photoview 2024-03-05 09:39:03 +08:00
96851db8c7
spec(chireiden): enable libreoffice 2024-03-05 07:52:44 +08:00
4450039dc4
global(fs): switch default zfs kernel to lts 2024-03-04 21:31:34 +08:00
27c119a90a
spec(shinkirou): initial configuration 2024-03-04 21:28:16 +08:00
de4bdbccc5
package(photoview): add nixos module 2024-03-04 12:14:05 +08:00
e90d1beef8
package(photoview): install model data, add ui build info 2024-03-04 12:07:20 +08:00
cd98f2db10
package(photoview): package photoview 2024-03-04 09:26:16 +08:00
e10bb08962
flake: bump inputs 2024-03-03 21:37:51 +08:00
9b90675fbf
spec(focus): enable zfs replication 2024-03-03 15:04:49 +08:00
2b34a2d1b6
global(fs): add zfs replication custom ssh port 2024-03-03 15:04:33 +08:00
a055f042be
flake: bump inputs 2024-03-02 18:20:40 +08:00
3ee0425780
spec(focus): increase fastcgi read timeout 2024-02-28 08:57:47 +08:00
c737cc777c
spec(web): about: update link to server spec 2024-02-24 22:09:39 +08:00
9dd07b3897
spec(web): convert to bundlerEnv 2024-02-24 17:19:50 +08:00
92bb4d66d5
home: add test password for koishi in vmVariant 2024-02-24 15:35:03 +08:00
02bdeabf96
flake: bump inputs 2024-02-24 15:08:45 +08:00
2701746bce
package(tubesync): add tools called by yt-dlp to PATH 2024-02-23 10:45:54 +08:00
7ee037fc29
package(tubesync): add worker option 2024-02-22 11:24:59 +08:00
8bbe229d0a
package(tubesync): remove umask 2024-02-22 00:45:35 +08:00
dda8893d40
spec(eientei): enable tubesync 2024-02-22 00:45:24 +08:00
9ae717566b
package(tubesync): allow redis access to run directory 2024-02-22 00:01:25 +08:00
dae61762be
package(tubesync): create run directory pre-startup 2024-02-21 23:36:27 +08:00
5a71752aa0
package(tubesync): add tubesync application and module 2024-02-21 23:25:06 +08:00
be583ed13b
package: add nixos module imports 2024-02-21 21:53:08 +08:00
2514327369
spec(eientei): change replication user 2024-02-19 15:19:22 +08:00
fcd6744602
global(fs): remove replication compress flag 2024-02-19 15:19:11 +08:00
b109482e00
home(gui): improve catppuccin terminal visibility 2024-02-19 13:58:55 +08:00
66f73551c9
spec(eientei): enable gpu drivers 2024-02-19 12:55:37 +08:00
899a9daf96
global(gpu): add session checks for session-specific options 2024-02-19 12:55:23 +08:00
9cc608bfb6
spec(eientei): add jellyfin packages 2024-02-19 12:36:44 +08:00
c920fffcc2
home(btop): add btop and catppuccin colours 2024-02-18 21:48:47 +08:00
73dafad1ad
spec(eientei): add jellyfin 2024-02-18 19:08:27 +08:00
8476a7476a
spec(eientei): move hass nginx configuration 2024-02-18 18:41:27 +08:00
9e0f9ce6c5
spec(focus): enable netdata dashboard 2024-02-18 17:59:23 +08:00
1ccaa40a39
spec(focus): remove grafana dashboard 2024-02-18 17:59:13 +08:00
b287d7c00d
global(netdata): add netdata module and nginx wrapper 2024-02-18 17:36:49 +08:00
0f9149bd5e
flake: bump inputs 2024-02-18 12:49:39 +08:00
2d50d38a40
spec(eientei): add hass deps 2024-02-17 23:52:50 +08:00
485a2b7ac1
spec(incinerator): unlock initrd emergency access 2024-02-15 17:20:28 +08:00
9e80dccac5
home(gui): add catppuccin icons 2024-02-15 12:30:07 +08:00
22fb04981b
home(swayidle): fix idle commands 2024-02-14 16:47:30 +08:00
e221b7f8db
home(swayidle): set up idle behaviour 2024-02-14 15:38:19 +08:00
b65cd055f5
home(gui): theme mako 2024-02-14 14:47:48 +08:00
2f231304c9
home(gui): fix catppuccin palette 2024-02-14 14:40:48 +08:00
f022a00cf4
home(swaylock): isolate from sway 2024-02-14 13:04:17 +08:00
df57061bf0
home(sway): switch to swaylock-effects 2024-02-14 12:33:51 +08:00
5641dc74c5
spec(reimaden): add platform support kernel module 2024-02-14 03:23:48 +08:00
8a0ec45d55
home(gui): add flake background 2024-02-13 11:55:39 +08:00
fa3ac51cf6
home(sway): set default workspace 2024-02-13 11:26:48 +08:00
f5169cc44c
flake: bump inputs 2024-02-13 00:42:30 +08:00
f52061c93d
spec(chireiden): enable vscode 2024-02-12 23:30:56 +08:00
db1b3791ea
spec(reimaden): enable vscode 2024-02-12 23:30:11 +08:00
a3e69641ff
home(vscode): add vscodium and extensions 2024-02-12 23:29:13 +08:00
fbd026bff6
home(gui): theme sway with catppuccin 2024-02-12 19:25:55 +08:00
3ad2146c10
home(gui): add catppuccin gtk and cursor themes 2024-02-12 17:40:58 +08:00
6ff45fa8b0
global(gpu): greetd settings priority 2024-02-12 17:33:12 +08:00
646f3ecb82
spec(koumakyou): enable gnome 2024-02-12 15:18:12 +08:00
1ea225c920
home(gnome): move desktop backgrounds to share directory 2024-02-12 15:17:57 +08:00
337dba2c57
home: add networkmanager as an adminGroup 2024-02-10 05:48:08 +08:00
09c67a4887
spec(eientei): remove proxy configuration 2024-02-10 05:47:40 +08:00
92c2fb6de6
spec(eientei): convert to global zfs replication 2024-02-10 01:03:54 +08:00
95a06e001e
global(fs): fix permission fix 2024-02-10 01:03:36 +08:00
6aa44feb7e
global(fs): add zfs replication options 2024-02-10 00:57:35 +08:00
3961ed0d7a
spec(focus): convert to global split zfs 2024-02-10 00:32:16 +08:00
837d1fe9dc
spec(eientei): convert to global split zfs 2024-02-10 00:23:47 +08:00
9a01ce1fc6
global(fs): add missing fs options 2024-02-10 00:20:43 +08:00
7f26a0d1a0
global(fs): add zfs split store options 2024-02-10 00:16:09 +08:00
7607a12e77
flake: bump inputs 2024-02-09 22:25:17 +08:00
6c12312558
spec(chireiden): add trackpad driver workaround 2024-02-09 22:25:08 +08:00
b5153ae162
spec(eientei): add replication service 2024-02-09 19:48:11 +08:00
144336fc86
home(util): add serial client and mbuffer 2024-02-09 12:40:02 +08:00
7ae70e4d58
spec(eientei): add sas driver 2024-02-07 22:32:42 +08:00
8cb00d4cb1
flake: bump inputs 2024-02-06 09:34:05 +08:00
540779473a
flake: bump inputs 2024-02-05 14:23:14 +08:00
cfc232f3f9
spec(focus): enable boot-time memory test 2024-02-05 14:17:10 +08:00
e6e5e64b56
spec(focus): pin network interfaces 2024-02-04 22:17:38 +08:00
8b99375e1c
global(boot): add memtest option 2024-02-04 22:17:19 +08:00
d9c5ad9aa7
spec(focus): update nextcloud options 2024-02-03 22:29:38 +08:00
eb599088f6
spec(focus): fix proxy 2024-02-03 21:47:35 +08:00
a32f84b3d2
spec(eientei): correct forgejo ssh port 2024-02-02 09:31:15 +08:00
206cd74052
spec(eientei): add home-assistant mqtt 2024-02-02 09:15:35 +08:00
1d1d11fea5
spec(eientei): add home-assistant 2024-02-02 09:13:18 +08:00
224fcb33a0
flake: bump inputs 2024-02-02 07:33:59 +08:00
a4e1a6ba6c
global(oci): add system-wide persistence 2024-02-02 07:33:48 +08:00
694c5d1e8e
spec(eientei): fix proxy 2024-02-02 07:33:30 +08:00
81234bcd8c
spec(eientei): add frigate 2024-02-02 07:33:17 +08:00
6093613aae
spec(eientei): fix noProxy 2024-02-02 05:13:13 +08:00
93945e9eef
spec(eientei): migrate library configuration 2024-02-02 04:39:50 +08:00
a646252782
spec(eientei): add proxy configuration 2024-02-02 01:59:11 +08:00
07308885c7
spec(eientei): initial configuration 2024-02-01 17:27:06 +08:00
628180b279
spec(reimaden): rename public key 2024-02-01 17:24:23 +08:00
c0a8daf103
flake: bump inputs 2024-01-31 11:47:30 +08:00
57c224012f
spec(reimaden): rename from eientei 2024-01-31 11:45:26 +08:00
055c1dc3ce
spec(focus): add grafana dashboard 2024-01-29 17:44:41 +08:00
1a3a007e15
spec(focus): rename ethernet via hw address 2024-01-29 17:44:01 +08:00
ab93542026
home(gnome): enable tap to click, add terminal themes 2024-01-29 01:13:23 +08:00
588dff9dd6
home(gnome): disable workspace indicator and install gnome-terminal 2024-01-29 00:48:19 +08:00
9037aba427
home(gnome): configure gnome user experience 2024-01-29 00:20:21 +08:00
2b0394902c
home: add profile pictures 2024-01-29 00:19:57 +08:00
070015806c
spec(incinerator): remove unnecessary configuration 2024-01-28 16:52:19 +08:00
caa9cd51f6
home(gnome): add gnome desktop 2024-01-28 16:51:53 +08:00
75f1480908
home(plasma): remove plasma desktop 2024-01-28 16:38:17 +08:00
d83301cbd1
home(gui): disable hm qt config for plasma since it breaks the wayland session 2024-01-28 11:25:17 +08:00
5025216ce6
home(plasma): add plasma desktop 2024-01-28 11:24:48 +08:00
a36f1fb48b
global(io): betaflight default follow gui 2024-01-28 10:38:51 +08:00
60e994f497
home(gui): switch to papirus icon theme 2024-01-28 10:38:29 +08:00
8d5d26241a
home(util): separate BLHeliSuite32 state workaround from dist and add per-user state dir 2024-01-27 22:47:32 +08:00
213eb87b90
global(gpu): rename from gui 2024-01-27 22:14:03 +08:00
e6b7b1fab5
spec(focus): set default nextcloud language 2024-01-27 15:41:25 +08:00
c2f6bcde7f
flake: bump inputs 2024-01-27 09:58:08 +08:00
9021472c56
spec(focus): enable nextcloud 2024-01-27 09:56:24 +08:00
3f47deafab
spec(focus): configure nginx 2024-01-27 09:56:16 +08:00
e64a5aa3b1
spec(focus): enable postgresql 2024-01-27 09:55:46 +08:00
bf5815790f
spec(focus): enable libvirt and acme 2024-01-27 09:55:36 +08:00
6e3bb8c502
spec(focus): initial configuration 2024-01-26 13:59:24 +08:00
b4148325a5
global(fs): add bcachefs 2024-01-24 08:59:12 +08:00
a3e9dc0782
global(kernel): lower priority of default kernel to below mkDefault 2024-01-24 08:38:04 +08:00
be496bc687
global(fs): adjust zfs kernelPackages priority 2024-01-24 08:34:07 +08:00
77ad663510
spec(incinerator): remove postgresql 2024-01-24 08:31:59 +08:00
dd5c2395fe
global(fs): remove btrfs 2024-01-24 08:28:48 +08:00
f39f117eac
home(virt-manager): add sway window commands 2024-01-22 11:32:00 +08:00
e677fd23ec
home(sway): remove vanity options 2024-01-21 20:48:59 +08:00
f5e6b29038
global(fs): add zfs external nix store 2024-01-21 20:44:12 +08:00
dec4a51848
global(fs): extPersist -> external 2024-01-21 20:43:50 +08:00
3aedb1ab13
home(gui): enable blueman 2024-01-20 14:20:32 +08:00
b02286b66d
spec(library): add noatime option 2024-01-20 12:47:00 +08:00
285fabfcb7
flake: bump inputs 2024-01-20 12:36:48 +08:00
dd22303d34
global(fs): add noatime option 2024-01-20 12:35:48 +08:00
ebe904e9f6
global(gui): add pure nvidia flicker workaround 2024-01-19 21:59:46 +08:00
a2dfd20cb1
global(gui): add pure nvidia workarounds 2024-01-19 21:25:03 +08:00
0beee1c56b
spec(yume): initial configuration 2024-01-19 21:23:31 +08:00
7f13612f8b
global(auth): remove diag key 2024-01-19 15:50:50 +08:00
5f58dfefaf
flake: bump inputs 2024-01-19 15:48:24 +08:00
e248b8f9ed
spec(web): add nginx redirect 2024-01-19 15:47:39 +08:00
b713b0e40c
home(util): add dnsutils and whois 2024-01-19 10:54:55 +08:00
01b3f930a3
global(gui): remove withArcFull specialisation since it had no use case 2024-01-17 21:39:34 +08:00
f75e6a0d94
spec(web): enable minimum utils 2024-01-17 19:33:01 +08:00
ae7c18b397
home(util): add minimal system option 2024-01-17 19:31:56 +08:00
86806b0795
spec(web): update deps 2024-01-17 18:58:15 +08:00
6e361a98ee
spec(web): set mastodon url 2024-01-17 18:32:51 +08:00
81de77c3d9
home(sway): add --unsupported-gpu conditionally 2024-01-16 17:30:12 +08:00
d96ffaf7b5
home(minecraft): add floating window rules 2024-01-16 14:23:33 +08:00
d58f892041
home(steam): add floating window rules 2024-01-16 14:23:25 +08:00
65b3e65dbe
home(util): add floating window rules 2024-01-16 14:16:35 +08:00
fbed1d7b97
home(util): add ExpressLRS Configurator persistence 2024-01-16 12:12:57 +08:00
4d7fa964b3
home(util): add nvme-cli 2024-01-16 11:59:49 +08:00
6fca99d6ae
package: deprecate home-grown gyroflow package in favour of nixpkgs 2024-01-15 22:29:23 +08:00
67c28e74af
package: migrate gyroflow, expresslrs-configurator and blhelisuite32 2024-01-15 22:22:30 +08:00
eecc4911d3
spec(chireiden): change default frequency governor to powersave 2024-01-15 19:02:18 +08:00
64f9b82c52
home(util): add BLHeliSuite32 desktop item and icon from MacOS app 2024-01-15 18:57:35 +08:00
1035546b00
flake: bump inputs 2024-01-15 17:44:39 +08:00
27a728a4fa
spec(web): about: open gitea links in blank pages and improve wording of prompt tip 2024-01-15 17:15:39 +08:00
7133145395
spec(library): enable acme 2024-01-15 17:13:03 +08:00
6f93cf9cac
spec(web): post: BLHeli32 ESC Startup Music 2024-01-15 17:06:11 +08:00
30f1195ee2
spec(web): add nginx configuration 2024-01-15 16:56:47 +08:00
a72a864ca0
spec(web): enable acme 2024-01-15 15:57:40 +08:00
f4bf182905
global(acme): add acme defaults 2024-01-15 15:57:25 +08:00
3ae38cc470
spec(web): add jekyll website 2024-01-15 15:39:28 +08:00
9c41bcdd55
home(util): add gimp 2024-01-15 11:19:38 +08:00
730850c4cc
spec(web): remove headless profile 2024-01-14 12:52:45 +08:00
05a1d4957c
spec(web): initial configuration 2024-01-14 12:41:57 +08:00
2d8ab457fd
global(lowmem): add swap and trusted users 2024-01-14 12:41:39 +08:00
6c99f31581
spec(library): remove redundant configuration 2024-01-13 19:38:54 +08:00
a0b88b6ae8
global(io): improve bluetooth/audio defaults 2024-01-13 19:38:39 +08:00
f9bd098425
flake: bump inputs 2024-01-13 16:14:43 +08:00
39eb7d9e9b
spec(koumakyou): enable oci runtime 2024-01-12 19:33:39 +08:00
2e40bb5f88
home(util): add ExpressLRS configurator 2024-01-12 19:24:57 +08:00
9cf2eca26b
home(util): remove stdenvNoCC from BLHeliSuite32 2024-01-12 19:24:39 +08:00
b3b097692e
home(util): link BLHeliSuite32 music directory 2024-01-12 18:05:03 +08:00
26df0c0643
home(util): add BLHeliSuite32 2024-01-12 17:50:48 +08:00
83ccec0342
home(gyroflow): change mdk-sdk pname 2024-01-12 17:46:47 +08:00
f2f857d0d3
spec(incinerator): switch to ext4 2024-01-11 15:57:39 +08:00
80ca15997e
spec(library): disable act_runner host 2024-01-11 14:34:42 +08:00
9ddbc86b68
spec(library): add act_runner instance 2024-01-11 14:29:06 +08:00
9e916e2818
global(gui): fix type 2024-01-11 14:15:04 +08:00
4cdc472709
spec(library): enable oci runtime 2024-01-11 14:04:23 +08:00
c8291ebc32
global(gui): add default null value to type 2024-01-11 14:03:36 +08:00
10f1a139db
spec(koumakyou): enable oci runtime 2024-01-11 14:03:17 +08:00
ad694f6eac
spec(incinerator): enable oci runtime 2024-01-11 14:03:06 +08:00
0928b4d543
global(oci): add podman runtime 2024-01-11 13:59:55 +08:00
a5e7e6a623
home(gyroflow): add enable check to persist 2024-01-11 13:26:49 +08:00
c4d85a0d3e
global(fs): set kernel version when zfs is selected 2024-01-11 12:24:14 +08:00
3833d15d57
home(gyroflow): remove unnecessary library copies and wrapper variables 2024-01-11 12:22:52 +08:00
39913415f4
flake: bump inputs 2024-01-11 11:44:09 +08:00
164140c92e
global(gui): add withArcFull specialisation for always-on offload 2024-01-11 10:59:16 +08:00
dc6f9ce518
spec(koumakyou): enable gyroflow 2024-01-11 10:52:22 +08:00
9409130507
spec(eientei): enable gyroflow 2024-01-10 23:49:25 +08:00
8b2f1ed9dd
home(gyroflow): add package and module 2024-01-10 23:49:00 +08:00
d59639bfa1
global(gui): add intel icd 2024-01-10 23:37:33 +08:00
416bf5d260
home(util): add gtk theme engines 2024-01-10 23:37:17 +08:00
f0289b1685
home(util): add file 2024-01-10 19:21:40 +08:00
ae719fa706
home(util): add zip and unzip 2024-01-10 16:54:03 +08:00
f5956fc512
home(util): add nix-index persistence 2024-01-10 16:31:17 +08:00
cda6073cc6
home(util): add nix-index 2024-01-10 15:58:27 +08:00
b7cc73d661
spec(eientei): enable libreoffice 2024-01-10 13:38:29 +08:00
715f289918
home(libreoffice): add libreoffice package 2024-01-10 13:38:13 +08:00
5ab271b704
global(gui): improve withArc specialisation 2024-01-09 19:11:05 +08:00
441b4a363c
spec(eientei): switch to powersave governor 2024-01-09 18:48:40 +08:00
2a3d621b78
home(foot): configure font 2024-01-09 17:46:33 +08:00
01e14e155f
global(libvirt): add zfs mountpoint 2024-01-09 17:02:15 +08:00
cca40455c8
home: map home persistence to zfs mountpoints 2024-01-09 16:48:49 +08:00
b6897272aa
global(fs): improve zfs mountpoint handling 2024-01-09 16:48:28 +08:00
004601ee2a
spec(eientei): add arc id and enable bootloader timeout 2024-01-09 15:02:59 +08:00
bf06c3479f
global(gui): add arc toggle specialisation 2024-01-09 15:02:40 +08:00
171a3ea82b
global(fs): add zfs comment regarding pool creation 2024-01-09 14:50:30 +08:00
b2e791ed0f
spec(eientei): initial configuration 2024-01-09 14:16:37 +08:00
948aa08f57
home(app): isolate app user configuration 2024-01-09 14:10:05 +08:00
453acac7ec
global(fs): add f2fs and zfs 2024-01-09 13:17:47 +08:00
4c1cded852
global(auth): add eientei public key 2024-01-09 13:12:50 +08:00
affed489c3
spec(koumakyou): replace machine-id with unique value 2024-01-08 18:19:07 +08:00
25d61847e6
spec(incinerator): replace machine-id with unique value 2024-01-08 18:18:53 +08:00
d9f0db25ef
global(gui): add specialisation for disabling nvidia under a prime configuration 2024-01-08 09:47:46 +08:00
d3f97a71e4
global: rename from faucet 2024-01-07 22:01:31 +08:00
785ab73c50
spec(koumakyou): enable all-users minecraft and steam 2024-01-07 21:52:20 +08:00
05c9789947
spec(chireiden): enable app user minecraft and steam 2024-01-07 21:51:53 +08:00
e2765fc0a5
home: add app user capability 2024-01-07 21:51:34 +08:00
72dac229cd
home(minecraft): add app user capability 2024-01-07 21:51:12 +08:00
2081040e55
home(steam): port to home 2024-01-07 21:50:42 +08:00
50749ed595
faucet(gui): switch to proprietary nvidia drivers 2024-01-07 18:00:10 +08:00
749af042cc
home(sway): source profile in sway wrapper 2024-01-07 16:14:53 +08:00
997c1b0540
home(gui): unify qt theme 2024-01-07 14:47:25 +08:00
e6c19c257e
spec(chireiden): enable power management 2024-01-07 14:09:44 +08:00
84378f6b47
spec(koumakyou): enable steam and power management 2024-01-07 13:58:45 +08:00
14c9f3ff8a
faucet(steam): add steam program and directories 2024-01-07 13:58:29 +08:00
066c58bda9
home(minecraft): add jdk8 package 2024-01-07 13:57:59 +08:00
04264a5441
spec(library): add matrix and coturn service 2024-01-06 19:22:04 +08:00
73eed30320
flake: bump inputs 2024-01-06 17:40:14 +08:00
ffaf9cf30d
spec(koumakyou): initial configuration 2024-01-05 22:27:04 +08:00
a149f7b5ce
home(minecraft): add check to persistence 2024-01-05 22:26:34 +08:00
5ff1251349
home(minecraft): add prism launcher 2024-01-05 22:24:55 +08:00
fcb87d00b5
faucet(asusd): add asusd service 2024-01-05 22:24:35 +08:00
39867c7cb2
faucet(gui): improve driver selection correctness 2024-01-05 22:23:41 +08:00
cf10c385b4
spec(library): add allowed port 2024-01-05 20:47:25 +08:00
57d6945faf
spec(chireiden): enable android tools 2024-01-05 18:02:07 +08:00
eb42b157df
faucet(adb): add android tools 2024-01-05 18:00:51 +08:00
b99db1800d
home(util): add helpful packages 2024-01-05 13:40:16 +08:00
2605432885
home(sway): bind pavucontrol 2024-01-05 10:59:21 +08:00
7edb874ff2
home(mpv): enable mpv and add va configuration 2024-01-05 09:26:49 +08:00
1e59d53a71
faucet(gui): configure video acceleration 2024-01-05 09:26:14 +08:00
bf2ebe4671
home(imv): add gui check 2024-01-05 09:11:07 +08:00
a0829f2b4c
home(imv): enable imv 2024-01-05 09:10:01 +08:00
bc0f40c66e
home(util): add thunar 2024-01-05 09:08:15 +08:00
d9a1fa028d
spec(incinerator): add lib 2024-01-05 08:46:03 +08:00
5b2030025a
spec(incinerator): add postgresql service 2024-01-05 08:44:41 +08:00
81e6633526
feat(incinerator): add config loader 2024-01-05 08:44:26 +08:00
8335ac6f96
feat(incinerator): initial configuration 2024-01-05 08:41:30 +08:00
9d4e333545
fix(fs): bad efi partition uuid default 2024-01-05 08:41:01 +08:00
8e9a581130
chore(flake)!: bump inputs 2024-01-05 00:39:57 +08:00
5ffa86b659
feat(library): add forgejo service 2024-01-05 00:37:22 +08:00
904c5fcd74
feat(library): add nextcloud service 2024-01-05 00:37:06 +08:00
d423fae9db
feat(library): add nginx service, add acme 2024-01-05 00:36:49 +08:00
411bd483f5
feat(library): add postgresql service 2024-01-05 00:35:50 +08:00
de21a55aa7
feat(library): initial configuration 2024-01-05 00:35:10 +08:00
c5525a12fc
fix(foot): set term variable to something sane 2024-01-04 23:53:44 +08:00
13a624b5c0
chore(auth): add diagnostic key 2024-01-04 17:28:16 +08:00
a1ff11e63f
feat(chireiden): enable extPersist device 2024-01-04 15:37:18 +08:00
e5447b5cda
feat(chireiden): enable secure boot 2024-01-04 15:24:09 +08:00
ac14001646
fix(boot): set up sbctl unconditionally 2024-01-04 15:14:28 +08:00
c971d9ef2c
fix(fs): bind /tmp to on-disk storage 2024-01-04 15:03:54 +08:00
7c4b897811
fix(virt-manager): add gui check 2024-01-04 14:22:27 +08:00
db0ce4686a
fix(sway): enable wrapper features 2024-01-04 14:21:47 +08:00
acb36fc3e3
feat(virt-manager): add virt-manager settings 2024-01-04 13:51:17 +08:00
4c71d6fe88
fix(libvirt): add libvirtd group 2024-01-04 13:50:47 +08:00
f94101045c
feat: add helpful packages and persistence 2024-01-04 12:26:34 +08:00
5a82027157
fix: remove irrelevant config 2024-01-04 12:19:17 +08:00
d7484edcfa
feat(mako): enable service 2024-01-04 11:59:51 +08:00
c841558ff6
fix(wofi): fix sway menu command 2024-01-04 11:54:27 +08:00
5fd8f099c1
feat(wofi): move sway menu command 2024-01-04 11:54:14 +08:00
6e3d610c00
feat(sway): add sway configuration 2024-01-04 11:48:30 +08:00
cc882bb3ee
feat(i3status): add i3status setup 2024-01-04 11:48:09 +08:00
daacc0fe68
feat(wofi): add wofi config for drun 2024-01-04 11:46:56 +08:00
c2ec169a17
refactor(gui): remove unrelated configuration 2024-01-04 11:46:31 +08:00
08e4228cde
feat(gui): fix screenshot, customise bar, add gaps 2024-01-04 10:34:44 +08:00
a56f98417d
feat(libvirt): service configuration and persist 2024-01-03 16:59:17 +08:00
ca9471bfb3
refactor(chrome): move relevant nixos config 2024-01-03 16:42:10 +08:00
6fcd64d31b
fix(gui): theme gtk 2024-01-03 16:38:30 +08:00
ac6253460c
feat(gui): set cursor theme 2024-01-03 16:29:51 +08:00
6a3e683a5f
feat(gui): set regreet gtk theme 2024-01-03 16:23:25 +08:00
4af7c3b33d
feat(gui): add gtk themes 2024-01-03 16:23:05 +08:00
3618a1e7ec
fix(gui): set regreet fit mode 2024-01-03 15:39:30 +08:00
a02f98973f
feat(gui): add desktop background 2024-01-03 15:38:52 +08:00
880fb831fb
feat(gui): add base sway configuration 2024-01-03 15:29:21 +08:00
bb631dbf28
feat(chrome): add chrome package and wayland args
Chrome defaults to connecting to X11.
2024-01-03 15:27:15 +08:00
200 changed files with 7818 additions and 244 deletions

2
.gitignore vendored
View file

@ -1 +1,3 @@
result-*
result result
repl-result-*

View file

@ -1,22 +0,0 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.faucet.fs;
in {
options.faucet.fs.btrfs = {
options = mkOption {
type = with types; listOf str;
default = [ "noatime" "compress=zstd" ];
description = "btrfs mount options";
};
};
config = mkIf (cfg.type == "btrfs") {
fileSystems."/nix" =
{ inherit (cfg.btrfs) options;
device = "/dev/disk/by-uuid/${cfg.store}";
fsType = "btrfs";
};
};
}

View file

@ -1,61 +0,0 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.faucet.gui;
in {
imports = [
./plymouth.nix
./greetd.nix
];
options.faucet.gui = {
enable = mkEnableOption "various setup required for GUI and support software";
session = mkEnableOption "software required for a graphical session" // { default = true; };
type = mkOption {
type = with types; enum [ "intel" "amdgpu" "nvidia" "prime" ];
description = "type of graphics acceleration used";
};
prime = {
integrated = mkOption {
type = with types; str;
default = "i915";
description = "integrated gpu driver";
};
};
};
config = mkIf cfg.enable {
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
services.xserver.videoDrivers =
optional ((cfg.type == "nvidia") || (cfg.type == "prime")) "nvidia" ++
optional (cfg.type == "amdgpu") "amdgpu";
# inhibits default display manager
services.xserver.displayManager.startx.enable = mkDefault true;
hardware.nvidia = mkIf ((cfg.type == "nvidia") || (cfg.type == "prime")) {
modesetting.enable = true;
nvidiaSettings = true;
prime = mkIf (cfg.type == "prime") {
offload = {
enable = true;
enableOffloadCmd = true;
};
};
powerManagement.enable = false;
powerManagement.finegrained = false;
open = true;
};
boot.initrd.kernelModules =
optional (cfg.type == "amdgpu") "amdgpu" ++
optional (cfg.type == "prime") cfg.prime.integrated;
};
}

View file

@ -1,17 +0,0 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.faucet.gui;
in mkIf (cfg.enable && cfg.session) {
programs.regreet = {
enable = true;
cageArgs = [ "-s" "-d" "-m" "last" ];
settings = {
background.path = ../../share/54345906_p0.jpg;
gtk.application_prefer_dark_theme = true;
};
};
environment.persistence."/nix/persist/fhs".directories = [ "/var/cache/regreet" ];
}

View file

@ -1,17 +0,0 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.faucet.util;
in {
options.faucet.util = { };
config = {
programs.zsh.enable = true;
environment.shells = singleton pkgs.zsh;
environment.systemPackages = with pkgs; [
pciutils
];
};
}

204
flake.lock generated
View file

@ -1,30 +1,33 @@
{ {
"nodes": { "nodes": {
"catppuccin": {
"locked": {
"lastModified": 1734057772,
"narHash": "sha256-waF/2Y39JXJ4kG3zawmw1J1GxPHopyoOkJKJhfJ7RBs=",
"owner": "catppuccin",
"repo": "nix",
"rev": "20b6328df20ae45752c81311d225fd47cba32483",
"type": "github"
},
"original": {
"owner": "catppuccin",
"repo": "nix",
"type": "github"
}
},
"crane": { "crane": {
"inputs": { "inputs": {
"flake-compat": [
"lanzaboote",
"flake-compat"
],
"flake-utils": [
"lanzaboote",
"flake-utils"
],
"nixpkgs": [ "nixpkgs": [
"lanzaboote", "lanzaboote",
"nixpkgs" "nixpkgs"
],
"rust-overlay": [
"lanzaboote",
"rust-overlay"
] ]
}, },
"locked": { "locked": {
"lastModified": 1681177078, "lastModified": 1717535930,
"narHash": "sha256-ZNIjBDou2GOabcpctiQykEQVkI8BDwk7TyvlWlI4myE=", "narHash": "sha256-1hZ/txnbd/RmiBPNUs7i8UQw2N89uAK3UzrGAWdnFfU=",
"owner": "ipetkov", "owner": "ipetkov",
"repo": "crane", "repo": "crane",
"rev": "0c9f468ff00576577d83f5019a66c557ede5acf6", "rev": "55e7754ec31dac78980c8be45f8a28e80e370946",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -36,11 +39,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1696426674,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -56,11 +59,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1704152458, "lastModified": 1733312601,
"narHash": "sha256-DS+dGw7SKygIWf9w4eNBUZsK+4Ug27NwEWmn2tnbycg=", "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "88a2cd8166694ba0b6cb374700799cec53aef527", "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -77,11 +80,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1680392223, "lastModified": 1717285511,
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=", "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5", "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -95,11 +98,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1701680307, "lastModified": 1731533236,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -113,11 +116,11 @@
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1681202837, "lastModified": 1710146030,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -135,11 +138,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1660459072, "lastModified": 1709087332,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "gitignore.nix", "repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -155,11 +158,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1704100519, "lastModified": 1734093295,
"narHash": "sha256-SgZC3cxquvwTN07vrYYT9ZkfvuhS5Y1k1F4+AMsuflc=", "narHash": "sha256-hSwgGpcZtdDsk1dnzA0xj5cNaHgN9A99hRF/mxMtwS4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "6e91c5df192395753d8e6d55a0352109cb559790", "rev": "66c5d8b62818ec4c1edb3e941f55ef78df8141a8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -170,11 +173,11 @@
}, },
"impermanence": { "impermanence": {
"locked": { "locked": {
"lastModified": 1703656108, "lastModified": 1731242966,
"narHash": "sha256-hCSUqdFJKHHbER8Cenf5JRzjMlBjIdwdftGQsO0xoJs=", "narHash": "sha256-B3C3JLbGw0FtLSWCjBxU961gLNv+BOOBC6WvstKLYMw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "impermanence", "repo": "impermanence",
"rev": "033643a45a4a920660ef91caa391fbffb14da466", "rev": "3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -184,6 +187,25 @@
"type": "github" "type": "github"
} }
}, },
"jovian": {
"inputs": {
"nix-github-actions": "nix-github-actions",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1734162608,
"narHash": "sha256-m2AX+3eiVqIK6uO7GbGY7SFnkkYOlR5fQiNI0eRvWOQ=",
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"rev": "31bdf4c7c91204d65afbde01146deee0259a8fb7",
"type": "github"
},
"original": {
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"type": "github"
}
},
"lanzaboote": { "lanzaboote": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
@ -197,27 +219,49 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1682802423, "lastModified": 1718178907,
"narHash": "sha256-Fb5TeRTdvUlo/5Yi2d+FC8a6KoRLk2h1VE0/peMhWPs=", "narHash": "sha256-eSZyrQ9uoPB9iPQ8Y5H7gAmAgAvCw3InStmU3oEjqsE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "lanzaboote", "repo": "lanzaboote",
"rev": "64b903ca87d18cef2752c19c098af275c6e51d63", "rev": "b627ccd97d0159214cee5c7db1412b75e4be6086",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "v0.3.0", "ref": "v0.4.1",
"repo": "lanzaboote", "repo": "lanzaboote",
"type": "github" "type": "github"
} }
}, },
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"jovian",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729697500,
"narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
"owner": "zhaofengli",
"repo": "nix-github-actions",
"rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"ref": "matrix-name",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1703961334, "lastModified": 1733392399,
"narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=", "narHash": "sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG+cBns=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9", "rev": "d0797a04b81caeae77bcff10a9dde78bc17f5661",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -229,30 +273,65 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1678872516, "lastModified": 1710695816,
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=", "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8", "rev": "614b4613980a522ba49f0d194531beddbb7220d3",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-22.11", "ref": "nixos-23.11",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": {
"locked": {
"lastModified": 1733940404,
"narHash": "sha256-Pj39hSoUA86ZePPF/UXiYHHM7hMIkios8TYG29kQT4g=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5d67ea6b4b63378b9c13be21e2ec9d1afc921713",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"plasma-manager": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1733858086,
"narHash": "sha256-h2BDIDKiqgMpA6E+mu0RgMGy3FeM6k+EuJ9xgOQ1+zw=",
"owner": "pjones",
"repo": "plasma-manager",
"rev": "7e2010249529931a3848054d5ff0dbf24675ab68",
"type": "github"
},
"original": {
"owner": "pjones",
"repo": "plasma-manager",
"type": "github"
}
},
"pre-commit-hooks-nix": { "pre-commit-hooks-nix": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
"lanzaboote", "lanzaboote",
"flake-compat" "flake-compat"
], ],
"flake-utils": [
"lanzaboote",
"flake-utils"
],
"gitignore": "gitignore", "gitignore": "gitignore",
"nixpkgs": [ "nixpkgs": [
"lanzaboote", "lanzaboote",
@ -261,11 +340,11 @@
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable"
}, },
"locked": { "locked": {
"lastModified": 1681413034, "lastModified": 1717664902,
"narHash": "sha256-/t7OjNQcNkeWeSq/CFLYVBfm+IEnkjoSm9iKvArnUUI=", "narHash": "sha256-7XfBuLULizXjXfBYy/VV+SpYMHreNRHk9nKMsm1bgb4=",
"owner": "cachix", "owner": "cachix",
"repo": "pre-commit-hooks.nix", "repo": "pre-commit-hooks.nix",
"rev": "d3de8f69ca88fb6f8b09e5b598be5ac98d28ede5", "rev": "cc4d466cb1254af050ff7bdf47f6d404a7c646d1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -276,12 +355,15 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"catppuccin": "catppuccin",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"home-manager": "home-manager", "home-manager": "home-manager",
"impermanence": "impermanence", "impermanence": "impermanence",
"jovian": "jovian",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs_2",
"plasma-manager": "plasma-manager"
} }
}, },
"rust-overlay": { "rust-overlay": {
@ -296,11 +378,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1682129965, "lastModified": 1717813066,
"narHash": "sha256-1KRPIorEL6pLpJR04FwAqqnt4Tzcm4MqD84yhlD+XSk=", "narHash": "sha256-wqbRwq3i7g5EHIui0bIi84mdqZ/It1AXBSLJ5tafD28=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "2c417c0460b788328220120c698630947547ee83", "rev": "6dc3e45fe4aee36efeed24d64fc68b1f989d5465",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -3,24 +3,21 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
flake-parts = { flake-parts.url = "github:hercules-ci/flake-parts";
url = "github:hercules-ci/flake-parts"; flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
impermanence.url = "github:nix-community/impermanence/master"; impermanence.url = "github:nix-community/impermanence/master";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
plasma-manager.url = "github:pjones/plasma-manager";
plasma-manager.inputs.nixpkgs.follows = "nixpkgs";
plasma-manager.inputs.home-manager.follows = "home-manager";
catppuccin.url = "github:catppuccin/nix";
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.1";
lanzaboote.inputs.nixpkgs.follows = "nixpkgs";
home-manager = { # steamdeck
url = "github:nix-community/home-manager"; jovian.url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs";
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.3.0";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = inputs: outputs = inputs:

20
global/acme/default.nix Normal file
View file

@ -0,0 +1,20 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.acme;
in {
options.global.acme = {
enable = mkEnableOption "ACME SSL certificates";
};
config = mkIf cfg.enable {
security.acme = {
acceptTerms = true;
defaults.email = mkDefault "koishi@514fpv.one";
defaults.group = config.services.nginx.group;
};
environment.persistence."/nix/persist/fhs".directories = [ "/var/lib/acme" ];
};
}

View file

@ -0,0 +1,17 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.android;
in {
options.global.android = {
enable = mkEnableOption "android tools";
};
config = mkIf cfg.enable {
programs.adb.enable = true;
# allow device access by admin users
users.adminGroups = [ "adbusers" ];
};
}

18
global/asusd/default.nix Normal file
View file

@ -0,0 +1,18 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.asusd;
in {
options.global.asusd = {
enable = mkEnableOption "ASUS laptop userland support daemon";
};
config = mkIf cfg.enable {
services.asusd.enable = true;
environment.persistence."/nix/persist/fhs".directories = [
"/etc/asusd"
];
};
}

View file

@ -2,20 +2,22 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.auth; cfg = config.global.auth;
pub = lib.pipe ./pub [ pub = lib.pipe ./pub [
builtins.readDir builtins.readDir
(lib.filterAttrs (n: ty: ty == "regular")) (lib.filterAttrs (n: ty: ty == "regular"))
(lib.mapAttrsToList (n: _: builtins.readFile ./pub/${n})) (lib.mapAttrsToList (n: _: builtins.readFile ./pub/${n}))
(foldr (payload: keys: (splitString "\n" payload) ++ keys) [ ])
(foldr (candidate: keys: keys ++ (if candidate == "" then [ ] else [ candidate ])) [ ])
]; ];
in { in {
options.faucet.auth = { options.global.auth = {
enable = mkEnableOption "identity authentication in various software" // { default = true; }; enable = mkEnableOption "identity authentication in various software" // { default = true; };
openssh = { openssh = {
enable = mkEnableOption "openssh server"; enable = mkEnableOption "openssh server";
password = mkEnableOption "password authentication"; password = mkEnableOption "password authentication";
publicKeys = mkOption { publicKeys = mkOption {
type = with types; listOf str; type = with types; listOf singleLineStr;
default = pub; default = pub;
description = "list of trusted openssh keys"; description = "list of trusted openssh keys";
}; };
@ -40,7 +42,7 @@ in {
settings.PasswordAuthentication = cfg.openssh.password; settings.PasswordAuthentication = cfg.openssh.password;
}; };
networking.firewall.allowedTCPPorts = [ ] ++ networking.firewall.allowedTCPPorts = [ 1300 ] ++ # utility port
optional (cfg.openssh.enable && (cfg.openssh.port != null)) cfg.openssh.port; optional (cfg.openssh.enable && (cfg.openssh.port != null)) cfg.openssh.port;
environment.persistence."/nix/persist/fhs".directories = [ ] ++ environment.persistence."/nix/persist/fhs".directories = [ ] ++

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJnhMCGSLMY+QldeCTaRovmfuzKdJsllQy9XinN2JU2z koishi@eientei

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHKCA0/6dsdVyLEgzWt8+u5lWVc0o6A3MY4M2Hf2BT8h koishi@hakugyokurou

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINJOoXrfB4D8Vi6HH4E7RqHHIWhPPqEiiOeLRfggW1XZ koishi@koumakyou

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGIZq1mD3J1cgWK61okXx3hQSe+5g3UTBfAf4RHkkFVd koishi@reimaden

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDwV7Z+PDC8ARRj1LxUJlv59gJ3A84LCMMyMSqLtRtuQ koishi@shinkirou

1
global/auth/pub/yume.pub Normal file
View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdzq2g13LEyxTZnA0HQ5hMEp4XNh0TOB/KY1bRwjsaq koishi@yume

View file

@ -2,12 +2,17 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.boot; cfg = config.global.boot;
in { in {
options.faucet.boot = { options.global.boot = {
enable = mkEnableOption "bootloader installation and maintenance" // { default = true; }; enable = mkEnableOption "bootloader installation and maintenance" // { default = true; };
systemd-boot = mkEnableOption "generation selection via systemd-boot" // { default = !cfg.lanzaboote; }; systemd-boot = mkEnableOption "generation selection via systemd-boot" // { default = !cfg.lanzaboote; };
lanzaboote = mkEnableOption "secure boot maintenance via lanzaboote"; lanzaboote = mkEnableOption "secure boot maintenance via lanzaboote";
memtest = mkOption {
type = with types; nullOr int;
default = null;
description = "memtest passes to perform on boot";
};
}; };
config = let config = let
@ -20,10 +25,11 @@ in {
loader.systemd-boot.enable = cfg.systemd-boot; loader.systemd-boot.enable = cfg.systemd-boot;
loader.efi.canTouchEfiVariables = true; loader.efi.canTouchEfiVariables = true;
tmp.cleanOnBoot = true; tmp.cleanOnBoot = true;
kernelParams = optional (cfg.memtest != null) "memtest=${toString cfg.memtest}";
}; };
# symlink for sbctl # symlink for sbctl
environment.etc.secureboot = mkIf cfg.lanzaboote { source = sbPath; }; environment.etc.secureboot.source = sbPath;
#environment.systemPackages = optional cfg.lanzaboote pkgs.sbctl; environment.systemPackages = [ pkgs.sbctl ];
}; };
} }

View file

@ -0,0 +1,17 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.flatpak;
in {
options.global.flatpak = {
enable = mkEnableOption "flatpak sandbox";
};
config = mkIf cfg.enable {
services.flatpak.enable = true;
xdg.portal.enable = true;
users.home.persist.directories = [ ".local/share/flatpak" ".var" ];
environment.persistence."/nix/persist/fhs".directories = [ "/var/lib/flatpak" ];
};
}

22
global/fs/bcachefs.nix Normal file
View file

@ -0,0 +1,22 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.fs;
in {
options.global.fs.bcachefs = {
options = mkOption {
type = with types; listOf str;
default = [ "noatime" "compression=zstd" ];
description = "bcachefs mount options";
};
};
config = mkIf (cfg.type == "bcachefs") {
fileSystems."/nix" =
{ inherit (cfg.bcachefs) options;
device = "/dev/disk/by-uuid/${cfg.store}";
fsType = "bcachefs";
};
};
}

View file

@ -2,34 +2,36 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.fs; cfg = config.global.fs;
in { in {
imports = [ imports = [
./ext4.nix ./ext4.nix
./f2fs.nix
./xfs.nix ./xfs.nix
#./bcachefs.nix ./bcachefs.nix
./btrfs.nix ./zfs
]; ];
options.faucet.fs = { options.global.fs = {
type = mkOption { type = mkOption {
type = with types; enum [ "ext4" "xfs" "bcachefs" "btrfs" ]; type = with types; enum [ "ext4" "f2fs" "xfs" "zfs" "bcachefs" ];
default = "bcachefs"; default = "bcachefs";
description = "filesystem type to use for persistent state storage"; description = "filesystem type to use for persistent state storage";
}; };
store = mkOption { store = mkOption {
type = with types; str; type = with types; str;
default = config.networking.hostName;
description = "UUID/dataset of nix store backing device"; description = "UUID/dataset of nix store backing device";
}; };
esp = { esp = {
enable = mkEnableOption "EFI system partition" // { default = true; }; enable = mkEnableOption "EFI system partition" // { default = true; };
uuid = mkOption { uuid = mkOption {
type = with types; str; type = with types; str;
default = "cafebabe"; default = "CAFE-BABE";
description = "vfat serial number of EFI system partition"; description = "vfat serial number of EFI system partition";
}; };
}; };
extPersist = { external = {
enable = mkEnableOption "external persist filesystem"; enable = mkEnableOption "external persist filesystem";
# this wraps the standard fileSystems module # this wraps the standard fileSystems module
# since some attrs have to be unconditionally set # since some attrs have to be unconditionally set
@ -70,10 +72,15 @@ in {
{ device = "/dev/disk/by-uuid/${cfg.esp.uuid}"; { device = "/dev/disk/by-uuid/${cfg.esp.uuid}";
fsType = "vfat"; fsType = "vfat";
}; };
fileSystems."/nix/persist" = mkIf cfg.extPersist.enable fileSystems."/nix/persist" = mkIf cfg.external.enable
{ inherit (cfg.extPersist) device fsType options; { inherit (cfg.external) device fsType options;
neededForBoot = true; neededForBoot = true;
depends = "/nix"; depends = [ "/nix" ];
};
fileSystems."/tmp" =
{ device = "/nix/tmp";
options = [ "bind" ];
depends = [ "/nix/tmp" ];
}; };
services.fstrim.enable = mkIf ((cfg.type == "ext4") || (cfg.type == "xfs")) true; services.fstrim.enable = mkIf ((cfg.type == "ext4") || (cfg.type == "xfs")) true;
@ -83,5 +90,10 @@ in {
inherit (cfg.cryptsetup) allowDiscards bypassWorkqueues; inherit (cfg.cryptsetup) allowDiscards bypassWorkqueues;
device = "/dev/disk/by-uuid/${uuid}"; device = "/dev/disk/by-uuid/${uuid}";
}) cfg.cryptsetup.uuids); }) cfg.cryptsetup.uuids);
environment.persistence."/nix/persist/fhs".files = [ {
file = "/var/lib/private/mode";
parentDirectory.mode = "0700";
} ];
}; };
} }

View file

@ -1,10 +1,11 @@
{ lib { lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.fs; cfg = config.global.fs;
in mkIf (cfg.type == "ext4") { in mkIf (cfg.type == "ext4") {
fileSystems."/nix" = fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/${cfg.store}"; { device = "/dev/disk/by-uuid/${cfg.store}";
fsType = "ext4"; fsType = "ext4";
options = [ "noatime" ];
}; };
} }

10
global/fs/f2fs.nix Normal file
View file

@ -0,0 +1,10 @@
{ lib
, config
, ... }: with lib; let
cfg = config.global.fs;
in mkIf (cfg.type == "f2fs") {
fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/${cfg.store}";
fsType = "f2fs";
};
}

View file

@ -1,11 +1,12 @@
{ lib { lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.fs; cfg = config.global.fs;
in mkIf (cfg.type == "xfs") { in mkIf (cfg.type == "xfs") {
# NOTE: -m reflink=1 # NOTE: -m reflink=1
fileSystems."/nix" = fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/${cfg.store}"; { device = "/dev/disk/by-uuid/${cfg.store}";
fsType = "xfs"; fsType = "xfs";
options = [ "noatime" ];
}; };
} }

122
global/fs/zfs/alert.nix Normal file
View file

@ -0,0 +1,122 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.fs.zfs.alert;
backend = {
text = pkgs.writeShellScript "telegram-text" ''
set -e
source ${cfg.secret}
${pkgs.curl}/bin/curl -sG \
--data-urlencode "chat_id=$CHATID" \
--data-urlencode "text=$ALERT" \
$CURL_EXTRA_ARGS \
"https://api.telegram.org/bot$APIKEY/sendMessage"
'';
image = pkgs.writeShellScript "telegram-image" ''
set -e
source ${cfg.secret}
${pkgs.curl}/bin/curl -sG \
-F "chat_id=$CHATID" \
-F "caption=$ALERT" \
-F "photo=@-" \
$CURL_EXTRA_ARGS \
"https://api.telegram.org/bot$APIKEY/sendPhoto"
'';
};
zedAlert = pkgs.writeShellScript "zed-alert" ''
set -e
export BODY="$(cat)"
# add tag
ALERT="$1 #zfs"
export ALERT
echo -e "$BODY" | \
${pkgs.imagemagick}/bin/convert \
-size 1500x2000 xc:black \
-font "${pkgs.freefont_ttf}/share/fonts/truetype/FreeMono.ttf" \
-pointsize 16 \
-fill white -annotate +15+80 "@-" \
-trim -bordercolor "#000" \
-border 32 +repage \
png:- | \
${backend.image}
'';
mdadmAlert = pkgs.writeShellScript "mdadm-alert" ''
set -e
EVENT="$1"
ARRAY="$2"
DEVICE="$3"
# fallback alert
ALERT="$EVENT | $ARRAY | $DEVICE"
case $EVENT in
DegradedArray)
ALERT="Array $ARRAY is in a degraded state"
;;
DeviceDisappeared)
ALERT="Array $ARRAY disappeared"
;;
Fail)
ALERT="Array $ARRAY encountered failure of component $DEVICE"
;;
FailSpare)
ALERT="Array $ARRAY encountered failure of spare component $DEVICE during rebuild"
;;
MoveSpare)
ALERT="Spare $DEVICE moved to array $ARRAY"
;;
NewArray)
ALERT="Array $ARRAY appeared"
;;
Rebuild??)
ALERT="Array $ARRAY rebuild is now $(echo $EVENT | ${pkgs.sedutil}/bin/sed 's/Rebuild//')% complete"
;;
RebuildFinished)
ALERT="Rebuild of array $ARRAY has concluded"
;;
RebuildStarted)
ALERT="Rebuild of array $ARRAY has started"
;;
SpareActive)
ALERT="Spare $DEVICE activated in array $ARRAY"
;;
SparesMissing)
ALERT="Array $ARRAY missing one or more spares"
;;
TestMessage)
ALERT="Test message generated for array $ARRAY"
;;
esac
# add tag
ALERT="$ALERT #swraid"
export ALERT
exec ${backend.text}
'';
in mkIf (cfg.secret != null) {
services.zfs.zed = mkIf cfg.zed {
settings = {
ZED_EMAIL_ADDR = [ "root" ];
ZED_EMAIL_PROG = toString zedAlert;
ZED_EMAIL_OPTS = "'@SUBJECT@'";
ZED_NOTIFY_INTERVAL_SECS = 3600;
ZED_NOTIFY_VERBOSE = false;
ZED_USE_ENCLOSURE_LEDS = true;
ZED_SCRUB_AFTER_RESILVER = false;
};
};
global.fs.zfs.split.mdProg = mkIf cfg.swraid (toString mdadmAlert);
}

105
global/fs/zfs/default.nix Normal file
View file

@ -0,0 +1,105 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.fs;
in {
imports = [
./alert.nix
./split.nix
./replication.nix
];
# -o ashift=12
# -O encryption=on -O keyformat=passphrase -O keylocation=prompt
# -O compression=on -O mountpoint=none -O xattr=sa -O acltype=posixacl
options.global.fs.zfs = {
alert = {
zed = mkEnableOption "zfs event alerts" // { default = true; };
swraid = mkEnableOption "software raid alerts" // { default = true; };
secret = mkOption {
type = with types; nullOr str;
default = null;
description = "path to alert secrets";
};
};
persist = mkOption {
type = with types; str;
default = cfg.store;
description = ''
pool for persist dataset
defaults to nix store dataset
'';
};
mountpoints = mkOption {
type = with types; attrsOf str;
description = "zfs dataset mountpoints";
};
externalStore = mkEnableOption "external nix store filesystem";
split = {
enable = mkEnableOption "zfs state with split nix store";
mdProg = mkOption {
type = with types; str;
default = "/usr/bin/true";
description = "mdadm PROGRAM config value";
};
secret = mkOption {
type = with types; str;
description = "UUID of secret filesystem";
};
store = mkOption {
type = with types; str;
description = "UUID of store filesystem";
};
};
replication = {
enable = mkEnableOption "zfs replication to remote";
remote = mkOption {
type = with types; str;
description = "remote host as replication destination";
};
port = mkOption {
type = with types; port;
description = "ssh port of replication target";
default = 22;
};
datasets = mkOption {
type = with types; listOf str;
default = [ "persist" "service" "storage" ];
description = "list of filesystems to perform replication for";
};
sendOptions = mkOption {
type = with types; str;
default = "w";
description = "send options for all datasets";
};
};
};
config = mkIf (cfg.type == "zfs") {
fileSystems = (mapAttrs (path: dataset: {
device = "${cfg.zfs.persist}/${dataset}";
fsType = "zfs";
options = [ "zfsutil" ];
# required by impermanence
neededForBoot = true;
}) cfg.zfs.mountpoints) // {
"/nix" = (if !cfg.zfs.externalStore then
{ device = "${cfg.store}/nix";
fsType = "zfs";
} else
{ inherit (cfg.external) device fsType options; });
};
global.fs.zfs.mountpoints."/nix/persist" = "persist";
services.zfs.trim.enable = true;
services.zfs.autoSnapshot.enable = true;
services.zfs.autoScrub.enable = true;
boot.zfs.devNodes = mkDefault "/dev/disk/by-partuuid";
#boot.kernelPackages = mkDefault config.boot.zfs.package.latestCompatibleLinuxPackages;
global.kernel.lts = mkDefault true;
};
}

View file

@ -0,0 +1,30 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.fs.zfs.replication;
in mkIf cfg.enable {
services.syncoid = {
enable = mkDefault true;
interval = mkDefault "daily";
sshKey = mkDefault "/var/lib/syncoid/.ssh/id_ed25519";
commonArgs = [
"--recursive"
"--mbuffer-size=128M"
"--delete-target-snapshots"
"--sshport=${toString cfg.port}"
];
localSourceAllow = mkOptionDefault [ "mount" ];
commands = (lists.foldr (name: commands: commands // {
"${config.global.fs.store}/${name}" = {
inherit (cfg) sendOptions;
target = "${cfg.remote}/${name}";
};
}) { }) cfg.datasets;
};
users.users.syncoid.uid = 82;
users.groups.syncoid.gid = 82;
environment.persistence."/nix/persist/fhs".directories = [ "/var/lib/syncoid" ];
}

35
global/fs/zfs/split.nix Normal file
View file

@ -0,0 +1,35 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.fs.zfs.split;
in mkIf cfg.enable {
# unconditionally enable fstrim for xfs and ext4
services.fstrim.enable = mkDefault true;
# enable swraid for split raid1 system array
boot.swraid.enable = mkDefault true;
boot.swraid.mdadmConf = mkDefault ''
PROGRAM ${cfg.mdProg}
'';
# secret filesystem backed by swraid
fileSystems."/nix/var/secret" =
{ device = "/dev/disk/by-uuid/${cfg.secret}";
fsType = "ext4";
options = [ "noatime" ];
neededForBoot = true;
depends = [ "/nix/var" ];
};
# external store backed by swraid
global.fs = {
zfs.externalStore = mkDefault true;
external.device = "/dev/disk/by-uuid/${cfg.store}";
external.fsType = "xfs";
external.options = [ "noatime" ];
};
# import system state pool after encrypted filesystems become available for key loading
boot.initrd.systemd.services."zfs-import-${config.global.fs.store}".after = [ "sysroot-nix-var-secret.mount" "cryptsetup.target" ];
}

111
global/gpu/default.nix Normal file
View file

@ -0,0 +1,111 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.gpu;
intel = cfg.type == "intel" || (cfg.type == "prime" && config.hardware.nvidia.prime.intelBusId != "");
amdgpu = cfg.type == "amdgpu" || (cfg.type == "prime" && config.hardware.nvidia.prime.amdgpuBusId != "");
nvidia = cfg.type == "nvidia" || cfg.type == "prime";
in {
imports = [
./plymouth.nix
./greetd.nix
];
options.global.gpu = {
enable = mkEnableOption "various setup required for GUI and support software";
session = mkEnableOption "software required for a graphical session" // { default = true; };
type = mkOption {
type = with types; nullOr (enum [ "intel" "amdgpu" "nvidia" "prime" ]);
default = null;
description = "type of graphics acceleration used";
};
arc = mkOption {
type = with types; nullOr str;
default = null;
description = "intel arc PCI ID if installed, enables toggling the arc before boot";
};
};
config = mkIf cfg.enable {
hardware.graphics = {
enable = true;
enable32Bit = true;
# https://nixos.wiki/wiki/Accelerated_Video_Playback
extraPackages = with pkgs; optionals intel [
intel-media-driver # LIBVA_DRIVER_NAME=iHD
vaapiIntel # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
vaapiVdpau
libvdpau-va-gl
intel-compute-runtime
] ++
optional nvidia nvidia-vaapi-driver ++
optional (cfg.type == "nvidia") vulkan-validation-layers;
};
services.xserver = mkIf cfg.session {
videoDrivers =
optional nvidia "nvidia" ++
optional (cfg.type == "amdgpu") "amdgpu";
# inhibits default display manager
displayManager.startx.enable = mkDefault true;
};
hardware.nvidia = mkIf nvidia {
modesetting.enable = true;
nvidiaSettings = true;
prime = mkIf (cfg.type == "prime") {
offload = {
enable = true;
enableOffloadCmd = true;
};
};
powerManagement.enable = false;
powerManagement.finegrained = false;
open = false;
};
environment.variables = {
# work around broken nvidia hw cursor on wayland
WLR_NO_HARDWARE_CURSORS = mkIf (cfg.type == "nvidia") "1";
# work around wlroots flickering on pure nvidia
#WLR_RENDERER = mkIf (cfg.type == "nvidia") "vulkan";
};
specialisation.integratedGraphics = mkIf (cfg.type == "prime") {
configuration = {
global.gpu.type = mkForce (if intel then "intel" else if amdgpu then "amdgpu" else "prime");
boot.blacklistedKernelModules = [ "nouveau" ];
};
};
specialisation.withArc = mkIf (cfg.arc != null) {
configuration = {
global.gpu.arc = mkForce null;
powerManagement.cpuFreqGovernor = mkForce "performance";
};
};
boot.initrd.kernelModules =
optional amdgpu "amdgpu" ++
optional (intel && cfg.arc == null) "i915" ++
optionals nvidia [ "nvidia" "nvidia_drm" "nvidia_modeset" "nvidia_uvm" ] ++
optional (cfg.arc != null) "vfio-pci";
boot.extraModulePackages = optional nvidia config.boot.kernelPackages.nvidia_x11;
boot.extraModprobeConfig = mkIf (cfg.arc != null) ''
softdep drm pre: vfio-pci
options vfio-pci ids=${cfg.arc}
'';
boot.kernelParams =
optional intel "i915.fastboot=1" ++
optionals nvidia [ "nvidia_drm.modeset=1" "nvidia_drm.fbdev=1" ];
};
}

24
global/gpu/greetd.nix Normal file
View file

@ -0,0 +1,24 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.gpu;
gui = with cfg; enable && session;
in mkIf gui {
programs.regreet = {
enable = mkDefault true;
cageArgs = [ "-s" "-d" "-m" "last" ];
settings = {
background.path = mkDefault ../../share/54345906_p0.jpg;
background.fit = "Fill";
GTK = {
application_prefer_dark_theme = mkDefault true;
cursor_theme_name = mkDefault "Bibata-Modern-Classic";
icon_theme_name = mkDefault "Papirus-Dark";
theme_name = mkDefault "WhiteSur-Dark";
};
};
};
environment.persistence."/nix/persist/fhs".directories = [ "/var/cache/regreet" ];
}

View file

@ -2,10 +2,11 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.gui; cfg = config.global.gpu;
in mkIf cfg.enable { gui = with cfg; enable && session;
in mkIf gui {
boot = { boot = {
loader.timeout = lib.mkDefault 0; loader.timeout = mkDefault 0;
consoleLogLevel = 0; consoleLogLevel = 0;
initrd.verbose = false; initrd.verbose = false;
initrd.systemd.enable = true; initrd.systemd.enable = true;
@ -13,7 +14,6 @@ in mkIf cfg.enable {
kernelParams = [ kernelParams = [
"quiet" "quiet"
"splash" "splash"
"i915.fastboot=1"
"loglevel=3" "loglevel=3"
"rd.systemd.show_status=false" "rd.systemd.show_status=false"
"rd.udev.log_level=3" "rd.udev.log_level=3"

View file

@ -2,9 +2,9 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.id; cfg = config.global.id;
in { in {
options.faucet.id = mkOption { options.global.id = mkOption {
type = with types; str; type = with types; str;
description = "systemd machine id"; description = "systemd machine id";
}; };

View file

@ -2,41 +2,61 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.io; cfg = config.global.io;
gui = with config.global.gpu; enable && session;
in { in {
options.faucet.io = { options.global.io = {
betaflight = mkEnableOption "betaflight udev rules" // { default = true; }; betaflight = mkEnableOption "betaflight udev rules" // { default = gui; };
bluetooth = mkEnableOption "bluetooth daemons and state persistence" // { default = true; }; bluetooth = mkEnableOption "bluetooth daemons and state persistence" // { default = gui; };
audio = mkEnableOption "pulseaudio server configuration" // { default = true; }; audio = mkEnableOption "pulseaudio server configuration" // { default = gui; };
coredump = mkEnableOption "save coredumps handled by systemd"; coredump = mkEnableOption "save coredumps handled by systemd";
}; };
config = { config = {
services.udev.extraRules = "" + (if cfg.betaflight then '' services.udev.extraRules = ''
# ignore zvols
KERNEL=="zd*", ENV{UDISKS_IGNORE}="1"
'' + (if cfg.betaflight then ''
# DFU (Internal bootloader for STM32 and AT32 MCUs) # DFU (Internal bootloader for STM32 and AT32 MCUs)
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout" SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
'' else ""); '' else "");
networking.networkmanager.enable = mkDefault true; networking.networkmanager.enable = mkDefault true;
networking.hosts = {
"10.5.14.0" = [ "codec" ];
"10.5.14.1" = [ "redir" ];
"10.5.14.2" = [ "compat" ];
"192.168.123.1" = [ "netvm" ];
};
networking.firewall.logRefusedConnections = true;
hardware.bluetooth.enable = mkDefault cfg.bluetooth; hardware.bluetooth.enable = mkDefault cfg.bluetooth;
hardware.pulseaudio = mkIf cfg.audio { # rtkit is optional but recommended
security.rtkit.enable = cfg.audio;
services.pipewire = mkIf cfg.audio {
enable = true; enable = true;
support32Bit = true; alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
}; };
#nixpkgs.config.pulseaudio = mkIf cfg.audio;
security.pam.loginLimits = mkIf (!cfg.coredump) (singleton { domain = "*"; item = "core"; type = "hard"; value = "0"; }); security.pam.loginLimits = mkIf (!cfg.coredump) (singleton { domain = "*"; item = "core"; type = "hard"; value = "0"; });
systemd.coredump.extraConfig = mkIf (!cfg.coredump) "Storage=none"; systemd.coredump.extraConfig = mkIf (!cfg.coredump) "Storage=none";
environment.persistence."/nix/persist/fhs".directories = [ environment.persistence."/nix/persist/fhs".directories = [
"/var/log" "/var/log"
"/var/lib/nixos"
"/var/lib/systemd/backlight" "/var/lib/systemd/backlight"
] ++ ] ++
optional config.networking.networkmanager.enable "/etc/NetworkManager/system-connections" ++ optional config.networking.networkmanager.enable "/etc/NetworkManager/system-connections" ++
optional cfg.bluetooth "/var/lib/bluetooth" ++ optional cfg.bluetooth "/var/lib/bluetooth" ++
optional cfg.coredump "/var/lib/systemd/coredump"; optional cfg.coredump "/var/lib/systemd/coredump";
environment.persistence."/nix/persist/fhs".hideMounts = true; environment.persistence."/nix/persist/fhs".hideMounts = true;
users.home.persist.directories = [ ] ++
optional cfg.audio ".local/state/wireplumber";
}; };
} }

View file

@ -2,9 +2,9 @@
, lib , lib
, config , config
, ... }: with lib; let , ... }: with lib; let
cfg = config.faucet.kernel; cfg = config.global.kernel;
in { in {
options.faucet.kernel = { options.global.kernel = {
enable = mkEnableOption "kernel version and configuration" // { default = true; }; enable = mkEnableOption "kernel version and configuration" // { default = true; };
lts = mkEnableOption "longterm kernel releases"; lts = mkEnableOption "longterm kernel releases";
sysctl = { sysctl = {
@ -23,6 +23,6 @@ in {
"kernel.dmesg_restrict" = mkIf cfg.sysctl.harden 1; "kernel.dmesg_restrict" = mkIf cfg.sysctl.harden 1;
"vm.swappiness" = cfg.sysctl.swappiness; "vm.swappiness" = cfg.sysctl.swappiness;
}; };
boot.kernelPackages = with pkgs; mkDefault (if cfg.lts then linuxPackages else linuxPackages_latest); boot.kernelPackages = with pkgs; mkOverride 1001 (if cfg.lts then linuxPackages else linuxPackages_latest);
}; };
} }

View file

@ -0,0 +1,36 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.libvirt;
in {
options.global.libvirt = {
enable = mkEnableOption "libvirt virtualisation daemon" // { default = true; };
};
config = mkIf cfg.enable {
virtualisation.libvirtd = {
enable = true;
qemu.runAsRoot = false;
qemu.swtpm.enable = true;
# disable as much implicit state as possible
onBoot = "ignore";
onShutdown = "shutdown";
parallelShutdown = 5;
};
environment.systemPackages = with pkgs; [ virtiofsd ];
# USB redirection requires a setuid wrapper
virtualisation.spiceUSBRedirection.enable = true;
environment.persistence."/nix/persist/fhs".directories = [
"/var/lib/libvirt"
];
global.fs.zfs.mountpoints."/nix/persist/service/libvirt" = "service/libvirt";
# allow management by admin users
users.adminGroups = [ "libvirtd" ];
};
}

25
global/lowmem/default.nix Normal file
View file

@ -0,0 +1,25 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.lowmem;
in {
options.global.lowmem = {
enable = mkEnableOption "low memory optimisations";
swapsize = mkOption {
type = with types; int;
default = 8 * 1024;
description = "automatic swap file size";
};
};
config = mkIf cfg.enable {
# enables remote nixos-rebuild
nix.settings.trusted-users = [ "koishi" ];
swapDevices = [ {
device = "/nix/persist/secret/swap";
size = cfg.swapsize;
} ];
};
}

View file

@ -0,0 +1,52 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.netdata;
in {
options.global.netdata = {
enable = mkEnableOption "netdata";
host = mkOption {
type = with types; str;
default = "localhost";
description = "hostname of netdata web interface";
};
addSSL = mkEnableOption "add SSL to netdata proxy";
useACMEHost = mkOption {
type = with types; nullOr str;
default = null;
description = "existing acme host";
};
basicAuthFile = mkOption {
type = with types; nullOr path;
default = "/nix/persist/secret/netdata";
description = "path to passwd file";
};
};
config = mkIf cfg.enable {
services.netdata = {
enable = true;
config = {
global = {
"error log" = "syslog";
"access log" = "none";
"debug log" = "syslog";
};
web."bind to" = "unix:/var/run/netdata/netdata.sock";
};
};
users.users.netdata.uid = 287;
users.groups.netdata.gid = 287;
services.nginx.enable = mkDefault true;
services.nginx.virtualHosts.${cfg.host} = {
inherit (cfg) addSSL useACMEHost basicAuthFile;
locations."/".proxyPass = "http://unix:/var/run/netdata/netdata.sock";
};
users.users.nginx.extraGroups = [ "netdata" ];
environment.persistence."/nix/persist/fhs".directories = [ "/var/lib/netdata" ];
};
}

21
global/oci/default.nix Normal file
View file

@ -0,0 +1,21 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.oci;
in {
options.global.oci = {
enable = mkEnableOption "oci container runtime";
};
config = mkIf cfg.enable {
virtualisation.podman = {
enable = true;
enableNvidia = with config.global.gpu; mkDefault type == "prime" || type == "nvidia";
dockerCompat = true;
};
users.home.persist.directories = [ ".local/share/containers" ];
environment.persistence."/nix/persist/fhs".directories = [ "/var/lib/containers" ];
};
}

View file

@ -0,0 +1,34 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.global.virtualbox;
in {
options.global.virtualbox = {
enable = mkEnableOption "virtualbox host (kvm)";
};
config = mkIf cfg.enable {
virtualisation.virtualbox.host = {
enable = true;
enableKvm = true;
enableExtensionPack = true;
enableHardening = false;
addNetworkInterface = false;
};
# allow virtualbox USB passthrough
users.adminGroups = [ "vboxusers" ];
users.home.persist.directories = [
".config/VirtualBox"
];
users.homeModules = [ {
wayland.windowManager.sway.config.window.commands = [
{ criteria.class = "VirtualBox Manager"; command = "floating enable"; }
];
} ];
};
}

28
home/app/nixos.nix Normal file
View file

@ -0,0 +1,28 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.users;
in {
options.users.home.persistApp = {
files = mkOption {
type = with types; listOf (oneOf [ str (attrsOf str) ]);
default = [ ];
};
directories = mkOption {
type = with types; listOf (oneOf [ str (attrsOf str) ]);
default = [ ];
};
};
config = {
users.profiles.app = {
uid = 5800;
description = "Insecure Applications";
picture = ../picture/app.png;
};
# extra persistence specific to the app user
environment.persistence."/nix/persist".users.app = cfg.home.persistApp;
};
}

View file

@ -17,9 +17,21 @@
# compiled from trusted keys in auth module # compiled from trusted keys in auth module
ssh.allowedSignersFile = toString (pkgs.writeText ssh.allowedSignersFile = toString (pkgs.writeText
"allowed_signers" (foldr (key: folded: "allowed_signers" (foldr (key: folded:
folded + "koishi@514fpv.one ${key}") "" folded + "koishi@514fpv.one ${key}\n") ""
config.passthrough.publicKeys)); config.passthrough.publicKeys));
}; };
}; };
}; };
programs.ssh = {
enable = true;
matchBlocks = {
"edge.514fpv.io".port = 8086;
"sf.514fpv.io".port = 8087;
};
};
wayland.windowManager.sway.config.window.commands = mkIf config.passthrough.gui [
{ criteria.title = "Bitwarden"; command = "floating enable"; }
];
} }

View file

@ -2,6 +2,6 @@
, ... }: { , ... }: {
# this module passes openssh public keys to home-manager # this module passes openssh public keys to home-manager
users.homeModules = [ { users.homeModules = [ {
passthrough.publicKeys = config.faucet.auth.openssh.publicKeys; passthrough.publicKeys = config.global.auth.openssh.publicKeys;
} ]; } ];
} }

13
home/btop/home.nix Normal file
View file

@ -0,0 +1,13 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.btop;
in mkIf cfg.enable {
programs.btop = {
enable = true;
settings = {
theme_background = false;
};
};
}

17
home/btop/nixos.nix Normal file
View file

@ -0,0 +1,17 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.btop;
in {
options.home.btop = {
enable = mkEnableOption "btop" // { default = !config.home.util.minimal; };
};
config = {
users.homeModules = [
# this module passes gyroflow configuration to home-manager
{ passthrough.btop = cfg; }
];
};
}

BIN
home/catppuccin/flake.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

62
home/catppuccin/gui.nix Normal file
View file

@ -0,0 +1,62 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.catppuccin;
palette = (lib.importJSON "${config.catppuccin.sources.palette}/palette.json").${config.catppuccin.flavor}.colors;
in mkIf cfg.enable {
gtk.theme = { inherit (cfg.gtk) package name; };
qt.style.name = "kvantum";
qt.platformTheme.name = "kvantum";
home.pointerCursor = { inherit (cfg.cursor) package name; };
# sway colour palette override
wayland.windowManager.sway.config = {
colors = {
focused = { border = "$lavender"; background = "$base"; text = "$text"; indicator = "$rosewater"; childBorder = "$lavender"; };
focusedInactive = { border = "$overlay0"; background = "$base"; text = "$text"; indicator = "$rosewater"; childBorder = "$overlay0"; };
unfocused = { border = "$overlay0"; background = "$base"; text = "$text"; indicator = "$rosewater"; childBorder = "$overlay0"; };
urgent = { border = "$peach"; background = "$base"; text = "$peach"; indicator = "$overlay0"; childBorder = "$peach"; };
placeholder = { border = "$overlay0"; background = "$base"; text = "$text"; indicator = "$overlay0"; childBorder = "$overlay0"; };
background = "$base";
};
bars = mkForce [ {
colors = {
background = "$base";
statusline = "$text";
focusedStatusline = "$text";
focusedSeparator = "$base";
focusedWorkspace = { border = "$base"; background = "$base"; text = "$green"; };
activeWorkspace = { border = "$base"; background = "$base"; text = "$blue"; };
inactiveWorkspace = { border = "$base"; background = "$base"; text = "$surface1"; };
urgentWorkspace = { border = "$base"; background = "$base"; text = "$surface1"; };
bindingMode = { border = "$base"; background = "$base"; text = "$surface1"; };
};
mode = "dock";
position = "bottom";
workspaceButtons = true;
workspaceNumbers = true;
statusCommand = "${pkgs.i3status}/bin/i3status";
fonts = {
names = [ "monospace" ];
size = 8.0;
};
trayOutput = "primary";
} ];
output."*".bg = mkForce "${./flake.png} fill";
gaps.inner = 12;
gaps.outer = 5;
# dodge the status bar
gaps.bottom = 0;
};
# i3status colour palette override
programs.i3status.general = with palette; {
color_good = lavender.hex;
color_degraded = yellow.hex;
color_bad = red.hex;
};
}

9
home/catppuccin/home.nix Normal file
View file

@ -0,0 +1,9 @@
{
catppuccin = {
enable = true;
accent = "pink";
flavor = "mocha";
};
imports = [ ./gui.nix ];
}

79
home/catppuccin/nixos.nix Normal file
View file

@ -0,0 +1,79 @@
{ pkgs
, lib
, config
, ... }: with lib; let
gui = with config.global.gpu; enable && session;
cfg = config.home.catppuccin;
in {
options.home.catppuccin = {
enable = mkEnableOption "catppuccin colour scheme" // { default = gui; };
gtk = {
package = mkOption {
type = with types; package;
default = (pkgs.catppuccin-gtk.overrideAttrs {
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "gtk";
rev = "v1.0.3";
fetchSubmodules = true;
hash = "sha256-q5/VcFsm3vNEw55zq/vcM11eo456SYE5TQA3g2VQjGc=";
};
postUnpack = "";
}).override {
accents = [ "pink" ];
size = "compact";
#tweaks = [ "rimless" "black" ];
variant = "mocha";
};
description = "catppuccin gtk theme package";
};
name = mkOption {
type = with types; str;
default = "catppuccin-mocha-pink-compact";
description = "name of catppuccin gtk theme";
};
};
cursor = {
package = mkOption {
type = with types; package;
default = pkgs.catppuccin-cursors.mochaDark;
description = "catppuccin cursor theme package";
};
name = mkOption {
type = with types; str;
default = "catppuccin-mocha-dark-cursors";
description = "name of catppuccin cursor theme";
};
};
};
config = {
users.homeModules = [
# this module passes catppuccin configuration to home-manager
{ passthrough.catppuccin = cfg; }
];
catppuccin.enable = cfg.enable;
# gtk and cursor themes
environment.systemPackages = with cfg; mkIf enable [
gtk.package cursor.package
];
# override greetd theme
programs.regreet = mkIf cfg.enable {
theme = {
inherit (cfg.gtk) name package;
};
cursorTheme = {
inherit (cfg.cursor) name package;
};
settings = {
background.path = ./solid.png;
};
};
};
}

BIN
home/catppuccin/solid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

13
home/chrome/home.nix Normal file
View file

@ -0,0 +1,13 @@
{ pkgs
, lib
, config
, ...}: lib.mkIf config.passthrough.gui {
programs.chromium = {
enable = true;
package = pkgs.google-chrome;
commandLineArgs = [
"--enable-features=UseOzonePlatform"
"--ozone-platform=wayland"
];
};
}

10
home/chrome/nixos.nix Normal file
View file

@ -0,0 +1,10 @@
{ pkgs
, lib
, config
, ... }: with lib; let
gui = with config.global.gpu; enable && session;
in {
users.home.persist.directories = mkIf gui [ ".config/google-chrome" ];
security.chromiumSuidSandbox.enable = mkIf gui true;
environment.sessionVariables.NIXOS_OZONE_WL = "1";
}

11
home/foot/home.nix Normal file
View file

@ -0,0 +1,11 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
programs.foot = {
enable = true;
settings.main.term = "xterm-256color";
settings.main.font = "DejaVu Sans Mono:size=11";
#settings.colors.alpha = 0.8;
};
}

11
home/gnome/home.nix Normal file
View file

@ -0,0 +1,11 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.gnome;
in {
imports = [
./impl/home.nix
./impl/dconf.nix
];
}

286
home/gnome/impl/dconf.nix Normal file
View file

@ -0,0 +1,286 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.gnome;
bg = ../../../share/54345906_p0.jpg;
in mkIf cfg.enable {
dconf.settings = let
p = "org/gnome";
pd = "${p}/desktop";
ps = "${p}/shell";
pse = "${ps}/extensions";
ptl = "${p}/terminal/legacy";
ptlp = "${ptl}/profiles:";
in {
"${pd}/peripherals/mouse".natural-scroll = true;
"${pd}/peripherals/touchpad".tap-to-click = true;
"${p}/epiphany".ask-for-default = false;
"${p}/evolution-data-server".migrated = true;
"${p}/nautilus/preferences" = {
default-folder-viewer = "icon-view";
migrated-gtk-settings = true;
search-filter-time-type = "last_modified";
};
"${pd}/background" = {
color-shading-type = "solid";
picture-options = "zoom";
picture-uri = "file://${bg}";
picture-uri-dark = "file://${bg}";
primary-color = "#000000000000";
secondary-color = "#000000000000";
};
"${pd}/interface" = {
color-scheme = "prefer-dark";
cursor-theme = "Bibata-Modern-Classic";
font-antialiasing = "grayscale";
font-hinting = "slight";
gtk-theme = "adw-gtk3-dark";
icon-theme = "Papirus-Dark";
};
"${pd}/screensaver" = {
color-shading-type = "solid";
lock-enabled = false;
picture-options = "zoom";
picture-uri = "file://${bg}";
primary-color = "#000000000000";
secondary-color = "#000000000000";
};
"${pd}/wm/preferences" = {
action-double-click-titlebar = "toggle-maximize";
action-middle-click-titlebar = "minimize";
button-layout = "close:appmenu";
resize-with-right-button = true;
};
"${pd}/wm/keybindings" = {
panel-run-dialog = [ ];
begin-resize = [ "<Super>r" ];
close = [ "<Shift><Super>q" ];
minimize = [ "<Super>BackSpace" ];
move-to-workspace-1 = [ "<Shift><Super>1" ];
move-to-workspace-2 = [ "<Shift><Super>2" ];
move-to-workspace-3 = [ "<Shift><Super>3" ];
move-to-workspace-4 = [ "<Shift><Super>4" ];
move-to-workspace-left = [ "<Shift><Super>h" ];
move-to-workspace-right = [ "<Shift><Super>l" ];
switch-to-workspace-1 = [ "<Super>1" ];
switch-to-workspace-2 = [ "<Super>2" ];
switch-to-workspace-3 = [ "<Super>3" ];
switch-to-workspace-4 = [ "<Super>4" ];
toggle-maximized = [ "<Super>f" ];
};
"${ps}/keybindings" = {
switch-to-application-1 = [ ];
switch-to-application-2 = [ ];
switch-to-application-3 = [ ];
switch-to-application-4 = [ ];
switch-to-application-5 = [ ];
switch-to-application-6 = [ ];
switch-to-application-7 = [ ];
switch-to-application-8 = [ ];
switch-to-application-9 = [ ];
toggle-application-view = [ "<Super>d" ];
};
"${p}/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/"
];
logout = [ ];
screensaver = [ "<Control><Alt>l" ];
};
"${p}/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
binding = "<Super>Return";
command = "kgx";
name = "Launch console";
};
"${p}/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = {
binding = "<Super>q";
command = "google-chrome-stable";
name = "Launch Google Chrome";
};
"${ptlp}" = {
#default = "95894cfd-82f7-430d-af6e-84d168bc34f5";
list = [
"de8a9081-8352-4ce4-9519-5de655ad9361"
"71a9971e-e829-43a9-9b2f-4565c855d664"
"5083e06b-024e-46be-9cd2-892b814f1fc8"
"95894cfd-82f7-430d-af6e-84d168bc34f5"
];
};
"${ptlp}/:5083e06b-024e-46be-9cd2-892b814f1fc8" = {
background-color = "#24273a";
cursor-background-color = "#f4dbd6";
cursor-colors-set = true;
cursor-foreground-color = "#24273a";
foreground-color = "#cad3f5";
highlight-background-color = "#24273a";
highlight-colors-set = true;
highlight-foreground-color = "#5b6078";
palette = [
"#494d64" "#ed8796" "#a6da95" "#eed49f"
"#8aadf4" "#f5bde6" "#8bd5ca" "#b8c0e0"
"#5b6078" "#ed8796" "#a6da95" "#eed49f"
"#8aadf4" "#f5bde6" "#8bd5ca" "#a5adcb"
];
use-theme-colors = false;
visible-name = "Catppuccin Macchiato";
};
"${ptlp}/:71a9971e-e829-43a9-9b2f-4565c855d664" = {
background-color = "#303446";
cursor-background-color = "#f2d5cf";
cursor-colors-set = true;
cursor-foreground-color = "#303446";
default-size-columns = 150;
default-size-rows = 35;
foreground-color = "#c6d0f5";
highlight-background-color = "#303446";
highlight-colors-set = true;
highlight-foreground-color = "#626880";
palette = [
"#51576d" "#e78284" "#a6d189" "#e5c890"
"#8caaee" "#f4b8e4" "#81c8be" "#b5bfe2"
"#626880" "#e78284" "#a6d189" "#e5c890"
"#8caaee" "#f4b8e4" "#81c8be" "#a5adce"
];
use-theme-colors = false;
visible-name = "Catppuccin Frappe";
};
"${ptlp}/:95894cfd-82f7-430d-af6e-84d168bc34f5" = {
background-color = "#1e1e2e";
cursor-background-color = "#f5e0dc";
cursor-colors-set = true;
cursor-foreground-color = "#1e1e2e";
foreground-color = "#cdd6f4";
highlight-background-color = "#1e1e2e";
highlight-colors-set = true;
highlight-foreground-color = "#585b70";
palette = [
"#45475a" "#f38ba8" "#a6e3a1" "#f9e2af"
"#89b4fa" "#f5c2e7" "#94e2d5" "#bac2de"
"#585b70" "#f38ba8" "#a6e3a1" "#f9e2af"
"#89b4fa" "#f5c2e7" "#94e2d5" "#a6adc8"
];
use-theme-colors = false;
visible-name = "Catppuccin Mocha";
};
"${ptlp}/:de8a9081-8352-4ce4-9519-5de655ad9361" = {
background-color = "#eff1f5";
cursor-background-color = "#dc8a78";
cursor-colors-set = true;
cursor-foreground-color = "#eff1f5";
foreground-color = "#4c4f69";
highlight-background-color = "#eff1f5";
highlight-colors-set = true;
highlight-foreground-color = "#acb0be";
palette = [
"#5c5f77" "#d20f39" "#40a02b" "#df8e1d"
"#1e66f5" "#ea76cb" "#179299" "#acb0be"
"#6c6f85" "#d20f39" "#40a02b" "#df8e1d"
"#1e66f5" "#ea76cb" "#179299" "#bcc0cc"
];
use-theme-colors = false;
visible-name = "Catppuccin Latte";
};
"${ps}" = {
disabled-extensions = [
"light-style@gnome-shell-extensions.gcampax.github.com"
"places-menu@gnome-shell-extensions.gcampax.github.com"
"windowsNavigator@gnome-shell-extensions.gcampax.github.com"
"window-list@gnome-shell-extensions.gcampax.github.com"
"workspace-indicator@gnome-shell-extensions.gcampax.github.com"
"dash-to-dock@micxgx.gmail.com"
];
enabled-extensions = [
"user-theme@gnome-shell-extensions.gcampax.github.com"
"apps-menu@gnome-shell-extensions.gcampax.github.com"
"drive-menu@gnome-shell-extensions.gcampax.github.com"
"appindicatorsupport@rgcjonas.gmail.com"
"dash-to-panel@jderose9.github.com"
"caffeine@patapon.info"
"PrivacyMenu@stuarthayhurst"
];
last-selected-power-profile = "performance";
welcome-dialog-last-shown-version = "45.3";
};
#"${pse}/user-theme".name = "catppuccin-mocha-pink-compact";
"${pse}/caffeine" = {
screen-blank = "never";
};
"${pse}/dash-to-dock" = {
background-opacity = 0.80000000000000004;
dash-max-icon-size = 48;
dock-position = "BOTTOM";
height-fraction = 0.90000000000000002;
multi-monitor = false;
running-indicator-style = "DOTS";
custom-theme-shrink = true;
};
"${pse}/dash-to-panel" = {
animate-appicon-hover = false;
animate-appicon-hover-animation-type = "SIMPLE";
appicon-margin = 0;
appicon-padding = 4;
appicon-style= "NORMAL";
available-monitors = [ 0 ];
dot-position = "BOTTOM";
dot-style-focused = "METRO";
dot-style-unfocused = "DOTS";
group-apps = true;
hide-overview-on-startup = true;
hotkeys-overlay-combo = "TEMPORARILY";
intellihide = true;
intellihide-behaviour = "FOCUSED_WINDOWS";
intellihide-hide-from-windows = true;
isolate-workspaces = false;
leftbox-padding = -1;
overview-click-to-exit = true;
panel-anchors = ''{"0":"MIDDLE"}'';
panel-element-positions = ''{"0":[{"element":"showAppsButton","visible":true,"position":"stackedTL"},{"element":"activitiesButton","visible":true,"position":"stackedTL"},{"element":"leftBox","visible":false,"position":"stackedTL"},{"element":"taskbar","visible":true,"position":"centerMonitor"},{"element":"centerBox","visible":true,"position":"stackedBR"},{"element":"rightBox","visible":true,"position":"stackedBR"},{"element":"dateMenu","visible":true,"position":"stackedBR"},{"element":"systemMenu","visible":true,"position":"stackedBR"},{"element":"desktopButton","visible":false,"position":"stackedBR"}]}'';
panel-lengths = ''{"0":100}'';
panel-positions = ''{"0":"BOTTOM"}'';
panel-sizes = ''{"0":42}'';
primary-monitor = 0;
secondarymenu-contains-showdetails = true;
show-showdesktop-hover = true;
status-icon-padding = -1;
stockgs-force-hotcorner = false;
stockgs-keep-dash = false;
stockgs-keep-top-panel = false;
stockgs-panelbtn-click-only = false;
trans-bg-color = "#2a2a2a";
trans-dynamic-anim-target = 1.0;
trans-dynamic-behavior = "MAXIMIZED_WINDOWS";
trans-gradient-bottom-color = "#000000";
trans-gradient-bottom-opacity = 0.5;
trans-gradient-top-opacity = 0.0;
trans-panel-opacity = 0.0;
trans-use-custom-bg = true;
trans-use-custom-gradient = true;
trans-use-custom-opacity = true;
trans-use-dynamic-opacity = true;
tray-padding = -1;
window-preview-title-position = "TOP";
};
};
}

32
home/gnome/impl/home.nix Normal file
View file

@ -0,0 +1,32 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.gnome;
in mkIf cfg.enable {
home.packages =
with pkgs;
with gnome;
with gnomeExtensions; [
# gtk3 theme
adw-gtk3
# gnomeExtensions
caffeine
dash-to-panel
dash-to-dock
appindicator
privacy-settings-menu
];
catppuccin.enable = mkForce false;
home.pointerCursor = mkForce null;
gtk.enable = false;
home.persistence."/nix/persist/home/${config.home.username}" = {
removePrefixDirectory = true;
files = [
(if config.specialisation != {} then "gnome/.config/monitors.xml" else "extern/.config/monitors.xml")
];
};
}

49
home/gnome/impl/nixos.nix Normal file
View file

@ -0,0 +1,49 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.gnome;
in mkIf cfg.enable {
global.flatpak.enable = mkDefault true;
home.catppuccin.enable = mkDefault false;
catppuccin.enable = false;
programs.regreet.enable = false;
services.xserver.enable = true;
services.xserver.displayManager.startx.enable = false;
services.xserver.displayManager.gdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
services.udev.packages = with pkgs; [ gnome-settings-daemon ];
services.hardware.bolt.enable = true;
xdg.portal.configPackages = with pkgs; [ gnome-session ];
hardware.pulseaudio.enable = false;
environment.gnome.excludePackages = (with pkgs; [
snapshot
gnome-tour
] ++ optionals config.global.flatpak.enable [
baobab
simple-scan
evince
file-roller
geary
loupe
seahorse
totem
epiphany
gnome-calculator
gnome-calendar
gnome-connections
gnome-font-viewer
gnome-text-editor
gnome-characters
gnome-clocks
gnome-contacts
gnome-logs
gnome-maps
gnome-music
gnome-weather
]) ++ (with pkgs.gnome; [ ] ++ optionals config.global.flatpak.enable [
]);
users.home.persist.directories = [ ".config/dconf" ];
}

25
home/gnome/nixos.nix Normal file
View file

@ -0,0 +1,25 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.gnome;
in {
imports = [ ./impl/nixos.nix ];
options.home.gnome = {
enable = mkEnableOption "GNOME desktop environment";
};
config = {
users.homeModules = [
# this module passes gnome configuration to home-manager
{ passthrough.gnome = cfg; }
];
specialisation.nognome = with cfg; mkIf enable {
configuration = {
home.gnome.enable = mkForce false;
};
};
};
}

35
home/gui/home.nix Normal file
View file

@ -0,0 +1,35 @@
{ pkgs
, lib
, config
, ... }: with lib; let
catppuccin = config.passthrough.catppuccin.enable;
in {
config = mkIf config.passthrough.gui {
# cursor theme
home.pointerCursor = {
package = mkDefault pkgs.bibata-cursors;
name = mkDefault "Bibata-Modern-Classic";
size = 24;
x11.enable = true;
gtk.enable = true;
};
# gtk theme
gtk.theme = mkDefault {
package = pkgs.whitesur-gtk-theme;
name = "WhiteSur-Dark";
};
# gtk icons
gtk.iconTheme = mkDefault {
package = pkgs.papirus-icon-theme;
name = "Papirus-Dark";
};
# unify qt theme
qt.platformTheme.name = mkDefault "gtk";
gtk.enable = mkDefault true;
qt.enable = mkDefault true;
};
}

36
home/gui/nixos.nix Normal file
View file

@ -0,0 +1,36 @@
{ pkgs
, lib
, config
, ... }: with lib; let
gui = with config.global.gpu; enable && session;
catppuccin = config.home.catppuccin;
in {
config = {
users.homeModules = [
# this module passes gui configuration to home-manager
{ passthrough.gui = gui; }
];
users.adminGroups = mkIf gui [ "video" ];
# themes and icons
environment.systemPackages = with pkgs; mkIf gui ([
papirus-icon-theme
] ++ optionals (!catppuccin.enable) [
whitesur-gtk-theme
whitesur-icon-theme
bibata-cursors
]);
fonts.enableDefaultPackages = mkIf gui true;
security = mkIf gui {
polkit.enable = true;
};
programs = mkIf gui {
dconf.enable = true;
};
services = mkIf gui {
blueman.enable = !config.global.flatpak.enable;
};
};
}

13
home/gyroflow/home.nix Normal file
View file

@ -0,0 +1,13 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.gyroflow;
in mkIf cfg.enable {
# temporarily gone until regression is fixed
#home.packages = [ cfg.package ];
wayland.windowManager.sway.config.window.commands = [
{ criteria.app_id = "xyz.gyroflow.gyroflow"; command = "floating enable"; }
];
}

26
home/gyroflow/nixos.nix Normal file
View file

@ -0,0 +1,26 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.gyroflow;
in {
options.home.gyroflow = {
enable = mkEnableOption "gyroflow stabilisation software";
package = mkOption {
type = with types; package;
default = pkgs.gyroflow.overrideAttrs (finalAttrs: previousAttrs: {
buildInputs = previousAttrs.buildInputs ++ [ pkgs.qt6Packages.qtwayland ];
});
description = "gyroflow package";
};
};
config = {
users.homeModules = [
# this module passes gyroflow configuration to home-manager
{ passthrough.gyroflow = cfg; }
];
users.home.persist.directories = mkIf cfg.enable [ ".config/Gyroflow" ];
};
}

24
home/headless/home.nix Normal file
View file

@ -0,0 +1,24 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.headless;
in mkIf (cfg.enable != null) {
wayland.windowManager.sway.config = {
output = {
${cfg.enable}.pos = "0 0";
HEADLESS-1 = cfg.output;
};
startup = [ { command = "swaymsg create_output && swaymsg output HEADLESS-1 disable"; } ];
};
home.packages = [ (pkgs.writeShellScriptBin "headless" ''
swaymsg output HEADLESS-1 enable
${pkgs.wayvnc}/bin/wayvnc \
--output=HEADLESS-1 \
${cfg.extraArgs} \
${cfg.host} ${toString cfg.port}
swaymsg output HEADLESS-1 disable
'') ];
}

51
home/headless/nixos.nix Normal file
View file

@ -0,0 +1,51 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.headless;
in {
options.home.headless = {
enable = mkOption {
type = with types; nullOr str;
default = null;
description = "a headless, remotely viewed sway display";
};
output = mkOption {
type = with types; attrsOf str;
default = {
# pixel tablet
mode = "2560x1600";
scale = "2";
pos = "1920 0";
};
description = "headless display configuration";
};
host = mkOption {
type = with types; str;
default = "0.0.0.0";
description = "wayvnc listen host";
};
port = mkOption {
type = with types; port;
# utility port
default = 1300;
description = "wayvnc listen port";
};
extraArgs = mkOption {
type = with types; str;
default = "--max-fps=60";
description = "extra wayvnc args";
};
};
config = {
users.homeModules = [
# this module passes headless configuration to home-manager
{ passthrough.headless = cfg; }
];
};
}

77
home/i3status/home.nix Normal file
View file

@ -0,0 +1,77 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
programs.i3status = {
enable = true;
enableDefault = false;
general.colors = true;
general.interval = 1;
modules = {
"ethernet _first_" = {
position = 1;
settings = {
format_up = "%ip at %speed";
format_down = "";
};
};
"wireless _first_" = {
position = 2;
settings = {
format_up = ''%ip at %bitrate (\"%essid\"%quality @ %frequency)'';
format_down = "";
};
};
"disk /nix/persist" = {
position = 3;
settings = {
format = "%avail (%percentage_avail)";
threshold_type = "percentage_free";
low_threshold = 25;
};
};
memory = {
position = 4;
settings = {
format = "%used / %total";
threshold_degraded = "10%";
threshold_critical = "5%";
format_degraded = ">>> %used / %total <<<";
};
};
load = {
position = 5;
settings = {
format = "%1min %5min %15min";
max_threshold =
removeSuffix "\n" (builtins.readFile (pkgs.runCommandLocal "nproc" { } "nproc > $out"));
};
};
"battery all" = {
position = 6;
settings = {
format = "%status%percentage @ %consumption ~ %remaining";
format_down = "";
status_chr = "^";
status_full = "";
status_unk = "?";
status_bat = "";
last_full_capacity = true;
threshold_type = "percentage";
low_threshold = "15";
};
};
"tztime local" = {
position = 127;
settings = { format = "%Y-%m-%d %H:%M:%S"; };
};
};
};
}

6
home/imv/home.nix Normal file
View file

@ -0,0 +1,6 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
programs.imv.enable = true;
}

11
home/jetbrains/home.nix Normal file
View file

@ -0,0 +1,11 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.jetbrains;
in mkIf cfg.enable {
home.packages = with pkgs.jetbrains; [ pkgs.go ] ++
optional cfg.idea idea-community ++
optional cfg.clion clion ++
optional cfg.goland goland;
}

27
home/jetbrains/nixos.nix Normal file
View file

@ -0,0 +1,27 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.jetbrains;
in {
options.home.jetbrains = {
enable = mkEnableOption "jetbrains text editor";
idea = mkEnableOption "intellij idea";
clion = mkEnableOption "clion ide";
goland = mkEnableOption "goland ide" // { default = true; };
};
config = {
users.homeModules = [
# this module passes jetbrains configuration to home-manager
{ passthrough.jetbrains = cfg; }
];
users.home.persist.directories = mkIf cfg.enable [
"go"
".java/.userPrefs"
".config/JetBrains"
".local/share/JetBrains"
];
};
}

View file

@ -0,0 +1,9 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.libreoffice;
enable = cfg.enable && (cfg.allUsers || (config.home.username == "app"));
in mkIf enable {
home.packages = with pkgs; [ libreoffice ];
}

View file

@ -0,0 +1,22 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.libreoffice;
persist = [ ".config/libreoffice" ];
in {
options.home.libreoffice = {
enable = mkEnableOption "open source office suite";
allUsers = mkEnableOption "set up for all users";
};
config = {
users.homeModules = [
# this module passes minecraft configuration to home-manager
{ passthrough.libreoffice = cfg; }
];
users.home.persist.directories = with cfg; mkIf (enable && allUsers) persist;
users.home.persistApp.directories = with cfg; mkIf (enable && !allUsers) persist;
};
}

10
home/mako/home.nix Normal file
View file

@ -0,0 +1,10 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
services.mako = {
enable = true;
defaultTimeout = 5000;
anchor = "bottom-center";
};
}

16
home/minecraft/home.nix Normal file
View file

@ -0,0 +1,16 @@
{ pkgs
, lib
, config
, ... }: with lib; let
inherit (config.passthrough) gui;
cfg = config.passthrough.minecraft;
enable = cfg.enable && config.home.username == cfg.user;
in mkIf enable {
home.packages = with pkgs; [
jdk8
] ++ optional gui prismlauncher;
wayland.windowManager.sway.config.window.commands = mkIf gui [
{ criteria.app_id = "org.prismlauncher.PrismLauncher"; command = "floating enable"; }
];
}

33
home/minecraft/nixos.nix Normal file
View file

@ -0,0 +1,33 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.minecraft;
gui = with config.global.gpu; enable && session;
in {
options.home.minecraft = {
enable = mkEnableOption "minecraft game launcher and jvm";
user = mkOption {
type = with types; str;
default = "minecraft";
description = "username which minecraft game client runs under";
};
};
config = {
users.homeModules = [
# this module passes minecraft configuration to home-manager
{ passthrough.minecraft = cfg; }
];
users.profiles.minecraft = mkIf (cfg.enable && cfg.user == "minecraft") {
uid = 5801;
description = "Minecraft";
picture = ../picture/aux.png;
};
environment.persistence."/nix/persist".users.${cfg.user} = mkIf (cfg.enable && gui) {
directories = [ ".local/share/PrismLauncher" ];
};
};
}

14
home/mpv/home.nix Normal file
View file

@ -0,0 +1,14 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
programs.mpv = {
enable = true;
config = {
hwdec = "auto-safe";
vo = "gpu";
profile = "gpu-hq";
gpu-context = "wayland";
};
};
}

BIN
home/picture/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
home/picture/aux.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
home/picture/koishi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
home/picture/staging.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

13
home/plasma/config.nix Normal file
View file

@ -0,0 +1,13 @@
{
programs.plasma = {
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
#clickItemTo = "select";
};
configFile = {
baloofilerc."Basic Settings"."Indexing-Enabled" = false;
kcminputrc.Libinput."2362"."597"."UNIW0001:00 093A:0255 Touchpad".NaturalScroll = true;
};
};
}

51
home/plasma/home.nix Normal file
View file

@ -0,0 +1,51 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.plasma;
image = ../../share/54345906_p0.jpg;
in mkIf cfg.enable {
programs.plasma = {
# https://github.com/pjones/plasma-manager
enable = true;
#overrideConfig = true;
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
wallpaper = image;
};
hotkeys.commands = {
launch-konsole = {
name = "Launch Konsole";
key = "Meta+Enter";
command = "konsole";
};
};
configFile = {
baloofilerc."Basic Settings"."Indexing-Enabled" = false;
kscreenlockerrc.Greeter.Wallpaper."org.kde.image".General.Image = image;
kscreenlockerrc.Greeter.Wallpaper."org.kde.image".General.PreviewImage = image;
};
} // cfg.extraConfig;
home.activation.gtkCleanup = hm.dag.entryAfter [ "writeBoundary" ] ''
$DRY_RUN_CMD rm -f $HOME/.gtkrc-2.0.old
'';
qt.enable = false;
qt.platformTheme.name = null;
# gtk theme
gtk.theme = {
package = pkgs.kdePackages.breeze-gtk;
name = "Breeze-Dark";
};
# gtk icons
gtk.iconTheme = {
package = pkgs.kdePackages.breeze-icons;
name = "breeze-dark";
};
}

52
home/plasma/nixos.nix Normal file
View file

@ -0,0 +1,52 @@
{ pkgs
, lib
, config
, plasma-manager
, ... }: with lib; let
cfg = config.home.plasma;
in {
options.home.plasma = {
enable = mkEnableOption "plasma desktop and configuration";
specialise = mkEnableOption "enable plasma in a specialisation";
extraConfig = mkOption {
type = with types; anything;
default = { };
description = "extra plasma-manager configuration";
};
};
config = {
users.homeModules = [
# this module passes plasma configuration to home-manager
{ passthrough.plasma = cfg; }
];
users.home.persist.files = mkIf cfg.enable [
".config/kwinoutputconfig.json"
];
users.home.persist.directories = mkIf cfg.enable [
".local/share/kwalletd"
];
services.desktopManager.plasma6 = mkIf cfg.enable {
enable = true;
};
home-manager.backupFileExtension = mkIf cfg.enable "old";
home-manager.sharedModules = [
plasma-manager.homeManagerModules.plasma-manager
];
services.blueman = mkIf cfg.enable {
enable = mkForce false;
};
home = mkIf cfg.enable {
catppuccin.enable = mkForce false;
};
specialisation.plasma = mkIf cfg.specialise {
configuration.home.plasma.enable = true;
};
};
}

View file

@ -1,6 +1,7 @@
{ pkgs { pkgs
, lib , lib
, config , config
, inputs
, ... }: with lib; let , ... }: with lib; let
cfg = config.users; cfg = config.users;
in { in {
@ -28,6 +29,11 @@ in {
default = false; default = false;
description = "enable ssh authorized keys for user"; description = "enable ssh authorized keys for user";
}; };
picture = mkOption {
type = with types; nullOr path;
default = null;
description = "path to user profile picture";
};
}; };
}); });
description = "preconfigured users with profile options"; description = "preconfigured users with profile options";
@ -67,9 +73,9 @@ in {
users = mapAttrs (name: opts: { users = mapAttrs (name: opts: {
inherit (opts) uid; inherit (opts) uid;
description = with opts; mkIf (description != null) description; description = with opts; mkIf (description != null) description;
extraGroups = mkIf opts.admin cfg.adminGroups; extraGroups = [ "dialout" ] ++ optionals opts.admin cfg.adminGroups;
openssh.authorizedKeys.keys = mkIf (opts.sshLogin && config.services.openssh.enable) openssh.authorizedKeys.keys = mkIf (opts.sshLogin && config.services.openssh.enable)
config.faucet.auth.openssh.publicKeys; config.global.auth.openssh.publicKeys;
hashedPasswordFile = "/nix/persist/shadow/${name}"; hashedPasswordFile = "/nix/persist/shadow/${name}";
shell = pkgs.zsh; shell = pkgs.zsh;
isNormalUser = mkIf (name != "root") true; isNormalUser = mkIf (name != "root") true;
@ -79,8 +85,9 @@ in {
# base groups # base groups
adminGroups = [ adminGroups = [
"wheel" "dialout" "kvm" "wheel" "kvm"
"systemd-journal" "systemd-journal"
"networkmanager"
]; ];
# base home modules in current directory # base home modules in current directory
@ -124,25 +131,64 @@ in {
neededForBoot = true; neededForBoot = true;
}) cfg.profiles; }) cfg.profiles;
global.fs.zfs.mountpoints = mapAttrs'
(name: opts: nameValuePair
"/nix/persist/home/${name}"
"home/${name}")
(filterAttrs (n: _: n != "root") config.users.profiles);
home-manager.users = mapAttrs (name: opts: { home-manager.users = mapAttrs (name: opts: {
imports = cfg.homeModules; imports = with inputs; cfg.homeModules ++ [
impermanence.homeManagerModules.impermanence
catppuccin.homeManagerModules.catppuccin
];
home.file.".face" = mkIf (opts.picture != null) {
source = opts.picture;
};
home.stateVersion = "23.11"; home.stateVersion = "23.11";
}) cfg.profiles; }) cfg.profiles;
system.activationScripts = mapAttrs'
(name: opts: nameValuePair
"${name}-profile-icon"
{
deps = [ "users" ];
text = let
iconDest = "/var/lib/AccountsService/icons/${name}";
userConf = pkgs.writeText "${name}-config" ''
[User]
Session=
Icon=${iconDest}
SystemAccount=false
'';
in ''
install -Dm 0444 ${opts.picture} ${iconDest}
install -Dm 0400 ${userConf} /var/lib/AccountsService/users/${name}
'';
})
(filterAttrs (n: _: n != "root") config.users.profiles);
# set up standard persistence for users # set up standard persistence for users
# this is registered internally for each software's configuration # this is registered internally for each software's configuration
environment.persistence."/nix/persist" = { environment.persistence."/nix/persist" = {
users = mapAttrs (name: _: cfg.home.persist // { users = (mapAttrs (name: _: cfg.home.persist // {
# root workaround, ugly but necessary # root workaround, ugly but necessary
# cannot get it properly for the same reason # cannot get it properly for the same reason
# mentioned above in fileSystems # mentioned above in fileSystems
home = mkIf (name == "root") "/root"; home = mkIf (name == "root") "/root";
}) cfg.profiles; }) cfg.profiles);
hideMounts = true; hideMounts = true;
}; };
# enable passwordless sudo # enable passwordless sudo
security.sudo.wheelNeedsPassword = false; security.sudo.wheelNeedsPassword = false;
# enable access in build-vm
virtualisation.vmVariant = {
users.users.koishi.password = "passwd";
users.users.koishi.hashedPasswordFile = mkForce null;
};
}; };
# this is for home components that need to extend nixos # this is for home components that need to extend nixos

14
home/steam/config.nix Normal file
View file

@ -0,0 +1,14 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.steam;
in mkIf cfg.enable {
hardware.steam-hardware.enable = true;
networking.firewall = {
allowedTCPPorts = [ 27015 27036 ];
allowedUDPPorts = [ 27015 ];
allowedUDPPortRanges = [ { from = 27031; to = 27036; } ];
};
}

17
home/steam/home.nix Normal file
View file

@ -0,0 +1,17 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.steam;
enable = cfg.enable && (cfg.allUsers || (config.home.username == "app"));
package = config.programs.steam.package;
in mkIf enable {
home.packages = with pkgs; [
cfg.package
cfg.package.run
];
wayland.windowManager.sway.config.window.commands = [
{ criteria.class = "steam"; command = "floating enable"; }
];
}

29
home/steam/nixos.nix Normal file
View file

@ -0,0 +1,29 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.steam;
persist = [ ".steam" ".local/share/Steam" ];
in {
imports = [ ./config.nix ];
options.home.steam = {
enable = mkEnableOption "steam software and environment";
package = mkOption {
type = with types; package;
default = config.programs.steam.package;
description = "steam package";
};
allUsers = mkEnableOption "set up for all users";
};
config = {
users.homeModules = [
# this module passes steam configuration to home-manager
{ passthrough.steam = cfg; }
];
users.home.persist.directories = with cfg; mkIf (enable && allUsers) persist;
users.home.persistApp.directories = with cfg; mkIf (enable && !allUsers) persist;
};
}

48
home/sway/home.nix Normal file
View file

@ -0,0 +1,48 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
wayland.windowManager.sway = {
enable = true;
wrapperFeatures.base = true;
wrapperFeatures.gtk = true;
swaynag.enable = true;
config = {
defaultWorkspace = "workspace number 1";
modifier = "Mod4";
keybindings = let
modifier = config.wayland.windowManager.sway.config.modifier;
in mkOptionDefault {
XF86MonBrightnessUp = "light -A 5";
XF86MonBrightnessDown = "light -U 5";
"Control+Alt+l" = "exec swaylock -f --grace 0";
"Print" = "exec ${pkgs.grim}/bin/grim - | ${pkgs.wl-clipboard}/bin/wl-copy";
"${modifier}+Print" = "exec ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy";
"${modifier}+q" = "exec google-chrome-stable";
"${modifier}+Home" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
};
bars = [ {
mode = "dock";
position = "bottom";
workspaceButtons = true;
workspaceNumbers = true;
statusCommand = "${pkgs.i3status}/bin/i3status";
fonts = {
names = [ "monospace" ];
size = 8.0;
};
trayOutput = "primary";
# sets transparency
colors.background = "00000000";
} ];
input."*".natural_scroll = "enabled";
input."type:touchpad".tap = "enabled";
output."*".bg = "#000000 solid_color";
};
};
}

37
home/sway/nixos.nix Normal file
View file

@ -0,0 +1,37 @@
{ pkgs
, lib
, config
, ... }: with lib; let
gui = with config.global.gpu; enable && session;
nvidia = with config.global.gpu; type == "nvidia" || type == "prime";
in mkIf gui {
services.displayManager.sessionPackages = [
(pkgs.writeTextFile {
name = "sway-session";
destination = "/share/wayland-sessions/sway.desktop";
text = ''
[Desktop Entry]
Name=Sway
Comment=An i3-compatible Wayland compositor
Exec=${pkgs.writeTextFile {
name = "sway-wrapper";
executable = true;
text = ''
#!${pkgs.zsh}/bin/zsh
SHLVL=0
for profile in ''${(z)NIX_PROFILES}; do
fpath+=($profile/share/zsh/site-functions $profile/share/zsh/$ZSH_VERSION/functions $profile/share/zsh/vendor-completions)
done
exec sway${if nvidia then " --unsupported-gpu" else ""} 2>&1 >> $XDG_CACHE_HOME/sway
'';
checkPhase = ''
${pkgs.stdenv.shellDryRun} "$target"
'';
}}
Type=Application
'';
} // { providedSessions = [ pkgs.sway.meta.mainProgram ]; })
];
programs.light.enable = true;
}

24
home/swayidle/home.nix Normal file
View file

@ -0,0 +1,24 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
services.swayidle = let
sway = config.wayland.windowManager.sway.package;
swaymsg = "${sway}/bin/swaymsg";
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
in {
enable = true;
systemdTarget = "sway-session.target";
timeouts = [
{ timeout = 600; command = "${swaymsg} 'output * dpms off'"; resumeCommand = "${swaymsg} 'output * dpms on'"; }
];
events = [
{ event = "before-sleep"; command = "${swaylock} -f --grace 0"; }
];
};
# fullscreen as simple idle inhibitor shortcut
wayland.windowManager.sway.config.window.commands = [
{ criteria.shell = ".*"; command = "inhibit_idle fullscreen"; }
];
}

24
home/swaylock/home.nix Normal file
View file

@ -0,0 +1,24 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
indicator-caps-lock = true;
font-size = 20;
ignore-empty-password = true;
show-failed-attempts = true;
color = mkDefault "#00000000";
# Ring
indicator-radius = 115;
# Swaylock-effects specific settings
clock = true;
timestr = "%r";
grace = 2;
};
};
}

8
home/swaylock/nixos.nix Normal file
View file

@ -0,0 +1,8 @@
{ pkgs
, lib
, config
, ... }: with lib; let
gui = with config.global.gpu; enable && session;
in mkIf gui {
security.pam.services.swaylock = { };
}

View file

@ -5,11 +5,13 @@
description = "Koishi"; description = "Koishi";
admin = true; admin = true;
sshLogin = true; sshLogin = true;
picture = ./picture/koishi.png;
}; };
staging = { staging = {
uid = 1000; uid = 1000;
description = "Staging Environment"; description = "Staging Environment";
picture = ./picture/staging.png;
}; };
root.uid = 0; root.uid = 0;

33
home/util/home.nix Normal file
View file

@ -0,0 +1,33 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.util;
in {
home.packages = with pkgs; [
pv file wget e2fsprogs
] ++ optionals (!cfg.minimal) [
tio mbuffer sedutil
lsscsi zip unzip
nix-index dnsutils whois
pciutils usbutils nvme-cli
] ++ optionals config.passthrough.gui [
gtk-engine-murrine
gnome-themes-extra
mission-planner
inav-configurator
inav-blackbox-tools
(blhelisuite32.override { workdir = "${config.home.homeDirectory}/.blhelisuite32"; })
] ++ optionals (config.passthrough.gui && !config.passthrough.flatpak.enable) [
xfce.thunar gimp
jellyfin-media-player
betaflight-configurator
expresslrs-configurator
];
wayland.windowManager.sway.config.window.commands = mkIf config.passthrough.gui [
{ criteria.class = "BLHeliSuite32xl"; command = "floating enable"; }
{ criteria.app_id = "thunar"; command = "floating enable"; }
];
}

44
home/util/nixos.nix Normal file
View file

@ -0,0 +1,44 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.util;
gui = with config.global.gpu; enable && session;
in {
options.home.util = {
minimal = mkEnableOption "minimal system environment with less packages";
};
config = {
users.homeModules = [
# this module passes util configuration to home-manager
{ passthrough.util = cfg; }
# this module passes flatpak configuration to home-manager
{ passthrough.flatpak = config.global.flatpak; }
];
programs.zsh.enable = true;
environment.shells = singleton pkgs.zsh;
users.home.persist.directories = [ ] ++
optionals (!cfg.minimal) [
".cache/nix-index"
] ++
optionals gui [
# mission-planner
".local/share/Mission Planner"
# inav-configurator
".config/inav-configurator"
] ++
optionals (gui && !config.global.flatpak.enable) [
# jellyfin-media-player
".config/jellyfin.org"
".local/share/jellyfinmediaplayer"
".local/share/Jellyfin Media Player"
# expresslrs-configurator
".config/ExpressLRS Configurator"
# betaflight-configurator
".config/betaflight-configurator"
];
};
}

View file

@ -0,0 +1,58 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
dconf.settings = let
p = "org/virt-manager/virt-manager";
in {
${p} = {
xmleditor-enabled = true;
# swaybar tray doesn't really work
system-tray = false;
};
"${p}/details".show-toolbar = true;
"${p}/console" = {
scaling = 0;
auto-redirect = false;
resize-guest = 1;
};
"${p}/stats" = {
enable-memory-poll = true;
enable-disk-poll = true;
enable-net-poll = true;
};
"${p}/vmlist-fields" = {
host-cpu-usage = true;
memory-usage = true;
disk-usage = true;
network-traffic = true;
};
"${p}/new-vm" = {
firmware = "uefi";
graphics-type = "system";
};
"${p}/confirm" = {
unapplied-dev = true;
removedev = true;
delete-storage = true;
forcepoweroff = false;
};
"${p}/connections" = let
uri = "qemu:///system";
in {
uris = [ uri ];
autoconnect = [ uri ];
};
"${p}/conns/qemu:system".pretty-name = "KVM";
};
# floating other than main window
wayland.windowManager.sway.config.window.commands = [
{ criteria.app_id = "virt-manager"; command = "floating enable"; }
{ criteria.app_id = "virt-manager"; criteria.title = "Virtual Machine Manager"; command = "floating disable"; }
];
}

View file

@ -0,0 +1,8 @@
{ pkgs
, lib
, config
, ... }: with lib; let
gui = with config.global.gpu; enable && session;
in mkIf gui {
programs.virt-manager.enable = true;
}

24
home/vscode/home.nix Normal file
View file

@ -0,0 +1,24 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.passthrough.vscode;
theme = config.passthrough.catppuccin.enable;
in mkIf cfg.enable {
programs.vscode = {
enable = true;
mutableExtensionsDir = false;
enableUpdateCheck = false;
enableExtensionUpdateCheck = false;
package = pkgs.vscodium;
extensions = with pkgs.vscode-extensions; [
catppuccin.catppuccin-vsc catppuccin.catppuccin-vsc-icons
bbenoist.nix golang.go rust-lang.rust-analyzer
];
userSettings = {
"workbench.colorTheme" = mkIf theme "Catppuccin Mocha";
"workbench.iconTheme" = mkIf theme "catppuccin-mocha";
"[nix]"."editor.tabSize" = 2;
};
};
}

19
home/vscode/nixos.nix Normal file
View file

@ -0,0 +1,19 @@
{ pkgs
, lib
, config
, ... }: with lib; let
cfg = config.home.vscode;
in {
options.home.vscode = {
enable = mkEnableOption "vscode text editor";
};
config = {
users.homeModules = [
# this module passes vscode configuration to home-manager
{ passthrough.vscode = cfg; }
];
users.home.persist.directories = mkIf cfg.enable [ ".config/VSCodium" ];
};
}

12
home/wofi/home.nix Normal file
View file

@ -0,0 +1,12 @@
{ pkgs
, lib
, config
, ... }: with lib; mkIf config.passthrough.gui {
programs.wofi = {
enable = true;
settings.mode = "drun";
settings.allow_images = true;
};
wayland.windowManager.sway.config.menu = "wofi -show drun -modi drun";
}

View file

@ -0,0 +1,92 @@
{ lib
, libicns
, p7zip
, fetchzip
, stdenvNoCC
, makeDesktopItem
, buildFHSUserEnv
, workdir ? "/tmp/blhelisuite32" }: let
name = "BLHeliSuite32";
pname = "blhelisuite32";
version = "32.10";
suffix = "1044";
dist = fetchzip {
name = "${pname}-dist";
url = "https://github.com/bitdump/BLHeli/releases/download/Rev${version}/${name}xLinux64_${suffix}.zip";
hash = "sha256-y4S824s9Ipxb1M1IeD6Lo6k7hmm8CEmPflvhaqZz+84=";
};
desktopItem = makeDesktopItem {
name = pname;
exec = pname;
icon = pname;
comment = "This Application may flash and configure BLHeli_32 based ESCs";
desktopName = name;
genericName = "BLHeli for brushless ESC firmware";
};
icons = stdenvNoCC.mkDerivation {
pname = "${pname}-icons";
inherit version;
src = fetchzip {
name = "${pname}-macos";
url = "https://github.com/bitdump/BLHeli/releases/download/Rev${version}/${name}xm_MacOS64_${suffix}.zip";
hash = "sha256-StRnrVI8p51vNsTMO1LtaZvENbG7XZ1V/mKHe4pO7kU=";
};
nativeBuildInputs = [ libicns p7zip ];
configurePhase = ''
7z x *.dmg
'';
buildPhase = ''
icns2png -x ${name}xm_MacOS64_${suffix}/${name}xm.app/Contents/Resources/${name}xm.icns
'';
installPhase = ''
mkdir -p "$out"
cp -r ${name}*.png "$out"
'';
};
linked = stdenvNoCC.mkDerivation {
inherit pname version;
phases = [ "unpackPhase" "patchPhase" "installPhase" ];
src = dist;
installPhase = ''
cp -r . "$out"
# BLHeliSuite32 tries to write next to its binary
ln -s ${workdir}/settings $out/Settings
ln -s ${workdir}/music $out/Music
'';
};
in buildFHSUserEnv {
inherit pname version;
targetPkgs = pkgs: (with pkgs; [
glib libGL curl
libgcc gtk3
zlib systemdLibs
]);
extraInstallCommands = let
mkIconScale = scale:
"install -m 444 -D ${icons}/${name}xm_${scale}x${scale}x32.png $out/share/icons/hicolor/${scale}x${scale}/apps/${pname}.png";
in ''
${mkIconScale "16"}
${mkIconScale "32"}
${mkIconScale "64"}
${mkIconScale "128"}
${mkIconScale "256"}
${mkIconScale "512"}
${mkIconScale "1024"}
cp -r ${desktopItem}/share/applications $out/share/
'';
runScript = "sh -c '" +
"mkdir -p ${workdir}/settings && " +
"mkdir -p ${workdir}/music && " +
"exec ${linked}/${name}xl'";
}

Some files were not shown because too many files have changed in this diff Show more