greenhouse

kore

my public infrastructure monorepo

git clone [email protected]:kore.git

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