kore / nixos / roles / workstation.nix129 lines · 3282B · 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-cjk-sans
50 noto-fonts-cjk-serif
51 noto-fonts-color-emoji
52
53 #(nerdfonts.override { fonts = [ "ComicShannsMono" ]; })
54 nerd-fonts.comic-shanns-mono
55 ];
56
57 fontconfig = {
58 hinting.autohint = true;
59
60 defaultFonts = {
61 serif = [ "Noto Serif" "Noto Color Emoji" ];
62 sansSerif = [ "Noto Sans" "Noto Color Emoji" ];
63 monospace = [ "ComicShannsMono Nerd Font" "Noto Color Emoji" ];
64 emoji = [ "Noto Color Emoji" ];
65 };
66 };
67 };
68
69 services = {
70 udisks2.enable = true;
71
72 pipewire = {
73 enable = true;
74
75 alsa.enable = true;
76 alsa.support32Bit = true;
77
78 pulse.enable = true;
79 jack.enable = true;
80
81 wireplumber = {
82 enable = true;
83
84 # https://github.com/NixOS/nixpkgs/pull/292115
85 extraConfig."alsa-lowlatency" = {
86 "monitor.alsa.rules" = [{
87 matches = [{ "node.name" = "~alsa_output.*"; }];
88
89 actions.update-props = {
90 "audio.format" = "S32LE";
91 "audio.rate" = "96000";
92 "api.alsa.period-size" = 2;
93 };
94 }];
95 };
96 };
97
98 extraConfig.pipewire."92-low-latency" = {
99 context = {
100 properties.default.clock = {
101 rate = 48000;
102 quantum = 64;
103 };
104
105 modules = [{
106 name = "libpipewire-module-protocol-pulse";
107
108 args.pulse = {
109 min = {
110 req = "64/48000";
111 quantum = "64/48000";
112 frag = "64/48000";
113 };
114
115 default.req = "64/48000";
116 };
117 }];
118 };
119
120 stream.properties = {
121 node.latency = "64/48000";
122 resample.quality = 1;
123 };
124 };
125 };
126 };
127 })];
128}
129