226 lines
6.3 KiB
Nix
226 lines
6.3 KiB
Nix
{ lib, config, ... }:
|
|
let
|
|
cfg = config.flake;
|
|
in
|
|
{
|
|
allowedUnfreePackages = [
|
|
"stremio-shell"
|
|
"stremio-server"
|
|
"steam"
|
|
"steam-unwrapped"
|
|
];
|
|
flake.modules.nixos.graphical =
|
|
{ config, pkgs, ... }:
|
|
{
|
|
fonts.packages = [ pkgs.font-awesome ];
|
|
services.getty.autologinUser = cfg.admin.username;
|
|
# Start Hyprland at boot only if not connecting through SSH
|
|
environment.loginShellInit = # sh
|
|
''
|
|
if [[ -z "$SSH_CLIENT" && -z "$SSH_CONNECTION" ]]; then
|
|
if uwsm check may-start; then
|
|
exec uwsm start hyprland-uwsm.desktop
|
|
fi
|
|
fi
|
|
'';
|
|
environment.variables = {
|
|
# Get Electron apps to use Wayland
|
|
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
|
NIXOS_OZONE_WL = "1";
|
|
};
|
|
programs = {
|
|
hyprland = {
|
|
enable = true;
|
|
# Use UWSM to have each process controlled by systemd init
|
|
withUWSM = true;
|
|
};
|
|
steam = {
|
|
enable = true;
|
|
gamescopeSession.enable = true;
|
|
};
|
|
};
|
|
security.pam.services.hyprlock = { };
|
|
services.sunshine = {
|
|
enable = true;
|
|
capSysAdmin = true;
|
|
openFirewall = true;
|
|
settings = {
|
|
sunshine_name = config.networking.hostName;
|
|
origin_pin_allowed = "wan";
|
|
origin_web_ui_allowed = "wan";
|
|
};
|
|
applications = { };
|
|
};
|
|
# spotifyd
|
|
networking.firewall.allowedTCPPorts = [ 5353 ];
|
|
networking.firewall.allowedUDPPorts = [ 5353 ];
|
|
};
|
|
flake.modules.homeManager.rafiq =
|
|
{
|
|
pkgs,
|
|
config,
|
|
hostName,
|
|
hostConfig,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib.modules) mkMerge mkIf;
|
|
in
|
|
mkIf (config.graphical && pkgs.system == "x86_64-linux") {
|
|
stylix.targets.waybar.addCss = false;
|
|
persistDirs = [
|
|
"docs"
|
|
"repos"
|
|
"vids"
|
|
"tmp"
|
|
".cache/Smart Code ltd/Stremio"
|
|
".local/share/Smart Code ltd/Stremio"
|
|
".mozilla/firefox"
|
|
".tor project"
|
|
".local/share/Steam"
|
|
".local/share/PrismLauncher"
|
|
".config/sunshine"
|
|
];
|
|
home = {
|
|
packages = with pkgs; [
|
|
wl-clipboard-rs
|
|
];
|
|
sessionVariables = {
|
|
LAUNCHER = "fuzzel";
|
|
LOCKSCREEN = "hyprlock";
|
|
NOTIFICATION_DAEMON = "mako";
|
|
STATUS_BAR = "waybar";
|
|
};
|
|
};
|
|
# xdg.configFile."uwsm/env".text = # sh
|
|
# ''
|
|
# # Force apps to scale right with Wayland
|
|
# export GDK_SCALE=${mainMonitor.scale}
|
|
# export STEAM_FORCE_DESKTOPUI_SCALING=${mainMonitor.scale}
|
|
# '';
|
|
# xdg.configFile."uwsm/env-hyprland".text = # sh
|
|
# ''
|
|
# export GDK_SCALE=${mainMonitor.scale}
|
|
# export STEAM_FORCE_DESKTOPUI_SCALING=${mainMonitor.scale}
|
|
# '';
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
# This is needed for UWSM
|
|
systemd.enable = false;
|
|
# Null the packages since we use them system wide
|
|
package = null;
|
|
portalPackage = null;
|
|
settings = mkMerge [
|
|
(import ./_hyprland/decoration.nix)
|
|
(import ./_hyprland/keybinds.nix { inherit pkgs; })
|
|
{
|
|
ecosystem.no_update_news = true;
|
|
xwayland.force_zero_scaling = true;
|
|
monitor =
|
|
let
|
|
mainMonitor = hostConfig.machine.monitors.main;
|
|
in
|
|
[
|
|
"${mainMonitor.id}, ${mainMonitor.resolution}@${mainMonitor.refresh-rate}, auto, ${mainMonitor.scale}"
|
|
", preferred, auto, 1"
|
|
];
|
|
exec-once = [
|
|
"uwsm app -- $LOCKSCREEN"
|
|
"uwsm app -- $NOTIFICATION_DAEMON"
|
|
"uwsm app -- $STATUS_BAR"
|
|
];
|
|
}
|
|
];
|
|
};
|
|
services = {
|
|
spotifyd.enable = true;
|
|
spotifyd.settings.global = {
|
|
device_name = "${hostName}";
|
|
device_type = "computer";
|
|
zeroconf_port = 5353;
|
|
};
|
|
mako.enable = true;
|
|
mako.settings.default-timeout = 10000;
|
|
};
|
|
programs = {
|
|
fuzzel.enable = true;
|
|
waybar = {
|
|
enable = true;
|
|
settings = [
|
|
{
|
|
layer = "top";
|
|
modules-left = [
|
|
"pulseaudio"
|
|
];
|
|
modules-right = [
|
|
"battery"
|
|
"clock"
|
|
];
|
|
"pulseaudio" = {
|
|
format = "{icon} {volume}%";
|
|
format-muted = "";
|
|
format-icons.default = [
|
|
""
|
|
""
|
|
];
|
|
on-click = "${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
|
};
|
|
"clock" = {
|
|
interval = 1;
|
|
format = "{:%F %T}";
|
|
};
|
|
"battery" = {
|
|
interval = 1;
|
|
bat-compatibility = true;
|
|
};
|
|
}
|
|
];
|
|
style = # css
|
|
''
|
|
window#waybar {
|
|
background-color: rgba(0, 0, 0, 0);
|
|
}
|
|
|
|
#pulseaudio,
|
|
#battery,
|
|
#clock {
|
|
padding-top: 5px;
|
|
padding-bottom: 5px;
|
|
padding-right: 5px;
|
|
color: #ffffff;
|
|
}
|
|
'';
|
|
};
|
|
hyprlock = {
|
|
enable = true;
|
|
settings = {
|
|
general.hide_cursor = true;
|
|
general.ignore_empty_input = true;
|
|
background.blur_passes = 5;
|
|
background.blur_size = 5;
|
|
label = {
|
|
text = ''hi, $USER.'';
|
|
font_size = 32;
|
|
position = "0, 0";
|
|
halign = "center";
|
|
valign = "center";
|
|
zindex = 1;
|
|
shadow_passes = 5;
|
|
shadow_size = 5;
|
|
};
|
|
input-field = {
|
|
placeholder_text = "";
|
|
fade_on_empty = true;
|
|
size = "200, 45";
|
|
position = "0, -5%";
|
|
halign = "center";
|
|
valign = "center";
|
|
zindex = 1;
|
|
shadow_passes = 5;
|
|
shadow_size = 5;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|