Nix-Vibe public snapshot (squashed history)

This commit is contained in:
2026-09-19 13:54:34 +01:00
commit cff83a473b
118 changed files with 18716 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
{ pkgs, ... }:
# Carla — audio plugin host / JACK & PipeWire patchbay
{
environment.systemPackages = [
pkgs.carla
];
}
+12
View File
@@ -0,0 +1,12 @@
{ pkgs, ... }:
# DVD authoring and burning tools for mcf-stream
{
environment.systemPackages = with pkgs; [
brasero # GNOME disc burning (data & video DVD)
dvdstyler # DVD authoring with menus
dvdauthor # CLI tooling for authoring DVD video
libdvdcss # Play/rip encrypted DVDs
gnome-multi-writer # USB/optical image writer
];
}
+42
View File
@@ -0,0 +1,42 @@
{ config, pkgs, ... }:
let
freeshowAppImage = pkgs.stdenv.mkDerivation {
pname = "freeshow-appimage";
version = "1.5.6";
src = pkgs.fetchurl {
url = "https://github.com/ChurchApps/FreeShow/releases/download/v1.5.6/FreeShow-1.5.6-x86_64.AppImage";
sha256 = "10z1xgqzwfbs4api12myyx368yp8ahzbmjpfmwnh8c340f8b22f4";
};
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
ln -s ${pkgs.appimage-run}/bin/appimage-run $out/bin/freeshow
mkdir -p $out/share/applications
cat > $out/share/applications/freeshow.desktop << EOF
[Desktop Entry]
Name=FreeShow
Exec=${pkgs.appimage-run}/bin/appimage-run $src
Icon=freeshow
Type=Application
Categories=Multimedia;
EOF
'';
meta = with pkgs.lib; {
description = "FreeShow AppImage wrapper";
homepage = "https://github.com/ChurchApps/FreeShow";
license = licenses.gpl3Only; # Assuming GPLv3 based on GitHub repo
platforms = platforms.linux;
};
};
in
{
environment.systemPackages = [
freeshowAppImage
];
}
+66
View File
@@ -0,0 +1,66 @@
{ pkgs, ... }:
let
mixingStation = pkgs.stdenv.mkDerivation rec {
pname = "mixing-station";
version = "3.1.4";
src = pkgs.fetchurl {
url = "https://mixingstation.app/backend/api/web/download/update/mixing-station-pc/release";
sha256 = "sha256-8d+rGfcOMz8ZoaTy4wd9SEExyc/IaUDysf1WC8xyTC0=";
};
nativeBuildInputs = [
pkgs.unzip
pkgs.makeWrapper
];
buildInputs = with pkgs; [
libGL
libx11
libxext
libxcursor
libxrandr
libxxf86vm
libxi
libpulseaudio
];
unpackPhase = ''
unzip $src
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/share/mixing-station
cp -r * $out/share/mixing-station/
makeWrapper ${pkgs.openjdk21}/bin/java $out/bin/mixing-station \
--add-flags "-jar $out/share/mixing-station/mixing-station-desktop.jar" \
--prefix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath buildInputs}
mkdir -p $out/share/applications
cat > $out/share/applications/mixing-station.desktop << EOF
[Desktop Entry]
Name=Mixing Station
Exec=$out/bin/mixing-station
Icon=audio-mixer
Type=Application
Categories=AudioVideo;Audio;
Comment=Remote control for digital mixers
EOF
'';
meta = with pkgs.lib; {
description = "Remote control for digital mixers";
homepage = "https://mixingstation.app/";
license = licenses.unfree;
platforms = platforms.linux;
};
};
in
{
environment.systemPackages = [
mixingStation
];
}
+20
View File
@@ -0,0 +1,20 @@
{ pkgs, ... }:
# OBS Studio for live streaming/recording on mcf-stream
{
environment.systemPackages = [
(
(pkgs.wrapOBS.override {
# Enable NVIDIA NVENC GPU encoding
obs-studio = pkgs.obs-studio.override { cudaSupport = true; };
})
{
plugins = with pkgs.obs-studio-plugins; [
distroav
obs-backgroundremoval
obs-teleport
];
}
)
];
}
+8
View File
@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
opencode
opencode-desktop
];
}
+42
View File
@@ -0,0 +1,42 @@
{ pkgs, ... }:
{
# Install OpenLP from official flatpak bundle
# Update the version in the URL when new releases are available
systemd.services.openlp-flatpak-install = {
description = "Install OpenLP from official flatpak bundle";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = pkgs.writeShellScript "install-openlp" ''
set -e
OPENLP_VERSION="3.1.7"
OPENLP_URL="https://get.openlp.org/$OPENLP_VERSION/openlp-$OPENLP_VERSION-1.flatpak"
OPENLP_ID="org.openlp.OpenLP"
# Check if already installed
if ${pkgs.flatpak}/bin/flatpak list --app | grep -q "$OPENLP_ID"; then
echo "OpenLP is already installed"
exit 0
fi
# Download and install the bundle
echo "Downloading OpenLP $OPENLP_VERSION..."
TEMP_FILE=$(${pkgs.coreutils}/bin/mktemp)
${pkgs.curl}/bin/curl -L -o "$TEMP_FILE" "$OPENLP_URL"
echo "Installing OpenLP from bundle..."
${pkgs.flatpak}/bin/flatpak install --system --bundle --noninteractive -y "$TEMP_FILE"
# Cleanup
${pkgs.coreutils}/bin/rm -f "$TEMP_FILE"
echo "OpenLP installed successfully"
'';
};
};
}
+5
View File
@@ -0,0 +1,5 @@
{
services.flatpak.packages = [
"io.github.Soundux"
];
}
+22
View File
@@ -0,0 +1,22 @@
{ pkgs, ... }:
let
x32editDesktop = pkgs.makeDesktopItem {
name = "X32-Edit";
desktopName = "X32-Edit";
genericName = "Digital Mixer Editor";
exec = "x32-edit";
icon = "audio-mixer"; # Using a generic audio mixer icon as a fallback
categories = [
"AudioVideo"
"Audio"
];
comment = "Editor for the Behringer X32 digital mixer";
};
in
{
environment.systemPackages = [
pkgs.x32edit
x32editDesktop
];
}
+14
View File
@@ -0,0 +1,14 @@
{ config, pkgs, ... }:
{
services.xserver.enable = true;
services.displayManager.gdm.enable = true;
services.desktopManager.gnome.enable = true;
# Enable XDG Desktop Portal for Flatpak integration
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
# Enable dconf system service
programs.dconf.enable = true;
}
+138
View File
@@ -0,0 +1,138 @@
{
pkgs,
...
}:
let
onlyoffice-with-fonts = pkgs.buildFHSEnv {
name = "onlyoffice-desktopeditors";
targetPkgs =
pkgs': with pkgs'; [
onlyoffice-desktopeditors
corefonts
vista-fonts
fira-code
fira-code-symbols
nerd-fonts.fira-code
dejavu_fonts
liberation_ttf
];
runScript = "onlyoffice-desktopeditors";
extraInstallCommands = ''
mkdir -p $out/share/applications
cp -r ${pkgs.onlyoffice-desktopeditors}/share/icons $out/share/
cp -r ${pkgs.onlyoffice-desktopeditors}/share/applications/* $out/share/applications/
substituteInPlace $out/share/applications/onlyoffice-desktopeditors.desktop \
--replace-fail "${pkgs.onlyoffice-desktopeditors}/bin/onlyoffice-desktopeditors" "$out/bin/onlyoffice-desktopeditors"
'';
};
in
{
networking.networkmanager.enable = true;
hardware.bluetooth.enable = true;
# Allow the desktop user to pair/connect devices through bluez without root
# (bluetoothctl's device flows surface the org.bluez.agent polkit action).
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (action.id === "org.bluez.agent" && subject.user === "petere")
return polkit.Result.YES;
});
'';
# GNOME Keyring: credential store for desktop apps (Nextcloud OAuth tokens,
# Element session keys, etc.). The PAM module auto-unlocks the keyring at
# login so apps get seamless access to stored secrets across reboots.
services.gnome.gnome-keyring.enable = true;
services.flatpak = {
enable = true;
packages = [
"it.mijorus.gearlever"
"com.github.tchx84.Flatseal"
];
# Pin Flathub remote explicitly with GPG verification.
remotes = [
{
name = "flathub";
location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
}
];
};
# Weekly Flatpak garbage collection: remove unused runtimes and orphaned refs.
systemd.services.flatpak-gc = {
description = "Flatpak garbage collection (remove unused runtimes)";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.flatpak}/bin/flatpak uninstall --unused -y";
};
};
systemd.timers.flatpak-gc = {
description = "Run Flatpak garbage collection weekly";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "weekly";
Persistent = true;
};
};
# Enable CUPS to print documents.
services.printing.enable = true;
# Enable Avahi for network printer discovery.
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
publish = {
enable = true;
addresses = true;
userServices = true;
};
};
# avahi requires /run/avahi-daemon to be owned by the avahi user, and
# restarts during `nixos-rebuild switch` leave a stale pid file that makes
# the next start fail ("Failed to create PID file: File exists"). Without
# both fixes avahi-daemon fails on every rebuild, which also breaks
# `nixos-rebuild switch` (switch-to-configuration exits non-zero).
systemd.services.avahi-daemon.preStart = "rm -f /run/avahi-daemon/pid";
systemd.tmpfiles.rules = [
"d /run/avahi-daemon 0755 avahi avahi -"
];
services.printing.drivers = [
pkgs.brlaser
pkgs.brgenml1lpr
pkgs.brgenml1cupswrapper
];
hardware.printers.ensurePrinters = [
{
name = "Brother_MFC_L2710DW";
deviceUri = "implicitclass://Brother_MFC_L2710DW_series/";
model = "drv:///brlaser.drv/brl2710w.ppd"; # Let CUPS determine the PPD from installed drivers
}
];
programs.firefox.enable = true;
environment.systemPackages = with pkgs; [
vim
git
wget
appimage-run
bitwarden-desktop
chromium
vlc
python3Packages.python-vlc
stable.element-desktop
pkgs.kdePackages.kdenlive
thunderbird
nextcloud-client
nautilus-python
onlyoffice-with-fonts
];
}
+107
View File
@@ -0,0 +1,107 @@
{ config, pkgs, ... }:
# Hyprland Wayland compositor + QuickShell desktop shell.
# This is the Hyprland counterpart to modules/desktop/gnome.nix — import this
# INSTEAD of gnome.nix when a host should run Hyprland + QuickShell.
{
# Hyprland compositor with XWayland (for legacy apps)
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
# hyprlock PAM service — required for password authentication to work.
programs.hyprlock.enable = true;
# Minimal display manager: greetd + tuigreet (TTY greeter).
# The greetd NixOS module creates the "greeter" system user/group for us.
services.greetd = {
enable = true;
useTextGreeter = true;
settings = {
default_session = {
# Launch via start-hyprland (not the raw Hyprland binary) so the session
# env (XDG_CURRENT_DESKTOP, portals, etc.) is set up and the
# "started without start-hyprland" watchdog warning is avoided.
command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd start-hyprland";
user = "greeter";
};
};
};
# Enable XDG Desktop Portal (Flatpak/file pickers/screen sharing) via Hyprland
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-hyprland ];
# Explicit portal backend config (xdg-desktop-portal >= 1.17 behavior).
config.common.default = "hyprland";
};
# dconf is required by many GTK apps regardless of desktop environment
programs.dconf.enable = true;
# NixOS grants all NetworkManager polkit actions to members of the
# "networkmanager" group. Membership is required here because greetd starts
# the graphical session inside the greetd.service cgroup instead of an
# *active* logind session scope, so NetworkManager's default
# allow_active-only policy would reject connection changes from the
# QuickShell wifi menu / nmcli with "insufficient privileges".
users.groups.networkmanager.members = [ "petere" ];
# Audio via PipeWire (GNOME pulls this in automatically; Hyprland does not)
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
wireplumber.enable = true;
};
security.rtkit.enable = true;
# UPower daemon — the QuickShell bar reads battery state through
# Quickshell.Services.UPower.
services.upower.enable = true;
# Power profiles (power-saver / balanced / performance) over DBus — exposed
# in the QuickShell quick-settings panel via PowerProfiles.profile.
services.power-profiles-daemon.enable = true;
# Explicit lid policy: closing the lid always locks then suspends — on
# battery AND on external power. hypridle's `before_sleep_cmd =
# loginctl lock-session` fires before logind sleeps (lock_cmd -> hyprlock),
# so reopening the lid resumes to a locked screen. Docked stays on logind's
# default "ignore" so external displays keep working with the lid shut.
services.logind.settings.Login = {
HandleLidSwitch = "suspend";
HandleLidSwitchExternalPower = "suspend";
};
# Core Wayland / Hyprland ecosystem + QuickShell shell
environment.systemPackages = with pkgs; [
quickshell
hyprlock
hypridle
hyprpaper
hyprpicker
wlogout
wayland-utils
wl-clipboard
grim
slurp
grimblast
wofi
# Screen backlight control (QuickShell quick-settings brightness slider)
brightnessctl
# Media keys: volume (PipeWire via Pulse compat), MPRIS playback control
pamixer
playerctl
# notify-send for QuickShell battery-low toasts (native NotificationServer)
libnotify
# Blue-light filter toggled from Hyprland (SUPER+SHIFT+N)
hyprsunset
# File manager (lightweight GTK; gvfs adds trash/mount support)
thunar
gvfs
];
}