greenhouse

kore

my public infrastructure monorepo

git clone [email protected]:kore.git

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