kore / nixos / roles / workstation.nix130 lines · 3301B · raw
1{ inputs, outputs, config, pkgs, lib, ... }:
2
3let
4 roleName = "workstation";
5 roleEnabled = lib.elem roleName config.kore.currentHost.roles;
6in {
7 imports = [ inputs.home-manager.nixosModules.home-manager ];
8
9 config = lib.mkMerge [{} (lib.mkIf roleEnabled {
10 home-manager = {
11 useGlobalPkgs = true;
12 useUserPackages = true;
13 extraSpecialArgs = { inherit inputs outputs; };
14
15 users.lostduk = outputs.homeConfigurations.${config.networking.hostName};
16 };
17
18 environment.etc."fuse.conf".text = ''
19 user_allow_other
20 mount_max = 1000
21 '';
22
23 xdg.portal = {
24 enable = true;
25 extraPortals = [ pkgs.xdg-desktop-portal-wlr ];
26 configPackages = [ pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-wlr ];
27
28 wlr.enable = true;
29
30 config.common = {
31 default = [ "wlr" ];
32 };
33 };
34
35 system.activationScripts.persistent-dirs.text =
36 let
37 mkHomePersist = user: lib.optionalString user.createHome ''
38 mkdir -p /persist/${user.home}
39 chown ${user.name}:${user.group} /persist/${user.home}
40 chmod ${user.homeMode} /persist/${user.home}
41 '';
42 users = lib.attrValues config.users.users;
43 in lib.concatLines (map mkHomePersist users);
44
45 fonts = {
46 enableDefaultPackages = false;
47
48 packages = with pkgs; [
49 noto-fonts
50 noto-fonts-cjk-sans
51 noto-fonts-cjk-serif
52 noto-fonts-color-emoji
53
54 #(nerdfonts.override { fonts = [ "ComicShannsMono" ]; })
55 nerd-fonts.comic-shanns-mono
56 ];
57
58 fontconfig = {
59 hinting.autohint = true;
60
61 defaultFonts = {
62 serif = [ "Noto Serif" "Noto Color Emoji" ];
63 sansSerif = [ "Noto Sans" "Noto Color Emoji" ];
64 monospace = [ "ComicShannsMono Nerd Font" "Noto Color Emoji" ];
65 emoji = [ "Noto Color Emoji" ];
66 };
67 };
68 };
69
70 services = {
71 udisks2.enable = true;
72
73 pipewire = {
74 enable = true;
75
76 alsa.enable = true;
77 alsa.support32Bit = true;
78
79 pulse.enable = true;
80 jack.enable = true;
81
82 wireplumber = {
83 enable = true;
84
85 # https://github.com/NixOS/nixpkgs/pull/292115
86 extraConfig."alsa-lowlatency" = {
87 "monitor.alsa.rules" = [{
88 matches = [{ "node.name" = "~alsa_output.*"; }];
89
90 actions.update-props = {
91 "audio.format" = "S32LE";
92 "audio.rate" = "96000";
93 "api.alsa.period-size" = 2;
94 };
95 }];
96 };
97 };
98
99 extraConfig.pipewire."92-low-latency" = {
100 context = {
101 properties.default.clock = {
102 rate = 48000;
103 quantum = 64;
104 };
105
106 modules = [{
107 name = "libpipewire-module-protocol-pulse";
108
109 args.pulse = {
110 min = {
111 req = "64/48000";
112 quantum = "64/48000";
113 frag = "64/48000";
114 };
115
116 default.req = "64/48000";
117 };
118 }];
119 };
120
121 stream.properties = {
122 node.latency = "64/48000";
123 resample.quality = 1;
124 };
125 };
126 };
127 };
128 })];
129}
130