feat(homes): Move graphical nixos config to nixos.nix
This commit is contained in:
parent
b085f92226
commit
0f3694c82d
3 changed files with 231 additions and 221 deletions
|
@ -1,75 +1,9 @@
|
|||
{ lib, inputs, ... }:
|
||||
{
|
||||
lib,
|
||||
inputs,
|
||||
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,
|
||||
...
|
||||
}:
|
||||
{ pkgs, config, ... }:
|
||||
let
|
||||
inherit (lib.modules) mkMerge mkIf;
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (builtins) map listToAttrs;
|
||||
inherit (lib.lists) findFirstIndex;
|
||||
inherit (inputs.nur.legacyPackages.${pkgs.stdenv.hostPlatform.system}.repos.rycee) firefox-addons;
|
||||
|
@ -104,41 +38,21 @@ in
|
|||
targets = {
|
||||
firefox.colorTheme.enable = true;
|
||||
firefox.profileNames = syncedProfiles;
|
||||
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; [
|
||||
prismlauncher
|
||||
stremio
|
||||
tor-browser
|
||||
vlc
|
||||
wl-clipboard-rs
|
||||
];
|
||||
sessionVariables = {
|
||||
BROWSER = "firefox";
|
||||
LAUNCHER = "fuzzel";
|
||||
LOCKSCREEN = "hyprlock";
|
||||
NOTIFICATION_DAEMON = "mako";
|
||||
TERMINAL = "ghostty";
|
||||
STATUS_BAR = "waybar";
|
||||
};
|
||||
};
|
||||
programs = {
|
||||
fuzzel.enable = true;
|
||||
obs-studio.enable = true;
|
||||
vesktop.enable = true;
|
||||
thunderbird.enable = true;
|
||||
|
@ -147,142 +61,12 @@ in
|
|||
enable = true;
|
||||
inherit profiles;
|
||||
};
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
ghostty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
confirm-close-surface = false;
|
||||
};
|
||||
};
|
||||
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;
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
services = {
|
||||
spotifyd.enable = true;
|
||||
spotifyd.settings.global = {
|
||||
device_name = "${hostName}";
|
||||
device_type = "computer";
|
||||
zeroconf_port = 5353;
|
||||
};
|
||||
|
||||
mako.enable = true;
|
||||
mako.settings.default-timeout = 10000;
|
||||
|
||||
};
|
||||
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"
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
# 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}
|
||||
# '';
|
||||
};
|
||||
}
|
||||
|
|
226
nix/homes/rafiq/desktop/nixos.nix
Normal file
226
nix/homes/rafiq/desktop/nixos.nix
Normal file
|
@ -0,0 +1,226 @@
|
|||
{ 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -50,12 +50,12 @@ in
|
|||
};
|
||||
};
|
||||
flake.modules.homeManager.default =
|
||||
{ config, osConfig, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
imports = [ inputs.impermanence.homeManagerModules.impermanence ];
|
||||
options.persistDirs = mkOpts "directory" { };
|
||||
options.persistFiles = mkOpts "file" { };
|
||||
config = mkIf (osConfig.nixpkgs.hostPlatform == "x86_64-linux") {
|
||||
config = mkIf (pkgs.system == "x86_64-linux") {
|
||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
||||
allowOther = true;
|
||||
directories = config.persistDirs;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue