Compare commits

...

65 Commits

Author SHA1 Message Date
0edd66d61a Giving claude access diving in balls first 2026-01-15 16:48:40 +00:00
2f7ae02b36 flake.lock: Update
Flake lock file updates:

• Updated input 'caelestia-cli':
    'github:caelestia-dots/cli/55590bd9e4c24189c44c1ad1ec7b3b54538fcefb?narHash=sha256-sD6q%2BLrM6vd2i2BrQoowhGARa43zWeR8oPTjzlxq3RU%3D' (2026-01-04)
  → 'github:caelestia-dots/cli/55d75a117540e37263ac450ed7c40cc2212b5e3c?narHash=sha256-9aevqBizkmywn0buASzLCNOwY/Wm6tq9FpaPrRgZ/KQ%3D' (2026-01-07)
• Updated input 'caelestia-cli/nixpkgs':
    'github:nixos/nixpkgs/fb7944c166a3b630f177938e478f0378e64ce108?narHash=sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf%2BOkucw%3D' (2026-01-02)
  → 'github:nixos/nixpkgs/9f0c42f8bc7151b8e7e5840fb3bd454ad850d8c5?narHash=sha256-UWYqmD7JFBEDBHWYcqE6s6c77pWdcU/i%2BbwD6XxMb8A%3D' (2026-01-05)
• Updated input 'dms':
    'github:AvengeMedia/DankMaterialShell/ab071e12aaf0c42b6e0921b94f96553c4a10bcbf?narHash=sha256-njG0q58Xnx69/V0KCTwBsI514sO/Eq1yF74%2B8hLDU1A%3D' (2026-01-05)
  → 'github:AvengeMedia/DankMaterialShell/3dd21382bad5d43604850e257cfd1b8d35e16fb9?narHash=sha256-4tLYqLiLZqI7xmhNBi5zyGkaAXZJNUtGuxWzA7NJf8A%3D' (2026-01-07)
• Updated input 'home-manager':
    'github:nix-community/home-manager/a65c04965c841eb01ba401f5162f12bc8d52014f?narHash=sha256-N0kK1JqxIjFl7hPAfhkW6C9AO7feYJUWLPyqJO2VuQQ%3D' (2026-01-05)
  → 'github:nix-community/home-manager/c068188a8e5c277f7bc8671557a7568864b57515?narHash=sha256-QICeGwbXfqtaOZmgh6BrSBB72drPuHO3pjuyh%2Bx8eIY%3D' (2026-01-07)
• Updated input 'hyprland':
    'github:hyprwm/Hyprland/9817553c664b0b7f6776671383a6368c74ee8dee?narHash=sha256-M5WVoXwlZpYcEKS23sEQKMzzdqItY/iEWoj3reIBfiE%3D' (2026-01-05)
  → 'github:hyprwm/Hyprland/918e2bb9be0e1d233f9394f1d569137788c43c01?narHash=sha256-BHBiQhlNl%2BLxvp/bBOOTWhxbXYMoVG4xiyv9DE/nuZ4%3D' (2026-01-07)
• Updated input 'hyprland-hyprsplit':
    'github:Duckonaut/split-monitor-workspaces/7b179721fcd272154d2917e9c4a7f9659c6104a2?narHash=sha256-FtitmvggxcZqCEKhYIN66td6JONenoTsuOFVS9pYi5E%3D' (2026-01-04)
  → 'github:Duckonaut/split-monitor-workspaces/764548c3aa22c9f4cb436ec7243d21795eb6ebec?narHash=sha256-yTuyde8TpBR3NhNnOcK4uOGukvMCwrH3otP8E04e9X0%3D' (2026-01-06)
• Updated input 'hyprland-plugins':
    'github:hyprwm/hyprland-plugins/0b356053fa4e6a6f5e857529654ff45eba2859d8?narHash=sha256-502sjmbTK/W8x6DUbJAyiBOABwV1q5Wb5caCMwd6BuI%3D' (2026-01-05)
  → 'github:hyprwm/hyprland-plugins/fef398ed5e4faf59bc43b915e46a75cfe8b16697?narHash=sha256-jObY8O7OI%2B91hoE137APsDxm0235/Yx%2BHhFIip187zM%3D' (2026-01-06)
• Updated input 'jovian':
    'github:Jovian-Experiments/Jovian-NixOS/efd4b22e6fdc6d7fb4e186ae333a4b74e03da440?narHash=sha256-2tL1mRb9uFJThUNfuDm/ehrnPvImL/QDtCxfn71IEz4%3D' (2025-12-30)
  → 'github:Jovian-Experiments/Jovian-NixOS/a81fad3f4a70fdaa779e74b7da2063fa2e358028?narHash=sha256-jXb2kBU6lO6Q6S9zoR/bhVLMjg2hM9EW8gWIwsmkj64%3D' (2026-01-07)
• Updated input 'nixcord':
    'github:kaylorben/nixcord/9748d874957aef2a3f44de2c3fdfe412c62a9063?narHash=sha256-pnfuAPzku7uqNt7Bc0zILNrvmeHd%2B1/iEN5caWJb8x4%3D' (2026-01-05)
  → 'github:kaylorben/nixcord/d9f83906a12678900b2b36c3bdf7329e8efaa0c0?narHash=sha256-uW5BgnDOn41rlKn1JxdN7CU4bbOgZf%2BaxEw8pBVP6RU%3D' (2026-01-07)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/3bd884a63dc53ecb0bf43422f4aa4f51d87a04e9?narHash=sha256-bGKKceW7Sr5HsuyDrdUCdx3/NkyvASdst86yx955CCE%3D' (2025-12-24)
  → 'github:nixos/nixpkgs/5912c1772a44e31bf1c63c0390b90501e5026886?narHash=sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4%3D' (2026-01-07)
• Updated input 'quickshell':
    'git+https://git.outfoxxed.me/outfoxxed/quickshell?ref=refs/heads/master&rev=41828c4180fb921df7992a5405f5ff05d2ac2fff' (2025-12-26)
  → 'git+https://git.outfoxxed.me/outfoxxed/quickshell?ref=refs/heads/master&rev=6742148cf4a8415a9c51fdeb11d8c3ea716c2e14' (2026-01-06)
• Updated input 'vicinae':
    'github:vicinaehq/vicinae/b79669006c4e49e32f2ae889c1294cd62c8071d5?narHash=sha256-L0A4daBtEuponvKr5YM4wn8btDku0Cs2Eu5b%2BEtTgSk%3D' (2026-01-05)
  → 'github:vicinaehq/vicinae/aab965dcf29529c5fab67b9c2fb5f8168f76fa1b?narHash=sha256-OPBgcM2ZzbVEUS6lwRpJo2JBfiRK8TmYVSmZImEW2gA%3D' (2026-01-07)
• Updated input 'zen-browser':
    'github:0xc000022070/zen-browser-flake/350c729b261e6f5529460140a5f0943dd4c5e156?narHash=sha256-6s8hL3YX9zAq2T7qvcwwzaEVwc9MEYbW%2BC2LcAAQfbk%3D' (2026-01-04)
  → 'github:0xc000022070/zen-browser-flake/8b2302d8c10369c9135552cc892da75cff5ddb03?narHash=sha256-5ysv8EuVAgDoYmNuXEUNf7vBzdeRaFxeIlIndv5HMvs%3D' (2026-01-07)
2026-01-07 19:53:11 +00:00
f7e26a9793 pain and suffering 2026-01-06 19:56:41 +00:00
47cd19b701 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/93d0f90099f5f3b9295aae90ccbce4e2d14e1160?narHash=sha256-eDrvOyIt/2GRUyZtKd7pJOLAOdQh8IaSzEdEzsSxYSU%3D' (2025-12-31)
  → 'github:nixos/nixpkgs/fb7944c166a3b630f177938e478f0378e64ce108?narHash=sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf%2BOkucw%3D' (2026-01-02)
2026-01-04 16:05:55 +00:00
f0c2a38366 dickplays 2025-12-17 22:42:37 +00:00
b2b4e434fd temu fix 2025-12-17 21:37:02 +00:00
a442183047 shfjdshf 2025-12-17 20:46:37 +00:00
eb6019b131 better shell integration 2025-12-17 17:10:25 +00:00
423e136895 theme stuff 2025-12-17 13:00:21 +00:00
zastian-dev
fe40f11559 testing sone shite 2025-12-15 18:06:05 +00:00
c45ec8d9cd cad my dude 2025-12-15 13:53:40 +00:00
zastian-dev
f073bda700 Fuck minor spelling mistake 2025-12-12 12:39:45 +00:00
zastian-dev
af5ca69e02 clean up the house a bit 2025-12-12 12:21:22 +00:00
c22a16c4ea can you now stop making noice nix please stop complaining 2025-12-12 01:38:45 +00:00
92d70ee2fc gay ming it works soooo goood but looks are bad will make clean 2025-12-12 01:38:06 +00:00
zastian-dev
ebe65dc108 stuff IDK 2025-12-11 14:48:22 +00:00
4a8274bd59 setting up the cumsole 2025-12-11 12:14:43 +00:00
zastian-dev
e7275b4c37 reee 2025-12-10 16:37:00 +00:00
zastian-dev
088c99e2cb wgnord shit 2025-12-10 13:52:34 +00:00
ec9f987c14 sheeet the second 2025-12-10 13:51:17 +00:00
854bf14796 shhheeeet 2025-12-10 13:48:15 +00:00
zastian-dev
381d6c2795 confugerations 2025-11-30 17:47:07 +00:00
zastian@mrthoddata.com
29a540706c balls 2025-11-12 16:04:32 +00:00
68dcfeef3d reee stuff 2025-11-12 15:56:28 +00:00
af0d2db342 new runner once again 2025-11-04 11:00:51 +00:00
zastian@mrthoddata.com
914212ce30 pain 2025-11-01 14:44:29 +00:00
d33d191613 this is conna have conflicts its so over 2025-10-31 10:12:34 +00:00
zastian@mrthoddata.com
c48cce4a4a cum puter the second cumming 2025-10-22 20:51:39 +01:00
e55659e082 cum puter the first cumming 2025-10-21 11:50:18 +01:00
zastian@mrthoddata.com
4ffc8d20b6 stuff 2025-10-19 15:41:42 +01:00
cfa793c41a hipblaslt fuck you 2025-10-14 12:03:45 +01:00
Zastian Pretorius
9337ee3385 gg 2 2025-10-13 16:59:57 +01:00
mrfluffy-dev
d197e054dd gg 2025-10-13 16:59:11 +01:00
mrfluffy-dev
d04259ac3d reee 2025-10-09 11:41:01 +01:00
mrfluffy-dev
b9fb4b9515 we will never know what all the changes are in this commit 2025-10-02 12:51:22 +01:00
cfa57e9a3f balls 2025-09-19 13:56:53 +01:00
zastian@mrthoddata.com
f5c7879447 hyper cuck 2025-09-15 16:48:19 +01:00
zastian@mrthoddata.com
935257bc4b gg 2025-09-15 13:04:52 +01:00
cdb912796e hureland refactor 2025-09-08 12:35:41 +01:00
Zastian Pretorius
3839a0e292 clean the shit 2025-09-07 14:47:56 +01:00
Zastian Pretorius
59cb67267c HDR frfr this time 2025-09-07 12:16:17 +01:00
zastian@mrthoddata.com
e73179e113 hdr baby 2025-09-05 16:03:57 +01:00
zastian@mrthoddata.com
dbf42a7482 kdjka 2025-09-05 12:15:28 +01:00
zastian@mrthoddata.com
1736701831 fix the screen share wompwomp 2025-09-03 11:32:09 +01:00
Zastian Pretorius
6d10cd93a9 ummmmm 2025-09-02 11:05:15 +01:00
Zastian Pretorius
1ceccb3993 correction stupid jellyfin media player 2025-08-30 16:25:45 +01:00
Zastian Pretorius
0c57087584 stupid qt5 web sit 2025-08-30 15:39:07 +01:00
zastian@mrthoddata.com
b1384a3898 network sheet 2025-08-29 12:38:57 +01:00
zastian@mrthoddata.com
9738b3a61e ipv6 v2 final form 2025-08-27 15:50:25 +01:00
zastian@mrthoddata.com
388d5f63cc ipv6 v1 test try hope 2025-08-27 15:11:03 +01:00
Zastian Pretorius
8414845ce5 jedgnb 2025-08-27 15:10:11 +01:00
zastian@mrthoddata.com
5d1691811a huperland 2025-08-23 11:32:21 +01:00
zastian@mrthoddata.com
62e143d3a1 dbusssssssssssssssssssssssssss 2025-08-21 14:04:00 +01:00
mrfluffy-dev
0208d78969 upgrades people upgrades 2025-08-20 20:39:14 +01:00
zastian@mrthoddata.com
cfd848d610 sweatty balls 2025-08-20 12:00:11 +01:00
Zastian Pretorius
14e37841c1 fkdsah 2025-08-19 12:39:12 +01:00
zastian@mrthoddata.com
a7b80b43a9 eabhdsfgvij 2025-08-14 16:46:31 +01:00
mrfluffy-dev
59482884c5 laptop stuff 2.0 2025-08-14 16:00:33 +01:00
mrfluffy-dev
9645a29026 laptop stuff 2025-08-13 00:28:39 +01:00
Zastian Pretorius
e888dc33e8 what did the one commit say to the other.. git good 2025-08-12 22:21:16 +01:00
Zastian Pretorius
d4397e5298 what the hell was \ 2025-08-11 16:19:50 +01:00
zastian@mrthoddata.com
8df64cd43c reeeeeeeeeeeeee 2025-08-11 10:37:37 +01:00
Zastian Pretorius
010864f906 reeeee 2025-08-06 10:46:42 +01:00
zastian@mrthoddata.com
d81ba65c92 cock and ball 2025-08-05 18:01:02 +01:00
zastian@mrthoddata.com
4418e3bb2b beep boop 2025-08-05 16:18:13 +01:00
34 changed files with 3270 additions and 1750 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 704 KiB

BIN
assets/Wallpapers/142.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -1,6 +1,5 @@
# Edit this configuration file to define what should be installed on # Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page # your system. Help is available in configuration.nix(5) and via `nixos-help`.
# and in the NixOS manual (accessible by running nixos-help).
{ {
config, config,
@@ -12,197 +11,195 @@
... ...
}: }:
let
oreo = pkgs.callPackage ./personalPKGS/oreo.nix { };
in
{ {
imports = [ imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
./system/hardware.nix
./system/boot.nix ./system/boot.nix
./system/network.nix ./system/network.nix
./system/inputMethods.nix ./system/inputMethods.nix
./system/services.nix ./system/hardware.nix
./system/fonts.nix ./system/fonts.nix
./system/nixOSPkgs.nix
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
inputs.niri.nixosModules.niri inputs.jovian.nixosModules.default
#inputs.niri.nixosModules.niri
]; ];
# niri settings
nix = { ##############################################################################
settings = { # Nix settings
experimental-features = [ ##############################################################################
"nix-command" nix.settings = {
"flakes" experimental-features = [
]; "nix-command"
build-dir = "/var/tmp"; "flakes"
auto-optimise-store = true; ];
build-dir = "/nix/var/nix/builds";
auto-optimise-store = true;
};
##############################################################################
# Users
##############################################################################
programs.zsh.enable = true;
users = {
users = {
root = {
openssh = {
authorizedKeys = {
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDwjTCq2GXRuqVXf1CeyntkOIFYNu0+tW1lurW8PNtK1 zastian00@gmail.com"
];
};
};
};
mrfluffy = {
isNormalUser = true;
shell = pkgs.zsh;
createHome = true;
extraGroups = [
"wheel"
"networkmanager"
"video"
"render"
"docker"
"libvirt"
"input"
"seat"
"dialout"
];
packages = with pkgs; [ ];
};
work = {
isNormalUser = true;
shell = pkgs.zsh;
createHome = true;
extraGroups = [
"wheel"
"networkmanager"
"video"
"render"
"docker"
"libvirt"
"input"
"seat"
"dialout"
];
packages = with pkgs; [ ];
};
game = {
isNormalUser = true;
description = "Dedicated gaming user (auto-login in Steam specialisation)";
shell = pkgs.bash;
createHome = true;
password = ""; # no password
extraGroups = [
"wheel"
"video"
"render"
"input"
"seat"
"networkmanager"
"dialout"
];
home = "/home/game";
};
};
groups.libvirtd.members = [
"mrfluffy"
"work"
];
};
##############################################################################
# Home-Manager
##############################################################################
home-manager = {
extraSpecialArgs = { inherit inputs window_manager systemName; };
users = {
mrfluffy = import ./home/mrfluffy.nix;
work = import ./home/work.nix;
game = import ./home/game.nix;
}; };
}; };
# Set your time zone. ##############################################################################
#time.timeZone = "Europe/Dublin"; # Environment
#programs.river.enable = true; ##############################################################################
#programs.niri.enable = true; environment = {
#programs.niri.package = pkgs.niri-stable; sessionVariables = {
#nixpkgs.overlays = [ inputs.niri.overlays.niri ]; ZDOTDIR = "$HOME/.config/zsh";
#programs.hyprland.enable = true;
programs.river.enable = window_manager == "river" || window_manager == "all";
qt.enable = true;
#qt.style = "gtk2";
qt.platformTheme = "qt5ct";
nixpkgs.overlays = [ inputs.niri.overlays.niri ];
programs.niri = {
enable = window_manager == "niri" || window_manager == "all";
package = pkgs.niri-stable; # Only needed if not provided by the overlay
};
programs.hyprland.enable = window_manager == "hyprland" || window_manager == "all";
# Configure keymap in X11
services.xserver = {
xkb = {
layout = "ie";
variant = "";
}; };
enable = true; pathsToLink = [ "/share/zsh" ];
#displayManager.lightdm = { variables = {
# enable = true; # VAAPI and VDPAU config for accelerated video.
# greeters.gtk = { # See https://wiki.archlinux.org/index.php/Hardware_video_acceleration
# enable = true; VDPAU_DRIVER = "radeonsi";
# theme.package = pkgs.amarena-theme; LIBVA_DRIVER_NAME = "radeonsi";
# theme.name = "amarena"; # AMD_VULKAN_ICD = "RADV";
# cursorTheme.package = oreo.override { colors = [ "oreo_spark_pink_cursors" ]; }; # VK_ICD_FILENAMES = "/run/opengl-driver/share/vulkan/icd.d/radeon_icd.x86_64.json";
# cursorTheme.name = "oreo_spark_pink_cursors"; # XDG_CURRENT_DESKTOP = "hyprland";
# extraConfig = "background=${./assets/Wallpapers/138.png}"; #QT_QPA_PLATFORMTHEME = "gtk3";
# }; #QT_QPA_PLATFORMTHEME_QT6 = "gtk3";
#}; };
systemPackages = with pkgs; [
vim
wget
neovim
];
}; };
services.greetd = {
##############################################################################
# Nixpkgs policy
##############################################################################
nixpkgs.config = {
allowUnfree = true;
permittedInsecurePackages = [ ];
};
##############################################################################
# decky
##############################################################################
nixpkgs.overlays = [
inputs.jovian.overlays.default
];
jovian.decky-loader = {
enable = true; enable = true;
restart = true; user = "game"; # Run as your gaming user
settings = { stateDir = "/home/game/.local/share/decky"; # Store plugins/data in user's home (adjust if preferred)
default_session = { # Optional: Add extra packages if needed for specific plugins
command = "${lib.getExe pkgs.greetd.tuigreet} --window-padding 1 --time --time-format '%R - %F' --remember --remember-session --asterisks"; # extraPackages = with pkgs; [ some-package ];
user = "greeter"; # extraPythonPackages = ps: with ps; [ some-python-package ];
};
##############################################################################
# State version
##############################################################################
system.stateVersion = "24.11"; # Did you read the comment?
specialisation = {
"01-steam" = {
configuration = {
imports = [
./system/specialisation/steam.nix
];
};
};
"00-main-system" = {
configuration = {
#boot.loader.systemd-boot.sortKey = lib.mkDefault "00000000000-main";
##############################################################################
# Imports
##############################################################################
imports = [
./system/services.nix
./system/nixOSPkgs.nix
./system/specialisation/main-system.nix
#inputs.niri.nixosModules.niri
];
}; };
}; };
}; };
security.rtkit.enable = true;
security.polkit = {
enable = true;
#package = pkgs.polkit_gnome;
};
environment.sessionVariables = {
ZDOTDIR = "$HOME/.config/zsh";
};
environment.pathsToLink = [ "/share/zsh" ];
environment.variables = {
# VAAPI and VDPAU config for accelerated video.
# See https://wiki.archlinux.org/index.php/Hardware_video_acceleration
VDPAU_DRIVER = "radeonsi";
LIBVA_DRIVER_NAME = "radeonsi";
#XDG_CURRENT_DESKTOP = "hyprland";
#QT_QPA_PLATFORMTHEME = "qt6ct";
};
# Define a user account. Don't forget to set a password with passwd.
users.users.mrfluffy = {
isNormalUser = true;
shell = pkgs.zsh;
createHome = true;
extraGroups = [
"wheel"
"networkmanager"
"video"
"render"
"docker"
"libvirt"
"input"
]; # Enable sudo for the user.
packages = with pkgs; [
];
};
users.users.work = {
isNormalUser = true;
shell = pkgs.zsh;
createHome = true;
extraGroups = [
"wheel"
"networkmanager"
"video"
"render"
"docker"
"libvirt"
"input"
]; # Enable sudo for the user.
packages = with pkgs; [
];
};
users.groups.libvirtd.members = [
"mrfluffy"
"work"
];
home-manager = {
# also pass inputs to home-manager modules
extraSpecialArgs = {
inherit inputs window_manager systemName;
};
users = {
"mrfluffy" = import ./home/mrfluffy.nix;
"work" = import ./home/work.nix;
};
};
virtualisation.docker = {
enable = true;
storageDriver = lib.mkIf (systemName == "pc") "btrfs";
};
virtualisation.libvirtd.enable = true;
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
security.pam.services.swaylock = { };
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
neovim
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
#services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.11"; # Did you read the comment?
} }

392
dots/caelestia.nix Normal file
View File

@@ -0,0 +1,392 @@
{ config,
lib,
pkgs,
inputs,
...
}:
{
programs = {
caelestia = {
enable = false;
systemd = {
enable = true; # if you prefer starting from your compositor
target = "graphical-session.target";
environment = [];
};
settings = {
appearance = {
anim = {
durations = {
scale = 1;
};
};
font = {
family = {
material = "Material Symbols Rounded";
mono = "CaskaydiaCove NF";
sans = "Rubik";
};
size = {
scale = 1;
};
};
padding = {
scale = 1;
};
rounding = {
scale = 1;
};
spacing = {
scale = 1;
};
transparency = {
enabled = false;
base = 0.85;
layers = 0.4;
};
};
general = {
apps = {
terminal = [ "foot" ];
audio = [ "pavucontrol" ];
};
battery = {
warnLevels = [
{
level = 20;
title = "Low battery";
message = "You might want to plug in a charger";
icon = "battery_android_frame_2";
}
{
level = 10;
title = "Did you see the previous message?";
message = "You should probably plug in a charger <b>now</b>";
icon = "battery_android_frame_1";
}
{
level = 5;
title = "Critical battery level";
message = "PLUG THE CHARGER RIGHT NOW!!";
icon = "battery_android_alert";
critical = true;
}
];
criticalLevel = 3;
};
idle = {
inhibitWhenAudio = true;
timeouts = [
{
timeout = 600;
idleAction = "lock";
}
{
timeout = 700;
idleAction = "dpms off";
returnAction = "dpms on";
}
{
timeout = 800;
idleAction = [ "systemctl" "suspend-then-hibernate" ];
}
];
};
};
background = {
desktopClock = {
enabled = false;
};
enabled = true;
visualiser = {
enabled = false;
autoHide = true;
rounding = 1;
spacing = 1;
};
};
bar = {
clock = {
showIcon = true;
};
dragThreshold = 20;
entries = [
{
id = "logo";
enabled = true;
}
{
id = "workspaces";
enabled = true;
}
{
id = "spacer";
enabled = true;
}
{
id = "activeWindow";
enabled = true;
}
{
id = "spacer";
enabled = true;
}
{
id = "tray";
enabled = true;
}
{
id = "clock";
enabled = true;
}
{
id = "statusIcons";
enabled = true;
}
{
id = "power";
enabled = true;
}
];
persistent = true;
scrollActions = {
brightness = true;
workspaces = true;
volume = true;
};
showOnHover = true;
status = {
showAudio = false;
showBattery = true;
showBluetooth = true;
showKbLayout = false;
showMicrophone = false;
showNetwork = true;
showLockStatus = true;
};
tray = {
background = false;
iconSubs = [];
recolour = false;
};
workspaces = {
activeIndicator = true;
activeLabel = "󰮯";
activeTrail = false;
label = " ";
occupiedBg = false;
occupiedLabel = "󰮯";
perMonitorWorkspaces = true;
showWindows = true;
shown = 5;
};
};
border = {
rounding = 25;
thickness = 10;
};
dashboard = {
enabled = true;
dragThreshold = 50;
mediaUpdateInterval = 500;
showOnHover = true;
};
launcher = {
actionPrefix = ">";
actions = [
{
name = "Calculator";
icon = "calculate";
description = "Do simple math equations (powered by Qalc)";
command = [ "autocomplete" "calc" ];
enabled = true;
dangerous = false;
}
{
name = "Scheme";
icon = "palette";
description = "Change the current colour scheme";
command = [ "autocomplete" "scheme" ];
enabled = true;
dangerous = false;
}
{
name = "Wallpaper";
icon = "image";
description = "Change the current wallpaper";
command = [ "autocomplete" "wallpaper" ];
enabled = true;
dangerous = false;
}
{
name = "Variant";
icon = "colors";
description = "Change the current scheme variant";
command = [ "autocomplete" "variant" ];
enabled = true;
dangerous = false;
}
{
name = "Transparency";
icon = "opacity";
description = "Change shell transparency";
command = [ "autocomplete" "transparency" ];
enabled = false;
dangerous = false;
}
{
name = "Random";
icon = "casino";
description = "Switch to a random wallpaper";
command = [ "caelestia" "wallpaper" "-r" ];
enabled = true;
dangerous = false;
}
{
name = "Light";
icon = "light_mode";
description = "Change the scheme to light mode";
command = [ "setMode" "light" ];
enabled = true;
dangerous = false;
}
{
name = "Dark";
icon = "dark_mode";
description = "Change the scheme to dark mode";
command = [ "setMode" "dark" ];
enabled = true;
dangerous = false;
}
{
name = "Shutdown";
icon = "power_settings_new";
description = "Shutdown the system";
command = [ "systemctl" "poweroff" ];
enabled = true;
dangerous = true;
}
{
name = "Reboot";
icon = "cached";
description = "Reboot the system";
command = [ "systemctl" "reboot" ];
enabled = true;
dangerous = true;
}
{
name = "Logout";
icon = "exit_to_app";
description = "Log out of the current session";
command = [ "loginctl" "terminate-user" "" ];
enabled = true;
dangerous = true;
}
{
name = "Lock";
icon = "lock";
description = "Lock the current session";
command = [ "caelestia" "shell" "lock" "lock" ];
enabled = true;
dangerous = false;
}
{
name = "Sleep";
icon = "bedtime";
description = "Suspend then hibernate";
command = [ "systemctl" "suspend-then-hibernate" ];
enabled = true;
dangerous = false;
}
];
dragThreshold = 50;
vimKeybinds = false;
enableDangerousActions = false;
maxShown = 7;
maxWallpapers = 9;
specialPrefix = "@";
useFuzzy = {
apps = false;
actions = false;
schemes = false;
variants = false;
wallpapers = false;
};
showOnHover = false;
hiddenApps = [];
};
lock = {
recolourLogo = false;
};
notifs = {
actionOnClick = false;
clearThreshold = 0.3;
defaultExpireTimeout = 5000;
expandThreshold = 20;
expire = true;
};
osd = {
enabled = true;
enableBrightness = true;
enableMicrophone = false;
hideDelay = 2000;
};
paths = {
mediaGif = "root:/assets/bongocat.gif";
sessionGif = "root:/assets/kurukuru.gif";
wallpaperDir = "~/Pictures/Wallpapers";
};
services = {
audioIncrement = 0.1;
defaultPlayer = "Spotify";
playerAliases = [
{ from = "com.github.th_ch.youtube_music"; to = "YT Music"; }
];
gpuType = "";
weatherLocation = "";
useFahrenheit = false;
useTwelveHourClock = true;
smartScheme = true;
visualiserBars = 45;
};
session = {
dragThreshold = 30;
enabled = true;
vimKeybinds = false;
commands = {
logout = [ "loginctl" "terminate-user" "" ];
shutdown = [ "systemctl" "poweroff" ];
hibernate = [ "systemctl" "hibernate" ];
reboot = [ "systemctl" "reboot" ];
};
};
sidebar = {
dragThreshold = 80;
enabled = true;
};
utilities = {
enabled = true;
maxToasts = 4;
toasts = {
audioInputChanged = true;
audioOutputChanged = true;
capsLockChanged = true;
chargingChanged = true;
configLoaded = true;
dndChanged = true;
gameModeChanged = true;
numLockChanged = true;
};
};
};
cli = {
enable = true; # Also add caelestia-cli to path
settings = {
theme.enableGtk = false;
};
};
};
};
}

View File

@@ -0,0 +1,26 @@
{
config,
lib,
pkgs,
inputs,
...
}:
{
imports = [
inputs.dms.homeModules.dank-material-shell
];
programs.dank-material-shell = {
enable = true;
systemd = {
enable = true; # if you prefer starting from your compositor
};
#settings = {
# theme = "dark";
# dynamicTheming = true;
# # Add any other settings here
#};
};
}

View File

@@ -42,6 +42,8 @@
;; change `org-directory'. It must be set before org loads! ;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/") (setq org-directory "~/org/")
(require 'direnv)
;; Whenever you reconfigure a package, make sure to wrap your config in an ;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g. ;; `after!' block, otherwise Doom's defaults may override your settings. E.g.

View File

@@ -103,7 +103,7 @@
;;make ; run make tasks from Emacs ;;make ; run make tasks from Emacs
;;pass ; password manager for nerds ;;pass ; password manager for nerds
pdf ; pdf enhancements pdf ; pdf enhancements
;;terraform ; infrastructure as code terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux ;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree... tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp ;;upload ; map local to remote projects via ssh/ftp

View File

@@ -7,6 +7,7 @@
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: ;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package) ;; (package! some-package)
(package! elisp-benchmarks)
;; To install a package directly from a remote git repo, you must specify a ;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here: ;; `:recipe'. You'll find documentation on what `:recipe' accepts here:

View File

@@ -10,6 +10,8 @@
settings = { settings = {
main = { main = {
pad = "5x5"; pad = "5x5";
font = "${config.stylix.fonts.monospace.name}:size=${toString config.stylix.fonts.sizes.terminal}";
include = "/home/${config.home.username}/.config/foot/dank-colors.ini";
}; };
colors = { colors = {
alpha = lib.mkForce (0.9); alpha = lib.mkForce (0.9);
@@ -17,4 +19,3 @@
}; };
}; };
} }

View File

@@ -8,304 +8,420 @@
... ...
}: }:
let let
hypr-package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
hypr-portal =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
hypr-split =
inputs.hyprland-hyprsplit.packages.${pkgs.stdenv.hostPlatform.system}.split-monitor-workspaces;
#hyprscrolling = inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprscrolling;
mod = "Alt"; mod = "Alt";
terminal = "footclient"; terminal = "footclient";
fileManager = "pcmanfm"; fileManager = "thunar";
runner = "anyrun"; #runner = "${lib.getExe caelestia-cli} shell drawers toggle launcher";
browser = "zen-twilight"; runner = "vicinae toggle";
# runner = "anyrun";
browser = "firefox";
editor = "emacsclient -c"; editor = "emacsclient -c";
caelestia-cli = inputs.caelestia-cli.packages.${pkgs.system}.caelestia-cli;
in in
{ {
wayland = { wayland.windowManager.hyprland = {
windowManager = { enable = window_manager == "hyprland" || window_manager == "all";
hyprland = { package = hypr-package;
enable = window_manager == "hyprland" || window_manager == "all"; portalPackage = hypr-portal;
plugins = [ plugins = [
pkgs.hyprlandPlugins.hyprsplit #pkgs.hyprlandPlugins.hyprsplit
pkgs.hyprlandPlugins.hyprscrolling hypr-split
]; #hyprscrolling
settings = { ];
# See https://wiki.hyprland.org/Configuring/Monitors/ settings = {
monitor = lib.mkMerge [ ##########################################################################
(lib.mkIf (systemName == "laptop") [ "eDP-1,1920x1080@59.99700,0x0,1" ]) # Monitors
(lib.mkIf (systemName == "pc") [ ##########################################################################
"HDMI-A-1,1920x1080@60,0x0,1" source = [
"DP-1,2560x1440@144,1920x0,1" "./dms/outputs.conf"
]) #"./dms/cursor.conf"
]; "./dms/colors.conf"
# Autostart necessary processes (like notifications daemons, status bars, etc.) ];
# Or execute your favorite apps at launch like this:
exec-once =
[
#"waybar"
#"quickshell"
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
"fcitx5 -d"
"foot -s"
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
]
++ lib.optionals (config.home.username == "work") [
"thunderbird"
"sleep 10 && emacsclient -c --frame-parameters='((name . \"work\"))' $HOME/Documents/work/README.org"
];
#++ lib.optional (systemName == "laptop") "swaybg -o eDP-1 -i ${../assets/Wallpapers/138.png}"
#++
# lib.optional (systemName == "pc")
# "swaybg -o HDMI-A-1 -i ${../assets/Wallpapers/138.png} -o DP-1 -i ${../assets/Wallpapers/138.png}";
#plugins # See https://wiki.hyprland.org/Configuring/Monitors/
plugin = { #monitor = lib.mkMerge [
hyprsplit = { # #(lib.mkIf (systemName == "laptop") [ "eDP-1,1920x1080@59.99700,0x0,1" ])
num_workspaces = 10; # (lib.mkIf (systemName == "pc") [
persistent_workspaces = true; # "HDMI-A-2, disable"
}; # ])
hyprscrolling = { #];
fullscreen_on_one_column = false;
column_width = 0.7;
explicit_column_widths = [
0.333
0.5
0.667
1.0
];
focus_fit_method = 0;
};
};
env = [ #monitorv2 =
"XCURSOR_SIZE, 24" # [ ]
"HYPRCURSOR_SIZE, 24" # ++ lib.optional (systemName == "laptop") {
]; # output = "eDP-1";
# Refer to https://wiki.hyprland.org/Configuring/Variables/ # mode = "1920x1080@59.99700";
# https://wiki.hyprland.org/Configuring/Variables/#general # scale = 1;
general = { # position = "0x0";
gaps_in = 5; # }
gaps_out = 10; # ++ lib.optional (systemName == "pc") {
border_size = 2; # output = "DP-1";
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors # mode = "2560x1440@239.97";
#"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; # position = "2560x0"; # "1440x750"; # Corrected from 2569x0 for seamless alignment
#"col.inactive_border" = "rgba(595959aa)"; # scale = 1;
# Set to true enable resizing windows by clicking and dragging on borders and gaps # #supports_wide_color = 1;
resize_on_border = false; # bitdepth = 10;
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on # cm = "wide";
allow_tearing = false; # supports_hdr = true;
layout = "dwindle"; # supports_wide_color = true;
}; # sdr_min_luminance = 0; # For true black on OLED
# sdr_max_luminance = 275; # Matches typical SDR brightness
# min_luminance = 0;
# max_luminance = 1000; # HDR peak
# max_avg_luminance = 400; # Average frame luminance
# sdrbrightness = 1.2; # Slight boost to avoid washed out look
# sdrsaturation = 1.0;
# }
# ++ lib.optional (systemName == "pc") {
# output = "DP-2";
# mode = "2560x1440@144";
# scale = 1;
# position = "0x0";
# transform = 0;
# };
# https://wiki.hyprland.org/Configuring/Variables/#decoration ##########################################################################
decoration = { # Autostart
rounding = 10; ##########################################################################
rounding_power = 2;
# Change transparency of focused and unfocused windows
active_opacity = 1.0;
inactive_opacity = 1.0;
shadow = {
enabled = true;
range = 4;
render_power = 3;
#color = "rgba(1a1a1aee)";
};
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur = {
enabled = true;
size = 3;
passes = 1;
vibrancy = 0.1696;
};
};
animations = {
enabled = "yes, please :)";
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
];
};
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1]
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more # Autostart necessary processes (like notifications daemons, status bars, etc.)
dwindle = { # Or execute your favorite apps at launch like this:
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below exec-once = [
preserve_split = true; # You probably want this # "waybar"
force_split = 2; # "quickshell"
}; #"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
"${pkgs.kdePackages.polkit-kde-agent-1}/libexec/polkit-kde-authentication-agent-1"
"${pkgs.kdePackages.kwallet-pam}/libexec/pam_kwallet_init"
"fcitx5 -d"
"foot -s"
"systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP QT_QPA_PLATFORMTHEME GTK_THEME"
"dbus-update-activation-environment --systemd --all"
]
++ lib.optionals (config.home.username == "work") [
"thunderbird"
"sleep 10 && emacsclient -c --frame-parameters='((name . \"work\"))' $HOME/Documents/work/README.org"
];
# ++ lib.optional (systemName == "laptop")
# "swaybg -o eDP-1 -i ${../assets/Wallpapers/138.png}"
#
# ++ lib.optional (systemName == "pc")
# "swaybg -o HDMI-A-1 -i ${../assets/Wallpapers/138.png} -o DP-1 -i ${../assets/Wallpapers/138.png}";
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more ##########################################################################
master = { # Plugins
new_status = "master"; ##########################################################################
};
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc = {
force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false; # If true disables the random hyprland logo / anime girl background. :(
enable_swallow = true;
swallow_regex = "foot";
};
# https://wiki.hyprland.org/Configuring/Variables/#input
input = {
kb_layout = lib.mkMerge [
(lib.mkIf (systemName == "laptop") "ie")
(lib.mkIf (systemName == "pc") "us")
];
repeat_rate = 40;
repeat_delay = 500;
#kb_variant =
#kb_model =
#kb_options =
#kb_rules =
follow_mouse = 1;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
touchpad = {
natural_scroll = false;
};
};
# https://wiki.hyprland.org/Configuring/Variables/#gestures
#gestures = {
# workspace_swipe = true;
# workspace_swipe_cancel_ratio = 0.15;
#};
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device = {
name = "epic-mouse-v1";
sensitivity = -0.5;
};
bind = [
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
"${mod}, Return, exec, ${terminal}"
"${mod}, B, exec, ${browser}"
"${mod}, Q, killactive,"
"${mod}, M, exit,"
"${mod}, F, exec, ${fileManager}"
"${mod}, V, togglefloating,"
"${mod}, T, fullscreen"
"${mod}, D, exec, ${runner}"
"${mod}, E, exec, ${editor}"
#",Print, exec, grim -g \"$(slurp)\" - | swappy -f -"
",Print, exec, ${lib.getExe caelestia-cli} screenshot -r"
"${mod}, P, pseudo, " # dwindle
#focus with mainMod + arrow keys
#"${mod}, H, movefocus, l"
#"${mod}, L, movefocus, r"
"${mod}, K, movefocus, u"
"${mod}, J, movefocus, d"
"${mod} SHIFT, H, movewindow, l"
"${mod}, h, layoutmsg, move -col"
"${mod} SHIFT, L, movewindow, r"
"${mod}, L, layoutmsg, move +col"
"${mod} SHIFT, K, movewindow, u"
"${mod} SHIFT, J, movewindow, d"
# Switch workspaces with Mod + [0-9]
"${mod}, 1, split:workspace, 1 "
"${mod}, 2, split:workspace, 2 "
"${mod}, 3, split:workspace, 3 "
"${mod}, 4, split:workspace, 4 "
"${mod}, 5, split:workspace, 5 "
"${mod}, 6, split:workspace, 6 "
"${mod}, 7, split:workspace, 7 "
"${mod}, 8, split:workspace, 8 "
"${mod}, 9, split:workspace, 9 "
"${mod}, 0, split:workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"${mod} SHIFT, 1, split:movetoworkspacesilent, 1 "
"${mod} SHIFT, 2, split:movetoworkspacesilent, 2 "
"${mod} SHIFT, 3, split:movetoworkspacesilent, 3 "
"${mod} SHIFT, 4, split:movetoworkspacesilent, 4 "
"${mod} SHIFT, 5, split:movetoworkspacesilent, 5 "
"${mod} SHIFT, 6, split:movetoworkspacesilent, 6 "
"${mod} SHIFT, 7, split:movetoworkspacesilent, 7 "
"${mod} SHIFT, 8, split:movetoworkspacesilent, 8 "
"${mod} SHIFT, 9, split:movetoworkspacesilent, 9 "
"${mod} SHIFT, 0, split:movetoworkspacesilent, 10"
# Example special workspace (scratchpad)
"${mod}, SLASH, togglespecialworkspace, magic"
"${mod} SHIFT, SLASH, movetoworkspace, special:magic"
# Scroll through existing workspaces with mainMod + scroll
"${mod}, mouse_down, workspace, e+1"
"${mod}, mouse_up, workspace, e-1"
# 8BitDo keyboard big red b Button
"${mod} SHIFT, F1, exec, scrcpy --video-source=camera -m3000 --camera-facing=back --v4l2-sink=/dev/video1 --no-video-playback --no-audio"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"${mod}, mouse:272, movewindow"
"${mod}, mouse:273, resizewindow"
];
bindel = [
",XF86AudioRaiseVolume, exec, pamixer -i 5"
",XF86AudioLowerVolume, exec, pamixer -d 5"
",XF86AudioMute, exec, pamixer --toggle-mute"
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
",XF86MonBrightnessUp, exec, light -A 5"
",XF86MonBrightnessDown, exec, light -U 5"
];
bindl = [
", XF86AudioNext, exec, playerctl next"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioPlay, exec, playerctl play-pause "
", XF86AudioPrev, exec, playerctl previous "
];
binds = [
];
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrule = [
# Ignore maximize requests from apps. You'll probably like this.
"suppressevent maximize, class:.*"
# Fix some dragging issues with XWayland
"nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0"
"workspace special:magic silent, class:thunderbird"
"workspace special:magic silent, class:emacs, title:work"
];
plugin = {
split-monitor-workspaces = {
count = 10;
penable_persistent_workspaces = 1;
};
hyprscrolling = {
column_width = 0.9;
follow_focus = false;
fullscreen_on_one_column = true;
}; };
}; };
##########################################################################
# Environment
##########################################################################
env = [
"XCURSOR_SIZE, 24"
"HYPRCURSOR_SIZE, 24"
];
##########################################################################
# General / Render / Decoration / Animations
##########################################################################
# https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
# "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
# "col.inactive_border" = "rgba(595959aa)";
resize_on_border = false; # enable resizing windows by clicking and dragging on borders and gaps
allow_tearing = false; # see https://wiki.hyprland.org/Configuring/Tearing/ before enabling
layout = "master";
};
render = {
cm_enabled = true; # turn on the CM pipeline (requires Hyprland restart)
cm_fs_passthrough = 2; # passthrough only for HDR content (safer than 1)
cm_auto_hdr = 1; # auto-switch monitor to HDR for fullscreen apps
send_content_type = true; # helps auto HDR on some displays
# cm_fs_passthrough = 1; # optional: keep your existing line; you can replace with 2 as above
};
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration = {
rounding = 0;
rounding_power = 0;
active_opacity = 1.0;
inactive_opacity = 1.0;
shadow = {
enabled = true;
range = 4;
render_power = 3;
# color = "rgba(1a1a1aee)";
};
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur = {
enabled = false;
size = 3;
passes = 1;
vibrancy = 0.1696;
};
};
animations = {
enabled = "yes, please :)";
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
];
};
##########################################################################
# Layouts
##########################################################################
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle = {
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds
preserve_split = true; # You probably want this
force_split = 2;
};
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master = {
new_status = "master";
mfact = 0.5;
new_on_top = true;
};
##########################################################################
# Misc / Input / Gestures / Devices
##########################################################################
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc = {
force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true; # If true disables the random hyprland logo / anime girl background. :(
enable_swallow = true;
swallow_regex = "footclient";
};
# https://wiki.hyprland.org/Configuring/Variables/#input
input = {
kb_layout = lib.mkMerge [
(lib.mkIf (systemName == "laptop") "ie")
(lib.mkIf (systemName == "pc") "us")
];
repeat_rate = 40;
repeat_delay = 500;
# kb_variant =
# kb_model =
# kb_options =
# kb_rules =
follow_mouse = 1;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
touchpad = {
natural_scroll = false;
};
};
# https://wiki.hyprland.org/Configuring/Variables/#gestures
# gestures = {
# workspace_swipe = true;
# workspace_swipe_cancel_ratio = 0.15;
# };
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs
device = {
name = "epic-mouse-v1";
sensitivity = -0.5;
};
##########################################################################
# Binds
##########################################################################
bind = [
# Launcher / apps
"${mod}, Return, exec, ${terminal}"
"${mod}, B, exec, ${browser}"
"${mod}, F, exec, ${fileManager}"
"${mod}, D, exec, ${runner}"
"${mod}, E, exec, ${editor}"
# Session / window controls
"${mod}, Q, killactive,"
"${mod}, M, exit,"
"${mod}, V, togglefloating,"
"${mod}, T, fullscreen"
# ",Print, exec, grim -g \"$(slurp)\" - | swappy -f -"
",Print, exec, dms screenshot"
"${mod}, f1, exec, dms ipc call keybinds toggle hyprland"
# Dwindle
"${mod}, P, pseudo, "
# Focus (arrows)
"${mod}, H, movefocus, l"
"${mod}, L, movefocus, r"
"${mod}, K, movefocus, u"
"${mod}, J, movefocus, d"
# Column movement (hyprscrolling)
#"${mod}, h, layoutmsg, move -col"
#"${mod}, L, layoutmsg, move +col"
# Move window
"${mod} SHIFT, H, movewindow, l"
"${mod} SHIFT, L, movewindow, r"
"${mod} SHIFT, K, movewindow, u"
"${mod} SHIFT, J, movewindow, d"
#"${mod} SHIFT, L, layoutmsg, movewindowto r"
#"${mod} SHIFT, H, layoutmsg, movewindowto l"
#"${mod} SHIFT, K, layoutmsg, movewindowto u"
#"${mod} SHIFT, J, layoutmsg, movewindowto d"
"${mod}, semicolon, layoutmsg, promote"
#hyperscrolling stuff
"${mod}, period, layoutmsg, move +col"
"${mod}, comma, layoutmsg, move -col"
# Workspaces (switch)
"${mod}, 1, split-workspace, 1 "
"${mod}, 2, split-workspace, 2 "
"${mod}, 3, split-workspace, 3 "
"${mod}, 4, split-workspace, 4 "
"${mod}, 5, split-workspace, 5 "
"${mod}, 6, split-workspace, 6 "
"${mod}, 7, split-workspace, 7 "
"${mod}, 8, split-workspace, 8 "
"${mod}, 9, split-workspace, 9 "
"${mod}, 0, split-workspace, 10"
# Workspaces (move active window)
"${mod} SHIFT, 1, split-movetoworkspacesilent, 1 "
"${mod} SHIFT, 2, split-movetoworkspacesilent, 2 "
"${mod} SHIFT, 3, split-movetoworkspacesilent, 3 "
"${mod} SHIFT, 4, split-movetoworkspacesilent, 4 "
"${mod} SHIFT, 5, split-movetoworkspacesilent, 5 "
"${mod} SHIFT, 6, split-movetoworkspacesilent, 6 "
"${mod} SHIFT, 7, split-movetoworkspacesilent, 7 "
"${mod} SHIFT, 8, split-movetoworkspacesilent, 8 "
"${mod} SHIFT, 9, split-movetoworkspacesilent, 9 "
"${mod} SHIFT, 0, split-movetoworkspacesilent, 10"
# Special workspace (scratchpad)
"${mod}, SLASH, togglespecialworkspace, magic"
"${mod} SHIFT, SLASH, movetoworkspace, special:magic"
# Scroll through existing workspaces with mainMod + scroll
"${mod}, mouse_down, workspace, e+1"
"${mod}, mouse_up, workspace, e-1"
# 8BitDo keyboard big red b Button
"${mod} SHIFT, F1, exec, scrcpy --video-source=camera -m3000 --camera-facing=back --v4l2-sink=/dev/video1 --no-video-playback --no-audio"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"${mod}, mouse:272, movewindow"
"${mod}, mouse:273, resizewindow"
];
bindel = [
",XF86AudioRaiseVolume, exec, pamixer -i 5"
",XF86AudioLowerVolume, exec, pamixer -d 5"
",XF86AudioMute, exec, pamixer --toggle-mute"
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
# ",XF86MonBrightnessUp, exec, light -A 5"
# ",XF86MonBrightnessDown, exec, light -U 5"
# Brightness
",XF86MonBrightnessUp, global, dms ipc call brightness increment 5"
",XF86MonBrightnessDown, global, dms ipc call brightness decrement 5"
];
bindl = [
", XF86AudioNext, exec, playerctl next"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioPlay, exec, playerctl play-pause "
", XF86AudioPrev, exec, playerctl previous "
];
binds = [ ];
##########################################################################
# Rules (windows / workspaces)
##########################################################################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# Smart gaps / No gaps when only
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1]
windowrule = [
# Ignore maximize requests from apps. You'll probably like this.
"match:class .*, suppress_event maximize"
# Fix some dragging issues with XWayland
"match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0, no_focus on"
"match:class thunderbird, workspace special:magic silent"
"match:class emacs, match:title work, workspace special:magic silent"
];
}; };
}; };
} }

View File

@@ -18,23 +18,26 @@
before_sleep_cmd = "loginctl lock-session && sleep 1.5"; before_sleep_cmd = "loginctl lock-session && sleep 1.5";
ignore_dbus_inhibit = false; ignore_dbus_inhibit = false;
}; };
listener = listener = [
[ {
{ timeout = 600;
timeout = 600; on-timeout = "loginctl lock-session";
on-timeout = "loginctl lock-session";
}
]
++ lib.optional (systemName == "laptop") {
timeout = 700;
on-timeout = "light -S 0";
on-resume = "light -I";
} }
++ lib.optional (systemName == "laptop") { ]
timeout = 800; ++ lib.optional (systemName == "laptop") {
on-timeout = "systemctl suspend-then-hibernate"; timeout = 700;
}; on-timeout = "hyprctl dispatch dpms off"; # Turns off all displays
on-resume = "hyprctl dispatch dpms on"; # Turns displays back on
}
++ lib.optional (systemName == "laptop") {
timeout = 800;
on-timeout = "systemctl suspend-then-hibernate";
}
++ lib.optional (systemName == "pc") {
timeout = 700; # Adjust timeout as needed (in seconds)
on-timeout = "hyprctl dispatch dpms off"; # Turns off all displays
on-resume = "hyprctl dispatch dpms on"; # Turns displays back on
};
}; };
}; };
}; };

View File

@@ -445,11 +445,11 @@
"Alt+W".action = toggle-column-tabbed-display; "Alt+W".action = toggle-column-tabbed-display;
# Screenshots # Screenshots
"Print".action = screenshot { show-pointer = false; }; #"Print".action = screenshot { show-pointer = false; };
"Ctrl+Print".action.screenshot-screen = { "Ctrl+Print".action.screenshot-screen = {
write-to-disk = false; write-to-disk = false;
}; };
"Alt+Print".action = screenshot-window; #"Alt+Print".action = screenshot-window;
# Other # Other
"Alt+Escape".action = toggle-keyboard-shortcuts-inhibit; "Alt+Escape".action = toggle-keyboard-shortcuts-inhibit;

View File

@@ -8,9 +8,14 @@
{ {
programs.nixcord = { programs.nixcord = {
enable = true; enable = true;
discord.enable = false; discord = {
enable = false;
#package = pkgs.vencord;
};
vesktop = { vesktop = {
enable = true; enable = true;
#package = pkgs.vesktop;
#useSystemVencord = false;
}; };
config = { config = {
plugins = { plugins = {
@@ -37,15 +42,9 @@
biggerStreamPreview = { biggerStreamPreview = {
enable = true; enable = true;
}; };
clearURLs = {
enable = true;
};
copyFileContents = { copyFileContents = {
enable = true; enable = true;
}; };
emoteCloner = {
enable = true;
};
fakeNitro = { fakeNitro = {
enable = true; enable = true;
enableEmojiBypass = true; enableEmojiBypass = true;
@@ -77,9 +76,6 @@
messageLogger = { messageLogger = {
enable = true; enable = true;
}; };
nsfwGateBypass = {
enable = true;
};
petpet = { petpet = {
enable = true; enable = true;
}; };

View File

@@ -19,8 +19,8 @@
# #
#eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh) #eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
#export SSH_AUTH_SOCK #export SSH_AUTH_SOCK
browser="zen-twilight" browser="zen"
file_manager="pcmanfm" file_manager="dolphin"
terminal="footclient" terminal="footclient"
drunner="anyrun" drunner="anyrun"
editor="emacs" editor="emacs"

View File

@@ -3,79 +3,97 @@
lib, lib,
pkgs, pkgs,
window_manager, window_manager,
inputs,
... ...
}: }:
{ {
xdg = { xdg = {
enable = true; enable = true;
portal = { portal = {
enable = true; enable = true;
config.common.default = [ config.common.default = [
"hyprland" "hyprland;kde"
"river" "river"
"kde"
"gtk" "gtk"
]; ];
xdgOpenUsePortal = true; xdgOpenUsePortal = true;
extraPortals = with pkgs; [ extraPortals = with pkgs; [
xdg-desktop-portal-wlr xdg-desktop-portal-wlr
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
xdg-desktop-portal-hyprland inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
kdePackages.xdg-desktop-portal-kde
]; ];
}; };
mime.enable = true; mime.enable = true;
mimeApps = { mimeApps = {
enable = true; enable = true;
defaultApplications = defaultApplications =
let let
browser = [ "zen-twilight.desktop" ]; browser = [ "firefox.desktop" ];
fileManager = [ "pcmanfm.desktop" ]; fileManager = [ "pcmanfm.desktop" ];
editor = [ "emacs.desktop" ]; editor = [ "emacs.desktop" ];
player = [ "mpv.desktop" ]; player = [ "mpv.desktop" ];
viewer = [ "imv-dir.desktop" ]; viewer = [ "imv-dir.desktop" ];
reader = [ "org.pwmt.zathura.desktop" ]; reader = [ "org.pwmt.zathura.desktop" ];
in in {
{ # Documents
"application/pdf" = reader; "application/pdf" = reader;
"application/epub" = reader; "application/epub" = reader;
"text/html" = browser; # Text / markup
"text/xml" = browser; "text/plain" = editor;
"text/plain" = editor;
"application/x-wine-extension-ini" = editor; "application/x-wine-extension-ini" = editor;
"text/html" = browser;
"text/xml" = browser;
"application/json" = browser; # Web / XML-ish
"application/xml" = browser; "application/json" = browser;
"application/xhtml+xml" = browser; "application/xml" = browser;
"application/xhtml_xml" = browser; "application/xhtml+xml" = browser;
"application/rdf+xml" = browser; "application/xhtml_xml" = browser;
"application/rss+xml" = browser; "application/rdf+xml" = browser;
"application/x-extension-htm" = browser; "application/rss+xml" = browser;
"application/x-extension-html" = browser; "application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser; "application/x-extension-shtml" = browser;
"application/x-extension-xht" = browser; "application/x-extension-xht" = browser;
"application/x-extension-xhtml" = browser; "application/x-extension-xhtml" = browser;
# URL schemes
"x-scheme-handler/about" = browser; "x-scheme-handler/about" = browser;
"x-scheme-handler/ftp" = browser; "x-scheme-handler/ftp" = browser;
"x-scheme-handler/http" = browser; "x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser; "x-scheme-handler/https" = browser;
# Files / directories
"inode/directory" = fileManager; "inode/directory" = fileManager;
"application/zip" = fileManager; "application/zip" = fileManager;
# Audio
"audio/mpeg" = player; "audio/mpeg" = player;
"audio/aac" = player; "audio/aac" = player;
"audio/flac" = player; "audio/flac" = player;
"audio/wav" = player; "audio/wav" = player;
"video/mp4" = player;
"video/vnd.mpegurl" = player; # Video
"video/x-matroska" = player; "video/mp4" = player;
"video/vnd.mpegurl" = player;
"video/x-matroska" = player;
"application/x-mpegURL" = player; "application/x-mpegURL" = player;
"image/gif" = viewer; # Images
"image/gif" = viewer;
"image/jpeg" = viewer; "image/jpeg" = viewer;
"image/png" = viewer; "image/png" = viewer;
"image/webp" = viewer; "image/webp" = viewer;
}; };
}; };
@@ -83,13 +101,14 @@
userDirs = { userDirs = {
enable = true; enable = true;
createDirectories = true; createDirectories = true;
download = "${config.home.homeDirectory}/Downloads";
documents = "${config.home.homeDirectory}/Documents"; download = "${config.home.homeDirectory}/Downloads";
desktop = "${config.home.homeDirectory}/Desktop"; documents = "${config.home.homeDirectory}/Documents";
videos = "${config.home.homeDirectory}/Videos"; desktop = "${config.home.homeDirectory}/Desktop";
pictures = "${config.home.homeDirectory}/Pictures"; videos = "${config.home.homeDirectory}/Videos";
music = "${config.home.homeDirectory}/Music"; pictures = "${config.home.homeDirectory}/Pictures";
templates = "${config.home.homeDirectory}/.local/share/templates"; music = "${config.home.homeDirectory}/Music";
templates = "${config.home.homeDirectory}/.local/share/templates";
publicShare = "${config.home.homeDirectory}/.local/share/public"; publicShare = "${config.home.homeDirectory}/.local/share/public";
}; };
@@ -98,7 +117,8 @@
--enable-features=UseOzonePlatform --enable-features=UseOzonePlatform
--ozone-platform-hint=wayland --ozone-platform-hint=wayland
''; '';
#configFile."hypr/hyprland.conf".onChange = "hyprctl reload";
# Example:
# configFile."hypr/hyprland.conf".onChange = "hyprctl reload";
}; };
} }

View File

@@ -6,69 +6,77 @@
}: }:
{ {
programs.zsh = { programs.zsh = {
enable = true; enable = true;
dotDir = ".config/zsh"; dotDir = "${config.xdg.configHome}/zsh";
plugins = [ plugins = [
#pkgs.zsh-autosuggestions # pkgs.zsh-autosuggestions
#pkgs.spaceship-prompt # pkgs.spaceship-prompt
]; ];
autosuggestion = { autosuggestion = {
enable = true; enable = true;
highlight = "fg=#64677a,bold,underline"; highlight = "fg=#64677a,bold,underline";
}; };
history = { history = {
path = "$XDG_DATA_HOME/zsh/history"; path = "$XDG_DATA_HOME/zsh/history";
}; };
sessionVariables = { sessionVariables = {
LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib"; LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib";
HISTSIZE = 3000; HISTSIZE = 3000;
SAVEHIST = 3000; SAVEHIST = 3000;
CARGO_HOME = "$XDG_DATA_HOME/cargo"; CARGO_HOME = "$XDG_DATA_HOME/cargo";
GNUPGHOME = "$XDG_DATA_HOME/gnupg"; GNUPGHOME = "$XDG_DATA_HOME/gnupg";
GOPATH = "$XDG_DATA_HOME/go"; GOPATH = "$XDG_DATA_HOME/go";
GRADLE_USER_HOME = "$XDG_DATA_HOME/gradle"; GRADLE_USER_HOME = "$XDG_DATA_HOME/gradle";
IPYTHONDIR = "$XDG_CONFIG_HOMEipython"; IPYTHONDIR = "$XDG_CONFIG_HOME/ipython";
JUPYTER_CONFIG_DIR = "$XDG_CONFIG_HOME/jupyter"; JUPYTER_CONFIG_DIR = "$XDG_CONFIG_HOME/jupyter";
LESSHISTFILE = "$XDG_CACHE_HOME/less/history"; LESSHISTFILE = "$XDG_CACHE_HOME/less/history";
NUGET_PACKAGES = "$XDG_CACHE_HOME/NuGetPackages"; NUGET_PACKAGES = "$XDG_CACHE_HOME/NuGetPackages";
PYTHONSTARTUP = "$XDG_CONFIG_HOME/python/pythonrc"; PYTHONSTARTUP = "$XDG_CONFIG_HOME/python/pythonrc";
KERAS_HOME = "$XDG_STATE_HOME/keras"; KERAS_HOME = "$XDG_STATE_HOME/keras";
RUSTUP_HOME = "$XDG_DATA_HOME/rustup"; RUSTUP_HOME = "$XDG_DATA_HOME/rustup";
XCOMPOSECACHE = "$XDG_CACHE_HOME/X11/xcompose"; XCOMPOSECACHE = "$XDG_CACHE_HOME/X11/xcompose";
SSB_HOME = "$XDG_DATA_HOME/zoom"; SSB_HOME = "$XDG_DATA_HOME/zoom";
HISTFILE = "$XDG_STATE_HOME/zsh/history"; HISTFILE = "$XDG_STATE_HOME/zsh/history";
}; };
shellAliases = { shellAliases = {
nix-switch = "sudo nixos-rebuild switch"; ns = "nh os switch --specialisation 00-main-system";
nix-upgrade = "sudo nixos-rebuild switch --upgrade"; nu = "(cd ~/nixos-dots && nix flake update --commit-lock-file) && echo 'flake.lock updated'";
nix-edit = "sudo vim /etc/nixos/configuration.nix"; ne = "emacsclient -c ~/nixos-dots/configuration.nix";
ls = "exa -lag --icons";
upload = "~/.config/script/upload.sh"; ls = "exa -lag --icons";
record = "~/.config/script/record.sh"; upload = "~/.config/script/upload.sh";
speak = "~/.config/script/wisper.sh"; record = "~/.config/script/record.sh";
vim = "nvim"; speak = "~/.config/script/wisper.sh";
cat = "bat"; vim = "nvim";
anime = "~/repos/ani-cli/ani-cli"; cat = "bat";
hentai = "~/repos/and-scripts/fap-cli"; anime = "~/repos/ani-cli/ani-cli";
manga = "manga-cli"; hentai = "~/repos/and-scripts/fap-cli";
yt = "~/repos/ytfzf/ytfzf --thumb-viewer='kitty' -t"; manga = "manga-cli";
cd = "z"; yt = "~/repos/ytfzf/ytfzf --thumb-viewer='kitty' -t";
rm = "rip"; cd = "z";
df = "duf"; rm = "rip";
time = "hyperfine"; df = "duf";
kami = "~/Documents/Rust/kami/target/release/kami"; time = "hyperfine";
calc = "cpc"; kami = "~/Documents/Rust/kami/target/release/kami";
pdf = "mupdf"; calc = "cpc";
emacs = "emacs"; pdf = "mupdf";
river = "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river && river"; emacs = "emacs";
cp = "xcp"; river = "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river && river";
wget = "wget --hsts-file=$XDG_DATA_HOME/wget-hsts"; cp = "xcp";
wget = "wget --hsts-file=$XDG_DATA_HOME/wget-hsts";
}; };
initContent = '' initContent = ''
eval "$(${lib.getExe pkgs.zoxide} init zsh)" eval "$(${lib.getExe pkgs.zoxide} init zsh)"
eval "$(${lib.getExe pkgs.atuin} init zsh)" eval "$(${lib.getExe pkgs.atuin} init zsh)"
source ${pkgs.spaceship-prompt}/lib/spaceship-prompt/spaceship.zsh source ${pkgs.spaceship-prompt}/lib/spaceship-prompt/spaceship.zsh
''; '';
envExtra = '' envExtra = ''
${lib.getExe pkgs.macchina} ${lib.getExe pkgs.macchina}
nixdev() { nixdev() {

1184
flake.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,23 +2,39 @@
description = "Nixos config flake"; description = "Nixos config flake";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nix-index-database.url = "github:nix-community/nix-index-database";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
stylix.url = "github:nix-community/stylix"; stylix.url = "github:nix-community/stylix";
nix-colors.url = "github:Misterio77/nix-colors"; nix-colors.url = "github:Misterio77/nix-colors";
anyrun.url = "github:Kirottu/anyrun"; zen-browser = {
anyrun.inputs.nixpkgs.follows = "nixpkgs"; url = "github:0xc000022070/zen-browser-flake";
zen-browser.url = "github:0xc000022070/zen-browser-flake"; inputs = {
nixcord.url = "github:kaylorben/nixcord"; nixpkgs.follows = "nixpkgs";
niri.url = "github:sodiboo/niri-flake"; home-manager.follows = "home-manager";
};
};
nixcord = {
url = "github:kaylorben/nixcord";
inputs.nixpkgs.follows = "nixpkgs";
};
#niri.url = "github:sodiboo/niri-flake";
dgop = {
url = "github:AvengeMedia/dgop";
inputs.nixpkgs.follows = "nixpkgs";
};
dms = {
url = "github:AvengeMedia/DankMaterialShell";
inputs.nixpkgs.follows = "nixpkgs";
};
caelestia.url = "github:caelestia-dots/shell"; caelestia.url = "github:caelestia-dots/shell";
caelestia-cli.url = "github:caelestia-dots/cli"; caelestia-cli.url = "github:caelestia-dots/cli";
quickshell = { quickshell = {
# remove ?ref=v0.1.0 to track the master branch # remove ?ref=v0.1.0 to track the master branch
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell"; url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
# THIS IS IMPORTANT # THIS IS IMPORTANT
# Mismatched system dependencies will lead to crashes and other issues. # Mismatched system dependencies will lead to crashes and other issues.
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -31,23 +47,49 @@
url = "github:thiagokokada/nix-alien"; url = "github:thiagokokada/nix-alien";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
hyprland = {
url = "github:hyprwm/Hyprland";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
hyprland-hyprsplit = {
url = "github:Duckonaut/split-monitor-workspaces";
inputs.hyprland.follows = "hyprland";
};
vicinae = {
url = "github:vicinaehq/vicinae";
#inputs.nixpkgs.follows = "nixpkgs";
};
# ... your existing inputs ...
jovian = {
url = "github:Jovian-Experiments/Jovian-NixOS";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = outputs =
{ {
self, self,
nixpkgs, nixpkgs,
anyrun,
... ...
}@inputs: }@inputs:
let let
system = "x86_64-linux"; system = "x86_64-linux";
#pkgs = nixpkgs.legacyPackages.${system};
pkgs = import nixpkgs {
system = "x86_64-linux"; # or your system
config = {
allowUnfree = true;
};
};
#Avalable options are ["niri" "river" "hyprland" "all"] #Avalable options are ["niri" "river" "hyprland" "all"]
window_manager = "hyprland"; window_manager = "hyprland";
in in
{ {
nixosConfigurations = { nixosConfigurations = {
laptop = nixpkgs.lib.nixosSystem { mrfluffyLaptop = nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {
systemName = "laptop"; systemName = "laptop";
inherit inputs window_manager; inherit inputs window_manager;
@@ -55,9 +97,10 @@
modules = [ modules = [
./configuration.nix ./configuration.nix
inputs.home-manager.nixosModules.default inputs.home-manager.nixosModules.default
inputs.nix-index-database.nixosModules.nix-index
]; ];
}; };
pc = nixpkgs.lib.nixosSystem { mrfluffyPC = nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {
systemName = "pc"; systemName = "pc";
inherit inputs window_manager; inherit inputs window_manager;
@@ -65,6 +108,7 @@
modules = [ modules = [
./configuration.nix ./configuration.nix
inputs.home-manager.nixosModules.default inputs.home-manager.nixosModules.default
inputs.nix-index-database.nixosModules.nix-index
]; ];
}; };
}; };

View File

@@ -35,9 +35,14 @@
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = boot.kernelModules =
[ ] [ ]
++ (lib.optionals (systemName == "pc") [ "kvm-amd" ]) ++ (lib.optionals (systemName == "pc") [ "kvm-amd" "btusb"])
++ (lib.optionals (systemName == "laptop") [ "kvm-intel" ]); ++ (lib.optionals (systemName == "laptop") [ "kvm-intel" ]);
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
boot.kernelParams = [
# Most common working combination in 2024/2025
"btusb.enable_autosuspend=0"
"btusb.reset=1"
];
fileSystems."/" = lib.mkMerge [ fileSystems."/" = lib.mkMerge [
(lib.mkIf (systemName == "pc") { (lib.mkIf (systemName == "pc") {
@@ -56,7 +61,7 @@
fsType = "vfat"; fsType = "vfat";
}) })
(lib.mkIf (systemName == "laptop") { (lib.mkIf (systemName == "laptop") {
device = "/dev/disk/by-uuid/A4F3-8038"; device = "/dev/disk/by-uuid/FF4B-819D";
fsType = "vfat"; fsType = "vfat";
options = [ options = [
"fmask=0077" "fmask=0077"
@@ -71,6 +76,36 @@
fsType = "btrfs"; fsType = "btrfs";
}) })
]; ];
fileSystems."/home/game/Games" = lib.mkMerge [
(lib.mkIf (systemName == "pc") {
device = "/dev/disk/by-uuid/54188f21-d525-4681-a9d4-b798363eef17";
fsType = "ext4";
})
];
#fileSystems."/server" = lib.mkIf (systemName == "pc") { # or remove the mkIf if you want it on both
# device = "//192.168.1.8/mrfluffy"; # adjust the share name if its not the home share
# fsType = "cifs";
# options = let
# # Separate credentials from the Nix store (very important for security)
# credFile = "/etc/nixos/smb-credentials-mrfluffy";
# in [
# # Basic recommended options
# "credentials=${credFile}"
# "gid=users" # make files belong to the "users" group (or your preferred group)
# "uid=1000" # replace with your users UID, or use "uid=${config.users.users.yourname.uid}"
# "file_mode=0664"
# "dir_mode=0775"
# "nofail" # ← this makes the mount OPTIONAL (boot continues if unreachable)
# "noauto" # dont mount automatically at boot (optional, combine with x-systemd.automount)
# "x-systemd.automount" # creates a systemd automount unit → mounts on first access
# "x-systemd.mount-timeout=15" # dont wait forever
# "vers=3.0" # force SMB3 if the server supports it (recommended)
# # "iocharset=utf8" # usually not needed with modern servers
# # "cache=loose" # improves performance for some workloads
# ];
#};
swapDevices = swapDevices =
[ ] [ ]

101
home/game.nix Executable file
View File

@@ -0,0 +1,101 @@
{
config,
pkgs,
inputs,
lib,
window_manager,
...
}:
let
in
{
imports = [
# Core theming & integrations
inputs.nix-colors.homeManagerModules.default
inputs.stylix.homeModules.stylix
inputs.nixcord.homeModules.nixcord
# inputs.niri.homeModules.niri
# Local modules
./sessionVars.nix
./stylix.nix
./homePkgs.nix
./services.nix
# Dots
../dots/foot.nix
../dots/zsh.nix
../dots/xdg.nix
../dots/hyprland.nix
../dots/caelestia.nix
];
# You can find color schemes at: https://github.com/tinted-theming/schemes
colorScheme = inputs.nix-colors.colorSchemes.hardcore;
stylix.base16Scheme.base00 = "141414";
# Home Manager needs a bit of information about you and the paths it should manage.
home.username = "game";
home.homeDirectory = "/home/game";
# This determines compatibility with a specific Home Manager release.
home.stateVersion = "23.11"; # Please read the comment before changing.
# Example GTK block (disabled)
gtk = {
enable = true;
iconTheme = {
name = "Reversal-black-dark";
package = pkgs.reversal-icon-theme.override { allColorVariants = true; };
};
};
home.packages = with pkgs; [
############################
# Wayland / Desktop tools
############################
lswt
swaybg
wlr-randr
############################
# Experimental (inputs)
############################
# inputs.ladybird.packages."${pkgs.stdenv.hostPlatform.system}".ladybird
# ##########################
# Examples (disabled)
# ##########################
# pkgs.hello
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
];
# Dotfiles & static files managed by Home Manager
home.file = {
".config/nixpkgs/config.nix".text = ''
{ allowUnfree = true; }
'';
".config/doom".source = ../dots/doom;
# ".config/quickshell".source = ../dots/shell;
# ".config/kitty".source = ../../universal/dots/kitty;
# ".config/nvim".source = ../../universal/dots/nvim;
"Pictures/Wallpapers".source = ../assets/Wallpapers;
# ".screenrc".source = dotfiles/screenrc;
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# If you don't manage your shell with Home Manager, remember to source:
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
# /etc/profiles/per-user/mrfluffy/etc/profile.d/hm-session-vars.sh
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

View File

@@ -6,211 +6,295 @@
... ...
}: }:
let let
# hyprlock = pkgs.callPackage ../../universal/personalPKGS/hyprlock.nix {};
# hypridle = pkgs.callPackage ../../universal/personalPKGS/hypridle.nix {};
defaultProfile = {
id = 0;
name = "default";
isDefault = true;
};
in in
#hyprlock = pkgs.callPackage ../../universal/personalPKGS/hyprlock.nix {};
#hypridle = pkgs.callPackage ../../universal/personalPKGS/hypridle.nix {};
{ {
programs.nix-index.enable = true; imports = [
programs.lazygit.enable = true; inputs.zen-browser.homeModules.beta
inputs.caelestia.homeManagerModules.default
inputs.vicinae.homeManagerModules.default
];
programs = {
zen-browser = {
enable = true;
profiles.default = defaultProfile;
};
firefox = {
enable = true;
profiles.default = defaultProfile;
};
nix-index = {
enable = true;
enableZshIntegration = true;
};
lazygit.enable = true;
vscode = {
enable = true;
# Key fix: dont let the CLI touch ~/.vscode/extensions
mutableExtensionsDir = false;
# (Optional but nice) Use a build with a stable headless CLI:
# package = pkgs.vscodium; # or keep pkgs.vscode
profiles.default = {
extensions = with pkgs.vscode-extensions; [
platformio.platformio-vscode-ide
ms-vscode.cpptools
];
# Optional: keep Code from trying to self-update
# userSettings = {
# "update.mode" = "none";
# "extensions.autoUpdate" = false;
# };
};
# Optional (older HM versions expose these at top-level):
# enableUpdateCheck = false;
# enableExtensionUpdateCheck = false;
};
};
services.vicinae = {
enable = true; # default: false
systemd = {
enable = true;
environment = {
USE_LAYER_SHELL = 1;
};
};
#package = # specify package to use here. Can be omitted.
# Installing (vicinae) extensions declaratively
#settings = {
# faviconService = "twenty"; # twenty | google | none
# font.size = 11;
# popToRootOnClose = false;
# rootSearch.searchFiles = false;
# theme.name = "vicinae-dark";
# window = {
# csd = true;
# opacity = 0.95;
# rounding = 10;
# };
#};
#extensions = [
# (inputs.vicinae.mkVicinaeExtension.${pkgs.stdenv.hostPlatform.system} {
# inherit pkgs;
# name = "extension-name";
# src = pkgs.fetchFromGitHub {
# # You can also specify different sources other than github
# owner = "repo-owner";
# repo = "repo-name";
# rev = "v1.0"; # If the extension has no releases use the latest commit hash
# # You can get the sha256 by rebuilding once and then copying the output hash from the error message
# sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
# }; # If the extension is in a subdirectory you can add ` + "/subdir"` between the brace and the semicolon here
# })
#];
};
qt.enable = true; qt.enable = true;
#qt.style = "gtk2"; # qt.style = "gtk2";
#qt.platformTheme = "qt5ct"; # qt.platformTheme = "qt5ct";
#imports = [ inputs.anyrun.homeManagerModules.default ];
nixpkgs.config.allowUnfree = true; nixpkgs = {
nixpkgs.config.permittedInsecurePackages = [ "freeimage-unstable-2021-11-01" ];
programs.vscode = {
enable = true;
};
programs.anyrun = {
enable = true;
config = { config = {
plugins = [ allowUnfree = true;
# An array of all the plugins you want, which either can be paths to the .so files, or their packages android_sdk.accept_license = true;
"${pkgs.anyrun}/lib/libapplications.so" permittedInsecurePackages = [
"${pkgs.anyrun}/lib/libdictionary.so" "freeimage-unstable-2021-11-01"
"${pkgs.anyrun}/lib/libsymbols.so" "qtwebengine-5.15.19"
"${pkgs.anyrun}/lib/librink.so"
"${pkgs.anyrun}/lib/libtranslate.so"
"${pkgs.anyrun}/lib/libwebsearch.so"
]; ];
x = { rocmSupport = true;
fraction = 0.5;
};
y = {
fraction = 0.3;
};
width = {
fraction = 0.3;
};
hideIcons = false;
ignoreExclusiveZones = false;
layer = "overlay";
hidePluginInfo = false;
closeOnClick = false;
showResultsImmediately = false;
maxEntries = null;
}; };
extraCss = ''
.some_class
enable = true;{
background: red;
}
'';
extraConfigFiles."websearch.ron".text = ''
Config(
prefix: "",
// Options: Google, Ecosia, Bing, DuckDuckGo, Custom
//
// Custom engines can be defined as such:
// Custom(
// name: "Searx",
// url: "searx.be/?q={}",
// )
//
// NOTE: `{}` is replaced by the search query and `https://` is automatically added in front.
engines: [Google]
)
'';
extraConfigFiles."dictionary.ron".text = ''
Config(
prefix: "",
max_entries: 5,
)
'';
extraConfigFiles."rink.ron".text = ''
Config(
prefix: "",
max_entries: 5,
)
'';
extraConfigFiles."translate.ron".text = ''
Config(
prefix: ":",
language_delimiter: ">",
max_entries: 3,
)
'';
extraConfigFiles."symbols.ron".text = ''
Config (
// The prefix that the search needs to begin with to yield symbol results
prefix: "",
// Custom user defined symbols to be included along the unicode symbols
symbols: {
// "name": "text to be copied"
"shrug": "¯\\_()_/¯",
},
max_entries: 3,
)
'';
}; };
services.kdeconnect.enable = true; services.kdeconnect.enable = true;
# programs.obs-studio = {
# enable = true;
# plugins = with pkgs.obs-studio-plugins; [
# wlrobs
# obs-backgroundremoval
# obs-pipewire-audio-capture
# ];
# };
home.packages = with pkgs; [ home.packages = with pkgs; [
############################
# # Adds the 'hello' command to your environment. It prints a friendly # Shells & Terminals
# # "Hello, world!" when run. ############################
# pkgs.hello alacritty
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
zsh zsh
zoom-us
rink ############################
firefox # CLI Shit
btop ############################
libreoffice-fresh atuin
rustup
rustc ############################
macchina # System Utilities
hyprpaper ############################
#xwaylandvideobridge app2unit
brightnessctl
ddcutil
duf duf
grim libnotify
slurp lm_sensors
swappy macchina
heroic
gamemode
goverlay
rm-improved rm-improved
nodejs_20 xarchiver
playerctl xdg-user-dirs
pamixer
openai-whisper ############################
libreoffice # Monitoring & TUI Apps
zathura ############################
imv btop
libsixel cava
prismlauncher
godot_4 ############################
wf-recorder # Wayland / Desktop Tools
jellyfin-media-player ############################
pcmanfm grim
hyprpaper
hyprpicker hyprpicker
mangohud mangohud
#discord
mpv
rofi rofi
xdg-user-dirs slurp
xarchiver swappy
atuin wf-recorder
blender-hip
wineWowPackages.stable ############################
gdb # Audio / Media Tools
############################
openai-whisper
pamixer
playerctl
alsa-utils alsa-utils
############################
# Browsers & Web
############################
brave brave
slack firefox
ladybird
wgnord
############################
# Communication & Sharing
############################
#element-desktop
localsend
thunderbird
############################
# Documents & Viewers
############################
libreoffice
libreoffice-fresh
zathura
############################
# Media Players & Imaging
############################
imv
mpv
#upscaler
pear-desktop
libsixel
############################
# Development Toolchains
############################
gdb
nodejs_20
platformio
rustc
rustup
zed-editor zed-editor
dualsensectl android-studio-full
mangayomi claude-code
element-desktop # Language tooling from inputs
scrcpy #inputs.qs-qml.packages.${pkgs.stdenv.hostPlatform.system}.qml-ts-mode
#inputs.qs-qml.packages.${pkgs.stdenv.hostPlatform.system}.tree-sitter-qmljs
############################
# Game Dev / Engines / Creative
############################
blender
godot_4
freecad
############################
# Emulation
############################
fuse fuse
fuse-emulator fuse-emulator
fuse3 fuse3
alacritty
networkmanagerapplet ############################
#inputs.way-inhibitor.packages.${pkgs.system}.default # Android Tools
inputs.zen-browser.packages.${pkgs.system}.twilight ############################
#inputs.quickshell.packages.${pkgs.system}.default
inputs.qs-qml.packages.${pkgs.system}.tree-sitter-qmljs
inputs.qs-qml.packages.${pkgs.system}.qml-ts-mode
lxqt.pcmanfm-qt
protonup-qt
ddcutil
brightnessctl
app2unit
cava
lm_sensors
thunderbird
libnotify
localsend
android-tools android-tools
#grayjay scrcpy
youtube-music
ulauncher ############################
inputs.caelestia.packages.${pkgs.system}.caelestia-shell # Gaming & Launchers
inputs.caelestia-cli.packages.${pkgs.system}.caelestia-cli ############################
dualsensectl
gamemode
goverlay
(pkgs.heroic.override {
extraPkgs = pkgs: [ pkgs.gamescope ]; # pulls in the real package
})
prismlauncher
protonup-qt
wineWowPackages.stable
mangayomi
rink
protontricks
abaddon
############################
# KDE / File Management
############################
kdePackages.qt6ct
kdePackages.baloo # new
kdePackages.baloo-widgets # new
kdePackages.dolphin
kdePackages.ffmpegthumbs # new
kdePackages.kdegraphics-mobipocket # new
kdePackages.kdegraphics-thumbnailers # new
kdePackages.kdesdk-thumbnailers # new
kdePackages.kimageformats # new
kdePackages.kio
kdePackages.kio-extras
# kdePackages.breeze-icons
# kdePackages.dolphin-plugins
# kdePackages.kde-cli-tools
# resvg # new
adwaita-icon-theme
hicolor-icon-theme
qt6.qtsvg
adw-gtk3
pywalfox-native
############################
# Experimental (inputs)
############################
#inputs.ladybird.packages."${pkgs.stdenv.hostPlatform.system}".ladybird
#inputs.hyprlauncher.packages.${pkgs.stdenv.hostPlatform.system}.default
############################
# Blockchain (inputs)
############################
#inputs.caelestia-cli.packages.${pkgs.stdenv.hostPlatform.system}.caelestia-cli
#inputs.caelestia.packages.${pkgs.stdenv.hostPlatform.system}.caelestia-shell
]; ];
} }

View File

@@ -10,118 +10,110 @@ let
in in
{ {
imports = [ imports = [
# Core theming & integrations
inputs.nix-colors.homeManagerModules.default inputs.nix-colors.homeManagerModules.default
inputs.stylix.homeModules.stylix inputs.stylix.homeModules.stylix
inputs.nixcord.homeModules.nixcord inputs.nixcord.homeModules.nixcord
#inputs.niri.homeModules.niri # inputs.niri.homeModules.niri
# Local modules
./sessionVars.nix ./sessionVars.nix
./stylix.nix
./homePkgs.nix
./services.nix
# Dots
../dots/foot.nix ../dots/foot.nix
../dots/waybar.nix ../dots/waybar.nix
../dots/zsh.nix ../dots/zsh.nix
../dots/nixcord.nix ../dots/nixcord.nix
../dots/hyprlock.nix #../dots/hyprlock.nix
./stylix.nix
./homePkgs.nix
./services.nix
../dots/xdg.nix ../dots/xdg.nix
../dots/river.nix ../dots/river.nix
../dots/niri.nix #../dots/niri.nix
../dots/hyprland.nix ../dots/hyprland.nix
../dots/hyprpaper.nix ../dots/hyprpaper.nix
../dots/caelestia.nix
../dots/dankMeterialShell.nix
]; ];
# you can go look here for a list of color schemes https://github.com/tinted-theming/schemes # You can find color schemes at: https://github.com/tinted-theming/schemes
colorScheme = inputs.nix-colors.colorSchemes.hardcore; colorScheme = inputs.nix-colors.colorSchemes.hardcore;
stylix.base16Scheme.base00 = "141414"; stylix.base16Scheme.base00 = "141414";
# Home Manager needs a bit of information about you and the paths it should
# manage. # Home Manager needs a bit of information about you and the paths it should manage.
home.username = "mrfluffy"; home.username = "mrfluffy";
home.homeDirectory = "/home/mrfluffy"; home.homeDirectory = "/home/mrfluffy";
# This value determines the Home Manager release that your configuration is # This determines compatibility with a specific Home Manager release.
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "23.11"; # Please read the comment before changing. home.stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your # Example GTK block (disabled)
# environment. gtk = {
#gtk = { enable = true;
# enable = true; gtk3 = {
# iconTheme = { theme = {
# name = "Dracula"; name = "adw-gtk3";
# # package = pkgs.dracula-icon-theme; package = pkgs.adw-gtk3;
# }; };
#}; };
#gtk4 = {
# theme = {
# name = "adw-gtk3";
# package = pkgs.adw-gtk3;
# };
#};
iconTheme = {
name = "Reversal-black-dark";
package = pkgs.reversal-icon-theme.override { allColorVariants = true; };
};
};
home.packages = with pkgs; [ home.packages = with pkgs; [
swaybg ############################
# Wayland / Desktop tools
############################
lswt lswt
swaybg
wlr-randr wlr-randr
#inputs.ladybird.packages."${pkgs.system}".ladybird
# # Adds the 'hello' command to your environment. It prints a friendly ############################
# # "Hello, world!" when run. # Experimental (inputs)
############################
# inputs.ladybird.packages."${pkgs.stdenv.hostPlatform.system}".ladybird
# ##########################
# Examples (disabled)
# ##########################
# pkgs.hello # pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" '' # (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!" # echo "Hello, ${config.home.username}!"
# '') # '')
]; ];
# Home Manager is pretty good at managing dotfiles. The primary way to manage # Dotfiles & static files managed by Home Manager
# plain files is through 'home.file'.
home.file = { home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
#
".config/nixpkgs/config.nix".text = '' ".config/nixpkgs/config.nix".text = ''
{ allowUnfree = true; } { allowUnfree = true; }
''; '';
".config/doom".source = ../dots/doom; ".config/doom".source = ../dots/doom;
#".config/quickshell".source = ../dots/shell; # ".config/quickshell".source = ../dots/shell;
#".config/kitty".source = ../../universal/dots/kitty; # ".config/kitty".source = ../../universal/dots/kitty;
#".config/nvim".source = ../../universal/dots/nvim; # ".config/nvim".source = ../../universal/dots/nvim;
"Pictures/Wallpapers".source = ../assets/Wallpapers; "Pictures/Wallpapers".source = ../assets/Wallpapers;
# ".screenrc".source = dotfiles/screenrc;
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
}; };
# Home Manager can also manage your environment variables through # If you don't manage your shell with Home Manager, remember to source:
# 'home.sessionVariables'. If you don't want to manage your shell through Home # ~/.nix-profile/etc/profile.d/hm-session-vars.sh
# Manager then you have to manually source 'hm-session-vars.sh' located at # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
# either # /etc/profiles/per-user/mrfluffy/etc/profile.d/hm-session-vars.sh
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/mrfluffy/etc/profile.d/hm-session-vars.sh
#
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;

View File

@@ -7,26 +7,26 @@
... ...
}: }:
let let
quickshellPackage = inputs.caelestia.packages.${pkgs.system}.caelestia-shell; #quickshellPackage = inputs.caelestia.packages.${pkgs.stdenv.hostPlatform.system}.caelestia-shell;
in in
{ {
systemd.user.services.quickshell = lib.mkIf (window_manager == "hyprland") { #systemd.user.services.quickshell = lib.mkIf (window_manager == "hyprland") {
Unit = { # Unit = {
Description = "QuickShell Application"; # Description = "QuickShell Application";
After = [ "graphical-session.target" ]; # After = [ "graphical-session.target" ];
Requires = [ "graphical-session.target" ]; # Requires = [ "graphical-session.target" ];
}; # };
Service = { # Service = {
Type = "simple"; # Type = "simple";
ExecStart = "${quickshellPackage}/bin/caelestia-shell"; # ExecStart = "${quickshellPackage}/bin/caelestia-shell";
ExecStartPre = "/bin/sh -c 'test -n \"$WAYLAND_DISPLAY\"'"; # ExecStartPre = "/bin/sh -c 'test -n \"$WAYLAND_DISPLAY\"'";
Restart = "always"; # Restart = "always";
RestartSec = "5s"; # RestartSec = "5s";
}; # };
Install = { # Install = {
WantedBy = [ "graphical-session.target" ]; # WantedBy = [ "graphical-session.target" ];
}; # };
}; #};
} }

View File

@@ -7,77 +7,85 @@
let let
inherit (config.colorScheme) palette; inherit (config.colorScheme) palette;
oreo = pkgs.callPackage ../personalPKGS/oreo.nix { }; oreo = pkgs.callPackage ../personalPKGS/oreo.nix { };
openSans = {
package = pkgs.open-sans;
name = "Open Sans";
};
in in
{ {
stylix = { stylix = {
enable = true; enable = true;
autoEnable = false; autoEnable = false;
targets.font-packages.enable = true;
#targets.fontconfig.enable = true; targets = {
targets.gtk.enable = true; font-packages.enable = true;
targets.kde.enable = true; # fontconfig.enable = true;
targets.qt.enable = true;
targets.vscode.enable = true; #gtk = {
targets.lazygit.enable = true; # enable = true;
targets.foot.enable = true; # flatpakSupport.enable = true;
targets.river.enable = true; #};
targets.hyprland.enable = true; #kde.enable = true;
targets.waybar.enable = true;
targets.nixcord.enable = true; #qt.enable = true;
iconTheme = { #vscode.enable = true;
enable = true; lazygit.enable = true;
package = lib.mkForce pkgs.dracula-icon-theme; #foot.enable = true;
light = "Dracula"; river.enable = true;
dark = "Dracula"; #hyprland.enable = true;
waybar.enable = true;
nixcord.enable = true;
#zen-browser = {
# enable = true;
# profileNames = [ "default" ];
#};
#firefox = {
# enable = true;
# profileNames = [ "default" ];
#};
}; };
#iconTheme = {
# enable = true;
# #package = lib.mkForce (pkgs.reversal-icon-theme.override { allColorVariants = true; });
# light = "Reversal-black";
# dark = "Reversal-black-dark";
#};
polarity = "dark"; polarity = "dark";
image = ../assets/Wallpapers/001.jpg; image = ../assets/Wallpapers/001.jpg;
base16Scheme = { base16Scheme = {
base00 = "${palette.base00}"; inherit (palette)
base01 = "${palette.base01}"; base00 base01 base02 base03 base04 base05 base06 base07
base02 = "${palette.base02}"; base08 base09 base0A base0B base0C base0D base0E base0F;
base03 = "${palette.base03}";
base04 = "${palette.base04}";
base05 = "${palette.base05}";
base06 = "${palette.base06}";
base07 = "${palette.base07}";
base08 = "${palette.base08}";
base09 = "${palette.base09}";
base0A = "${palette.base0A}";
base0B = "${palette.base0B}";
base0C = "${palette.base0C}";
base0D = "${palette.base0D}";
base0E = "${palette.base0E}";
base0F = "${palette.base0F}";
}; };
fonts = { fonts = {
serif = { serif = openSans;
package = pkgs.open-sans; sansSerif = openSans;
name = "Open Sans";
}; # monospace = {
sansSerif = { # package = pkgs.dejavu_fonts;
package = pkgs.open-sans; # name = "DejaVu Sans Mono";
name = "Open Sans"; # };
};
#monospace = {
# package = pkgs.dejavu_fonts;
# name = "DejaVu Sans Mono";
#};
monospace = { monospace = {
package = pkgs.iosevka-comfy.comfy; package = pkgs.iosevka-comfy.comfy;
name = "Iosevka Comfy"; name = "Iosevka Comfy";
}; };
emoji = { emoji = {
package = pkgs.noto-fonts-emoji; package = pkgs.noto-fonts-color-emoji;
name = "Noto Color Emoji"; name = "Noto Color Emoji";
}; };
sizes = { sizes = {
applications = 12; applications = 12;
desktop = 12; desktop = 12;
popups = 14; popups = 14;
terminal = 16; terminal = 16;
}; };
}; };
cursor = { cursor = {
package = oreo.override { colors = [ "oreo_spark_pink_cursors" ]; }; package = oreo.override { colors = [ "oreo_spark_pink_cursors" ]; };
name = "oreo_spark_pink_cursors"; name = "oreo_spark_pink_cursors";

View File

@@ -10,119 +10,104 @@ let
in in
{ {
imports = [ imports = [
# Core theming & apps
inputs.nix-colors.homeManagerModules.default inputs.nix-colors.homeManagerModules.default
inputs.stylix.homeModules.stylix inputs.stylix.homeModules.stylix
inputs.nixcord.homeModules.nixcord inputs.nixcord.homeModules.nixcord
#inputs.niri.homeModules.niri # inputs.niri.homeModules.niri
# Local modules
./sessionVars.nix ./sessionVars.nix
./stylix.nix
./homePkgs.nix
./services.nix
# Dots
../dots/foot.nix ../dots/foot.nix
../dots/waybar.nix ../dots/waybar.nix
../dots/zsh.nix ../dots/zsh.nix
../dots/nixcord.nix ../dots/nixcord.nix
../dots/hyprlock.nix #../dots/hyprlock.nix
./stylix.nix
./homePkgs.nix
./services.nix
../dots/xdg.nix ../dots/xdg.nix
../dots/river.nix ../dots/river.nix
../dots/niri.nix #../dots/niri.nix
../dots/hyprland.nix ../dots/hyprland.nix
../dots/hyprpaper.nix ../dots/hyprpaper.nix
../dots/caelestia.nix
../dots/dankMeterialShell.nix
]; ];
# you can go look here for a list of color schemes https://github.com/tinted-theming/schemes # You can find color schemes at: https://github.com/tinted-theming/schemes
colorScheme = inputs.nix-colors.colorSchemes.hardcore; colorScheme = inputs.nix-colors.colorSchemes.blueish;
stylix.base16Scheme.base00 = "141414"; stylix.base16Scheme.base00 = "0F1417";
# Home Manager needs a bit of information about you and the paths it should
# manage. # Home Manager user information
home.username = "work"; home.username = "work";
home.homeDirectory = "/home/work"; home.homeDirectory = "/home/work";
# This value determines the Home Manager release that your configuration is # This determines compatibility with a specific Home Manager release.
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "23.11"; # Please read the comment before changing. home.stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your # Example GTK block (disabled)
# environment. gtk = {
#gtk = { enable = true;
# enable = true; iconTheme = {
# iconTheme = { name = "Reversal-black-dark";
# name = "Dracula"; package = pkgs.reversal-icon-theme.override { allColorVariants = true; };
# # package = pkgs.dracula-icon-theme; };
# }; };
#};
home.packages = with pkgs; [ home.packages = with pkgs; [
swaybg ############################
# Wayland / Desktop tools
############################
lswt lswt
swaybg
wlr-randr wlr-randr
brave
#swaynotificationcenter
#inputs.ladybird.packages."${pkgs.system}".ladybird
# # Adds the 'hello' command to your environment. It prints a friendly ############################
# # "Hello, world!" when run. # Browsers
############################
############################
# work stuff
############################
#awscli2
# swaynotificationcenter
# inputs.ladybird.packages."${pkgs.stdenv.hostPlatform.system}".ladybird
# pkgs.hello # pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" '' # (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!" # echo "Hello, ${config.home.username}!"
# '') # '')
]; ];
# Home Manager is pretty good at managing dotfiles. The primary way to manage # Dotfiles & static files managed by Home Manager
# plain files is through 'home.file'.
home.file = { home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
#
".config/nixpkgs/config.nix".text = '' ".config/nixpkgs/config.nix".text = ''
{ allowUnfree = true; } { allowUnfree = true; }
''; '';
".config/doom".source = ../dots/doom; ".config/doom".source = ../dots/doom;
#".config/quickshell".source = ../dots/shell; # ".config/quickshell".source = ../dots/shell;
#".config/kitty".source = ../../universal/dots/kitty; # ".config/kitty".source = ../../universal/dots/kitty;
#".config/nvim".source = ../../universal/dots/nvim; # ".config/nvim".source = ../../universal/dots/nvim;
"Pictures/Wallpapers".source = ../assets/Wallpapers; "Pictures/Wallpapers".source = ../assets/Wallpapers;
# ".screenrc".source = dotfiles/screenrc;
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
}; };
# Home Manager can also manage your environment variables through # If you don't manage your shell with Home Manager, remember to source:
# 'home.sessionVariables'. If you don't want to manage your shell through Home # ~/.nix-profile/etc/profile.d/hm-session-vars.sh
# Manager then you have to manually source 'hm-session-vars.sh' located at # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
# either # /etc/profiles/per-user/mrfluffy/etc/profile.d/hm-session-vars.sh
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/mrfluffy/etc/profile.d/hm-session-vars.sh
#
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;

View File

@@ -6,53 +6,54 @@
... ...
}: }:
let
isLaptop = systemName == "laptop";
isPc = systemName == "pc";
initrdBaseModules = [ "btusb" ];
initrdLPModules = [ "kvm" ]; # for laptop & pc
kernelBaseModules = [ "v4l2loopback" ];
kernelBaseParams = [ ];
kernelLPParams = [ "ipv6e=1" ]; # for laptop & pc
kernelLaptopOnly = [ "i915.force_probe=46a6" ];
kernelPcOnly = [ "video=2560x1440x32" ];
in
{ {
# Use the systemd-boot EFI boot loader.
boot = { boot = {
loader = { loader = {
systemd-boot = { systemd-boot = {
enable = true; enable = true;
extraInstallCommands = ''
${lib.getExe pkgs.gnused} -i 's/default .*/default *-specialisation-00-main-system.conf/' /boot/loader/loader.conf
'';
#sortKey = "z-normal";
}; };
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
}; };
initrd.kernelModules = lib.mkMerge [ initrd.kernelModules = lib.mkMerge [
[ initrdBaseModules
"btusb" (lib.mkIf (isLaptop || isPc) initrdLPModules)
]
(lib.mkIf (systemName == "laptop") [
"kvm"
])
(lib.mkIf (systemName == "pc") [
"amdgpu"
"kvm"
])
]; ];
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
kernelModules = [ "v4l2loopback" ]; kernelModules = kernelBaseModules;
extraModulePackages = [
extraModulePackages = [
pkgs.linuxPackages_latest.v4l2loopback pkgs.linuxPackages_latest.v4l2loopback
]; ];
kernelParams = lib.mkMerge [ kernelParams = lib.mkMerge [
(lib.mkIf (systemName == "laptop") [ (lib.mkIf (isLaptop || isPc) kernelLPParams)
"ipv6e=1" (lib.mkIf isLaptop kernelLaptopOnly)
"i915.force_probe=46a6" (lib.mkIf isPc kernelPcOnly)
])
(lib.mkIf (systemName == "pc") [
"video=2560x1440x32"
"ipv6e=1"
])
]; ];
extraModprobeConfig = '' extraModprobeConfig = ''
options v4l2loopback devices=2 video_nr=1,0 card_label="OBS Cam","phone cam" exclusive_caps=1,1 options v4l2loopback devices=2 video_nr=1,0 card_label="OBS Cam","phone cam" exclusive_caps=1,1
''; '';
plymouth = {
enable = true;
themePackages = [
pkgs.plymouth-matrix-theme
];
theme = "matrix";
};
}; };
} }

View File

@@ -8,7 +8,7 @@
{ {
#fonts.fontconfig.enable = true; #fonts.fontconfig.enable = true;
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
ubuntu_font_family ubuntu-classic
siji siji
unifont unifont
noto-fonts noto-fonts

View File

@@ -6,9 +6,18 @@
... ...
}: }:
let
# Shared VA-API / VDPAU bits across both machines
commonVA = with pkgs; [
libva
libva-vdpau-driver
libvdpau-va-gl
];
in
{ {
# hardware stuff # ── Graphics ─────────────────────────────────────────────────────────────────
hardware.graphics = lib.mkMerge [ hardware.graphics = lib.mkMerge [
# Laptop: Intel stack
(lib.mkIf (systemName == "laptop") { (lib.mkIf (systemName == "laptop") {
enable = true; enable = true;
enable32Bit = true; enable32Bit = true;
@@ -16,49 +25,57 @@
intel-media-driver intel-media-driver
intel-vaapi-driver intel-vaapi-driver
vpl-gpu-rt vpl-gpu-rt
libva ] ++ commonVA;
vaapiVdpau
libvdpau-va-gl
];
}) })
# PC: AMD/ROCm stack
(lib.mkIf (systemName == "pc") { (lib.mkIf (systemName == "pc") {
enable = true; enable = true;
enable32Bit = true; enable32Bit = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
rocmPackages.rocm-runtime #rocmPackages.rocm-core
rocmPackages.clr.icd #rocmPackages.rocminfo
rocmPackages.rocm-smi #rocmPackages.rocm-runtime
rocmPackages.clr #rocmPackages.clr.icd
rocmPackages.hipblas #rocmPackages.rocm-smi
rocmPackages.rocblas #rocmPackages.clr
rocmPackages.rocsolver ##rocmPackages.hipblas
rocmPackages.rocm-comgr #rocmPackages.rocblas
rocmPackages.rocsparse #rocmPackages.rocsolver
libva #rocmPackages.rocm-comgr
vaapiVdpau #rocmPackages.rocsparse
libvdpau-va-gl # amdvlk
]; # driversi686Linux.amdvlk
# mesa
# driversi686Linux.mesa
] ++ commonVA;
}) })
]; ];
hardware.bluetooth.enable = true; # enables support for Bluetooth # ── Bluetooth ────────────────────────────────────────────────────────────────
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot hardware.bluetooth = {
# hardware.pulseaudio = { enable = true; # Enable Bluetooth support
# package = pkgs.pulseaudioFull; powerOnBoot = true; # Power up controller on boot
# }; settings.General = {
hardware.bluetooth.settings = { #Enable = "Source,Sink,Media,Socket";
General = { # Experimental = true;
Enable = "Source,Sink,Media,Socket";
#Experimental = true;
}; };
}; };
hardware.opentabletdriver.enable = true;
hardware.opentabletdriver.daemon.enable = true;
# Enable sound.
# sound.enable = true;
#hardware.pulseaudio = {
# enable = true;
# package = pkgs.pulseaudioFull;
#};
# ── Tablets ─────────────────────────────────────────────────────────────────
hardware.opentabletdriver = {
enable = true;
daemon.enable = true;
};
hardware.enableRedistributableFirmware = true;
hardware.firmware = [
pkgs.linux-firmware
];
# ── Audio (disabled examples) ───────────────────────────────────────────────
# sound.enable = true;
# hardware.pulseaudio = {
# enable = true;
# package = pkgs.pulseaudioFull;
# };
} }

View File

@@ -1,46 +1,26 @@
{ { config, lib, pkgs, systemName, ... }:
config,
lib,
pkgs,
systemName,
...
}:
{ {
console.keyMap = "ie"; # Set console keymap based on systemName
i18n = lib.mkMerge [ console.keyMap = if systemName == "laptop" then "ie" else "us";
(lib.mkIf (systemName == "laptop") {
defaultLocale = "en_IE.UTF-8";
inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
};
extraLocaleSettings = {
LC_ADDRESS = "en_IE.UTF-8";
LC_IDENTIFICATION = "en_IE.UTF-8";
LC_MEASUREMENT = "en_IE.UTF-8";
LC_MONETARY = "en_IE.UTF-8";
LC_NAME = "en_IE.UTF-8";
LC_NUMERIC = "en_IE.UTF-8";
LC_PAPER = "en_IE.UTF-8";
LC_TELEPHONE = "en_IE.UTF-8";
LC_TIME = "en_IE.UTF-8";
};
})
(lib.mkIf (systemName == "pc") {
inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
};
})
];
# Locale settings
i18n.defaultLocale =
if systemName == "laptop"
then "en_IE.UTF-8"
else "en_US.UTF-8";
i18n.extraLocaleSettings = let
locale = if systemName == "laptop" then "en_IE.UTF-8" else "en_US.UTF-8";
in {
LC_ADDRESS = locale;
LC_IDENTIFICATION = locale;
LC_MEASUREMENT = locale;
LC_MONETARY = locale;
LC_NAME = locale;
LC_NUMERIC = locale;
LC_PAPER = locale;
LC_TELEPHONE = locale;
LC_TIME = locale;
};
} }

View File

@@ -5,35 +5,55 @@
systemName, systemName,
... ...
}: }:
let
isLaptop = systemName == "laptop";
isPc = systemName == "pc";
in
{ {
# Open ports in the firewall. networking = lib.mkMerge [
# networking.firewall.allowedTCPPorts = [ ... ]; # Hostname per system type
# networking.firewall.allowedUDPPorts = [ ... ]; (lib.mkIf isLaptop { hostName = "mrfluffyLaptop"; })
# Or disable the firewall altogether. (lib.mkIf isPc { hostName = "mrfluffyPC"; })
#networking.hostName = "mrfluffyLaptop"; # Define your hostname.
networking.hostName = lib.mkMerge [
(lib.mkIf (systemName == "laptop") "mrfluffyLaptop")
(lib.mkIf (systemName == "pc") "mrfluffyPC")
];
networking.firewall.enable = false; # Common networking config
networking.firewall.checkReversePath = false; {
# Pick only one of the below networking options. # Firewall
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. firewall = {
networking.networkmanager = { # allowedTCPPorts = [ ... ];
enable = true; # Easiest to use and most distros use this by default. # allowedUDPPorts = [ ... ];
enableStrongSwan = true; enable = false;
}; checkReversePath = false;
#networking.enableIPv6 = false; };
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/"; # NetworkManager
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; networkmanager = {
networking.extraHosts = '' enable = true;
127.0.0.0 localhost dns = "default"; # Changed from "none" to get DNS from DHCP (router)
''; };
networking.nameservers = [ "192.168.1.180" ];
# # environment.etc = { # DHCP
# # "resolv.conf".text = "nameserver 192.168.1.180\noptions edns0 trust-ad\nsearch home\n"; useDHCP = false;
# # }; dhcpcd.enable = false;
# IPv6
enableIPv6 = true;
# Hosts & DNS
extraHosts = ''
127.0.0.0 localhost
'';
# nameservers = [ ... ]; # Commented out to use DHCP-provided ones
search = [
"localdomain"
"local"
];
# Proxies (disabled)
# proxy.default = "http://user:password@proxy:port/";
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Wireless (alternative approach, disabled)
# wireless.enable = true; # wpa_supplicant
}
];
} }

View File

@@ -9,7 +9,7 @@
let let
inherit (pkgs) anime4k; inherit (pkgs) anime4k;
# Use writeText instead of writeLua luacheck can't cry about the long lines # Use writeText instead of writeLua so linters don't complain about long lines
autoAnime4k = pkgs.writeText "auto-anime4k-switcher.lua" '' autoAnime4k = pkgs.writeText "auto-anime4k-switcher.lua" ''
local function get_nearest(x, numbers) local function get_nearest(x, numbers)
local min_index = nil local min_index = nil
@@ -26,13 +26,7 @@ let
return numbers[min_index] return numbers[min_index]
end end
-- Fast -- HQ shader map
-- local shader_map = {
-- [1080] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_M.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_S.glsl",
-- [720] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_Soft_M.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_S.glsl",
-- [480] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"
-- }
-- HQ
local shader_map = { local shader_map = {
[1080] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl", [1080] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl",
[720] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_Soft_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl", [720] = "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_Soft_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl",
@@ -55,138 +49,184 @@ let
end) end)
''; '';
in in
{ {
programs.gamescope = { ############################
enable = true; # Nixpkgs & overlays
############################
}; nixpkgs = {
nixpkgs.config = { config.allowUnfree = true;
allowUnfree = true; overlays = [
(self: super: {
mpv = super.wrapMpv (super.mpv.unwrapped.override { sixelSupport = true; }) {
scripts = [ self.mpvScripts.mpris ];
};
})
];
}; };
nixpkgs.overlays = [
(self: super: {
mpv = super.wrapMpv (super.mpv.unwrapped.override { sixelSupport = true; }) {
scripts = [ self.mpvScripts.mpris ];
}; ############################
}) # Core programs
]; ############################
# Some programs need SUID wrappers, can be configured further or are programs = {
# started in user sessions. dconf.enable = true;
# programs.mtr.enable = true;
# programs.gnupg.agent = { appimage = {
# enable = true;
# enableSSHSupport = true;
# };
programs.direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
silent = true;
};
programs.virt-manager.enable = true;
programs.zsh.enable = true;
programs.corectrl.enable = true;
programs.opengamepadui = {
enable = true;
gamescopeSession.enable = true;
};
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
gamescopeSession = {
enable = true; enable = true;
binfmt = true; # Optional: Allows direct execution of .AppImage files without `appimage-run` prefix
package = pkgs.appimage-run.override {
extraPkgs = pkgs: with pkgs; [
libepoxy
jdk17
# Add more if needed, e.g., libGL libGLU for OpenGL issues
];
};
}; };
gamescope = {
enable = true;
capSysNice = false;
};
nix-index-database = {
comma = {
enable = true;
};
};
nh = {
enable = true;
clean = {
enable = true;
extraArgs = "--keep-since 4d --keep 3";
};
flake = "$HOME/nixos-dots/"; # sets NH_OS_FLAKE
};
direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
silent = true;
};
virt-manager.enable = true;
corectrl.enable = true;
opengamepadui = {
enable = true;
gamescopeSession.enable = true;
};
steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
extraCompatPackages = with pkgs; [ gamescope mangohud gamemode ];
gamescopeSession.enable = false;
};
# Dynamic linker for foreign binaries
nix-ld = {
enable = true;
libraries = with pkgs; [
gcc15.cc.lib
# add libraries here if needed
# alsa-lib
# libGL
# glibc
# ...
];
};
# Backlight tool
light.enable = true;
# NetworkManager applet
nm-applet = {
enable = false;
indicator = false;
};
thunar = {
enable = true;
plugins = with pkgs; [
thunar-archive-plugin
thunar-volman
];
};
xfconf.enable = true;
}; };
# enable dynamic bin executables
programs.nix-ld.enable = true;
programs.nix-ld.libraries = with pkgs; [
# add libraries here
#alsa-lib
#libGL
#glibc
#glib
#fontconfig
#xorg.libX11
#xorg.libXcomposite
#xorg.libXdamage
#xorg.libXfixes
#xorg.libXrender
#xorg.libXrandr
#xorg.libXtst
#xorg_sys_opengl
#xorg.libXi
#xorg.libxshmfence
#xorg.libxkbfile
#xorg.libxcb
#xorg.xcbutilwm
#xorg.xcbutilimage
#xorg.xcbutilkeysyms
#xorg.xcbutilrenderutil
#xcb-util-cursor
#libgbm
#libxkbcommon
#freetype
#dbus
#krb5
#nss
#zotero
#nspr
#gtk3
#libappindicator-gtk3
#mesa
#vulkan-loader
];
#backlight tool ############################
programs.light.enable = true; # System packages
############################
programs.nm-applet.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. # --- Editors & Shell UX ---
neovim
wl-clipboard
bat bat
anime4k neovim
socat vim
zoxide
# --- CLI essentials ---
eza eza
wget
foot
spaceship-prompt
git
bitwarden
zip
xclip
fd fd
fzf fzf
zotero ripgrep
jdk11 wget
hunspell
hunspellDicts.en_US
pavucontrol
zoxide
xcp xcp
polkit_gnome zip
unzip unzip
# --- Nix tooling ---
nil
nixfmt
inputs.nix-alien.packages.${pkgs.stdenv.hostPlatform.system}.nix-alien
# --- Wayland / Desktop ---
foot
libdecor
wl-clipboard
xwayland-satellite
# --- Media / Graphics ---
anime4k
ffmpeg ffmpeg
libva-utils libva-utils
nixfmt-rfc-style pavucontrol
nil
kdePackages.qt6ct # --- Networking / Secrets ---
ripgrep bitwarden-desktop
xwayland-satellite polkit_gnome
xclip
socat
# --- Development toolchains ---
cmake cmake
gcc15
gnumake gnumake
gcc jdk11
libtool
ladspaPlugins ladspaPlugins
inputs.nix-alien.packages.${pkgs.system}.nix-alien libtool
python311
# --- Spellcheck / Fonts ---
hunspell
hunspellDicts.en_US
# --- KDE Wallet bits ---
kdePackages.kwallet
kdePackages.kwalletmanager
kdePackages.kwallet-pam
# --- Apps ---
git
zotero
# --- File System Stuff ---
cifs-utils
]; ];
} }

View File

@@ -7,18 +7,20 @@
}: }:
{ {
###############################################
# Desktop & Input
###############################################
services.xserver.windowManager.fvwm2.gestures = true; services.xserver.windowManager.fvwm2.gestures = true;
# Enable CUPS to print documents.
services.printing.enable = true;
# power managment # Enable touchpad support (enabled by default in most desktop managers).
services.power-profiles-daemon.enable = true; services.libinput = {
services.upower = {
enable = true; enable = true;
touchpad = {
tapping = true;
# horizontalScrolling = false;
};
}; };
services.gnome.gnome-keyring.enable = true;
# Configure keymap in X11 # Configure keymap in X11
# services.xserver.xkb.layout = "us"; # services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape"; # services.xserver.xkb.options = "eurosign:e,caps:escape";
@@ -28,10 +30,10 @@
# Enable the GNOME Desktop Environment. # Enable the GNOME Desktop Environment.
# services.xserver.displayManager.gdm.enable = true; # services.xserver.displayManager.gdm.enable = true;
# services.xserver.desktopManager.gnome.enable = true; # services.xserver.desktopManager.gnome.enable = true;
#
services.flatpak.enable = true; ###############################################
services.automatic-timezoned.enable = true; # Audio / Bluetooth
###############################################
services.pipewire = lib.mkMerge [ services.pipewire = lib.mkMerge [
(lib.mkIf (systemName == "laptop") { (lib.mkIf (systemName == "laptop") {
enable = true; enable = true;
@@ -65,106 +67,159 @@
]; ];
}; };
}; };
#"93-mic-gain" = {
# "context.modules" = [
# {
# name = "libpipewire-module-filter-chain";
# args = {
# node.description = "Mic Gain Boost";
# media.name = "Mic Gain Boost";
# filter.graph = {
# nodes = [
# {
# type = "ladspa";
# name = "gain";
# plugin = "amp"; # LADSPA amplifier plugin
# label = "amp_mono";
# control = {
# "Gain" = 12.0; # Boost gain by 12 dB (adjust as needed)
# };
# }
# ];
# };
# capture.props = {
# "node.name" = "effect_input.mic_boost";
# "audio.position" = [ "MONO" ];
# };
# playback.props = {
# "node.name" = "effect_output.mic_boost";
# "audio.position" = [ "MONO" ];
# };
# };
# }
# ];
#};
}; };
#wireplumber.extraConfig = {
# "monitor.alsa.rules" = {
# rule1 = { # Give the rule a unique name
# matches = [
# { "node.name" = "~alsa_input.*"; }
# ];
# actions = {
# update-props = {
# "api.alsa.soft-mixer" = true;
# "api.alsa.volume" = "100%";
# "api.alsa.headroom" = 0;
# };
# };
# };
# };
#};
}) })
]; ];
###############################################
# nice shit
###############################################
services.ananicy = {
enable = true;
package = pkgs.ananicy-cpp;
rulesProvider = pkgs.ananicy-cpp;
extraRules = [
{
"name" = "gamescope";
"nice" = -20;
}
];
};
services.blueman.enable = true; services.blueman.enable = true;
# Enable touchpad support (enabled default in most desktopManager). ###############################################
services.libinput = { # Printing & Files
###############################################
# Enable CUPS to print documents.
services.printing.enable = true;
services.gvfs.enable = true;
services.tumbler.enable = true;
###############################################
# Time & Power
###############################################
services.automatic-timezoned.enable = true;
# Power management
services.power-profiles-daemon.enable = true;
services.upower = {
enable = true; enable = true;
touchpad = {
tapping = true;
#horizontalScrolling = false;
};
}; };
# List services that you want to enable:
# Laptop-specific lid and sleep behavior
services.logind.settings.Login = lib.mkIf (systemName == "laptop") {
HandleLidSwitch = "suspend-then-hibernate";
HandleLidSwitchExternalPower = "suspend-then-hibernate";
HandleLidSwitchDocked = "suspend-then-hibernate";
};
systemd.sleep.extraConfig = lib.mkIf (systemName == "laptop") ''
HibernateDelaySec=120min
SuspendState=mem
'';
###############################################
# Developer Tools & Services
###############################################
# direnv speedup
services.lorri.enable = true;
services.emacs = { services.emacs = {
enable = true; enable = true;
package = pkgs.emacs-pgtk; # replace with emacs-gtk, or a version provided by the community overlay if desired. # replace with emacs-gtk, or a version provided by the community overlay if desired.
package = pkgs.emacs-pgtk;
}; };
#services.flatpak.enable = true;
# Sunshine (only on PC)
services.sunshine = lib.mkIf (systemName == "pc") { services.sunshine = lib.mkIf (systemName == "pc") {
enable = true; enable = false;
settings = { settings = {
sunshine_name = "nixos"; sunshine_name = "nixos";
port = 47989; port = 47989;
output_name = 0;
}; };
applications = { applications = {
apps = [ apps = [
{ {
name = "Steam"; name = "Steam";
env = {
PATH = "$(PATH):/run/current-system/sw/bin";
};
output = "steam.txt"; output = "steam.txt";
detached = [ "${pkgs.util-linux}/bin/setsid ${pkgs.steam}/bin/steam steam://open/gamepadui" ]; detached = [
"setsid /run/current-system/sw/bin/steam steam://open/bigpicture"
];
prep-cmd = [
{
"do" = "";
"undo" = "setsid /run/current-system/sw/bin/steam steam://close/bigpicture";
}
];
image-path = "steam.png"; image-path = "steam.png";
} }
]; ];
}; };
capSysAdmin = true; capSysAdmin = false;
openFirewall = true; openFirewall = true;
}; };
# Ollama (only on PC)
services.ollama = lib.mkIf (systemName == "pc") { services.ollama = lib.mkIf (systemName == "pc") {
enable = true; enable = true;
package = pkgs.ollama-rocm;
port = 11434; port = 11434;
host = "0.0.0.0"; host = "0.0.0.0";
acceleration = "rocm";
rocmOverrideGfx = "11.0.0"; rocmOverrideGfx = "11.0.0";
environmentVariables = { environmentVariables = {
#HSA_OVERRIDE_GFX_VERSION = "11.0.0"; OLLAMA_DEBUG = "1";
#OLLAMA_KV_CACHE_TYPE = "q4"; OLLAMA_MMAP = "0";
OLLAMA_NUM_CTX = "40000";
OLLAMA_NUM_GPU = "20";
OLLAMA_FLASH_ATTENTION = "true";
# HSA_OVERRIDE_GFX_VERSION = "11.0.0";
OLLAMA_KV_CACHE_TYPE = "f16";
}; };
}; };
services.gvfs.enable = true; ###############################################
# Systemd User Services
###############################################
systemd.user.services.steam-run-url-service = {
description = "Service to launch Steam URLs via FIFO";
wantedBy = [ "default.target" ];
serviceConfig = {
ExecStart =
let
script = pkgs.writeShellScript "steam-run-url-service.sh" ''
#!/usr/bin/env bash
FIFO="/run/user/$(id --user)/steam-run-url.fifo"
if [ ! -p "$FIFO" ]; then
mkfifo "$FIFO"
fi
while true; do
if read line <"$FIFO"; then
steam_env=();
if [ "$XDG_SESSION_DESKTOP" = "sway" ] || [ "$XDG_SESSION_DESKTOP" = "Hyprland" ] || [ "$DESKTOP_SESSION" = "sway" ] || [ "$DESKTOP_SESSION" = "Hyprland" ]; then
steam_env+=("QT_QPA_PLATFORM=wayland");
fi
steam "$line"
fi
done
'';
in
"${script}";
Restart = "always";
};
path = [ pkgs.steam ];
};
###############################################
# Networking & Remote
###############################################
# services.resolved = { # services.resolved = {
# enable = true; # enable = true;
# dnssec = "true"; # dnssec = "true";
@@ -173,23 +228,25 @@
# dnsovertls = "true"; # dnsovertls = "true";
# }; # };
virtualisation.libvirtd.enable = true;
# Enable the OpenSSH daemon. # Enable the OpenSSH daemon.
services.openssh.enable = true; services.openssh.enable = true;
# laptop screen lid colose stuff
services.logind = lib.mkIf (systemName == "laptop") {
lidSwitch = "suspend-then-hibernate";
lidSwitchExternalPower = "suspend-then-hibernate";
lidSwitchDocked = "suspend-then-hibernate";
};
#suspend stuff
systemd.sleep.extraConfig = lib.mkIf (systemName == "laptop") ''
HibernateDelaySec=120min
SuspendState=mem
'';
#udev rules
#services.udev.extraRules = ''
# KERNEL=="hidraw*", KERNELS=="*054C:0CE6*", MODE="0660", TAG+="uaccess"
#'';
###############################################
# Virtualization
###############################################
virtualisation.libvirtd.enable = true;
###############################################
# Udev Rules
###############################################
services.udev.packages = [
pkgs.platformio-core
pkgs.platformio
pkgs.openocd
#pkgs.brave
];
# services.udev.extraRules = ''
# KERNEL=="hidraw*", KERNELS=="*054C:0CE6*", MODE="0660", TAG+="uaccess"
# '';
} }

View File

@@ -0,0 +1,116 @@
{
config,
lib,
pkgs,
window_manager,
systemName,
inputs,
...
}:
let
oreo = pkgs.callPackage ./personalPKGS/oreo.nix { };
# Window manager toggles
wmAll = window_manager == "all";
useRiver = window_manager == "river" || wmAll;
useNiri = window_manager == "niri" || wmAll;
useHypr = window_manager == "hyprland" || wmAll;
in
{
# greetd + tuigreet
services.greetd = {
enable = true;
restart = true;
useTextGreeter = true;
settings.default_session = {
command = "${lib.getExe pkgs.tuigreet} --window-padding 1 --time --time-format '%R - %F' --remember --remember-session --asterisks";
user = "greeter";
};
};
#services.displayManager.dms-greeter = {
# enable = true;
# compositor.name = "hyprland"; # Or "hyprland" or "sway"
# configHome = "${config.users.users.mrfluffy.home}";
#};
#services.displayManager.cosmic-greeter.enable = true;
##############################################################################
# Desktop / WM
##############################################################################
programs.river-classic.enable = useRiver;
qt = {
enable = true;
platformTheme = "qt5ct";
};
xdg.menus.enable = true;
# Work around Dolphin menu oddities: force Plasma menu definition
environment.etc."/xdg/menus/applications.menu".text =
builtins.readFile "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
# Niri (via overlay)
#nixpkgs.overlays = [ inputs.niri.overlays.niri ];
#programs.niri = {
# enable = useNiri;
# package = pkgs.niri-stable; # Only needed if not provided by the overlay
#};
# Hyprland
programs.hyprland = {
enable = useHypr;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
};
#services.desktopManager.cosmic = {
# enable = true;
#};
# X11 base (kept enabled for keymap + DM if needed)
services.xserver = {
enable = true;
xkb = {
layout = "ie";
variant = "";
};
# displayManager.lightdm = {
# enable = true;
# greeters.gtk = {
# enable = true;
# theme.package = pkgs.amarena-theme;
# theme.name = "amarena";
# cursorTheme.package = oreo.override { colors = [ "oreo_spark_pink_cursors" ]; };
# cursorTheme.name = "oreo_spark_pink_cursors";
# extraConfig = "background=${./assets/Wallpapers/138.png}";
# };
# };
};
##############################################################################
# Security / PolicyKit / PAM
##############################################################################
security = {
rtkit.enable = true;
polkit.enable = true;
pam.services = {
swaylock = { };
greetd.enableGnomeKeyring = true;
greetd.kwallet.enable = true;
};
};
##############################################################################
# Virtualisation
##############################################################################
virtualisation = {
docker = {
enable = true;
storageDriver = lib.mkIf (systemName == "pc") "btrfs";
};
libvirtd.enable = true;
};
}

View File

@@ -0,0 +1,144 @@
{
config,
lib,
pkgs,
...
}:
{
boot = {
kernelModules = lib.mkForce [
"cec"
];
kernelParams = lib.mkForce [
"ipv6e=1"
"quiet"
"splash"
];
plymouth = {
enable = true;
themePackages = [ pkgs.adi1090x-plymouth-themes ];
theme = "abstract_ring_alt";
};
};
# ── HDMI-CEC: Turn on TV when Steam specialisation starts ─────────────────────
services.udev.packages = [ pkgs.libcec ]; # ensures cec-utils is in PATH
services.blueman.enable = true;
services.seatd.enable = true;
# A user service that runs once the graphical session (Steam/GameScope) is ready
systemd.services.cec-tv-control = {
description = "Control TV via HDMI-CEC (turn on early, turn off on shutdown)";
wantedBy = [ "multi-user.target" ];
# Run very early: after modules load and local filesystems are available,
# but before Plymouth boot splash quits and before the display manager
after = [
"systemd-modules-load.service"
"local-fs.target"
"systemd-udev-settle.service"
];
before = [
"plymouth-quit-wait.service"
"greetd.service"
];
# Ensure the /dev/cec* device exists (udev settles early)
requires = [ "systemd-udev-settle.service" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
# Turn TV on during boot
ExecStart = toString (
pkgs.writeShellScript "cec-tv-on.sh" ''
sleep 3 # Give CEC time to initialize
${pkgs.libcec}/bin/cec-client -s -d 1 <<EOF
on 0
EOF
sleep 2
${pkgs.libcec}/bin/cec-client -s -d 1 <<EOF
as
EOF
''
);
# Turn TV off on shutdown/reboot (ExecStop runs when the service stops)
ExecStop = toString (
pkgs.writeShellScript "cec-tv-off.sh" ''
${pkgs.libcec}/bin/cec-client -s -d 1 <<EOF
standby 0
EOF
''
);
};
};
# THIS is the important part direct boot into the Gamescope Steam session
services.greetd = {
enable = true;
restart = true;
settings = {
# Tell greetd to auto-start the official gamescope steam session immediately
# HDMI-A-2
default_session = {
command = "${pkgs.gamescope}/bin/gamescope --prefer-output HDMI-A-2 --hdr-enabled --steam --mangoapp -- steam -pipewire-dmabuf -gamepadui -steamos3 > /dev/null 2>&1";
user = "game";
};
};
};
# Auto-login the game user (no password prompt ever)
services.getty.autologinUser = "game";
# Make sure the user service starts automatically
systemd.user.targets.graphical-session = {
# This target already exists, we just ensure its active
unitConfig = {
RefuseManualStart = false;
RefuseManualStop = false;
};
};
environment = {
systemPackages = with pkgs; [
mangohud
gamemode
gamescope-wsi
];
variables = {
#LIBSEAT_BACKEND = "logind";
};
};
jovian.decky-loader = {
enable = true;
user = "game"; # Run as your gaming user
stateDir = "/home/game/.local/share/decky"; # Store plugins/data in user's home (adjust if preferred)
# Optional: Add extra packages if needed for specific plugins
# extraPackages = with pkgs; [ some-package ];
# extraPythonPackages = ps: with ps; [ some-python-package ];
};
programs = {
gamescope = {
enable = true;
capSysNice = true;
};
steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
extraCompatPackages = with pkgs; [
gamescope
mangohud
gamemode
gamescope-wsi
];
gamescopeSession = {
enable = true;
};
};
};
}