init commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
secrets/
|
||||
Generated
+48
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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" ];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user