This commit is contained in:
Parker TenBroeck 2026-05-22 22:12:31 -04:00
commit 0a62ab530d
30 changed files with 2420 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/secrets

11
common.nix Normal file
View file

@ -0,0 +1,11 @@
{
imports = [
./modules/home-manager.nix
./modules/locale.nix
./modules/shell
./modules/users/may.nix
./modules/ssh.nix
./modules/git.nix
./modules/cli.nix
];
}

39
desktop.nix Normal file
View file

@ -0,0 +1,39 @@
{ lib, ... }:
{
imports = [
./common.nix
./modules/networking.nix
./modules/bluetooth.nix
./modules/amd.nix
./modules/games/steam.nix
./modules/games/minecraft.nix
./modules/fonts.nix
./modules/packages.nix
./modules/wireguard-server.nix
./modules/hyprland
./modules/tex.nix
];
nixpkgs.config.allowUnfree = true;
networking.hostName = "nixos-desktop";
networking.firewall.allowedTCPPorts = [ 51820 25565 42069 8000 8080 ];
home-manager.users.may.wayland.windowManager.hyprland.settings = {
workspace = [
"1, monitor:DP-2, default:true"
"9, monitor:DP-1, default:true"
"10, monitor:HDMI-A-1, default:true"
];
exec-once = lib.mkAfter [
# Give Hyprland a moment to finish bringing up the desktop before
# placing startup apps onto monitor-pinned workspaces.
"sh -c 'sleep 2; hyprctl dispatch exec \"[workspace 9 silent] firefox\"; hyprctl dispatch exec \"[workspace 1 silent] alacritty\"'"
];
};
system.stateVersion = "23.11";
home-manager.users.may.home.stateVersion = "25.11";
}

18
laptop.nix Normal file
View file

@ -0,0 +1,18 @@
{
imports = [
./common.nix
./modules/networking.nix
./modules/bluetooth.nix
./modules/steam.nix
./modules/fonts.nix
./modules/packages.nix
./modules/hyprland
];
nixpkgs.config.allowUnfree = true;
networking.hostName = "nixos-laptop";
system.stateVersion = "23.11";
home-manager.users.may.home.stateVersion = "25.11";
}

16
modules/amd.nix Normal file
View file

@ -0,0 +1,16 @@
{ pkgs, ... }:
{
hardware.graphics = {
enable = true;
enable32Bit = true;
};
systemd.packages = with pkgs; [ lact ];
systemd.services.lactd.wantedBy = [ "multi-user.target" ];
services.xserver = {
enable = true;
videoDrivers = [ "amdgpu" ];
};
}

11
modules/audio.nix Normal file
View file

@ -0,0 +1,11 @@
{
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
}

4
modules/bluetooth.nix Normal file
View file

@ -0,0 +1,4 @@
{
hardware.bluetooth.enable = true;
services.blueman.enable = true;
}

16
modules/cli.nix Normal file
View file

@ -0,0 +1,16 @@
{ pkgs, ...}: {
imports = [
./editors
];
home-manager.users.may.home.packages = with pkgs; [
neofetch
wget
tmux
file
btop
screen
ranger # file manager
ripgrep
];
}

View file

@ -0,0 +1,7 @@
{
imports = [
./vi.nix
./vim.nix
./neovim.nix
];
}

View file

@ -0,0 +1,10 @@
{
home-manager.users.may = {
programs.neovim = {
enable = true;
viAlias = true;
defaultEditor = true;
extraConfig = builtins.readFile ./shared.vim;
};
};
}

View file

@ -0,0 +1,27 @@
" Shared base config for vim and neovim.
set nocompatible
syntax on
filetype plugin indent on
set number
" set relativenumber
set ruler
set showcmd
set hidden
set mouse=a
set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set smartindent
set ignorecase
set smartcase
set incsearch
set hlsearch
set splitright
set splitbelow
set clipboard=unnamedplus
set updatetime=300

8
modules/editors/vi.nix Normal file
View file

@ -0,0 +1,8 @@
{
home-manager.users.may = {
home.sessionVariables = {
EDITOR = "nvim";
VISUAL = "nvim";
};
};
}

8
modules/editors/vim.nix Normal file
View file

@ -0,0 +1,8 @@
{
home-manager.users.may = {
programs.vim = {
enable = true;
extraConfig = builtins.readFile ./shared.vim;
};
};
}

42
modules/fonts.nix Normal file
View file

@ -0,0 +1,42 @@
{ pkgs, ... }:
{
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
liberation_ttf
fira-code
fira-code-symbols
mplus-outline-fonts.githubRelease
dina-font
font-awesome
powerline-fonts
powerline-symbols
nerd-fonts.symbols-only
proggyfonts
cozette
luculent
];
# home-manager.users.may = { pkgs, ... }: {
# fonts.fontconfig.enable = true;
# home.packages = with pkgs; [
# noto-fonts
# noto-fonts-cjk-sans
# noto-fonts-color-emoji
# liberation_ttf
# fira-code
# fira-code-symbols
# mplus-outline-fonts.githubRelease
# dina-font
# font-awesome
# powerline-fonts
# powerline-symbols
# nerd-fonts.symbols-only
# proggyfonts
# cozette
# luculent
# ];
# };
}

View file

@ -0,0 +1,3 @@
{ pkgs, ...}: {
home-manager.users.may.home.packages = with pkgs; [ prismlauncher ];
}

3
modules/games/steam.nix Normal file
View file

@ -0,0 +1,3 @@
{
programs.steam.enable = true;
}

8
modules/git.nix Normal file
View file

@ -0,0 +1,8 @@
{ pkgs, ...}: {
home-manager.users.may.home.packages = with pkgs; [
git
gitui
# yes I'm a baby I know
gh
];
}

8
modules/home-manager.nix Normal file
View file

@ -0,0 +1,8 @@
{
imports = [
(import ((builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz") + "/nixos"))
];
home-manager.useUserPackages = true;
home-manager.useGlobalPkgs = true;
}

View file

@ -0,0 +1,131 @@
{ config, lib, pkgs, ... }:
let
hyprRun = pkgs.writeShellScript "hypr-run" ''
exec ${pkgs.hyprland}/bin/Hyprland
'';
in {
imports = [
./hypr-conf.nix
./nwg-panel-conf.nix
# assume any desktop env will have audio
../audio.nix
];
programs.dconf.enable = true;
security.polkit.enable = true;
services.gnome.gnome-keyring.enable = true;
xdg.portal.enable = true;
xdg.portal.extraPortals = with pkgs; [
xdg-desktop-portal-hyprland
xdg-desktop-portal-gtk
];
programs.hyprland.enable = true;
services.displayManager.gdm.enable = lib.mkForce false;
services.greetd = {
enable = true;
settings = {
initial_session = {
command = "${hyprRun}";
user = "may";
};
default_session = {
command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd ${hyprRun}";
user = "greeter";
};
};
};
home-manager.users.may = { pkgs, ... }: {
gtk = {
enable = true;
theme = {
name = "Adwaita-dark";
package = pkgs.gnome-themes-extra;
};
iconTheme = {
package = pkgs.adwaita-icon-theme;
name = "Adwaita";
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
};
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
gtk-theme = "Adwaita-dark";
};
};
home.pointerCursor = {
package = pkgs.adwaita-icon-theme;
name = "Adwaita";
size = 24;
gtk.enable = true;
};
home.packages = with pkgs; [
firefox # browser
nautilus # gui file manager
alacritty # terminal
imv # image viewer
file-roller # archive manager
# notifications
libnotify
dunst
# applets
networkmanagerapplet
blueman
brightnessctl
# screenshot + editor
grim
grimblast
swappy
slurp
# GUI sound control
pavucontrol
# clipboard
wl-clipboard
nwg-clipman
cliphist
# nwg utilities
nwg-displays # GUI display setup
nwg-look # GUI theme settings
nwg-drawer # application drawer (super key)
nwg-panel # top bar
# wallpaper
swww
# media controls
playerctl
hyprpaper
hyprpicker
hyprsysteminfo
hyprpwcenter
hyprgraphics
];
};
}

View file

@ -0,0 +1,168 @@
{
home-manager.users.may.wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
package = null;
portalPackage = null;
settings = {
"$mainMod" = "SUPER";
source = "~/.config/hypr/monitors.conf";
env = [];
exec-once = [
"nwg-panel"
"wl-paste --type text --watch cliphist store"
"wl-paste --type image --watch cliphist store"
"nm-applet --indicator"
"blueman-applet"
"nwg-drawer -r -nofs"
"swww-daemon"
];
exec = [
"swww img /home/may/Pictures/background2.jpg"
];
input = {
kb_layout = "us";
kb_variant = "";
kb_model = "";
kb_options = "";
kb_rules = "";
follow_mouse = 1;
# sensitivity = 0.7;
# accel_profile = "flat";
touchpad = {
natural_scroll = true;
};
};
general = {
gaps_in = 2;
gaps_out = 4;
border_size = 3;
"col.active_border" = "rgba(ff0000ee) rgba(ff7f00ee) rgba(ffff00ee) rgba(00ff00ee) rgba(0000ffee) rgba(9400d3ee) 45deg";
"col.inactive_border" = "rgba(595959aa)";
layout = "dwindle";
};
decoration = {
rounding = 10;
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
gestures = {
gesture = "3, horizontal, workspace";
};
"device:epic-mouse-v1" = {
};
misc = {
enable_anr_dialog = false;
disable_hyprland_logo = true;
disable_splash_rendering = true;
force_default_wallpaper = 0;
};
bind = [
"$mainMod, T, exec, alacritty"
"$mainMod, B, exec, firefox"
"SUPER_SHIFT, D, killactive,"
"CONTROL_ALT, delete, exit,"
"$mainMod, E, exec, nautilus"
"$mainMod, F, fullscreen,"
"$mainMod, M, fullscreen, 1"
"$mainMod, V, togglefloating,"
"$mainMod, P, pseudo,"
"$mainMod, J, togglesplit,"
"$mainMod, C, exec, hyprpicker --autocopy"
", Print, exec, grimblast --freeze copysave area - | swappy -f -"
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
"$mainMod SHIFT, 1, movetoworkspace, 1"
"$mainMod SHIFT, 2, movetoworkspace, 2"
"$mainMod SHIFT, 3, movetoworkspace, 3"
"$mainMod SHIFT, 4, movetoworkspace, 4"
"$mainMod SHIFT, 5, movetoworkspace, 5"
"$mainMod SHIFT, 6, movetoworkspace, 6"
"$mainMod SHIFT, 7, movetoworkspace, 7"
"$mainMod SHIFT, 8, movetoworkspace, 8"
"$mainMod SHIFT, 9, movetoworkspace, 9"
"$mainMod SHIFT, 0, movetoworkspace, 10"
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
"$mainMod, up, movefocus, u"
"$mainMod, down, movefocus, d"
"$mainMod SHIFT, left, movewindow, l"
"$mainMod SHIFT, right, movewindow, r"
"$mainMod SHIFT, up, movewindow, u"
"$mainMod SHIFT, down, movewindow, d"
];
bindr = [
"SUPER, SUPER_L, exec, nwg-drawer -nofs"
];
binde = [
"$mainMod ALT, left, resizeactive, -10 0"
"$mainMod ALT, right, resizeactive, 10 0"
"$mainMod ALT, up, resizeactive, 0 -10"
"$mainMod ALT, down, resizeactive, 0 10"
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 1%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"
", XF86MonBrightnessUp, exec, brightnessctl s +5%"
", XF86MonBrightnessDown, exec, brightnessctl s 5%-"
];
bindl = [
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
];
bindle = [
", XF86Search, exec, launchpad"
];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
};
};
}

View file

@ -0,0 +1,3 @@
{
}

9
modules/locale.nix Normal file
View file

@ -0,0 +1,9 @@
{
time.timeZone = "America/Toronto";
i18n.defaultLocale = "en_CA.UTF-8";
services.xserver.xkb = {
layout = "us";
variant = "";
};
}

3
modules/networking.nix Normal file
View file

@ -0,0 +1,3 @@
{
networking.networkmanager.enable = true;
}

19
modules/packages.nix Normal file
View file

@ -0,0 +1,19 @@
{ pkgs, ... }:
{
# assorted stuff until I decide where it goes
home-manager.users.may = { pkgs, ... }: {
home.packages = with pkgs; [
openjdk21
vlc
spotify
vscode
jetbrains.idea
obs-studio
discord
jetbrains.rust-rover
halloy
dino
];
};
}

1739
modules/shell/.p10k.zsh Normal file

File diff suppressed because it is too large Load diff

53
modules/shell/default.nix Normal file
View file

@ -0,0 +1,53 @@
{ pkgs, ... }:
{
programs.nix-ld.enable = true;
programs.zsh.enable = true;
users.defaultUserShell = pkgs.zsh;
environment.variables.NIX_BUILD_SHELL = "${pkgs.zsh}/bin/zsh";
home-manager.users.may = { pkgs, ... }: {
home.file.".p10k.zsh".source = ./.p10k.zsh;
programs.zsh = {
enable = true;
oh-my-zsh = {
enable = true;
plugins = [ "git" "sudo" "history-substring-search" ];
};
initContent = ''
source "${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/powerlevel10k.zsh-theme"
source ~/.p10k.zsh
# HSTR configuration - add this to ~/.zshrc
alias hh=hstr # hh to be alias for hstr
setopt histignorespace # skip cmds w/ leading space from history
export HSTR_CONFIG=hicolor # get more colors
hstr_no_tiocsti() {
zle -I
{ HSTR_OUT="$( { </dev/tty hstr ''${BUFFER}; } 2>&1 1>&3 3>&- )"; } 3>&1;
BUFFER="''${HSTR_OUT}"
CURSOR=''${#BUFFER}
zle redisplay
}
zle -N hstr_no_tiocsti
bindkey '\C-r' hstr_no_tiocsti
export HSTR_TIOCSTI=n
'';
shellAliases = {
ll = "ls -lah";
update = "sudo nixos-rebuild switch";
callgrind = "valgrind --tool=callgrind";
massif = "valgrind --tool=massif";
};
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
};
};
}

3
modules/ssh.nix Normal file
View file

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

6
modules/tex.nix Normal file
View file

@ -0,0 +1,6 @@
{ pkgs, ...}: {
home-manager.users.may.home.packages = with pkgs; [
texstudio
texlive.combined.scheme-full
];
}

29
modules/users/may.nix Normal file
View file

@ -0,0 +1,29 @@
{ pkgs, ... }:
{
users.users.may = {
isNormalUser = true;
description = "may";
extraGroups = [ "networkmanager" "wheel" ];
};
home-manager.users.may = { pkgs, ... }: {
home = {
username = "may";
homeDirectory = "/home/may";
};
home.packages = with pkgs; [
firefox
chromium
vlc
spotify
vscode
jetbrains.idea
obs-studio
gh
jetbrains.rust-rover
wayvnc
];
};
}

17
work.nix Normal file
View file

@ -0,0 +1,17 @@
{
imports = [
./common.nix
./modules/networking.nix
./modules/bluetooth.nix
./modules/fonts.nix
./modules/packages.nix
./modules/hyprland
];
nixpkgs.config.allowUnfree = true;
networking.hostName = "nixos-work-laptop";
system.stateVersion = "23.11";
home-manager.users.may.home.stateVersion = "25.11";
}