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.stdenv.hostPlatform.system}.default;
25 roc-lang-server = roc-lang.packages.${prev.stdenv.hostPlatform.system}.lang-server;
26 xdg-desktop-portal-wlr = prev.xdg-desktop-portal-wlr.overrideAttrs (
27 finalAttrs: prevAttrs: {
28 version = "896cee82a6f14ee996fb870c0fc5e27533e37907";
29
30 src = prev.fetchFromGitHub {
31 owner = "emersion";
32 repo = "xdg-desktop-portal-wlr";
33 rev = "${finalAttrs.version}";
34 sha256 = "sha256-uQYXGiMmrMHCygh5IHt90NSZLPbY7uVMyDx8zUTHXaM=";
35 };
36
37 patches = (prevAttrs.patches or [ ]) ++ [ ../patches/${prevAttrs.pname}/pw-graph-driver.patch ];
38 }
39 );
40 })
41 ];
42
43 # TODO: Create wrapper scripts to better manage the graphical-session-pre and graphical-session systemd targets
44 # TODO: Make river execute the init.roc file I have instead of just init
45 # TODO: switch to river when 0.4.0 releases
46 programs.river-classic = {
47 enable = true;
48 package = pkgs.river-classic.overrideAttrs (
49 final: prev: {
50 postInstall = ''
51 substituteInPlace contrib/river.desktop --replace-fail "Exec=river" "Exec=env WLR_RENDERER=vulkan river"
52 echo 'DesktopNames=river;wlroots' >> contrib/river.desktop
53 ${prev.postInstall}
54 '';
55 }
56 );
57 # TODO: Move organize these some how
58 extraPackages = with pkgs; [
59 bemenu
60 chayang
61 ffmpegthumbnailer
62 kanshi
63 lswt
64 mako
65 nautilus
66 # roc
67 # roc-lang-server
68 scr
69 slurp
70 swaybg
71 swayidle
72 swaylock
73 wlopm
74 wlsunset
75 xrandr # Needed to set xwayland primary output
76 ];
77 };
78
79 # TODO: make a script that will start river using these targets properly
80 # Will need a Desktop Entry, the script will first call call `river-session-pre` and then once river is started,
81 # `river-session` will be called from inside river. When river terminates, both `river-session` and
82 # `river-session-pre` will be un called
83 systemd.user.targets = {
84 "river-session-pre" = {
85 description = "River compositor session";
86 bindsTo = [ "graphical-session-pre.target" ];
87 };
88 "river-session" = {
89 description = "River compositor session";
90 bindsTo = [ "graphical-session.target" ];
91 wants = [ "graphical-session-pre.target" ];
92 after = [ "graphical-session-pre.target" ];
93 };
94 };
95
96 xdg.portal = {
97 wlr.enable = true;
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.ScreenCast" = [ "wlr" ];
103 "org.freedesktop.impl.portal.Screenshot" = [ "wlr" ];
104 };
105 };
106}