Nix-Vibe public snapshot (squashed history)
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
# Carla — audio plugin host / JACK & PipeWire patchbay
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.carla
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
opencode
|
||||
opencode-desktop
|
||||
];
|
||||
}
|
||||
@@ -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"
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
services.flatpak.packages = [
|
||||
"io.github.Soundux"
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user