mirror of
https://github.com/Death916/nixconfig.git
synced 2026-04-10 02:54:39 -07:00
desktop setup and piefed mayb
This commit is contained in:
parent
eb713377ed
commit
cd5e51a080
8 changed files with 664 additions and 2 deletions
122
modules/nixos/desktop/desktop.nix
Normal file
122
modules/nixos/desktop/desktop.nix
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
# ~/nixconfig/modules.new/nixos/laptop/desktop.nix
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
unstablePkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
|
||||
hardware.rtl-sdr.enable = true;
|
||||
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||
};
|
||||
services.xserver.enable = true;
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
services.dbus.enable = true; # for nextcloud client
|
||||
# Enable the GNOME Desktop Environment.
|
||||
services.displayManager.gdm.enable = true;
|
||||
services.desktopManager.gnome.enable = true;
|
||||
#cosmic instead
|
||||
services.desktopManager.cosmic.enable = true;
|
||||
# services.displayManager.cosmic-greeter.enable = true;
|
||||
services.desktopManager.cosmic.xwayland.enable = true;
|
||||
services.system76-scheduler.enable = true;
|
||||
|
||||
# This is to fix clementine gui not showing up on wayland
|
||||
environment.variables.QT_QPA_PLATFORM = "wayland";
|
||||
services.udisks2.enable = true;
|
||||
# environment.sessionVariables.NIXOS_OZONE_WL = "1"; # Required for some Electron apps
|
||||
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
xwayland.enable = true;
|
||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||
portalPackage =
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
coreutils
|
||||
git
|
||||
vim
|
||||
wget
|
||||
unstablePkgs.tailscale
|
||||
unstablePkgs.cosmic-session
|
||||
# halloy
|
||||
inputs.flox.packages.${pkgs.stdenv.hostPlatform.system}.flox
|
||||
wl-clipboard
|
||||
clementine
|
||||
systemctl-tui
|
||||
btrfs-progs
|
||||
unstablePkgs.btrfs-assistant
|
||||
rust-analyzer
|
||||
snapper
|
||||
inetutils
|
||||
# rustdesk
|
||||
sdrpp
|
||||
gqrx
|
||||
# unstablePkgs.sdrangel
|
||||
restic
|
||||
docker-compose # Added for Winboat
|
||||
cifs-utils
|
||||
nil
|
||||
nixfmt
|
||||
nixd
|
||||
];
|
||||
|
||||
services.snapper.configs.nix = {
|
||||
SUBVOLUME = "/nix";
|
||||
allowUsers = [ "death916" ];
|
||||
|
||||
CLEANUP_EMPTY = true;
|
||||
CLEANUP_NUMBER = true;
|
||||
CLEANUP_TIMELINE = true;
|
||||
TIMELINE_CREATE = true;
|
||||
TIMELINE_LIMIT_HOURLY = 5;
|
||||
TIMELINE_LIMIT_DAILY = 7;
|
||||
TIMELINE_LIMIT_WEEKLY = 0;
|
||||
TIMELINE_LIMIT_MONTHLY = 0;
|
||||
TIMELINE_LIMIT_YEARLY = 0;
|
||||
};
|
||||
|
||||
services.snapper.configs.home = {
|
||||
SUBVOLUME = "/home";
|
||||
allowUsers = [ "death916" ];
|
||||
|
||||
CLEANUP_EMPTY = true;
|
||||
CLEANUP_NUMBER = true;
|
||||
CLEANUP_TIMELINE = true;
|
||||
TIMELINE_CREATE = true;
|
||||
TIMELINE_LIMIT_HOURLY = 5;
|
||||
TIMELINE_LIMIT_DAILY = 7;
|
||||
TIMELINE_LIMIT_WEEKLY = 0;
|
||||
TIMELINE_LIMIT_MONTHLY = 0;
|
||||
TIMELINE_LIMIT_YEARLY = 0;
|
||||
};
|
||||
|
||||
virtualisation.docker.enable = true;
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.bluetooth.powerOnBoot = true;
|
||||
services.blueman.enable = true;
|
||||
hardware.bluetooth.settings = {
|
||||
General = {
|
||||
Experimental = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.nh = {
|
||||
enable = true;
|
||||
clean.enable = true;
|
||||
clean.extraArgs = "--keep-since 7d --keep 10";
|
||||
flake = "/home/death916/Documents/nix-config/";
|
||||
};
|
||||
services.fprintd.enable = false;
|
||||
programs.direnv.enable = true;
|
||||
programs.nix-ld.enable = true;
|
||||
programs.fish.enable = true;
|
||||
}
|
||||
51
modules/nixos/desktop/gaming.nix
Normal file
51
modules/nixos/desktop/gaming.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
unstablePkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# NVIDIA & Audio
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
hardware.graphics.enable = true;
|
||||
hardware.graphics.enable32Bit = true;
|
||||
hardware.nvidia = {
|
||||
modesetting.enable = true;
|
||||
powerManagement.enable = false;
|
||||
open = false;
|
||||
nvidiaSettings = true;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
services.nvidia.persistence.enable = true; # Prevents stuttering
|
||||
|
||||
services.pipewire.enable = true;
|
||||
security.rtkit.enable = true;
|
||||
|
||||
# Gaming & BTRFS Packages
|
||||
programs.steam.enable = true;
|
||||
programs.gamemode.enable = true;
|
||||
environment.systemPackages = with pkgs; [
|
||||
steam
|
||||
lutris
|
||||
gamemode
|
||||
prismlauncher
|
||||
vlc
|
||||
discord
|
||||
btrfs-progs
|
||||
unstablePkgs.btrfs-assistant
|
||||
snapper
|
||||
# (proton-ge-custom.override { version = "GE-Proton9-6"; })
|
||||
];
|
||||
|
||||
# Snapper Setup
|
||||
services.snapper.configs.home = {
|
||||
SUBVOLUME = "/home";
|
||||
allowUsers = [ "death916" ];
|
||||
TIMELINE_CREATE = true;
|
||||
};
|
||||
services.snapper.configs.nix = {
|
||||
SUBVOLUME = "/nix";
|
||||
allowUsers = [ "death916" ];
|
||||
TIMELINE_CREATE = true;
|
||||
};
|
||||
}
|
||||
141
modules/nixos/piefed/default.nix
Normal file
141
modules/nixos/piefed/default.nix
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.piefed;
|
||||
|
||||
# local callPackage pattern from c2cscrape
|
||||
piefedPkg = pkgs.python3Packages.callPackage ../../pkgs/piefed/default.nix {
|
||||
tesseract = pkgs.tesseract;
|
||||
# Custom python packages need to be passed if not automatically resolved
|
||||
};
|
||||
|
||||
# Helper to run piefed commands
|
||||
piefedManage = pkgs.writeShellScriptBin "piefed-manage" ''
|
||||
export FLASK_APP=pyfedi.py
|
||||
export PYTHONPATH=${piefedPkg}/opt/piefed
|
||||
export EnvironmentFile=${cfg.environmentFile}
|
||||
cd ${piefedPkg}/opt/piefed
|
||||
# Use environment variables from cfg.environmentFile if possible,
|
||||
# but for simple CLI we might need to source it or use 'env'
|
||||
exec ${pkgs.python3}/bin/python3 -m flask "$@"
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.services.piefed = {
|
||||
enable = mkEnableOption "PieFed";
|
||||
domain = mkOption {
|
||||
type = types.str;
|
||||
description = "The domain name for the instance";
|
||||
};
|
||||
environmentFile = mkOption {
|
||||
type = types.path;
|
||||
description = "Path to the .env file containing secrets";
|
||||
};
|
||||
dataDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/piefed";
|
||||
description = "Directory to store media, uploads, and logs";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [ "piefed" ];
|
||||
ensureUsers = [{
|
||||
name = "piefed";
|
||||
ensureDBOwnership = true;
|
||||
}];
|
||||
};
|
||||
|
||||
services.redis.servers.piefed = {
|
||||
enable = true;
|
||||
port = 6379;
|
||||
};
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d ${cfg.dataDir} 0750 piefed piefed -"
|
||||
"d ${cfg.dataDir}/media 0750 piefed piefed -"
|
||||
"d ${cfg.dataDir}/logs 0750 piefed piefed -"
|
||||
"d ${cfg.dataDir}/tmp 0750 piefed piefed -"
|
||||
];
|
||||
|
||||
users.users.piefed = {
|
||||
isSystemUser = true;
|
||||
group = "piefed";
|
||||
home = cfg.dataDir;
|
||||
};
|
||||
users.groups.piefed = { };
|
||||
|
||||
systemd.services.piefed-web = {
|
||||
description = "PieFed Web Service";
|
||||
after = [ "network.target" "postgresql.service" "redis-piefed.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
FLASK_APP = "pyfedi.py";
|
||||
PYTHONPATH = "${piefedPkg}/opt/piefed";
|
||||
PIEFED_MEDIA_PATH = "${cfg.dataDir}/media";
|
||||
PIEFED_LOG_PATH = "${cfg.dataDir}/logs";
|
||||
};
|
||||
serviceConfig = {
|
||||
User = "piefed";
|
||||
Group = "piefed";
|
||||
WorkingDirectory = "${piefedPkg}/opt/piefed";
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
ExecStart = "${pkgs.python3Packages.gunicorn}/bin/gunicorn --config ${piefedPkg}/opt/piefed/gunicorn.conf.py --preload pyfedi:app";
|
||||
Restart = "always";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.piefed-worker = {
|
||||
description = "PieFed Celery Worker";
|
||||
after = [ "piefed-web.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
PYTHONPATH = "${piefedPkg}/opt/piefed";
|
||||
};
|
||||
serviceConfig = {
|
||||
User = "piefed";
|
||||
Group = "piefed";
|
||||
WorkingDirectory = "${piefedPkg}/opt/piefed";
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
ExecStart = "${pkgs.python3Packages.celery}/bin/celery -A celery_worker.celery worker --loglevel=INFO";
|
||||
Restart = "always";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.piefed-notifs = {
|
||||
description = "PieFed Notifications Service";
|
||||
after = [ "piefed-web.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
PYTHONPATH = "${piefedPkg}/opt/piefed";
|
||||
};
|
||||
serviceConfig = {
|
||||
User = "piefed";
|
||||
Group = "piefed";
|
||||
WorkingDirectory = "${piefedPkg}/opt/piefed";
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
ExecStart = "${pkgs.python3Packages.uvicorn}/bin/uvicorn fastapi_server:app --host 127.0.0.1 --port 8040";
|
||||
Restart = "always";
|
||||
};
|
||||
};
|
||||
|
||||
# Migration one-shot service
|
||||
systemd.services.piefed-migrate = {
|
||||
description = "PieFed Database Migrations";
|
||||
after = [ "postgresql.service" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "piefed";
|
||||
Group = "piefed";
|
||||
WorkingDirectory = "${piefedPkg}/opt/piefed";
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
ExecStart = "${piefedManage}/bin/piefed-manage db upgrade";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue