greenhouse

kore

my public infrastructure monorepo

git clone [email protected]:kore.git

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