init commit

This commit is contained in:
2026-04-07 10:51:45 -05:00
commit 4a734a8b28
11 changed files with 537 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
secrets/
Generated
+48
View File
@@ -0,0 +1,48 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1775143651,
"narHash": "sha256-S0RqAyDPMTcv9vASMaE8eY1QexFysAOdnxUxFHIPOyE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d166a078541982a76f14d3e06e9665fa5c9ed85e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1775036866,
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}
+27
View File
@@ -0,0 +1,27 @@
{
description = "Alison Server Flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }@inputs: {
nixosConfigurations.alison = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./hosts/alison/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.bckelley = import ./users/bckelley/home.nix;
}
];
};
};
}
+45
View File
@@ -0,0 +1,45 @@
{ config, pkgs, ... }:
{
imports =
[
./hardware-configuration.nix
../../modules/networking.nix
../../modules/services.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "alison";
time.timeZone = "America/Chicago";
users = {
groups.bckelley = {
gid = 1000;
};
users.bckelley = {
isNormalUser = true;
uid = 1000;
group = "bckelley";
extraGroups = [ "wheel" "docker" "ollama" ];
};
};
environment.systemPackages = with pkgs; [
nvtopPackages.intel
btop
openssl
git
dig
];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# 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.
system.stateVersion = "25.05";
}
+39
View File
@@ -0,0 +1,39 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/eafc409e-2d8b-4c7e-84ea-1090d62f015b";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/154B-2D54";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+137
View File
@@ -0,0 +1,137 @@
# NixOS Hyprland Configuration
A complete, aesthetic NixOS + Hyprland dotfiles setup with Catppuccin Mocha theming, smooth animations, blur effects, and all the components you need for a unixporn-worthy desktop.
## Features
- **Window Manager**: Hyprland with smooth animations, blur, and rounded corners
- **Bar**: Waybar with system monitoring, workspace indicators, and media controls
- **Launcher**: Rofi with Catppuccin theming
- **Terminal**: Kitty with Catppuccin Mocha colors and blur
- **Lock Screen**: Hyprlock with time/date display
- **Notifications**: SwayNC with custom styling
- **Wallpaper**: swww with script-based management
- **Theme**: Catppuccin Mocha across all components
- **Shell**: Zsh with starship prompt, zoxide, autosuggestions, syntax highlighting
- **File Manager**: Thunar
- **Screenshot**: Hyprshot
- **Clipboard**: Cliphist + wl-clipboard
## Keybindings
| Keybinding | Action |
|---|---|
| `SUPER + Return` | Open terminal |
| `SUPER + Q` | Kill active window |
| `SUPER + F` | Toggle fullscreen |
| `SUPER + Space` | Toggle floating |
| `SUPER + D` | Open app launcher |
| `SUPER + Tab` | Next workspace |
| `SUPER + 1-0` | Switch to workspace 1-10 |
| `SUPER + SHIFT + 1-0` | Move window to workspace 1-10 |
| `SUPER + Arrows` | Move focus |
| `SUPER + SHIFT + Arrows` | Move window |
| `SUPER + L` | Lock screen |
| `SUPER + E` | Open file manager |
| `SUPER + V` | Clipboard history |
| `SUPER + S` | Screenshot region |
| `SUPER + SHIFT + S` | Screenshot output |
| `SUPER + SHIFT + V` | Change wallpaper |
| `SUPER + mouse_down/up` | Next/prev workspace |
| `XF86Audio*` | Volume controls |
| `XF86MonBrightness*` | Brightness controls |
## Installation
1. Clone this repo to `~/.dotfiles`:
```bash
git clone https://gitea.com/DiabeticNomad/dotfiles.git ~/.dotfiles
```
2. Edit `hosts/spencer/configuration.nix` to update hostname
3. Edit `users/bckelley/home.nix` to update username, homeDirectory, and git config
4. Build and switch:
```bash
sudo nixos-rebuild switch --flake ~/.dotfiles#spencer
home-manager switch --flake ~/.dotfiles#bckelley
```
5. Add wallpapers to `~/.config/wallpapers/`
7. Reboot or restart Hyprland
## Components
### Hyprland
- Dwindle layout with pseudotiling
- Smooth Material Design 3-inspired animations
- Blur with vibrancy and contrast
- Gradient active borders
- Window swallowing for terminals
- 3-finger workspace swipe gestures
- Per-app workspace assignments
### Waybar
- Custom launcher button
- Workspace dots with active indicator
- CPU, memory, disk usage
- Active window title
- PulseAudio volume
- Network status
- Battery indicator
- System tray
- Clock with date
### Rofi
- Drun, run, and window modes
- Catppuccin Mocha theme
- Rounded corners with blur
- Icon support
### Kitty
- Hack Nerd Font
- Background blur and opacity
- Tab bar with custom styling
- Scrollback buffer
### Hyprlock
- Blurred background
- Time and date display
- Custom input field styling
- Greeting text
### SwayNC
- Control center with widgets
- DND toggle
- Volume and brightness sliders
- Quick action buttons
- Catppuccin themed
## Customization
### Colors
All components use Catppuccin Mocha. To change the theme, update the `catppuccin` settings in `flake.nix`, `configuration.nix`, and `home.nix`.
### Wallpaper
Add images to `~/.config/wallpapers/` and cycle with `SUPER + SHIFT + V`.
### Keybindings
Edit `hyprland/keybindings.conf` to change keybindings.
### Waybar
Edit `waybar/config.jsonc` for modules and `waybar/style.css` for styling.
## Credits
- [Catppuccin](https://github.com/catppuccin/catppuccin) - Theme
- [Hyprland](https://hyprland.org/) - Window manager
- [Waybar](https://github.com/Alexays/Waybar) - Status bar
- [Rofi](https://github.com/davatorium/rofi) - Application launcher
- [Kitty](https://sw.kovidgoyal.net/kitty/) - Terminal
- [swww](https://github.com/LGFae/swww) - Wallpaper daemon
- [swaync](https://github.com/ErikReider/SwayNotificationCenter) - Notifications
- [hyprlock](https://github.com/hyprwm/hyprlock) - Lock screen
- [fastfetch](https://github.com/fastfetch-cli/fastfetch) - System info
- [starship](https://starship.rs/) - Shell prompt
+57
View File
@@ -0,0 +1,57 @@
{ config, pkgs, ... }:
{
boot.kernelModules = [ "wireguard" ];
boot.kernel.sysctl = {
"net.core.default_qdisc" = "fq";
"net.ipv4.tcp_congestion_control" = "bbr";
"net.ipv4.ip-forward" = 1;
"net.ipv6.conf.all.forwarding" = 1;
};
networking = {
useDHCP = false;
dhcpcd.enable = false;
defaultGateway = "192.168.68.1";
nameservers = [ "1.1.1.1" "9.9.9.9" ];
interfaces.enp0s31f6.ipv4.addresses = [{
address = "192.168.70.50";
prefixLength = 22;
}];
nat = {
enable = true;
externalInterface = "enp0s31f6";
internalInterfaces = [ "wg0" "br-+" ];
};
firewall = {
enable = true;
allowPing = true;
allowedTCPPorts = [ 22 80 443 3000 5000 8080 ];
allowedUDPPorts = [ 53 51820 ];
checkReversePath = false;
trustedInterfaces = [ "docker0" "br-+" ];
extraCommands = ''
# Allow the Docker bridge to reach the host's 8080 port (AdGuard)
iptables -A INPUT -i br-+ -p tcp --dport 8080 -j ACCEPT
# Allow traffic from Docker/WireGuard to go out
iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -o enp0s31f6 -j MASQUERADE
# Allow forwarding logic
iptables -A FORWARD -i enp0s31f6 -o br-+ -j ACCEPT
iptables -A FORWARD -i br-+ -o enp0s31f6 -j ACCEPT
iptables -A FORWARD -i br-+ -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o br-+ -j ACCEPT
iptables -A FORWARD -i br-+ -o enp0s31f6 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp0s31f6 -o br-+ -m state --state ESTABLISHED,RELATED -j ACCEPT
'';
};
};
services.resolved.enable = false;
# networking.networkmanager.dns = "systemd-resolved";
}
+33
View File
@@ -0,0 +1,33 @@
{ config, pkgs, ... }:
{
# Remote Access
services.openssh = {
enable = true;
settings.PermitRootLogin = "no";
settings.PasswordAuthentication = true;
};
# Dynamic DNS
services.ddclient = {
enable = true;
protocol = "cloudflare";
zone = "webscripts.dev";
passwordFile = "/home/bckelley/.dotfiles/secrets/cloudflare-token";
domains = [ "webscripts.dev" "*.webscripts.dev" ];
interval = "5min";
};
# Containers
virtualisation.docker = {
enable = true;
autoPrune.enable = true;
};
# System Maintenance
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
}
+52
View File
@@ -0,0 +1,52 @@
{ pkgs, ... }:
{
# Catppuccin Frappe base colors with lavender accent
theme = {
name = "catppuccin-frappe-lavender";
# Base colors from Catppuccin Frappe
rosewater = "#f2d5cf";
flamingo = "#eebebe";
pink = "#f4b8e4";
mauve = "#ca9ee6";
red = "#e78284";
maroon = "#ea999c";
peach = "#ef9f76";
yellow = "#e5c890";
green = "#a6d189";
teal = "#81c8be";
sky = "#99d1db";
sapphire = "#85c1dc";
blue = "#8caaee";
lavender = "#babbf1"; # Enhanced lavender accent
text = "#c6d0f5";
subtext1 = "#b5bfe2";
subtext0 = "#a5adce";
overlay2 = "#949cbb";
overlay1 = "#838ba7";
overlay0 = "#737994";
surface2 = "#626880";
surface1 = "#51576d";
surface0 = "#414559";
base = "#303446";
mantle = "#292c3c";
crust = "#232634";
# Derived colors for UI elements
bg = "${base}";
fg = "${text}";
accent = "${lavender}";
# UI Specific
border = "${surface0}";
hover_bg = "${surface1}";
active_bg = "${surface2}";
disabled_bg = "${mantle}";
# Transparency settings (for minimalist hacker feel)
bg_opacity = 0.90;
panel_opacity = 0.85;
popup_opacity = 0.90;
};
}
+61
View File
@@ -0,0 +1,61 @@
{ pkgs, ... }:
{
# Minimalist hacker overlay to apply to any base theme
# Reduces visual noise, simplifies decorations, enhances readability
minimalistHacker = {
# Animation reductions for minimalist feel
animations = {
enabled = false; # Disable most animations for snappy, hacker feel
fade = false;
zoom = false;
move = false;
resize = false;
};
# Decoration reductions
decorations = {
border_width = 1; # Thin borders
rounding = 4; # Minimal corner rounding
shadow_range = 4; # Subtle shadows
shadow_render_power = 2; # Light shadow intensity
blur_size = 3; # Light blur if used
active_opacity = 0.9; # Slightly transparent active windows
inactive_opacity = 0.85; # More transparent inactive windows
active_border_intensity = 0.7; # Subtle active border
};
# Font preferences for hacker aesthetic
fonts = {
# Primary interface font - clear, readable
interface = "JetBrainsMono Nerd Font";
# Fallback
interface_fallback = "monospace";
# Size - slightly larger for readability on laptop
interface_size = 10;
# Bar/font sizes
bar_size = 10;
};
# Layout preferences
layout = {
# Smart borders off for cleaner look
smart_borders = false;
# Padding reductions
padding = 4;
# Workspace settings
workspace_gap = 2;
};
# Behavior tweaks
behavior = {
# Focus follows mouse for hacker efficiency
focus_follows_mouse = true;
# Click to focus (optional)
click_to_focus = false;
# No fake transparency for performance
fake_transparency = false;
# Invalidate on shadow change for performance
invalidate_on_shadow_change = false;
};
};
}
+37
View File
@@ -0,0 +1,37 @@
{ pkgs, ... }: {
home.username = "bckelley";
home.homeDirectory = "/home/bckelley";
home.stateVersion = "25.05";
home.packages = with pkgs; [
micro fastfetch wget tree
];
programs.bash = {
enable = true;
shellAliases = {
rebuild = "sudo nixos-rebuild switch --flake /home/bckelley/.dotfiles#alison";
conf = "micro /home/bckelley/.dotfiles/hosts/alison/configuration.nix";
creload = "docker compose --env-file ~/HomeServer/.env -f ~/HomeServer/pihole/compose.yml exec -w /etc/caddy caddy caddy reload";
};
initExtra = ''
export EDITOR='micro'
echo "Welcome back, bckelley."
'';
};
systemd.user.services.ytdl-automation = {
Unit.Description = "Hourly yt-dlp list check and download";
Service = {
Type = "oneshot";
ExecStart = "${pkgs.nix}/bin/nix-shell /home/bckelley/HomeServer/yt-dlp/shell.nix --run 'python /home/bckelley/HomeServer/yt-dlp/main.py /home/bckelley/HomeServer/yt-dlp/list.txt 2'";
WorkingDirectory = "/home/bckelley/HomeServer/yt-dlp";
};
};
systemd.user.timers.ytdl-automation = {
Unit.Description = "Run ytdl-automation every hour";
Timer = { OnCalendar = "hourly"; Persistent = true; };
Install.WantedBy = [ "timers.target" ];
};
}