Compare commits

...

68 Commits

Author SHA1 Message Date
3392366413 Added virtualization container policy config 2025-11-07 15:41:57 -08:00
85e1ecd46a Removed waydroid, enabled docker socket compat and added self to group, default to shutting phone screen off on rdp disconnect 2025-11-07 15:23:10 -08:00
3f83fc9d57 Also make phone stay awake in rdp mode 2025-11-07 15:04:14 -08:00
f536cea5c3 Skip fullscreen option on phonerdp 2025-11-07 14:59:57 -08:00
3d5c6a443b Added phonerdp desktop entry 2025-11-07 14:58:10 -08:00
283f9ad213 Re-enabled nvtop, nopasswd for nvtop, properly enable kitty with remote control, streamdeck now uses alltop, alltop desktop entry, j4-dmenu-desktop as wrapper for bemenu so that desktop entries show, fixed desktop entry location 2025-11-07 14:55:22 -08:00
513cf526d8 Added pinta for quick cropping and rotating of images 2025-11-06 17:40:00 -08:00
069de41562 Added quick command and desktop file to start an abd screen mirroring session for my android phone 2025-11-05 11:48:16 -08:00
5bf0216460 Switched flameshot for custom grim/wl-copy/swappy pipeline, new printscr shortcuts, minor refactoring of some modules, spotify_player swap for streamdeck, new area for hyprland scripts 2025-11-03 20:58:20 -08:00
62a324a746 Merge pull request #19 from caperren/working-branch
Fix kitty accidentally launching glances
2025-10-31 20:06:19 -07:00
e380f07018 Fix kitty accidentally launching glances 2025-10-31 20:05:23 -07:00
424a74773f Merge pull request #18 from caperren/working-branch
General cleanup and refactoring, added glances with config, managed streamdeck config and created new ui for it
2025-10-31 19:59:53 -07:00
064a996b73 Added gimp, removed glances desktop, created new managed streamdeck config with logos 2025-10-31 19:58:39 -07:00
20e338c380 Added streamdeck config and icons to home-manager, moved jetbrains toolbox desktop entry to dotfiles 2025-10-31 16:23:55 -07:00
57b5471d58 Added glances as all-in-one system monitor, initial config, desktop entry 2025-10-31 14:51:27 -07:00
c53b236d5b Merge pull request #17 from caperren/working-branch
Revert nrs alias usage, add imv viewer and set as default
2025-10-31 12:43:27 -07:00
aa5037b107 Add imv viewer, set as default 2025-10-31 12:41:25 -07:00
1de9399021 Reverted nrs alias usage 2025-10-31 01:34:28 -07:00
5748f4b2e7 Merge pull request #16 from caperren/working-branch
Trace versions of rebuild and update commands, fixes, firefox as default web handler
2025-10-30 11:01:52 -07:00
8a573b1726 Added trace versions of nix rebuild and update, fixed a font name that was changed, commented nvtop for failing build, switched btop to cuda variant 2025-10-30 10:57:17 -07:00
6d59c86b02 Make firefox default web link application, added new potential background 2025-10-29 20:49:37 -07:00
f3843fd686 Merge pull request #15 from caperren/working-branch
Added qt5ct, xev, added theming to bemenu, new background (unused), b…
2025-10-28 10:00:17 -07:00
e71e9c7a1d Added qt5ct, xev, added theming to bemenu, new background (unused), background folder refactor 2025-10-28 09:59:30 -07:00
5e44c0e28c Merge pull request #14 from caperren/working-branch
Added okular as default pdf, full texlive environment for resumes
2025-10-27 23:06:55 -07:00
6b43a528f9 Added okular as default pdf, full texlive environment for resumes 2025-10-27 15:31:20 -07:00
cdb9b3f2f8 Merge pull request #13 from caperren/working-branch
Removed slack autostart, changes to spotify and glava, bemenu over wofi app launcher
2025-10-27 12:53:09 -07:00
8f05b33391 Move spotify and create glava desktop entries within home manager, switch to bemenu from wofi, add official spotify client 2025-10-27 12:51:33 -07:00
b7ba045305 Remove slack autostart 2025-10-25 23:07:13 -07:00
c631417ec5 Merge pull request #12 from caperren/working-branch
Added inav-configurator, removed deadbeef and davinci resolve, temp r…
2025-10-25 11:08:21 -07:00
702907d454 Added inav-configurator, removed deadbeef and davinci resolve, temp removal of rpi-imager for build failure, new git user syntax 2025-10-25 11:07:00 -07:00
f15568d031 Merge pull request #11 from caperren/working-branch
More tools for rc hobby, programming, and starting slack by default on the laptop
2025-09-16 15:24:18 -07:00
76405677a0 More rc tools to hobby rc 2025-09-16 15:15:06 -07:00
ffdbf536b5 Add slack to startup app on laptop 2025-09-16 15:04:06 -07:00
cce655e475 Added more tools for rc hobby programming and config. 2025-09-14 21:32:46 -07:00
f536023a14 Merge pull request #10 from caperren/working-branch
Removed abandoned workspace_swipe hyprland option.
2025-09-14 21:24:03 -07:00
e8357a95ee Removed abandoned workspace_swipe hyprland option. 2025-09-14 21:23:22 -07:00
cb1249357d Merge pull request #9 from caperren/working-branch
Updates to programming packages, rofi, and new hobby rc group
2025-09-14 21:13:48 -07:00
5aa036def8 Updated to current rofi package naming, and py314 without "Full" suffix 2025-09-14 21:12:01 -07:00
1b45ef06f1 Added ground station software for hobby rc flying 2025-09-04 21:21:12 -07:00
692558b7b8 Add gnumake 2025-09-04 12:22:04 -07:00
ae61c718e6 Merge pull request #8 from caperren/waybar-wallpaper-misc-tweaks
Waybar wallpaper misc tweaks
2025-09-04 12:21:33 -07:00
fcf8b46e38 Add and cleanup media creation 2025-09-04 12:20:45 -07:00
88366d7dbe Media creation and desktop tweaks 2025-09-04 12:11:07 -07:00
972ca7186a Merge pull request #7 from caperren/waybar-wallpaper-misc-tweaks
Waybar wallpaper misc tweaks
2025-09-03 19:42:34 -07:00
7943950c79 Removed nwg-displays 2025-09-03 19:41:28 -07:00
b3a27173eb Commented out failing builds 2025-09-03 18:09:39 -07:00
f6087ae017 Added slack, buildable netextender, default jetbrains mono font 2025-09-03 18:09:28 -07:00
c18257042d Tweaked waybar config for a prettier setup, added hyprpaper and black default background, improved nus/nrs 2025-09-03 18:09:26 -07:00
93ac73b583 Cleanup, added more radio items, tweaks to displaylink 2025-09-02 22:38:25 -07:00
56c18519b3 Merge pull request #5 from caperren/jetbrains-thunar-waybar
Better theming, lock and idle control, wofi desktop launchers, brightness and volume defaults
2025-07-02 01:12:27 -07:00
17495207aa Default brightness for screen and keyboard on laptop, default audio volume level for all systems 2025-07-01 23:57:51 -07:00
b138866194 Add desktop file for spotify-player, jetbrains-toolbox, autostart hypridle, dotfiles for hypridle, idle_inhibitor configs, gtk app dark theme 2025-07-01 23:50:29 -07:00
37398fccac Merge pull request #4 from caperren/nr200p-fix
Fix bad comment in hyprland conf file
2025-07-01 04:13:20 -07:00
994e2b18cd Fix bad comment in hyprland conf file 2025-07-01 04:12:30 -07:00
7bc49c9ba3 Merge pull request #3 from caperren/dotfiles
Managed dotfiles with home-manager, minor application group tweaks/cleanup
2025-07-01 03:07:03 -07:00
78a9be43cb Minimal hyprland config de-duplication 2025-07-01 02:53:48 -07:00
dd2068166a Shorter aliases for nix-specific bash commands 2025-07-01 02:25:43 -07:00
366d238141 Added unused ai application group, btop, better hyprtop and hypridle, automatic nix garbage collection, and un-deduplicated hyprland configs 2025-07-01 02:20:40 -07:00
6216d108a9 Kanshi config for cap-nr200p 2025-07-01 01:40:33 -07:00
69522943d7 spotify-player dotfile, snuck in stress application for s-tui stress testing 2025-07-01 00:34:00 -07:00
03cd45aac4 Waybar configs and crestline account home manager template 2025-07-01 00:16:31 -07:00
5cd18d4fcb Home manager global settings, user settings for caperren, and dotfiles for kanshi and wlogout 2025-06-30 23:39:41 -07:00
dab6ad4f42 Merge pull request #2 from caperren/config-deduplication
Config de-duplication
2025-06-25 22:10:43 -07:00
287febcf99 Make branch name the hostname on initial setup 2025-06-25 22:09:17 -07:00
4d7f3000cd Move shell aliases to appropriate modules 2025-06-25 22:06:53 -07:00
eb1666f310 Deduplicate all applications and system settings 2025-06-25 21:59:36 -07:00
c110357818 Deduplicate firefox, thunar, xfce, internationalization settings, nix-settings, and pipewire 2025-06-25 05:55:49 -07:00
98f47d6c6a Deduplicate steam 2025-06-25 05:28:37 -07:00
101 changed files with 3525 additions and 991 deletions

4
README.md Normal file
View File

@@ -0,0 +1,4 @@
# nixos-configs
## Misc references used
* https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles/tree/main

View File

@@ -28,7 +28,6 @@
};
modules = [
./hosts/cap-slim7/configuration.nix
./modules/nixos/hyprland-amd.nix
inputs.home-manager.nixosModules.default
nixos-hardware.nixosModules.lenovo-legion-16arha7
];
@@ -38,32 +37,8 @@
system = "x86_64-linux";
modules = [
./hosts/cap-nr200p/configuration.nix
./modules/nixos/hyprland.nix
inputs.home-manager.nixosModules.default
];
};
homeConfigurations = {
"caperren@cap-slim7" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraModules = [
./home/caperren/common.nix
./home/caperren/laptop.nix
];
username = "caperren";
homeDirectory = "/home/caperren";
};
"caperren@cap-nr200p" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraModules = [
./home/caperren/common.nix
./home/caperren/desktop1.nix
];
username = "caperren";
homeDirectory = "/home/caperren";
};
};
};
}

View File

@@ -11,413 +11,50 @@
{
imports = [
# Include the results of the hardware scan.
# Hardware Scan
./hardware-configuration.nix
# Users
../../users/caperren/caperren.nix
# System Configuration
../../modules/system/cpu-amd.nix
../../modules/system/desktop.nix
../../modules/system/fonts.nix
../../modules/system/gpu-nvidia.nix
../../modules/system/home-manager-settings.nix
../../modules/system/hyprland.nix
../../modules/system/internationalization.nix
../../modules/system/networking.nix
../../modules/system/nix-settings.nix
../../modules/system/pipewire.nix
../../modules/system/security.nix
../../modules/system/systemd-boot.nix
# Application Groups
../../modules/application-groups/3d-design.nix
../../modules/application-groups/android.nix
../../modules/application-groups/downloads.nix
../../modules/application-groups/gaming.nix
../../modules/application-groups/hobby-rc.nix
../../modules/application-groups/homelab.nix
../../modules/application-groups/media.nix
../../modules/application-groups/media-creation.nix
../../modules/application-groups/pcb-design.nix
../../modules/application-groups/productivity.nix
../../modules/application-groups/programming.nix
../../modules/application-groups/radio.nix
../../modules/application-groups/social.nix
../../modules/application-groups/system-utilities.nix
../../modules/application-groups/virtualization.nix
../../modules/application-groups/web.nix
];
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot = {
# Make v4l2loopback kernel module available to NixOS.
extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
# Activate kernel module(s).
kernelModules = [
# Virtual camera.
"v4l2loopback"
# Virtual Microphone. Custom DroidCam v4l2loopback driver needed for audio.
# "snd-aloop"
];
};
boot.extraModprobeConfig = ''
# exclusive_caps: Skype, Zoom, Teams etc. will only show device when actually streaming
# card_label: Name of virtual camera, how it'll show up in Skype, Zoom, Teams
# https://github.com/umlaeute/v4l2loopback
options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
'';
#
nix.settings.download-buffer-size = 524288000;
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "cap-nr200p"; # Define your hostname. #-#
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
# hardware.u2f.enable = true;
services.flatpak.enable = true;
# Enable flakes
nix.settings.experimental-features = [
"nix-command"
"flakes"
]; # -#
networking.hostName = "cap-nr200p"; # Define your hostname.
# Set your time zone.
time.timeZone = "America/Los_Angeles";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Enable the X11 windowing system.
# services.xserver.enable = true;
# Enable the XFCE Desktop Environment.
# services.xserver.displayManager.lightdm.enable = true;
# services.xserver.desktopManager.xfce.enable = true;
# Configure keymap in X11
services.xserver.xkb = {
layout = "us";
variant = "";
};
# Enable CUPS to print documents.
services.printing.enable = true;
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
# Enable sound with pipewire.
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.caperren = {
isNormalUser = true;
description = "Corwin Perren";
extraGroups = [
"networkmanager"
"wheel"
"input"
"dialout"
"plugdev"
"adbusers"
];
packages = with pkgs; [
# thunderbird
];
};
# users.users.crestline = {
# isNormalUser = true;
# description = "Crestline";
# extraGroups = [
# "networkmanager"
# "wheel"
# "input"
# "dialout"
# ];
# packages = with pkgs; [
# # thunderbird
# ];
# };
#services.displayManager.autoLogin = {
# enable = true;
# user = "crestline";
#};
#services.xserver.displayManager.gdm.autoLogin.delay = 60;
# Install firefox.
programs.firefox.enable = true; # -#
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# 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
lf
git
wofi
nvtopPackages.full
htop
iftop
iotop
pulsemixer
arandr
util-linux
usbutils
telegram-desktop
discord
# spotify
vscode-with-extensions
swayimg
pavucontrol
networkmanagerapplet
pasystray
glava
spotify-player
hyprpicker
unetbootin
lf
dnsutils
unzip
playerctl
google-chrome
killall
#jetbrains.pycharm-professional
wget
jq
rofi-bluetooth
wl-clipboard
networkmanager
alsa-utils
nixfmt-rfc-style
mako
podman
kicad
obsidian
speedcrunch
deadbeef
vlc
sox
audacity
platformio
# flatcam
pcb2gcode
jetbrains-toolbox
arduino-ide
# python311Full
gcc
stm32cubemx
stm32flash
easyeffects
ncspot
#yubikey-personalization-gui
#yubikey-manager-qt
#zoom-us
mangohud
distrobox
# plex-desktop
rpi-imager
rpiboot
imagemagick
prusa-slicer
freecad
wlogout
gparted
nix-update
ffmpeg-full
projectm_3
heroic
flameshot
krename
xfce.mousepad
yt-dlp
soapysdr
soapyrtlsdr
# sdrpp
# brave
python3
#nodejs_23
streamdeck-ui
scrcpy
kanshi
#wsmancli
#realvnc-vnc-viewer
ncdu
hyprlock
openrgb-with-all-plugins
swayidle
transmission_4-qt
nixos-generators
openwsman
wsmancli
bs-manager
];
services.monado = {
enable = true;
defaultRuntime = true;
highPriority = true;
};
services.hardware.openrgb.enable = true;
services.meshcentral.enable = true;
programs.ydotool.enable = true;
programs.adb.enable = true;
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
services.sunshine = {
enable = true;
autoStart = true;
capSysAdmin = true;
openFirewall = true;
};
programs.bash.shellAliases = {
nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }";
nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)";
nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix";
nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}";
scrwebcam = "sudo pkill scrcpy ; sudo modprobe -r v4l2loopback ; sudo modprobe v4l2loopback && nohup scrcpy --camera-facing=back --video-source=camera --v4l2-sink=/dev/video0 --no-window --no-audio-playback 2>&1 1>/dev/null";
};
virtualisation.waydroid.enable = true;
hardware.steam-hardware.enable = true;
virtualisation.podman = {
enable = true;
dockerCompat = true;
};
services.udev.extraRules = ''
# ST-LINK V2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n"
# ST-LINK V2.1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
# ST-LINK V3
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
# CP2101 - CP 2104
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n"
# ATEN UC-232A
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n"
'';
fonts.fontDir.enable = true;
fonts.fontconfig.enable = true;
fonts.fontconfig.antialias = true;
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-emoji
liberation_ttf
fira-code
fira-code-symbols
jetbrains-mono
mplus-outline-fonts.githubRelease
dina-font
proggyfonts
font-awesome
nerd-fonts.symbols-only
nerd-fonts.jetbrains-mono
];
programs.thunar.enable = true;
programs.thunar.plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
services.gvfs.enable = true; # Mount, trash, and other functionalities
services.tumbler.enable = true; # Thumbnail support for images
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
services.blueman.enable = true;
hardware.rtl-sdr.enable = true;
security.sudo = {
enable = true;
extraRules = [
{
commands = [
{
command = "${pkgs.systemd}/bin/reboot";
options = [ "NOPASSWD" ];
}
{
command = "${pkgs.systemd}/bin/poweroff";
options = [ "NOPASSWD" ];
}
];
groups = [ "wheel" ];
}
];
};
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
gamescopeSession.enable = true;
};
programs.gamescope = {
enable = true;
capSysNice = true;
};
# 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
@@ -425,5 +62,4 @@
# 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 = "23.11"; # Did you read the comment?
}

View File

@@ -6,418 +6,51 @@
{
imports = [
# Include the results of the hardware scan.
# Hardware Scan
./hardware-configuration.nix
# Users
../../users/caperren/caperren.nix
# System Configuration
../../modules/system/cpu-amd.nix
../../modules/system/displaylink.nix
../../modules/system/fonts.nix
../../modules/system/gpu-amd.nix
../../modules/system/home-manager-settings.nix
../../modules/system/hyprland.nix
../../modules/system/internationalization.nix
../../modules/system/laptop.nix
../../modules/system/networking.nix
../../modules/system/nix-settings.nix
../../modules/system/pipewire.nix
../../modules/system/security.nix
../../modules/system/systemd-boot.nix
# Application Groups
../../modules/application-groups/3d-design.nix
../../modules/application-groups/android.nix
../../modules/application-groups/downloads.nix
../../modules/application-groups/gaming.nix
../../modules/application-groups/hobby-rc.nix
../../modules/application-groups/homelab.nix
../../modules/application-groups/media.nix
../../modules/application-groups/media-creation.nix
../../modules/application-groups/pcb-design.nix
../../modules/application-groups/productivity.nix
../../modules/application-groups/programming.nix
../../modules/application-groups/radio.nix
../../modules/application-groups/social.nix
../../modules/application-groups/system-utilities.nix
../../modules/application-groups/virtualization.nix
../../modules/application-groups/web.nix
];
#boot.kernelPackages = pkgs.linuxPackages_latest;
#
nix.settings.download-buffer-size = 524288000;
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub.configurationLimit = 8;
networking.hostName = "cap-slim7"; # Define your hostname. #-#
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
#security.sudo.extraConfig = ''
# Defaults timestamp_timeout=15
#'';
# security.polkit.extraConfig = ''
# polkit.addRule(function(action, subject) {
# if ((action.id == "org.freedesktop.login1.reboot" ||
# action.id == "org.freedesktop.login1.poweroff") &&
# subject.isInGroup("powerusers")) {
# return polkit.Result.YES;
# }
# });
# '';
# Enable networking
networking.networkmanager.enable = true;
# Enable flakes
nix.settings.experimental-features = [
"nix-command"
"flakes"
]; # -#
networking.hostName = "cap-slim7";
# Set your time zone.
time.timeZone = "America/Los_Angeles";
# time.timeZone = "Pacific/Honolulu";
#time.timeZone = "Europe/Oslo";
# services.tzupdate.enable = true;
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Enable the X11 windowing system.
# services.xserver.enable = true;
# Enable the XFCE Desktop Environment.
# services.xserver.displayManager.lightdm.enable = true;
# services.xserver.desktopManager.xfce.enable = true;
# Configure keymap in X11
services.xserver.xkb = {
layout = "us";
variant = "";
};
# Enable CUPS to print documents.
services.printing.enable = true;
# Enable sound with pipewire.
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.caperren = {
isNormalUser = true;
description = "Corwin Perren";
extraGroups = [
"networkmanager"
"wheel"
"input"
"dialout"
"plugdev"
"adbusers"
];
packages = with pkgs; [
# thunderbird
];
};
# Install firefox.
programs.firefox.enable = true; # -#
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# droidcam-obs
# teensyduino
# ];
# plugins = with obs-studio-plugins; [
# PKGS END
# bottles
# lenovo-legion
obs-studio
#(wrapOBS {
#arduino-ide
#audacity
#deadbeef
#dolphin-emu
#dualsensectl
#easyeffects
#flameshot
#gcc
#glmark2
#heroic
#jetbrains.pycharm-professional
#lf
#lf
#librewolf
#lutris
#meshcentral
#pcb2gcode
#projectm_3
#python311Full
#qemu
#quickemu
#rofi-bluetooth
#s-tui
#scrcpy
#sox
#stm32cubemx
#stm32flash
#teensy-udev-rules
#transmission_4-qt
#via
#vlc
#vscode
#winetricks
#})
vlc
alsa-utils
arandr
brightnessctl
discord
dnsutils
git
glava
google-chrome
htop
hyprpicker
iftop
iotop
jetbrains-toolbox
flameshot
jq
kanshi
killall
mako
ncdu
networkmanager
networkmanagerapplet
nixfmt-rfc-style
nodejs
nvtopPackages.full
obsidian
pasystray
pavucontrol
playerctl
podman
powertop
pulsemixer
speedcrunch
spotify-player
streamdeck-ui
telegram-desktop
unetbootin
unzip
usbutils
util-linux
wget
wl-clipboard
wlogout
wofi
xfce.mousepad
imagemagick
hyprlock
# plex-desktop
darktable
arduino
yt-dlp
nmap
signal-desktop
swayidle
hyprlock
pciutils
s-tui
woeusb
gparted
];
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
#programs.adb.enable = true;
services.meshcentral.enable = true;
services.xserver.videoDrivers = [
"displaylink"
"modesetting"
];
programs.ydotool.enable = true;
#boot.extraModulePackages = with config.boot.kernelPackages; [
# v4l2loopback
#];
#boot.extraModprobeConfig = ''
# options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
#'';
#programs.virt-manager.enable = true;
#users.groups.libvirtd.members = [ "caperren" ];
#virtualisation.libvirtd.enable = true;
#virtualisation.spiceUSBRedirection.enable = true;
#services.spice-vdagentd.enable = true;
# services.automatic-timezoned.enable = true;
programs.bash.shellAliases = {
nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }";
nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)";
nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix";
nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}";
};
#programs.appimage = {
# enable = true;
# binfmt = true;
#};
# services.power-profiles-daemon.enable = true;
services.tlp = {
enable = true;
settings = {
##### Defaults ######
# WIFI
WIFI_PWR_ON_AC = "off";
WIFI_PWR_ON_BAT = "off";
# AC
CPU_MIN_PERF_ON_AC = 0;
# BATT
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 35;
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
START_CHARGE_THRESH_BAT0 = 1; # On non-thinkpad lenovo, this sets conservation mode to 0
STOP_CHARGE_THRESH_BAT0 = 1; # ..., but to 1
###### Airplane Settings #####
# AC
# CPU_MAX_PERF_ON_AC = 35;
# CPU_SCALING_GOVERNOR_ON_AC = "powersave";
# CPU_ENERGY_PERF_POLICY_ON_AC = "power";
###### Normal Settings ######
# AC
CPU_MAX_PERF_ON_AC = 100;
CPU_SCALING_GOVERNOR_ON_AC = "performanc";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
# BATT
##### Special Overrides #####
#Optional helps save long term battery health
# START_CHARGE_THRESH_BAT0 = 0; # On non-thinkpad lenovo, this sets conservation mode to 0
# STOP_CHARGE_THRESH_BAT0 = 0; # ..., but to 1
};
};
#hardware.keyboard.qmk.enable = true;
#services.udev.packages = [ pkgs.via ];
services.udev.extraRules = ''
# ST-LINK V2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n"
# ST-LINK V2.1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
# ST-LINK V3
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
# CP2101 - CP 2104
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n"
# ATEN UC-232A
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n"
'';
fonts.fontDir.enable = true;
fonts.fontconfig.enable = true;
fonts.fontconfig.antialias = true;
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-emoji
liberation_ttf
fira-code
fira-code-symbols
jetbrains-mono
mplus-outline-fonts.githubRelease
dina-font
proggyfonts
font-awesome
nerd-fonts.symbols-only
nerd-fonts.jetbrains-mono
];
programs.thunar.enable = true;
programs.thunar.plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
services.gvfs.enable = true; # Mount, trash, and other functionalities
services.tumbler.enable = true; # Thumbnail support for images
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
services.blueman.enable = true;
security.sudo = {
enable = true;
extraRules = [
{
commands = [
{
command = "${pkgs.systemd}/bin/reboot";
options = [ "NOPASSWD" ];
}
{
command = "${pkgs.systemd}/bin/poweroff";
options = [ "NOPASSWD" ];
}
];
groups = [ "wheel" ];
}
];
};
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
gamescopeSession.enable = true;
};
# 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

View File

@@ -6,7 +6,7 @@ set -e
SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
GIT_REPO_NAME="nixos-configs"
GIT_RELEASE_BRANCH="playground"
GIT_RELEASE_BRANCH="$(hostname)"
GIT_REPO_URL="git@github.com:caperren/$GIT_REPO_NAME.git"
NIXOS_REPO_CONFIG_PARENT_PATH="/opt"

View File

@@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
prusa-slicer
freecad
];
}

View File

@@ -0,0 +1,39 @@
{ pkgs, config, ... }:
{
services.ollama = {
enable = true;
loadModels = [
"llama3.2:3b"
"phi4-reasoning:14b"
"dolphin3:8b"
"smallthinker:3b"
"gemma3:4b"
"gemma3:12b"
"gemma3:27b"
"deepcoder:14b"
"qwen3:14b"
"nomic-embed-text"
];
acceleration = "cuda";
};
services.open-webui = {
enable = true;
port = 8888;
host = "127.0.0.1";
};
environment.systemPackages = with pkgs; [
oterm
alpaca
aichat
fabric-ai
aider-chat
# tgpt
# smartcat
# nextjs-ollama-llm-ui
# open-webui
];
}

View File

@@ -0,0 +1,4 @@
{ config, pkgs, ... }:
{
programs.adb.enable = true;
}

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
gallery-dl
transmission_4-qt
yt-dlp
];
}

View File

@@ -0,0 +1,32 @@
{ pkgs, ... }:
{
# Support steam hardware like the index and steam controller
hardware.steam-hardware.enable = true;
# Steam
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
gamescopeSession.enable = true;
};
# Valve's micro-compositor
programs.gamescope = {
enable = true;
capSysNice = true;
};
# Open source OpenXR runtime for VR
services.monado = {
enable = true;
defaultRuntime = true;
highPriority = true;
};
environment.systemPackages = with pkgs; [
bs-manager
heroic
monado
];
}

View File

@@ -0,0 +1,9 @@
{ config, pkgs, ... }:
{
programs.qgroundcontrol.enable = true;
environment.systemPackages = with pkgs; [
inav-configurator
mission-planner
];
}

View File

@@ -0,0 +1,4 @@
{ pkgs, ... }:
{
services.meshcentral.enable = true;
}

View File

@@ -0,0 +1,11 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
audacity
darktable
inkscape
kdePackages.kdenlive
obs-studio
pinta
];
}

View File

@@ -0,0 +1,40 @@
{ config, pkgs, ... }:
{
boot = {
# Make v4l2loopback kernel module available to NixOS.
extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
# Activate kernel module(s).
kernelModules = [
# Virtual camera.
"v4l2loopback"
# Virtual Microphone. Custom DroidCam v4l2loopback driver needed for audio.
# "snd-aloop"
];
};
boot.extraModprobeConfig = ''
# exclusive_caps: Skype, Zoom, Teams etc. will only show device when actually streaming
# card_label: Name of virtual camera, how it'll show up in Skype, Zoom, Teams
# https://github.com/umlaeute/v4l2loopback
options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
'';
programs.bash.shellAliases = {
scrwebcam = "sudo pkill scrcpy ; sudo modprobe -r v4l2loopback ; sudo modprobe v4l2loopback && nohup scrcpy --camera-facing=back --video-source=camera --v4l2-sink=/dev/video0 --no-window --no-audio-playback 2>&1 1>/dev/null";
};
environment.systemPackages = with pkgs; [
glava
gimp
imv
plex-desktop
projectm_3
sox
spotify
spotify-player
vlc
];
}

View File

@@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
kicad
#pcb2gcode
];
}

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
obsidian
kdePackages.okular
texliveFull
];
}

View File

@@ -0,0 +1,42 @@
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
arduino-ide
dfu-util
gcc
gnumake
jetbrains-toolbox
nix-update
nixfmt-rfc-style
nixos-generators
nodejs
# platformio
python314
stm32cubemx
stm32flash
teensy-udev-rules
vscode-with-extensions
];
services.udev.extraRules = ''
# ST-LINK V2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n"
# ST-LINK V2.1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
# ST-LINK V3
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
# CP2101 - CP 2104
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n"
# ATEN UC-232A
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n"
'';
}

View File

@@ -0,0 +1,11 @@
{ config, pkgs, ... }:
{
hardware.rtl-sdr.enable = true;
environment.systemPackages = with pkgs; [
chirp
soapysdr
soapyrtlsdr
];
}

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
discord
slack
telegram-desktop
];
}

View File

@@ -0,0 +1,62 @@
{ config, pkgs, ... }:
{
hardware.keyboard.qmk.enable = true;
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
programs.thunar.enable = true;
programs.thunar.plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
programs.ydotool.enable = true;
services.glances.enable = true;
services.gvfs.enable = true; # Mount, trash, and other functionalities
services.hardware.openrgb.enable = true;
services.openssh.enable = true;
services.printing.enable = true;
services.tumbler.enable = true; # Thumbnail support for images
environment.systemPackages = with pkgs; [
btop-cuda
desktop-file-utils
dnsutils
ffmpeg-full
git
gparted
htop
iftop
imagemagick
iotop
jq
kdePackages.qt6ct
killall
kitty
swappy
lf
minicom
ncdu
networkmanager
networkmanagerapplet
nmap
nvtopPackages.full
openrgb-with-all-plugins
pciutils
rofi-bluetooth
# rpi-imager # <- Build Failure
rpiboot
s-tui
scrcpy
speedcrunch
streamdeck-ui
stress
unzip
usbutils
util-linux
wget
xev
xfce.mousepad
];
}

View File

@@ -0,0 +1,18 @@
{ config, pkgs, ... }:
{
virtualisation.containers.policy = {
default = [ { type = "insecureAcceptAnything"; } ];
};
virtualisation.podman = {
enable = true;
dockerCompat = true;
dockerSocket.enable = true;
};
environment.systemPackages = with pkgs; [
distrobox
];
}

View File

@@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
programs.firefox.enable = true;
environment.systemPackages = with pkgs; [
google-chrome
];
}

View File

@@ -0,0 +1,71 @@
# TODO: This was hacked together until it worked...Clean it up before merging
{
description = "SonicWall NetExtender Flake";
outputs =
{ self, nixpkgs, ... }:
let
systems = [ "x86_64-linux" ];
neVersion = "10.3.0-21";
neUrl = "https://software.sonicwall.com/NetExtender/NetExtender-linux-amd64-${neVersion}.tar.gz";
# ✅ Define the overlay function directly
overlay = final: prev: {
netextender = prev.stdenv.mkDerivation rec {
pname = "netextender";
version = neVersion;
src = prev.fetchurl {
url = neUrl;
sha256 = "sha256-pnF/KRQMAcPnTj0Ni+sKKkw+H72WHf2iYVkWsWNCndc=";
};
nativeBuildInputs = [
prev.autoPatchelfHook
prev.makeWrapper
];
buildInputs = [
prev.openssl_3
prev.zlib
prev.gtk2
prev.pango
prev.cairo
prev.xorg.libX11
];
unpackPhase = "tar -xzf $src";
installPhase = ''
mkdir -p $out/bin
BIN_CLI=$(find . -type f -iname nxcli -perm -111 | head -n1)
BIN_SVC=$(find . -type f -iname neservice -perm -111 | head -n1)
install -Dm755 "$BIN_CLI" $out/bin/nxcli
install -Dm755 "$BIN_SVC" $out/bin/neservice
ln -sf nxcli $out/bin/netextender
ln -sf neservice $out/bin/nxservice
for exe in nxcli neservice; do
wrapProgram $out/bin/$exe \
--prefix LD_LIBRARY_PATH : ${prev.lib.makeLibraryPath buildInputs}
done
'';
};
};
in
{
overlays = {
x86_64-linux = overlay;
};
packages = {
x86_64-linux =
let
pkgs = import nixpkgs {
system = "x86_64-linux";
overlays = [ overlay ];
};
in
{
default = pkgs.netextender;
netextender = pkgs.netextender;
};
};
};
}

View File

@@ -1,82 +0,0 @@
{ pkgs, config, ... }:
{
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
# programs.waybar = {
# enable = true;
## systemd.enable = true;
# };
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
};
# environment.sessionVariables = {
# If your cursor becomes invisible
# WLR_NO_HARDWARE_CURSORS = "1";
# Hint electron apps to use wayland
# NIXOS_OZONE_WL = "1";
# Fix waiting on vsync
# __GL_SYNC_TO_VBLANK = "0";
# };
services.xserver = {
enable = true;
videoDrivers = [ "amdgpu" ];
};
services.displayManager.gdm = {
enable = true;
wayland = true;
};
# services.displayManager.autoLogin = {
# enable = true;
# user = "caperren";
# };
hardware.graphics = {
enable = true;
enable32Bit = true;
};
# hardware.nvidia = {
# Enable modesetting for Wayland compositors (hyprland)
# modesetting.enable = true;
# Use the open source version of the kernel module (for driver 515.43.04+)
# Actually, just overridden to false for now
# open = false;
# Enable the Nvidia settings menu
# nvidiaSettings = true;
# Select the appropriate driver version for your specific GPU
# package = config.boot.kernelPackages.nvidiaPackages.stable;
# };
environment.systemPackages = [
pkgs.hyprland
pkgs.kitty
pkgs.waybar
pkgs.dunst
pkgs.libnotify
pkgs.rofi-wayland
pkgs.nwg-look
pkgs.desktop-file-utils
pkgs.grim
pkgs.slurp
pkgs.nwg-displays
(pkgs.waybar.overrideAttrs (oldAttrs: {
mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ];
}))
];
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
}

View File

@@ -1,77 +0,0 @@
{ pkgs, config, ... }:
{
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
};
environment.sessionVariables = {
# If your cursor becomes invisible
WLR_NO_HARDWARE_CURSORS = "1";
# Hint electron apps to use wayland
NIXOS_OZONE_WL = "1";
# Fix waiting on vsync
__GL_SYNC_TO_VBLANK = "0";
};
services.xserver = {
enable = true;
videoDrivers = [ "nvidia" ];
};
services.displayManager.gdm = {
enable = true;
wayland = true;
};
# services.displayManager.autoLogin = {
# enable = true;
# user = "caperren";
# };
hardware.graphics = {
enable = true;
enable32Bit = true;
};
hardware.nvidia = {
# Enable modesetting for Wayland compositors (hyprland)
modesetting.enable = true;
# Use the open source version of the kernel module (for driver 515.43.04+)
# Actually, just overridden to false for now
open = false;
# Enable the Nvidia settings menu
nvidiaSettings = true;
# Select the appropriate driver version for your specific GPU
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
environment.systemPackages = [
pkgs.hyprland
pkgs.kitty
pkgs.waybar
pkgs.dunst
pkgs.libnotify
pkgs.rofi-wayland
pkgs.nwg-look
pkgs.desktop-file-utils
pkgs.grim
pkgs.slurp
pkgs.nwg-displays
(pkgs.waybar.overrideAttrs (oldAttrs: {
mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ];
}))
];
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
}

View File

@@ -0,0 +1,4 @@
{ config, lib, ... }:
{
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -0,0 +1,10 @@
{ config, pkgs, ... }:
{
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
services.blueman.enable = true;
environment.systemPackages = with pkgs; [
];
}

View File

@@ -0,0 +1,17 @@
{ config, pkgs, ... }:
{
boot = {
extraModulePackages = [ config.boot.kernelPackages.evdi ];
initrd = {
# List of modules that are always loaded by the initrd.
kernelModules = [
"evdi"
];
};
};
services.xserver.videoDrivers = [
"displaylink"
"modesetting"
];
}

28
modules/system/fonts.nix Normal file
View File

@@ -0,0 +1,28 @@
{ config, pkgs, ... }:
{
fonts.fontDir.enable = true;
fonts.fontconfig = {
enable = true;
antialias = true;
defaultFonts = {
monospace = [ "JetBrains Mono" ];
sansSerif = [ "JetBrains Mono" ];
serif = [ "JetBrains Mono" ];
};
};
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-color-emoji
liberation_ttf
fira-code
fira-code-symbols
jetbrains-mono
mplus-outline-fonts.githubRelease
dina-font
proggyfonts
font-awesome
nerd-fonts.symbols-only
nerd-fonts.jetbrains-mono
];
}

View File

@@ -0,0 +1,5 @@
{ config, pkgs, ... }:
{
services.xserver.videoDrivers = [ "amdgpu" ];
}

View File

@@ -0,0 +1,26 @@
{ config, pkgs, ... }:
{
environment.sessionVariables = {
# If your cursor becomes invisible
WLR_NO_HARDWARE_CURSORS = "1";
# Hint electron apps to use wayland
NIXOS_OZONE_WL = "1";
# Fix waiting on vsync
__GL_SYNC_TO_VBLANK = "0";
};
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
# Enable modesetting for Wayland compositors (hyprland)
modesetting.enable = true;
# Use the open source version of the kernel module (for driver 515.43.04+)
# Actually, just overridden to false for now
open = false;
# Enable the Nvidia settings menu
nvidiaSettings = true;
# Select the appropriate driver version for your specific GPU
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
}

View File

@@ -0,0 +1,5 @@
{ config, pkgs, ... }:
{
home-manager.useGlobalPkgs = true;
home-manager.backupFileExtension = "bkp";
}

View File

@@ -0,0 +1,46 @@
{ config, pkgs, ... }:
{
hardware.graphics = {
enable = true;
enable32Bit = true;
};
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
programs.hyprlock.enable = true;
programs.waybar.enable = true;
services.displayManager.gdm = {
enable = true;
wayland = true;
};
services.hypridle.enable = true;
services.xserver.enable = true;
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
environment.systemPackages = with pkgs; [
arandr
bemenu
dunst
grim
hyprpaper
hyprpicker
j4-dmenu-desktop
kanshi
libnotify
mako
nwg-look
rofi
slurp
swayimg
wl-clipboard
wlogout
];
}

View File

@@ -0,0 +1,24 @@
{ config, pkgs, ... }:
{
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Configure keymap in X11
services.xserver.xkb = {
layout = "us";
variant = "";
};
}

56
modules/system/laptop.nix Normal file
View File

@@ -0,0 +1,56 @@
{ config, pkgs, ... }:
{
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = false; # powers up the default Bluetooth controller on boot
services.blueman.enable = true;
environment.systemPackages = with pkgs; [
brightnessctl
powertop
];
services.tlp = {
enable = true;
settings = {
##### Defaults ######
# WIFI
WIFI_PWR_ON_AC = "off";
WIFI_PWR_ON_BAT = "off";
# AC
CPU_MIN_PERF_ON_AC = 0;
# BATT
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 35;
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
START_CHARGE_THRESH_BAT0 = 1; # On non-thinkpad lenovo, this sets conservation mode to 0
STOP_CHARGE_THRESH_BAT0 = 1; # ..., but to 1
###### Airplane Settings #####
# AC
# CPU_MAX_PERF_ON_AC = 35;
# CPU_SCALING_GOVERNOR_ON_AC = "powersave";
# CPU_ENERGY_PERF_POLICY_ON_AC = "power";
###### Normal Settings ######
# AC
CPU_MAX_PERF_ON_AC = 100;
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
# BATT
##### Special Overrides #####
#Optional helps save long term battery health
# START_CHARGE_THRESH_BAT0 = 0; # On non-thinkpad lenovo, this sets conservation mode to 0
# STOP_CHARGE_THRESH_BAT0 = 0; # ..., but to 1
};
};
}

View File

@@ -0,0 +1,13 @@
{ config, pkgs, ... }:
{
# Enable networking
networking.networkmanager.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
networking.firewall.enable = false;
}

View File

@@ -0,0 +1,39 @@
{ config, pkgs, ... }:
{
# Enable flakes
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# Generally want a larger download buffer
nix.settings.download-buffer-size = 524288000;
nix.settings.auto-optimise-store = true;
nix.optimise.automatic = true;
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 14d";
};
programs.bash.shellAliases = {
# Nix rebuild, switch
nrs = "bash -c \"cd /etc/nixos && sudo nixos-rebuild switch --flake .#$(hostname) ; exit\"";
# with tracing
tnrs = "bash -c \"cd /etc/nixos && sudo nixos-rebuild switch --show-trace --flake .#$(hostname) ; exit\"";
# Nix flake update, rebuild, switch
nus = "bash -c \"cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname) ; exit\"";
# with tracing
tnus = "bash -c \"cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --show-trace --flake .#$(hostname) ; exit\"";
# Special cleanup, needed when efi partition runs out of space. Deletes all but the last five generations.
# Remember to make that partition bigger in the future...
neficlean = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}";
};
}

View File

@@ -0,0 +1,20 @@
{ config, pkgs, ... }:
{
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
environment.systemPackages = with pkgs; [
pavucontrol
pasystray
alsa-utils
pulsemixer
easyeffects
];
}

View File

@@ -0,0 +1,31 @@
{ pkgs, ... }:
{
security.sudo = {
enable = true;
extraRules = [
{
groups = [ "wheel" ];
commands = [
{
command = "${pkgs.systemd}/bin/reboot";
options = [ "NOPASSWD" ];
}
{
command = "${pkgs.systemd}/bin/poweroff";
options = [ "NOPASSWD" ];
}
];
}
{
users = [ "caperren" ];
commands = [
{
command = "${pkgs.nvtopPackages.full}/bin/nvtop";
options = [ "NOPASSWD" "SETENV" ];
}
];
}
];
};
}

View File

@@ -0,0 +1,7 @@
{ pkgs, ... }:
{
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub.configurationLimit = 8;
}

10
modules/system/xfce.nix Normal file
View File

@@ -0,0 +1,10 @@
{ config, pkgs, ... }:
{
# Enable the X11 windowing system.
services.xserver.enable = true;
# Enable the XFCE Desktop Environment.
services.xserver.displayManager.lightdm.enable = true;
services.xserver.desktopManager.xfce.enable = true;
}

148
users/caperren/caperren.nix Normal file
View File

@@ -0,0 +1,148 @@
{ config, pkgs, ... }:
let
hyprlandConfigPath = ./. + "/dotfiles/hyprland/${config.networking.hostName}";
kanshiConfigPath = ./. + "/dotfiles/kanshi/${config.networking.hostName}";
spotifyPlayerAppTomlTextTemplate = builtins.readFile ./dotfiles/spotify-player/app.toml;
spotifyPlayerAppTomlText =
builtins.replaceStrings [ "{{hostname}}" ] [ config.networking.hostName ]
spotifyPlayerAppTomlTextTemplate;
waybarConfigPath = ./. + "/dotfiles/waybar/${config.networking.hostName}";
in
{
users.users.caperren = {
isNormalUser = true;
description = "Corwin Perren";
extraGroups = [
"adbusers"
"dialout"
"input"
"networkmanager"
"plugdev"
"podman"
"wheel"
];
};
home-manager.users.caperren = {
home.username = "caperren";
home.homeDirectory = "/home/caperren";
home.stateVersion = "25.05";
home.packages = with pkgs; [
obsidian
];
programs.git = {
enable = true;
settings.user = {
name = "Corwin Perren";
email = "caperren@gmail.com";
};
};
programs.bash.enable = true;
programs.bemenu.enable = true;
programs.kitty = {
enable = true;
font.name = "JetBrains Mono";
settings = {
allow_remote_control = true;
};
};
# Assets/scripts
home.file.".config/streamdeck-ui/icons".source = ./dotfiles/streamdeck/icons;
home.file.".config/hypr/scripts".source = ./dotfiles/.config/hypr/scripts;
# Application config files
home.file.".config/containers/policy.json".source = ./dotfiles/.config/containers/policy.json;
home.file.".config/glances/glances.conf".source = ./dotfiles/.config/glances/glances.conf;
home.file.".config/hypr/hypridle.conf".source = ./dotfiles/hypridle/hypridle.conf;
home.file.".config/hypr/hyprpaper.conf".source = ./dotfiles/hyprpaper/hyprpaper.conf;
home.file.".config/hypr/backgrounds/black.png".source = ./dotfiles/hyprpaper/backgrounds/black.png;
home.file.".config/hypr/hyprland-common.conf".source = ./dotfiles/hyprland/hyprland-common.conf;
home.file.".config/hypr/hyprland.conf".source = hyprlandConfigPath + "/hyprland.conf";
home.file.".config/kanshi/config".source = kanshiConfigPath + "/config";
home.file.".config/streamdeck-ui/.streamdeck_ui_link.json" = {
source = ./dotfiles/streamdeck/.streamdeck_ui.json;
# Copy the symlinked version to its final location, otherwise it has no write permissions
# on the config file, which breaks the entire app
onChange = ''
cat ~/.config/streamdeck-ui/.streamdeck_ui_link.json > ~/.streamdeck_ui.json
chmod 600 ~/.streamdeck_ui.json
'';
force = true;
};
home.file.".config/spotify-player/app.toml".text = spotifyPlayerAppTomlText;
home.file.".config/waybar/config".source = waybarConfigPath + "/config";
home.file.".config/waybar/style.css".source = ./dotfiles/waybar/style.css;
home.file.".config/wlogout/layout".source = ./dotfiles/wlogout/layout;
# Desktop entry files so bemenu can find them
home.file.".local/share/applications/alltop.desktop".source =
./dotfiles/.local/share/applications/alltop.desktop;
home.file.".local/share/applications/glava.desktop".source =
./dotfiles/.local/share/applications/glava.desktop;
home.file.".local/share/applications/phonerdp.desktop".source =
./dotfiles/.local/share/applications/phonerdp.desktop;
home.file.".local/share/applications/spotify-player.desktop".source =
./dotfiles/.local/share/applications/spotify-player.desktop;
# Custom bash aliases
home.shellAliases = {
# Phone remote desktop over usb (adb), with some default flags I want
phonerdp = "scrcpy --no-audio --orientation=0 --turn-screen-off --stay-awake --power-off-on-close";
# Streamdeck isn't easy to manually edit, so make a save command to copy any updates to the repo
savestreamdeck = "cp ~/.streamdeck_ui.json ~/.nixos-configs/users/caperren/dotfiles/streamdeck/.streamdeck_ui.json";
# Nice to have an alias if I ever want to launch this from cmdline, or see the dbus help string
screenshot = "~/.config/hypr/scripts/screenshot.sh";
};
# Theming
gtk = {
enable = true;
theme = {
name = "Adwaita-dark"; # Or another dark theme
package = pkgs.gnome-themes-extra;
};
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
cursorTheme = {
name = "Bibata-Modern-Ice";
package = pkgs.bibata-cursors;
};
font.name = "JetBrains Mono 11";
};
home.sessionPath = [
"$HOME/.local/share"
];
home.sessionVariables = {
GTK_THEME = "Adwaita-dark";
};
xdg.mimeApps = {
enable = true;
defaultApplications = {
"application/pdf" = [ "okularApplication_pdf.desktop" ];
"x-scheme-handler/http" = [ "firefox.desktop" ];
"x-scheme-handler/https" = [ "firefox.desktop" ];
"text/html" = [ "firefox.desktop" ];
"image/*" = [ "imv.desktop" ];
};
};
xresources.properties = {
"Xft.font" = "JetBrains Mono";
};
};
}

View File

@@ -0,0 +1,7 @@
{
"default": [
{
"type": "insecureAcceptAnything"
}
]
}

View File

@@ -0,0 +1,44 @@
##############################################################################
# Custom Glances Configuration Overrides
##############################################################################
[global]
# Managed by NixOS configs
check_update=false
[percpu]
# All of my systems are 16 core
max_cpu_display=16
[ip]
# Useful for validating vpn connectivity
public_disabled=False
public_refresh_interval=300
public_api=https://ipv4.ipleak.net/json/
public_field=ip
public_template={continent_code}/{country_code}/{region_code}/{city_name}/{isp_name}
[diskio]
# Don't care about loop devices
hide=loop.*,/dev/loop.*
[smart]
disable=False
[fs]
# Nix store is duplicate of / on NixOS
hide=/nix/store
# Leaving this all commented for now as it doesn't like large number of files
#[folders]
# Home overview is helpful
#folder_1_path=/home/caperren
#folder_1_refresh=120
# Steam is normally the largest
#folder_2_path=/home/caperren/.local/share/Steam
#folder_2_refresh=120
# Then Downloads next
#folder_3_path=/home/caperren/Downloads
#folder_3_refresh=120
# With code generally coming last
#folder_4_path=/home/caperren/code
#folder_4_refresh=120

View File

@@ -0,0 +1,116 @@
#!/usr/bin/env bash
# Unashamedly taken from: https://www.reddit.com/r/hyprland/comments/13ivh0c/comment/jkgk65k
# Small edits made for my particular needs
# Flags:
# r: region
# s: screen
#
# c: clipboard
# f: file
# i: interactive
# p: pixel
# Example hyprland bindings
#bind = CTRL, SUPER, ALT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh
#bind = , PRINT, exec, ~/.config/hypr/scripts/screenshot.sh rc
#bind = SUPER, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh rf
#bind = CTRL, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh ri
#bind = SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh sc
#bind = SUPER SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh sf
#bind = CTRL SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh si
#bind = ALT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh p
screenshotPath=~/Pictures/screenshots
hyprpicker_launch(){
# Start hyprpicker with screen render (freeze), no fancy, no zoom
# We're just using this to lock the screen in place for grim ingest
hyprpicker -r -n -z -d >/dev/null 2>&1 &
sleep 0.5
}
hyprpicker_kill(){
killall hyprpicker >/dev/null 2>&1
}
trap hyprpicker_kill EXIT
generate_filename(){
# Make sure screenshots path exists first
if [ ! -d "$screenshotPath" ]; then
mkdir -p "$screenshotPath"
fi
echo "$screenshotPath/$(date +%Y-%m-%d_%H-%M-%S).png"
}
active_screen_grim_region(){
hyprctl -j monitors | jq -r '.[] | select(.focused) | "\(.x),\(.y) \(.width)x\(.height)"' -
}
grim_from_region() {
local filename="${1:-}"
local region="${2:-}"
hyprpicker_launch
# Get region of screen to capture, if not passed in
if [ -z "$region" ]; then
region=$(slurp -b '#000000b0' -c '#00000000') || exit 1
fi
# Start grim while screen is still frozen, kill hyprpicker, and pass through data
if [ -z "$filename" ]; then
grim -g "$region" - | {
hyprpicker_kill || true
cat
}
else
grim -g "$region" "$filename" | {
hyprpicker_kill || true
cat
}
fi
}
if [[ $1 == rc ]]; then
grim_from_region | wl-copy
notify-send 'Copied to Clipboard' Screenshot
elif [[ $1 == rf ]]; then
grim_from_region "$(generate_filename)"
notify-send 'Screenshot Taken' "$filename"
elif [[ $1 == ri ]]; then
grim_from_region | swappy -f - -o "$(generate_filename)"
elif [[ $1 == sc ]]; then
grim_from_region "" "$(active_screen_grim_region)" | wl-copy
notify-send 'Copied to Clipboard' Screenshot
elif [[ $1 == sf ]]; then
grim_from_region "$(generate_filename)" "$(active_screen_grim_region)"
notify-send 'Screenshot Taken' "$filename"
elif [[ $1 == si ]]; then
grim_from_region "" "$(active_screen_grim_region)" | swappy -f - -o "$(generate_filename)"
elif [[ $1 == p ]]; then
color=$(hyprpicker -a -r)
wl-copy "$color"
notify-send 'Copied to Clipboard' "$color"
else
notify-send 'Screenshot Shortcuts' "Print:\t\t\tRegion to clip
Super+Print:\t\tRegion to file
Ctrl+Print:\t\tRegion to editor
Shift+Print:\t\t\Screen to clip
Shift+Super+Print:\tScreen to file
Ctrl+Shift+Print:\tScreen to editor
Alt+Print:\t\tColor picker to clip" -t 20000
fi

View File

@@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=All Top
Exec=bash -c "kitty --single-instance --detach bash -c 'kitten @ launch --type=window --title btop btop ; kitten @ launch --type=window --title nvtop nvtop'"
Icon=alltop
Terminal=false
Categories=Utilities;

View File

@@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=Glava
Exec=glava
Icon=glava
Terminal=false
Categories=Media;

View File

@@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=Phone RDP
Exec=bash -c "scrcpy --no-audio --orientation=0 --turn-screen-off --stay-awake --power-off-on-close"
Icon=phonerdp
Terminal=false
Categories=Utilities;

View File

@@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=Spotify Player
Exec=kitty -e spotify_player
Icon=spotify_player
Terminal=false
Categories=Media;

View File

@@ -0,0 +1,33 @@
general {
lock_cmd = pidof hyprlock || hyprlock # Avoid starting multiple hyprlock instances
before_sleep_cmd = loginctl lock-session # Lock before suspend
after_sleep_cmd = hyprctl dispatch dpms on # To avoid having to press a key twice to turn on the display
}
listener {
timeout = 60 # 1 minute
on-timeout = brightnessctl -sd platform::kbd_backlight set 0 # Turn off keyboard backlight
on-resume = brightnessctl -rd platform::kbd_backlight # Turn on keyboard backlight
}
listener {
timeout = 180 # 3 minutes
on-timeout = brightnessctl -s set 1% # Set monitor backlight to minimum
on-resume = brightnessctl -r # monitor backlight restore
}
listener {
timeout = 600 # 10 minutes
on-timeout = loginctl lock-session # Lock screen when timeout has passed
}
listener {
timeout = 610 # 10 minutes, 10 seconds
on-timeout = hyprctl dispatch dpms off # Screen off when timeout has passed
on-resume = hyprctl dispatch dpms on # Screen on when activity is detected after timeout has fired
}
# listener {
# timeout = 1200 # 20 minutes
# on-timeout = systemctl suspend # Suspend pc
# }

View File

@@ -0,0 +1,9 @@
# Unfortunate legacy config needed because hyprland can't hot switch variable refresh rate
monitor=DP-2,3440x1440@144,auto,1,vrr,1
# Source configs
source = ~/.config/hypr/hyprland-common.conf
# Application launch
exec-once = sleep 10 && steam -silent
#exec-once = swayidle -w timeout 600 "hyprlock" before-sleep "hyprlock" &

View File

@@ -0,0 +1,9 @@
# Unfortunate legacy config needed because hyprland can't hot switch variable refresh rate
monitor = eDP-2,2560x1600@165,auto,1,vrr,1
# Source configs
source = ~/.config/hypr/hyprland-common.conf
# Application launch
exec-once = brightnessctl -sd platform::kbd_backlight set 1
exec-once = brightnessctl -s set 30%

View File

@@ -0,0 +1,186 @@
# Always enable new monitors in automatic mode, for when kanshi doesn't know about the setup
monitor=,preferred,auto,1
# Set programs that you use
$terminal = kitty
$fileManager = thunar
$menu = j4-dmenu-desktop --dmenu='bemenu --ignorecase --line-height 22 --hf "##10AC25" --ff "##10AC25" --tf "##10AC25"' --term='kitty'
# Some default env vars
env = XCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt6ct
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
touchpad {
natural_scroll = no
}
sensitivity = 0 # -1.0 to 1.0, 0 means no modification.
numlock_by_default = 1
}
general {
gaps_in = 5
gaps_out = 5
border_size = 2
col.active_border = rgba(0D8A1EFF)
col.inactive_border = rgba(595959aa)
layout = dwindle
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
}
decoration {
rounding = 10
blur {
enabled = true
size = 3
passes = 1
}
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
}
animations {
enabled = yes
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = yes # you probably want this
}
misc {
force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
}
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
$mainMod = SUPER
# Launch terminal
bind = $mainMod, T, exec, $terminal
bind = SHIFT_SUPER, Return, exec, $terminal
# Close active window
bind = $mainMod, Shift+q, killactive,
bind = $mainMod, C, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, F, fullscreen
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Volume Keys
bindl=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 2%+
bindl=, XF86AudioLowerVolume, exec, wpctl set-volume -l 0.0 @DEFAULT_AUDIO_SINK@ 2%-
bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
# Media Controls
bindl=, XF86AudioPlay, exec, playerctl play-pause
bindl=, XF86AudioPrev, exec, playerctl previous
bindl=, XF86AudioNext, exec, playerctl next
# Brightness Controls
bind = ,XF86MonBrightnessDown, exec, brightnessctl s 1%-
bind = ,XF86MonBrightnessUp, exec, brightnessctl s +1%
# Screenshots
bind = , PRINT, exec, ~/.config/hypr/scripts/screenshot.sh rc
bind = SUPER, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh rf
bind = CTRL, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh ri
bind = SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh sc
bind = SUPER_SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh sf
bind = CTRL_SHIFT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh si
bind = ALT, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh p
# Jetbrains window rules
# Prevent initial focus for JetBrains popups
windowrulev2 = noinitialfocus, class:^jetbrains-.*$, floating:1, title:^$|^\s$|^win\d+$
# Application launch
exec-once = kanshi # Automatically handles display configurations
exec-once = ydotoold # Autoclicker/autokeyboard for automation
exec-once = hypridle # Hyprland/wayland specific idle lock tool
exec-once = hyprpaper # Hyprland/wayland specific wallpaper tool
exec-once = wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 10% # Keep eardrums intact on reboot
exec-once = waybar # Wayland specific status bar
exec-once = sleep 5 && nm-applet # Traditional notifications area
exec-once = sleep 5 && blueman-applet # Traditional bluetooth management tool
exec-once = sleep 5 && streamdeck -n # Streamdeck management tool
exec-once = sleep 5 && Telegram -startintray # Gotta keep in touch with peeps

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,5 @@
preload = ~/.config/hypr/backgrounds/black.png
wallpaper = ,~/.config/hypr/backgrounds/black.png
ipc = off
splash = false

View File

@@ -0,0 +1,7 @@
# `hyprctl monitors list` for all outputs
profile office_desk {
output "Hewlett Packard HP Z27n CNK7311FCY" enable position 0,0
output "LG Electronics LG ULTRAGEAR 104NTVS1N751" enable mode 3440x1440@143.92Hz position -440,1440 adaptive_sync on
output "BOE Display 0x00000060" enable position 950,2880 scale 1.0
}

View File

@@ -0,0 +1,26 @@
# `hyprctl monitors list` for all outputs
profile builtin_only {
output "BOE 0x0A9B Unknown" enable mode 2560x1600@165Hz position 0,0 adaptive_sync on
}
profile bedroom_desk {
# Top left to right
output "Dell Inc. DELL P2411H F8NDP11G0DVU" enable position 0,1280
output "Acer Technologies CB292CU 2217018D42410" enable position 1920,0 transform 90
output "DLOGIC Ltd. No Monitor USB_601e-21H1" enable position 3000,1280
# output "DLOGIC Ltd. No Monitor USB_601e-21H1" mode --custom 1920x1080@60Hz enable position 3000,1280
# Bottom left to right
output "Aculab Ltd Digital Unknown" enable transform 270 position 0,2360
output "Hewlett Packard HP Z27n CNK7311DRR" enable position 1440,2560
output "Aculab Ltd QHD270 Unknown" enable transform 90 position 4000,2360
# Far bottom right (laptop itself)
output "BOE 0x0A9B Unknown" enable position 5440,2360 adaptive_sync on
}
profile scotts_apartment_tv {
output "BOE 0x0A9B Unknown" enable mode 2560x1600@165Hz position 0,0 adaptive_sync on
output "Hisense Electric Co., Ltd. HISENSE 0x00000001" enable mode 1920x1080@60Hz position 2560,0
}

View File

@@ -0,0 +1,49 @@
theme = "dracula"
client_id = "65b708073fc0480ea92a077233ca87bd"
client_port = 8080
login_redirect_uri = "http://127.0.0.1:8989/login"
playback_format = """
{status} {track} • {artists}
{album}
{metadata}"""
notify_timeout_in_secs = 0
tracks_playback_limit = 1000
app_refresh_duration_in_ms = 32
playback_refresh_duration_in_ms = 0
page_size_in_rows = 20
play_icon = "▶"
pause_icon = "▌▌"
liked_icon = "♥"
border_type = "Plain"
progress_bar_type = "Rectangle"
cover_img_length = 9
cover_img_width = 5
cover_img_scale = 1.0
enable_media_control = true
enable_streaming = "Always"
enable_notify = true
enable_cover_image_cache = true
default_device = "{{hostname}}"
notify_streaming_only = false
seek_duration_secs = 5
[notify_format]
summary = "{track} • {artists}"
body = "{album}"
[layout]
playback_window_position = "Top"
playback_window_height = 6
[layout.library]
playlist_percent = 40
album_percent = 40
[device]
name = "{{hostname}}"
device_type = "speaker"
volume = 100
bitrate = 320
audio_cache = false
normalization = false
autoplay = false

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,173 @@
{
"layer": "top",
"position": "top",
"modules-left": [
// "custom/logo",
"clock",
"temperature",
"disk",
"memory",
"cpu"
],
"modules-center": [
"hyprland/window",
"hyprland/workspaces"
],
"modules-right": [
"tray",
"idle_inhibitor",
"pulseaudio",
"battery",
"backlight",
"custom/exit"
],
"reload_style_on_change": true,
"custom/logo": {
"format": "<span font='15'></span>",
"tooltip": false
},
"hyprland/workspaces": {
"all-outputs": false,
"format": "{icon}",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9"
}
},
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon}",
"format-icons": [
"",
""
]
},
"battery": {
"bat": "BAT0",
"adapter": "AC",
"interval": 10,
"full-at": 100,
"states": {
"full": 100,
"good": 75,
"warning": 30,
"critical": 15,
"empty": 5
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": [
"",
"",
"",
"",
""
]
},
"temperature": {
"interval": 1,
"critical-threshold": 90,
"format": "{icon} {temperatureC}°C",
"format-icons": [
"",
"",
"",
"",
""
]
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "󰈈",
"deactivated": "󰈉"
},
"tooltip-format-activated": "idle-inhibitor <span color='#a6da95'>on</span>",
"tooltip-format-deactivated": "idle-inhibitor <span color='#ee99a0'>off</span>"
},
"clock": {
"format": "{:%I:%M:%S %p} |",
"interval": 1,
"tooltip-format": "<big>{:%I:%M:%S %p | %a | %F}</big>\n\n<tt><big>{calendar}</big></tt>",
"calendar-weeks-pos": "right",
"today-format": "<span color='#7645AD'><b><u>{}</u></b></span>",
"format-calendar": "<span color='#aeaeae'><b>{}</b></span>",
"format-calendar-weeks": "<span color='#aeaeae'><b>W{:%V}</b></span>",
"format-calendar-weekdays": "<span color='#aeaeae'><b>{}</b></span>"
},
"disk": {
"interval": 30,
"format": " {}%",
"tooltip-format": "{used} / {total} used"
},
"cpu": {
"format": " {usage:02}% {icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}",
"tooltip": false,
"interval": 1,
"format-icons": [
// green,
"<span color='#69ff94'>▁</span>",
// blue,
"<span color='#2aa9ff'>▂</span>",
// white,
"<span color='#f8f8f2'>▃</span>",
// white,
"<span color='#f8f8f2'>▄</span>",
// yellow,
"<span color='#ffffa5'>▅</span>",
// yellow,
"<span color='#ffffa5'>▆</span>",
// orange,
"<span color='#ff9977'>▇</span>",
// red,
"<span color='#dd532e'>█</span>"
]
},
"memory": {
"format": " {percentage:02}%"
},
"hyprland/window": {
"format": "( {class} )",
},
"pulseaudio": {
"format": "{volume:02}% {icon}",
"format-bluetooth": "󰂰",
"format-muted": "00% {icon}",
"format-icons": {
"headphones": "",
"bluetooth": "󰥰",
"handsfree": "",
"headset": "󱡬",
"phone": "",
"portable": "",
"car": "",
"default": [
"🕨",
"🕩",
"🕪"
]
},
"justify": "center",
"on-click": "amixer sset Master toggle",
"on-click-right": "pavucontrol",
"tooltip-format": "{icon} {volume:02}%"
},
"tray": {
"icon-size": 14,
"spacing": 10
},
"custom/exit": {
"format": "| ",
"on-click": "wlogout -b 2",
"tooltip": false
}
}

View File

@@ -0,0 +1,174 @@
{
"layer": "top",
"position": "top",
"modules-left": [
// "custom/logo",
"clock",
"temperature",
"disk",
"memory",
"cpu"
],
"modules-center": [
"hyprland/window",
"hyprland/workspaces"
],
"modules-right": [
"tray",
"idle_inhibitor",
"pulseaudio",
"battery",
"backlight",
"custom/exit"
],
"reload_style_on_change": true,
"custom/logo": {
"format": "<span font='15'></span>",
"tooltip": false
},
"hyprland/workspaces": {
"all-outputs": false,
"format": "{icon}",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9"
}
},
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon}",
"format-icons": [
"",
""
]
},
"battery": {
"bat": "BAT0",
"adapter": "AC",
"interval": 10,
"full-at": 100,
"states": {
"full": 100,
"good": 75,
"warning": 30,
"critical": 15,
"empty": 5
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": [
"",
"",
"",
"",
""
]
},
"temperature": {
"hwmon-path": "/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon5/temp1_input",
"interval": 1,
"critical-threshold": 90,
"format": "{icon} {temperatureC}°C",
"format-icons": [
"",
"",
"",
"",
""
]
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "󰈈",
"deactivated": "󰈉"
},
"tooltip-format-activated": "idle-inhibitor <span color='#a6da95'>on</span>",
"tooltip-format-deactivated": "idle-inhibitor <span color='#ee99a0'>off</span>"
},
"clock": {
"format": "{:%I:%M:%S %p} |",
"interval": 1,
"tooltip-format": "<big>{:%I:%M:%S %p | %a | %F}</big>\n\n<tt><big>{calendar}</big></tt>",
"calendar-weeks-pos": "right",
"today-format": "<span color='#7645AD'><b><u>{}</u></b></span>",
"format-calendar": "<span color='#aeaeae'><b>{}</b></span>",
"format-calendar-weeks": "<span color='#aeaeae'><b>W{:%V}</b></span>",
"format-calendar-weekdays": "<span color='#aeaeae'><b>{}</b></span>"
},
"disk": {
"interval": 30,
"format": " {}%",
"tooltip-format": "{used} / {total} used"
},
"cpu": {
"format": " {usage:02}% {icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}",
"tooltip": false,
"interval": 1,
"format-icons": [
// green,
"<span color='#69ff94'>▁</span>",
// blue,
"<span color='#2aa9ff'>▂</span>",
// white,
"<span color='#f8f8f2'>▃</span>",
// white,
"<span color='#f8f8f2'>▄</span>",
// yellow,
"<span color='#ffffa5'>▅</span>",
// yellow,
"<span color='#ffffa5'>▆</span>",
// orange,
"<span color='#ff9977'>▇</span>",
// red,
"<span color='#dd532e'>█</span>"
]
},
"memory": {
"format": " {percentage:02}%"
},
"hyprland/window": {
"format": "( {class} )",
},
"pulseaudio": {
"format": "{volume:02}% {icon}",
"format-bluetooth": "󰂰",
"format-muted": "00% {icon}",
"format-icons": {
"headphones": "",
"bluetooth": "󰥰",
"handsfree": "",
"headset": "󱡬",
"phone": "",
"portable": "",
"car": "",
"default": [
"🕨",
"🕩",
"🕪"
]
},
"justify": "center",
"on-click": "amixer sset Master toggle",
"on-click-right": "pavucontrol",
"tooltip-format": "{icon} {volume:02}%"
},
"tray": {
"icon-size": 14,
"spacing": 10
},
"custom/exit": {
"format": "| ",
"on-click": "wlogout -b 2",
"tooltip": false
}
}

View File

@@ -0,0 +1,51 @@
* {
border: none;
border-radius: 0;
font-family: "JetBrains Mono", monospace;
font-size: 14px;
box-shadow: none;
text-shadow: none;
transition-duration: 0s;
}
window {
background: rgba(0, 0, 0, 0.00);
}
#workspaces button {
padding: 0 5px;
color: rgba(217, 216, 216, 0.4);
}
#workspaces button.visible {
color: rgba(217, 216, 216, 1);
}
#workspaces button.focused {
border-top: 3px solid rgba(217, 216, 216, 1);
border-bottom: 3px solid rgba(217, 216, 216, 0);
}
#workspaces button.urgent {
color: rgba(238, 46, 36, 1);
}
#memory,
#idle_inhibitor,
#pulseaudio,
#backlight {
margin: 0 6px 0 10px;
}
#disk {
margin: 0 0 0 10px;
}
#clock {
margin: 0 6px 0 10px;
}
#custom-exit {
margin: 0 16px 0 6px;
}

View File

@@ -0,0 +1,24 @@
{
"label" : "lock",
"action" : "hyprlock",
"text" : "Lock",
"keybind" : "l"
}
{
"label" : "logout",
"action" : "loginctl terminate-user $USER",
"text" : "Logout",
"keybind" : "e"
}
{
"label" : "shutdown",
"action" : "systemctl poweroff",
"text" : "Shutdown",
"keybind" : "s"
}
{
"label" : "reboot",
"action" : "systemctl reboot",
"text" : "Reboot",
"keybind" : "r"
}

Some files were not shown because too many files have changed in this diff Show More