Nix configurations for my homelab
at main 3.2 kB view raw
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}