Nix configurations for my homelab
1{
2 lib,
3 pkgs,
4 roc-lang,
5 yemou-scripts,
6 ...
7}:
8{
9 nixpkgs.overlays = [
10 yemou-scripts.overlays.default
11 (final: prev: {
12 nautilus = prev.nautilus.overrideAttrs (
13 finalAttrs: prevAttrs: {
14 postInstall = (prevAttrs.postInstall or "") + ''
15 mkdir -p $out/share/xdg-desktop-portal/portals
16 cat > $out/share/xdg-desktop-portal/portals/nautilus.portal <<EOF
17 [portal]
18 DBusName=org.gnome.Nautilus
19 Interfaces=org.freedesktop.impl.portal.FileChooser
20 EOF
21 '';
22 }
23 );
24 roc = roc-lang.packages.${prev.system}.default;
25 roc-lang-server = roc-lang.packages.${prev.system}.lang-server;
26 xdg-desktop-portal-wlr = prev.xdg-desktop-portal-wlr.overrideAttrs (
27 finalAttrs: prevAttrs: {
28 version = "0.7.1";
29
30 src = prev.fetchFromGitHub {
31 owner = "emersion";
32 repo = "xdg-desktop-portal-wlr";
33 rev = "v${finalAttrs.version}";
34 sha256 = "sha256-GIIDeZMIGUiZV0IUhcclRVThE5LKaqVc5VwnNT8beNU=";
35 };
36 }
37 );
38 })
39 ];
40
41 # TODO: Create wrapper scripts to better manage the graphical-session-pre and graphical-session systemd targets
42 # TODO: Make river execute the init.roc file I have instead of just init
43 # TODO: switch to river when 0.4.0 releases
44 programs.river-classic = {
45 enable = true;
46 package = pkgs.river-classic.overrideAttrs (
47 final: prev: {
48 postInstall = ''
49 echo 'DesktopNames=river;wlroots' >> contrib/river.desktop
50 ${prev.postInstall}
51 '';
52 }
53 );
54 # TODO: Move organize these some how
55 extraPackages = with pkgs; [
56 bemenu
57 chayang
58 ffmpegthumbnailer
59 kanshi
60 lswt
61 mako
62 nautilus
63 roc
64 roc-lang-server
65 scr
66 slurp
67 swaybg
68 swayidle
69 swaylock
70 wlopm
71 wlsunset
72 xrandr # Needed to set xwayland primary output
73 ];
74 };
75
76 # TODO: make a script that will start river using these targets properly
77 # Will need a Desktop Entry, the script will first call call `river-session-pre` and then once river is started,
78 # `river-session` will be called from inside river. When river terminates, both `river-session` and
79 # `river-session-pre` will be un called
80 systemd.user.targets = {
81 "river-session-pre" = {
82 description = "River compositor session";
83 bindsTo = [ "graphical-session-pre.target" ];
84 };
85 "river-session" = {
86 description = "River compositor session";
87 bindsTo = [ "graphical-session.target" ];
88 wants = [ "graphical-session-pre.target" ];
89 after = [ "graphical-session-pre.target" ];
90 };
91 };
92
93 xdg.portal = {
94 wlr = {
95 enable = true;
96 settings.screencast.max_fps = 60;
97 };
98 extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
99 config.river = {
100 default = lib.mkForce "gtk";
101 "org.freedesktop.impl.portal.FileChooser" = "nautilus";
102 "org.freedesktop.impl.portal.Inhibit" = "none";
103 "org.freedesktop.impl.portal.ScreenCast" = "wlr";
104 "org.freedesktop.impl.portal.Screenshot" = "wlr";
105 };
106 };
107}