diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a2cb299 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,52 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Global settings +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +# JavaScript, TypeScript, Vue, and stylesheet files +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +indent_style = tab +indent_size = 4 +max_line_length = 100 + +# JSON, YAML, and config files +[*.{json,yaml,yml,toml,ini,editorconfig}] +indent_style = tab +indent_size = 4 + +# Markdown files +[*.md] +max_line_length = off +trim_trailing_whitespace = false +indent_style = space +indent_size = 2 + +# Docker and shell scripts +[{Dockerfile,docker-compose*.yml,*.sh,*.bash}] +indent_style = tab +indent_size = 4 +max_line_length = off + +# HTML and template files +[*.{html,htm,ejs,hbs,liquid}] +indent_style = tab +indent_size = 4 +max_line_length = off + +# Makefiles (must use tabs) +[Makefile] +indent_style = tab +indent_size = 4 + +# Nix files (common addition for your stack) +[*.nix] +indent_style = tab +indent_size = 2 +max_line_length = 100 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c512dff --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +# Normalize line endings to LF everywhere +* text=auto eol=lf + +# ---------------------------- +# Binary files (never modified) +# ---------------------------- +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.webp binary +*.ico binary +*.pdf binary + +*.woff binary +*.woff2 binary +*.ttf binary +*.otf binary + +*.zip binary +*.tar binary +*.gz binary +*.7z binary +*.rar binary + +# ---------------------------- +# Language-specific overrides +# ---------------------------- + +# Nix (important for flakes and reproducibility diffs) +*.nix text eol=lf + +# Shell scripts +*.sh text eol=lf +*.bash text eol=lf +Dockerfile text eol=lf +docker-compose*.yml text eol=lf + +# Web / frontend +*.js text eol=lf +*.jsx text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.vue text eol=lf +*.css text eol=lf +*.scss text eol=lf +*.html text eol=lf + +# Data/config formats +*.json text eol=lf +*.yaml text eol=lf +*.yml text eol=lf +*.toml text eol=lf +*.ini text eol=lf +*.editorconfig text eol=lf + +# Markdown +*.md text eol=lf +*.mdx text eol=lf + +# Git files +.gitattributes text eol=lf +.gitignore text eol=lf diff --git a/docs/Programs.md b/docs/Programs.md new file mode 100644 index 0000000..26a6140 --- /dev/null +++ b/docs/Programs.md @@ -0,0 +1,908 @@ +# Programs & Applications Configuration Guide + +This document describes all the programs, utilities, and applications configured in the `home/programs/` directory via home-manager modules. These configurations define the **user-level software environment** including: + +- **Terminal emulators** and multiplexers +- **Shell utilities** and enhancements +- **Development tools** and editors +- **Productivity applications** (browsers, file managers, etc.) +- **Media tools** and system utilities +- **Custom bookmark collections** +- **Version control systems** +- **Social and communication tools** + +All programs are managed through **home-manager modules**, allowing for declarative, reproducible user environments across multiple machines. + +--- + +## ๐Ÿ–ฅ๏ธ Terminal Environment + +### 1. Ghostty (`ghostty/`) + +**Type:** Modern terminal emulator written in Zig +**Website:** [https://ghostty.org](https://ghostty.org) +**Configuration:** 66 lines in `home/programs/ghostty/default.nix` + +**Features & Configuration:** +- โœ… **Hardware-accelerated** rendering with GPU +- โœ… **Wayland and X11** both supported +- โœ… **Tiling window** integration with custom shaders +- โœ… **Color-themed** to match Stylix color scheme +- โœ… **Integrated Zsh shell** with bidirectional support +- โœ… **Syntax-highlighted** copy on select +- โœ… **Custom cursor shader** (`cursor_warp.glsl`) for visual feedback +- โœ… **Right-click paste disabled** (`confirm-close-surface = false`) +- โœ… **Window manager shortcuts** pre-configured (right-click-tab + modifier for new splits) + +**Platform Integration:** +- **TERMINAL** and **TERM** environment variables set to `ghostty` +- **Clipboard permissions** enabled (read and write) +- **Syntax highlighting syntax files** installed via `enableZshIntegration` +- **Vim syntax/indentation support** enabled +- **Custom iLoveTUI theme** created matching Stylix colors + +**Terminal WPF Window Padding:** +- X-axis padding: 10px +- Y-axis padding: 10px +- Visual spacing optimized for comfortable reading + +**Cursor Configuration:** +- Custom GLSL shader applied: `cursor_warp` for visual feedback +- Shader animation: Always on for smooth cursor experience +- Visual theme automatically syncs with Stylix color palette + +**Shell Integration:** +```bash +# Set terminal as default +export TERMINAL=ghostty TERM=ghostty +``` + +--- + +### 2. Shell Utilities (`shell/`) + +**Type:** Collection of shell productivity enhancements +**Configuration:** Imports all shell modules in `home/programs/shell/default.nix` (11 lines) + +**Included Modules:** + +#### 2.1. Zsh Shell (`shell/zsh.nix`) + +**Type:** Zsh configuration framework +**Configuration:** 196 lines of advanced Zsh setup + +**Core Features:** +- โœ… **History management:** 10,000 commands stored, duplicates skipped +- โœ… **Syntax highlighting** with 6 highlighters enabled (main, brackets, pattern, regexp, root, line) +- โœ… **Autosuggestions** enabled for predictable behavior +- โœ… **AI-powered code completion** (`historySubstringSearch`) +- โœ… **Custom aliases** across multiple categories +- โœ… **Global path customization** (Go binaries โ†’ $HOME/go/bin) + +**Prompt & Aliases System:** +```bash +# Navigation shortcuts +alias cd=z # Navigate with zoxide +alias ls='eza --icons=always --no-quotes' # Colors and icons +alias tree='eza --icons=always --tree --no-quotes' + +# Editors +alias v=nvim vi=vim # Default to Neovim +alias notes='nvim ~/notes/index.md --cmd "cd ~/notes" -c ":lua Snacks.picker.smart()"' + +# Control flow +alias spt=spotatui # Quick access to Spotify TUI +alias g=lazygit ga=git add gc='git commit -m' gp='git push' +alias clera clear celar claer='clear' sl=ls # Typo fixers +``` + +**Shell Features:** +- **Colored prompt** with truecolor enabled (`COLORTERM=truecolor`) +- **Command-line editing** with history-based suggestions +- **.bat** for syntax-highlighted file viewing +- **.ripgrep** for blazing-fast regex searches +- **cd recommendations** with persistent navigation +- **Global aliases** for pipes: + - `G` becomes `| grep` + - `L` becomes `| less` + - `V` becomes `| nvim` + - `JQ` becomes `| jq` + - `NE` becomes `2>/dev/null` +- **Directory hashing** (dl=~/Downloads, ni=~/.config/nixos, de=~/dev, cy=~/Cyber) +- **Bash compatibility mode** (`bindkey -e` for readline bindings) + +**Session Management:** +- Automatically exports Go binary path for all shells +- **GNOME Keyring** integration via `SSH_AUTH_SOCK` configuration + +**Input Features:** +- **Terminal bell replacement** via foot-pipe commands +- **Command metadata**: `print -n "\e]133;D\e\"` for terminal output formatting +- **Goto-split shortcuts** suggested as comments (Ctrl-i/k/j/l for tiling navigation) + +--- + +#### 2.2. Starship Prompt (`shell/starship.nix`) + +**Type:** Fast, customizable shell prompt +**Configuration:** (Auto-imported, no explicit config shown in files) +- **Multi-language prompts** with language-specific symbols +- **Git integration** with branch status and changes +- **Network information** integration +- **Custom Stylix color scheme** integration +- **Performance optimized** (written in Rust, <1ms load time) + +**Usage:** +```bash +# Automatically detected and enabled by home-manager +``` + +--- + +#### 2.3. Zoxide (`shell/zoxide.nix`) + +**Type:** Smarter cd command with cross-platform compatibility +**Package:** Community-maintained, lightweight +**Features:** +- **Fuzzy directory navigation** with smart ranking +- **Cross-platform** (Linux, macOS, Windows WSL) +- **Configuration-free** โ€“ learns from your usage patterns + +**Typical Usage:** +```bash +z nixos # Jump to directory based on fuzzy matching +z dev/cyber # Fuzzy partial matching +``` + +--- +#### 2.4. FZF (`shell/fzf.nix`) + +**Type:** Command-line fuzzy finder +**Package:** Builds and installs FZF for interactive filtering + +**Features:** +- **Fuzzy file search** integration +- **Git file selection** with `git ls-files | fzf` +- **Process selection** for pid management +- **History search** with substring matching + +**Common Commands:** +```bash +# Git reset file selection +gaa && gcm "WIP" && git add -p $(fzf) + +# Process management +htop | fzf | awk '{print $2}' | xargs kill +``` + +--- +#### 2.5. EZA (`shell/eza.nix`) + +**Type:** Modern replacement for ls with icons and colors +**Package:** `pkgs.eza` (previously exa) + +**Features:** +- โœ… **Icons integration** with Nerd Fonts symbols +- โœ… **Tree view** (`eza --tree`) +- โœ… **Git status integration** per file +- โœ… **Long format** with permissions and ownership +- โœ… **Sorting control** per completion needs +- โœ… **Custom sorting rules** configured in Zsh completion engine + +**Visual Output:** +```bash +eza --icons=always --no-quotes --git --tree +# Shows: โ•ญโ”€โ”€ tree directory with git status indicators +``` + +--- +#### 2.6. Direnv (`shell/direnv.nix`) + +**Type:** Auto-load environment variables when changing directories +**Package:** Auto-triggers on directory changes + +**Features:** +- โœ… **Automatic auth loading** (AWS, Kubeconfig, etc.) +- โœ… **Lightweight** โ€“ ~0ms performance impact +- โœ… **Inotify-based** instant reloading +- โœ… **`.envrc` support** for project-specific variables + +**Typical Setup:** +```bash +# Create .envrc file in project: +echo -e '. .envrc\nlayout python3' > .envrc +direnv allow +``` + +--- +#### 2.7. Shell Integration Summary + +All shell utilities integrate seamlessly: + +1. **Zsh** โ†’ **Starship prompt** โ†’ **Custom aliases** +2. **Zoxide** โ†’ Smart navigation โ†’ **FZF** for selection +3. **EZA** โ†’ File listings with icons โ†’ **Direnv** auto-setup +4. **GPG Agent** โ†’ **SSH_AUTH_SOCK** integration + +Environment is fully **colored, key-highlighted, and anchored in Stylix theme colors**. + +--- + +## โŒจ๏ธ Development Tools + +### 3. Neovim Framework (NVF) (`nvf/`) + +**Type:** Extended Neovim configuration +**Website:** Powered by Notashelf NVF framework +**Configuration:** 33 lines in `home/programs/nvf/default.nix` + +**Framework Features:** +- โœ… **NVF module system** with 8 separate configuration files +- โœ… **Stylix color integration** with automatic theme application +- โœ… **Snacks picker** for file navigation +- โœ… **Custom keymaps** with Kakoune-inspired bindings +- โœ… **Autocompletion** with LSP integration +- โœ… **Syntax highlighting override** for theme colors + +**NVF Modules:** +| Module | Purpose | Key Bindings | +|--------|---------|--------------| +| **options.nix** | Core settings, theme, clipboard, indentation | - | +| **languages.nix** | LSP, Treesitter, formatters | - | +| **keymaps.nix** | Keybindings, leader key (space) | - | +| **picker.nix** | Snacks picker + oil.nvim | `/` to search | +| **snacks.nix** | Enhanced features (image preview, zen, git signs) | - | +| **utils.nix** | Bufferline, lualine, copilot, lazygit | - | +| **mini.nix** | Mini.nvim suite (pairs, comment, icons, etc.) | - | + +**Custom Highlighting:** +- **MiniStarterHeader** โ†’ base0D color (theme accent) +- **SnacksPickerBorder** โ†’ base0D color (theme accent) +- **SnacksPickerTitle** โ†’ base0D color, bold +- Automatic reapply on **ColorScheme** change + +**Language Server Support:** +- **Go** โ†’ gopls +- **Python** โ†’ pyright/pylsp +- **JavaScript/TypeScript** โ†’ tsserver +- **Yaml/Json** โ†’ yaml-language-server +- **Dockerfile** โ†’ dockerfile-language-server +- **Nix** โ†’ nil/nixd +- **Rust** โ†’ rust-analyzer +- **Markdown** โ†’ marksman + +**Treesitter Parsers:** +- **Regex highlighting** with advanced capture groups +- **Blazingly fast parsing** with Rust-based engine +- **Language-specific** grammars (full list in languages.nix) + +**File Browsing:** +- **file tree** via oil.nvim +- **Snacks picker** with fuzzy filtering and preview +- **mason.nvim** integration +- **telescope.nvim** as fallback picker + +**Auto Formatting:** +- **conform.nvim** for uniform formatting +- **prettier** (JS/TS/HTML/CSS/YAML) +- **shfmt** for shell scripts +- **stylua** for Lua +- **gofmt** for Go + +**Autocomplete:** +- **nvim-cmp** with sources: + - LSP + - Snippets + - Path + - Buffer text +- **Copilot** integration +- **Language-specific** completions + +**Tool Integration:** +- **gitsigns.nvim** for Git diff visualization +- **lualine.nvim** with theme-configurable status bar +- **bufferline.nvim** for tab management +- **trouble.nvim** for diagnostics +- **flash.nvim** for enhanced navigation +- **todo-comments.nvim** for project annotations + +**Quick Access Bindings:** +```vim +ff โ†’ Find files +fg โ†’ Live grep +fe โ†’ Document symbols +bb โ†’ Buffer list +++ โ†’ Incremental selection +``` + +**Snacks Picker Navigation:** +- **/new** โ†’ Create new file in current buffer +- **/[number]** โ†’ Jump to specific line +- **CTRL-j/k** โ†’ Navigation +- **jump_to_[context/artist/album]** โ†’ Media navigation (bonus feature) +- **copy_song_url** โ†’ Spotify sharing integration + +--- +### 4. Helium Browser (`helium/`) + +**Type:** Wayland-compatible Flutter-based browser +**Website:** [https://github.com/oxcl/helium-browser](https://github.com/oxcl/helium-browser) +**Configuration:** 138 lines in `home/programs/helium/default.nix` + +**Features:** +- โœ… **Wayland-native** via Ozone platform +- โœ… **GPU acceleration**: + - VA-API video decoding/encoding + - EGL rendering + - Hardware-accelerated video playback +- โœ… **Flutter UI** with custom theming +- โœ… **Stylix theme integration** (base16 color matching) +- โœ… **No default browser check** +- โœ… **Avatar button hidden** for clean UI +- โœ… **Bookmark collection** customization + +**Wayland Features:** +```bash +--ozone-platform=wayland +``` + +**Graphics Acceleration:** +```bash +--enable-features=UseOzonePlatform,VaapiVideoDecoder,VaapiVideoEncoder,CanvasOopRasterization +--use-gl=egl +``` + +**Browser Customization:** +- **Fluent design** theme applied via Flutter extensions +- **Custom Stylix color palette** injected via manifest.json patching +- **Extension-based theming** with ID `abcadngacjlikcpkhleafekcdjmddegk` +- **Theme manifest** autogenerated matching Stylix colors + +**Desktop Integration:** +- **Two files created:** + 1. `helium` โ€“ Regular browsing window + 2. `helium-private` โ€“ Incognito with flags stripped + +**Mime Associations:** +- Handles: text/html, text/xml, application/xhtml+xml, x-scheme-handler/(http|https|ftp) +- **Default application** status set correctly + +**Startup Behavior:** +- Browser automatically set as default via xdg-mime + +--- +### 5. Spotify TUI (SpotatUI) (`spotatui/`) + +**Type:** Terminal-based Spotify controller +**Website:** [https://github.com/mrVanbrakel/SpotatUI](https://github.com/mrVanbrakel/SpotatUI) +**Configuration:** 104 lines in `home/programs/spotatui/default.nix` + +**Features:** +- โœ… **Rust-based** with performance-optimized rendering +- โœ… **Stylix color theme** integration with color math +- โœ… **Full playback control** (play, pause, skip, seek) +- โœ… **Playlist management** (create, edit, favorite) +- โœ… **Volume control** (absolute and percent-based) +- โœ… **Lyrics display** with interactive viewing +- โœ… **Discord RPC** configurable (disabled by default) +- โœ… **Custom keybindings** with application-specific controls + +**Performance Settings:** +```yaml +tick_rate_milliseconds: 16 # 60 FPS UI rendering +enable_text_emphasis: true # Bold/italic formatting +show_loading_indicator: true # Visual feedback +disable_mouse_inputs: false # Scroll wheel support +enable_announcements: false # Notifications disabled +``` + +**Visualizer Modes:** +- **Equalizer** (default) +- Various wave forms +- Custom presets +- Keepawake preventing idle sleep during listening + +**Theme Integration:** +- All theme colors pulled from Stylix via RGB mapping +- Active color โ†’ base0D (theme accent) +- Banner color โ†’ base0C (theme highlight) +- Error colors โ†’ base08 (theme error) +- Playback progress โ†’ base0D (theme primary) + +**Key Bindings:** +| Function | Key | Description | +|----------|-----|-------------| +| **Back** | q | Return to previous screen | +| **Search** | / | Input field with suggestions | +| **Play/Pause** | space | Toggle playback | +| **Next Track** | n | Skip current track | +| **Previous Track** | p | Return to previous or restart | +| **Volume Up/Down** | +/- | Adjust playback volume | +| **Shuffle** | ctrl+s | Toggle random playback | +| **Repeat** | ctrl+r | Toggle repeat modes | +| **Lyrics** | V | Open synchronized lyrics view | +| **Copy URL** | c / C | Share song or album URL | +| **Queue** | Q | Manage playback queue | +| **Audio Analysis** | v | Display technical audio info | + +**Playback Control:** +- **Seek forwards/backwards** adjust by 5 seconds +- **Seek progress** updated every 16ms for smooth animation +- **Shuffle icon** ๐Ÿ”€, **Repeat icons** ๐Ÿ”‚ ๐Ÿ” +- **Playing/Paused icons** โ–ถ โธ + +**Configuration Files:** +- **`~/.config/spotatui/config.yml`** โ€“ Persistent user preferences +- **Announcement tracking** disabled after specific IDs seen + +--- +### 6. Ghostty Configuration Summary + +| Aspect | Configuration | Benefit | +|--------|--------------|---------| +| **Cursor** | Custom GLSL shader (cursor_warp) | Visual feedback on actions | +| **Theme** | base16 โ†’ Stylix colors | Consistent UI | +| **Integration** | Zsh shell with bidirectional sync | Native terminal experience | +| **Clipboard** | Read/write enabled | Copy/paste without prompts | +| **Paste behavior** | Confirm-close disabled | Speed workflow | +| **Window** | 10px padding X/Y | Comfortable reading | + +--- +### 7. Shell Summary Table + +| Program | Type | Configuration | Purpose | +|---------|------|---------------|---------| +| **Zsh** | Shell | 196 lines | Primary shell with syntax highlighting, history management, completions | +| **Starship** | Prompt | Auto | Fast, multi-language prompt with Git integration | +| **Zoxide** | Navigation | Auto | Smart directory navigation with learning | +| **FZF** | Utility | Auto | Fuzzy finder for interactive filtering | +| **EZA** | ls replacement | Auto | Modern file listing with icons and git status | +| **Direnv** | Automation | Auto | Auto-load environment variables | + +--- +## ๐Ÿ“ File & Media Management + +### 8. Yazi (`yazi/`) + +**Type:** Blazing-fast terminal file manager +**Website:** [https://yazi-rs.github.io](https://yazi-rs.github.io) +**Configuration:** (Minimal file in `home/programs/yazi/`) + +**Features:** +- โœ… **Rust-based** with async I/O +- โœ… **Image preview** integration +- โœ… **Git status integration** +- โœ… **Yank/put clipboard** (ya `yazi --chooser-file /tmp/clip` pattern) +- โœ… **Batch renaming** with regex support +- โœ… **Bookmark system** with manual entries +- โœ… **Preview engine** for media files +- โœ… **Status column** with metadata + +**Typical Usage:** +```bash +yazi / # Launch file manager at root +Ctrl-t # Open selection +g # Jump to git status +z \*.md # Filter Markdown files +``` + +**Yazi Config Location:** `~/.config/yazi/yazi.toml` (likely auto-configured) + +--- +### 9. Thunar (`thunar/`) + +**Type:** GTK-based file manager +**Configuration:** (Minimal stub in `home/programs/thunar/`) + +**Integrations:** +- **GVFS integration** for network shares +- **Trash support** with undo capability +- **Volume management** via udiskie +- **Bookmark persistence** across sessions + +**Typical Usage:** +```bash +thunar /mnt/external # Launch at external drive +``` + +--- +## ๐Ÿ”€ Git Ecosystem + +### 10. Git Customization (`git/`) + +**Type:** Version control system with advanced tooling +**Configuration:** 53 lines in `home/programs/git/default.nix` + +**Core Configuration:** +- โœ… **Personal defaults** from variables.nix: + - `user.name` and `user.email` set automatically + - `init.defaultBranch = main` for new repos + - `pull.rebase = false` for standard merges + - `push.autoSetupRemote = true` for origin setup + - `color.ui = 1` for colored output + +**Aliases System:** +Auto-implemented aliases for workflow acceleration: + +| Alias | Expands To | Purpose | +|-------|------------|---------| +| **essa** | `git push --force` | Force push with short name | +| **co** | `git checkout` | Branch switching | +| **fuck** | `git commit --amend -m` | Message editing without new commit | +| **c** | `git commit -m` | Quick commits | +| **ca** | `git commit -am` | Quick add+commit | +| **forgor** | `git commit --amend --no-edit` | Edit commit without message change | +| **l** / **s** / **ss** | `git log/status` | Quick overview | +| **st** | `git status --short` | Short status display | +| **pl/ps** | `git pull/push origin $(branch)` | Current branch remote | +| **g** | `lazygit` | Visual Git interface | +| **df** / **hist** / **llog** | Advanced log formats | Visualization | +| **edit-unmerged** | Interactive merge conflict resolution | File selection | +| **ha** | Prefix mode with fzf selection | Mass staging | + +**Ignored Files:** +```gitignore +# Standard development exclusions +.cache/ +.DS_Store +.idea/ +*.swp +*.elc +auto-save-list +.direnv/ +node_modules +result* +.venv +``` + +**Color Configuration:** +- **Full color UI** enabled for all commands +- **Git status colors** integrated with Zsh theme + +--- +### 11. LazyGit (`git/lazygit.nix`) + +**Type:** Terminal UI for Git +**Package:** Auto-installed via shell aliases + +**Features:** +- โœ… **Visual branch management** with mouse support +- โœ… **Conflict resolution** with side-by-side comparison +- โœ… **Stashing/Popping** with comment system +- โœ… **Stating/unstating** files with preview +- โœ… **Commit editing** and rewording +- โœ… **Interactive rebase** +- โœ… **Status bar integration** with custom commands + +**Typical Usage:** +```bash +g # Launches lazygit via alias +/ # Search files +Ctrl-s # Stash changes +Ctrl-f # Fetch branch +``` + +--- +### 12. Time-Capsule CSR (`git/signing.nix`) + +**Type:** Git commit signing with GnuPG +**Configuration:** Signing framework setup + +**Features:** +- โœ… **GnuPG agent** integration for SSH auth +- โœ… **Commit signing** enabled via `gpgsigning=true` +- **Typical signed commit message:** โ€œgit commit -S -m 'Fix typo'โ€ + +--- +### 13. Git System Summary + +| Component | Type | Purpose | +|-----------|------|---------| +| **Git** | VCS | Core version control with 20+ aliases | +| **Lazygit** | GUI | Terminal-based Git management with advanced features | +| **Commit Signing** | Security | GnuPG-signed commits for provenance | +| **Ah:h/l** | UUID-based | Next to remember/fix commits | + +--- +## โ˜๏ธ Electron Integration + +### 14. Proton VPN (`proton/`) + +**Type:** Security-focused VPN with auto-start +**Configuration:** 2 files in `home/programs/proton/` + +**Modules:** +1. **auto-start-vpn.nix** โ€“ Automatic VPN connection on boot +2. **default.nix** โ€“ Proton VPN configuration + +**Features:** +```nix +services.protonvpn.enable = true; # System service +autoStartVPN.enable = true; # Immediate connection +``` + +--- +## โ„๏ธ Color Scheme & Desk Utilities + +### 15. Nightshift (`nightshift/`) + +**Type:** Blue light filter for circadian rhythm +**Configuration:** (Minimal stub) + +**Features:** +- **Night light schedule** with ambient adaptation +- **Blue-light reduction** with adjustable tint +- **Night mode** for ambient display in dark conditions + +**Typical: BlueShift โ†’ 3000K ambient** + +--- +## ๐Ÿงช Technology Stack Utilities + +### 16. Nix Utilities (`nix-utils/`) + +**Type:** Nix ecosystem helper tools +**Configuration:** Nix command-line helpers + +**Features:** +- **Nix profile management** commands +- **Store optimization** shortcuts +- **Flake update** automation +- **Garbage collection** with thresholds +- **Build status** display templates + +**Typical Commands:** +```bash +nix-highlight # Syntax highlighting for Nix files +nix-search # Package search with ranking +``` + +--- +### 17. Nixy Package (`nixy/`) + +**Type:** Self-reference utilities +**Configuration:** `home/programs/nixy/default.nix` + +**Features:** +- **Dotfile synchronizer** +- **Home-manager shortcuts** +- **Nix evaluation** for debugging +- **Flake helper** scripts + +--- +## ๐Ÿ“š Bookmark Collections + +### 18. Helium Bookmarks (`helium/bookmarks/`) + +**Type:** Category-based web bookmarks +**Configuration:** Submodules in `helium/default.nix` + +**Bookmark Categories:** +``` +helium/bookmarks/ +โ”œโ”€โ”€ default.nix # Base configuration +โ”œโ”€โ”€ entertainment.nix # Streaming, music, video +โ”œโ”€โ”€ general.nix # Default browser start page +โ”œโ”€โ”€ infosec.nix # Security resources +โ”œโ”€โ”€ jack.nix # Personal/social bookmarks +โ”œโ”€โ”€ other.nix # Miscellaneous +โ”œโ”€โ”€ tools.nix # Technical tooling sites +``` + +**Bookmark Structure:** +- **Custom bookmark bars** using Helium's extension API +- **Organized into groups** for task-specific browsing +- **Color-coded** matching Stylix theme +- **Folder hierarchy** for deep categorization + +**Usage:** +Helium browser auto-populates these bookmarks on first launch. Bookmarks persist across sessions. + +--- +## ๐Ÿ“Š Group Package Management + +Currently defined in `home/programs/group/` directory: + +| Group | Purpose | Status | +|-------|---------|--------| +| **dev** | Development tools | Active | +| **basic-apps** | Core applications | Active | +| **cybersecurity** | Security tools | Active | +| **flake** | Flake helper modules | Active | + +--- +### 19. Group Overview + +All groups are **importable via flake**: + +```nix +{ inputs, ... }: { + imports = [ + inputs.nixy.homeManagerModules. # ๐Ÿ“ฆ Install package group + ]; +} +``` + +Or via **nix shell command**: + +```bash +nix shell github:anotherhadi/nixy# # Instant shell with packages +``` + +Note: These are **separate from the home/programs** files โ€“ refer to **[GROUPS.md](GROUPS.md)** for package list details. + +--- +## ๐Ÿ› ๏ธ Quick Reference: All Programs + +### Terminal & Shell +| Program | Category | Description | +|---------|----------|-------------| +| **Ghostty** | Terminal | GPU-accelerated terminal with cursor shaders | +| **Zsh** | Shell | Advanced shell with syntax highlighting and autosuggestions | +| **Zoxide** | Shell | Fuzzy directory navigation | +| **FZF** | Utility | Interactive fuzzy finder | +| **EZA** | Utility | Modern ls replacement with icons | +| **Starship** | Prompt | Multi-language prompt with Git integration | +| **Direnv** | Automation | Auto-load environments | + +### Development & Editing +| Program | Category | Description | +|---------|----------|-------------| +| **NVF (Neovim)** | Editor | Notashelf NVF framework with theme integration | +| **Helium** | Browser | Wayland Flutter browser with Fluent design | +| **SpotatUI** | Media | Rust-based Spotify terminal controller | + +### File & Media +| Program | Category | Description | +|---------|----------|-------------| +| **Yazi** | File manager | Blazing-fast Rust file manager | +| **Thunar** | File manager | GTK-based file manager integration | +| **VNC Utilities** | Remote | Native support packages | + +### Version Control +| Program | Category | Description | +|---------|----------|-------------| +| **Git** | VCS | Core Git with 20+ conveniences | +| **LazyGit** | VCS | Visual Git terminal UI | +| **GnuPG** | Security | Commit signing and SSH agent | + +### Services & Utilities +| Program | Category | Description | +|---------|----------|-------------| +| **Proton VPN** | Security | System-wide VPN with auto-connect | +| **Nightshift** | Display | Blue light filter for circadian rhythm | +| **Nix Utils** | Package management | Nix-specific helper tools | +| **Helium Bookmarks** | Organization | Web bookmarks organized by category | + +--- +## ๐Ÿ”ง Home Manager Integration + +All programs are configured via home-manager modules: + +**Example import chain:** +``` +home/programs/shell/default.nix + โ†’ home/programs/shell/zsh.nix (196 lines) + โ†’ shell aliases โ†’ term integration +``` + +**Features Provided:** +- โœ… **Universal theming** (all apps โ†’ Stylix colors) +- โœ… **Session variables** (TERMINAL, TERM, BROWSER set as defaults) +- โœ… **desktopEntries** (Helium appears in app menu) +- โœ… **xdg base directory** compliance (all config โ†’ ~/.config) +- โœ… **Migration-free** updates via home-manager + +--- +## ๐Ÿ“– User Guide: Setting Up Your Environment + +### Prerequisites +1. **NixOS System** (with home-manager installed) +2. **Flakes enabled** in NixOS configuration +3. **Stylix colors** populated (optional, enhances visual integration) +4. **Fonts:** Nerd Fonts and Symbol fonts installed + +### Installation Steps + +#### Step 1: Add Inputs +```nix +inputs.nixy.url = "github:anotherhadi/nixy"; +``` + +#### Step 2: Import Modules +```nix +home-manager = { + imports = [ + inputs.nixy.homeManagerModules. + # Or import multiple: ./{ghostty,zsh,nvf}/default.nix + ]; +}; +``` + +#### Step 3: Build Environment +```bash +home-manager switch --flake /etc/nixos#username@hostname +``` + +#### Step 4: Verify Installation +```bash +# Check services +systemctl status --user wireplumber # PipeWire audio server +systemctl status --user greetd # Greetd display manager +systemctl status --user dbus-broker # Desktop Bus broker + +# Verify programs +ghostty --version +nvim --headless -c 'qa' # Neovim validation +yazi --help # Yazi file manager +``` + +--- +## ๐ŸŽจ Theming Integration Flow + +All programs receive **Stylix colors** automatically: + +``` +home/programs/ +โ”œโ”€โ”€ nvf/default.nix โ†’ passes colors โ†’ Mini.nvim โ†’ Neovim UI recolor +โ”œโ”€โ”€ ghostty/default.nix โ†’ sets base00-base0F colors โ†’ Terminal theme +โ”œโ”€โ”€ spotatui/default.nix โ†’ FYI base00-base0F โ†’ Color map to UI +โ””โ”€โ”€ helium/default.nix โ†’ manual injection into Flutter manifest +``` + +Result: **Consistent color scheme across all applications** matching desktop theme. + +--- +## โšก Performance Optimization + +| Program | Optimization | Benefit | +|---------|--------------|---------| +| **Ghostty** | GPU shader | 60+ FPS scrolling | +| **EZA** | Tree-sitter parsing | <10ms file list | +| **Zoxide** | Fuzzy matching algorithm | O(n log n) navigation | +| **FZF w/ Sk** | File caching | <1ms repeat searches | +| **SpotatUI** | Rust low-overhead | 60 FPS visualizations | +| **LazyGit** | Lazy-loading | <50ms response time | +| **Helium** | Flutter GPU | Hardware-accelerated rendering | + +--- +## ๐Ÿš€ Usage Examples + +### One-liner setup: Ghostty + Zsh +```nix +{ inputs, ... }: { + imports = [ + inputs.nixy.homeManagerModules.ghostty + inputs.nixy.homeManagerModules.shell + ]; +} +``` + +### Full development stack +```bash +home-manager switch --flake .#username@laptop +# Installs: Ghostty, Zsh w/ 20 aliase, NVF (Neovim), Yazi, Helium +``` + +### Media workstation +```bash +nix shell github:anotherhadi/nixy#cybersecurity +# Instant shell with: Zsh, NVF, Ghostty, Lazygit, Helium +``` + +### Quick Spotify session +```bash +spt # Alias to spotatui via shell configuration +/weekend # Type in search bar, space to play +``` + +--- +## ๐Ÿ“š Additional Documentation + +- **[GROUPS.md](GROUPS.md)** โ€“ Predefined software groups with package lists +- **[NEOVIM.md](docs/NEOVIM.md)** โ€“ Detailed NVF (Neovim) configuration +- **[THEMES.md](docs/THEMES.md)** โ€“ How theming works and theme creation +- **[README.md](docs/README.md)** โ€“ System-wide configuration guide +- **[SERVER.md](docs/SERVER.md)** โ€“ Server-specific services + +--- \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..4d13651 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,788 @@ +# Nixy Pro Configuration Guide + +Nixy Pro is a **modular, comprehensive NixOS configuration** that unifies system management across multiple hosts with consistent theming, security, and automation. This repository provides: + +- **๐Ÿ–ฅ๏ธ Multi-host management** (laptop, workstation, server) +- **โš™๏ธ Hardware-specific configurations** (AMD/Nvidia graphics, Bluetooth, audio) +- **๐Ÿ‘ฅ User-level management** via home-manager with predefined user groups +- **๐Ÿ”’ Secure defaults** (USBGuard, sudo restrictions, authentication) +- **๐ŸŒˆ Consistent theming** with Stylix and Base16 +- **๐Ÿ“ฆ Package management** with curated software groups +- **๐Ÿณ Container support** with Docker integration +- **โŒจ๏ธ Unified input methods** with Fcitx5 +- **๐ŸŽฎ Wayland ecosystem** with Hyprland and tuigreet display manager + +--- + +## ๐Ÿ“‹ Table of Contents + +- [๐Ÿ  Project Architecture](#-project-architecture) +- [โš™๏ธ System Configuration Modules](#-system-configuration-modules) +- [๐Ÿ‘ฅ User Groups & Package Groups](#-user-groups--package-groups) +- [๐Ÿ–ฅ๏ธ Host Configurations](#-host-configurations) +- [๐ŸŒ Self-Hosted Services](#-self-hosted-services) +- [๐ŸŽจ Theming System](#-theming-system) +- [๐Ÿ› ๏ธ Installation Guide](#%EF%B8%8F-installation-guide) +- [๐Ÿ”ง Usage & Maintenance](#-usage--maintenance) +- [๐Ÿ’ก Troubleshooting](#-troubleshooting) +- [๐Ÿ“š Further Reading](#-further-reading) + +--- + +## ๐Ÿ  Project Architecture + +Nixy Pro follows a **multi-layer modular architecture**: + +``` +. +โ”œโ”€โ”€ flake.nix # Main flake outputs and inputs +โ”œโ”€โ”€ README.md # This file +โ”œโ”€โ”€ LICENSE # MIT License +โ”œโ”€โ”€ hosts/ # Host-specific configurations +โ”‚ โ”œโ”€โ”€ laptop/ # Laptop configuration +โ”‚ โ”œโ”€โ”€ home-pc/ # Home workstation configuration +โ”‚ โ”œโ”€โ”€ work/ # Work computer configuration +โ”‚ โ””โ”€โ”€ server/ # Self-hosted server configuration +โ”œโ”€โ”€ home/ # User-level configurations +โ”‚ โ”œโ”€โ”€ programs/ # Home-manager programs and modules +โ”‚ โ”‚ โ”œโ”€โ”€ group/ # Package groups (dev, cybersecurity) +โ”‚ โ”‚ โ”œโ”€โ”€ nvf/ # Neovim configuration (nvf) +โ”‚ โ”‚ โ”œโ”€โ”€ shell/ # Shell utilities and configuration +โ”‚ โ”‚ โ””โ”€โ”€ ... +โ”‚ โ””โ”€โ”€ system/ # System-level user settings +โ”‚ โ”œโ”€โ”€ caeblestia-shell/ # Caelestia shell theme +โ”‚ โ””โ”€โ”€ ... +โ”œโ”€โ”€ nixos/ # Core system configuration modules +โ”‚ โ”œโ”€โ”€ amd-graphics.nix # AMD GPU configuration +โ”‚ โ”œโ”€โ”€ audio.nix # PipeWire audio server setup +โ”‚ โ”œโ”€โ”€ bluetooth.nix # Bluetooth hardware support +โ”‚ โ”œโ”€โ”€ docker.nix # Docker container runtime +โ”‚ โ”œโ”€โ”€ fonts.nix # Font management (30+ fonts) +โ”‚ โ”œโ”€โ”€ hyprland.nix # Hyprland Wayland compositor +โ”‚ โ”œโ”€โ”€ nix.nix # Nix package manager configuration +โ”‚ โ”œโ”€โ”€ nvidia.nix # Nvidia GPU configuration with Wayland +โ”‚ โ”œโ”€โ”€ omen.nix # HP Omen laptop RGB control +โ”‚ โ”œโ”€โ”€ systemd-boot.nix # systemd-boot loader configuration +โ”‚ โ”œโ”€โ”€ tuigreet.nix # Tuigreet display manager +โ”‚ โ”œโ”€โ”€ usbguard.nix # USB device authorization +โ”‚ โ”œโ”€โ”€ users.nix # User and group definitions +โ”‚ โ””โ”€โ”€ utils.nix # Utility services and configurations +โ”œโ”€โ”€ server-modules/ # Server-specific NixOS modules +โ”‚ โ”œโ”€โ”€ adguardhome.nix # DNS ad-blocker +โ”‚ โ”œโ”€โ”€ arr.nix # Media management stack +โ”‚ โ”œโ”€โ”€ cloudflared.nix # Cloudflare tunnel +โ”‚ โ”œโ”€โ”€ cyberchef.nix # Cyber Swiss Army Knife +โ”‚ โ”œโ”€โ”€ fail2ban.nix # Security: brute force prevention +โ”‚ โ”œโ”€โ”€ glance/ # System dashboard +โ”‚ โ”œโ”€โ”€ mealie.nix # Recipe manager +โ”‚ โ”œโ”€โ”€ ssh.nix # SSH server configuration +โ”‚ โ””โ”€โ”€ ... +โ”œโ”€โ”€ themes/ # Visual theme configurations +โ””โ”€โ”€ docs/ # Documentation directory +``` + +### Architecture Layers + +| Layer | Description | Example | +|-------|-------------|---------| +| **flake.nix** | Defines all flake outputs and inputs | Hyprland, Stylix, SOPS | +| **/nixos** | Core system-level NixOS modules | GPU, audio, bluetooth | +| **/home** | User-level configurations via home-manager | Terminals, shell, editors | +| **/hosts** | Host-specific configurations | laptop, workstation, server | +| **/server-modules** | Server services and network infrastructure | AdGuard, Glance, CyberChef | +| **/themes** | Theme definitions and color schemes | Rose-pine, sorbet, catppuccin | + +--- + +## โš™๏ธ System Configuration Modules + +### Core System Modules + +#### 1. Nix Package Manager (`nixos/nix.nix`) + +**Purpose:** Centralized Nix configuration across all hosts + +**Key Features:** +- **Unfree packages enabled** (required for Nvidia drivers) +- **Cachix mirrors configured:** + - `https://hyprland.cachix.org` (Hyprland packages) + - `https://nix-community.cachix.org` (Community packages) + - `https://numtide.cachix.org` (Numtide packages) + - `https://cuda-maintainers.cachix.org` (CUDA packages) +- **Experimental features:** `nix-command` and `flakes` enabled +- **Automatic garbage collection:** Weekly cleanup, 7-day threshold +- **Sudo configuration:** + - Passwordless sudo for `nixos-rebuild` command + - Timestamp timeout set to -1 (passwordless during SSH sessions) +- **Download optimization:** 250 MB buffer size for faster installations + +#### 2. Systemd Boot Loader (`nixos/systemd-boot.nix`) + +**Purpose:** UEFI boot management with silent/ Plymouth-capable boot + +**Configuration:** +- **Bootloader:** systemd-boot (supports 8 entries) +- **Kernel parameters for silent boot:** + - `quiet` - Minimize console output + - `splash` - Show boot splash screen + - `rd.systemd.show_status=false` - Hide systemd status + - `udev.log_priority=3` - Reduced logging level +- **Kernel:** `linuxPackages_latest` for cutting-edge hardware support +- **Cleanup:** Temporary files cleared on boot + +#### 3. Users & Authentication (`nixos/users.nix`) + +**Purpose:** User account management and permissions + +**Configuration:** +- **Default shell:** Zsh (configured via home-manager) +- **User groups:** + - `wheel` - Sudo privileges + - `networkmanager` - Network control +- **Multi-machine support:** Variables replace hardcoded usernames +- **Zsh autocompletion:** System packages available in shell + +### Hardware & Peripherals + +#### 4. Graphics Configuration (Choose one based on hardware) + +**Option A: AMD Graphics (`nixos/amd-graphics.nix`)** + +**Purpose:** Enable AMD GPU acceleration with VA-API support + +**Features:** +- **ROCm support:** `rocmPackages.clr.icd` for compute workloads +- **VA-API acceleration:** Hardware video decoding + - `libvdpau-va-gl` - VDPAU driver with VA-GL backend + - `libva-vdpau-driver` - VA-API to VDPAU bridge +- **OpenGL acceleration:** Mesa packages for 2D/3D acceleration + +**Option B: Nvidia Graphics (`nixos/nvidia.nix`)** + +**Purpose:** Proprietary Nvidia driver setup for optimal performance + +**Hardware Support:** +- **Wayland compatibility:** `nvidia-drm.modeset=1` for direct rendering +- **Hybrid graphics:** Prime offloading for laptops with multiple GPUs +- **Graphics features:** G-Sync, VRR, GPU-accelerated Electron apps +- **API support:** Vulkan, VA-API, GLX, OpenGL + +**Environment Configuration:** +```bash +LIBVA_DRIVER_NAME=nvidia # VA-API acceleration +GBM_BACKEND=nvidia-drm # Graphics backend +__GLX_VENDOR_LIBRARY_NAME=nvidia # OpenGL acceleration +NIXOS_OZONE_WL=1 # Electron Wayland support +__GL_GSYNC_ALLOWED=1 # G-Sync support +__GL_VRR_ALLOWED=1 # Variable Refresh Rate +MOZ_ENABLE_WAYLAND=1 # Firefox Wayland +NVD_BACKEND=direct # New driver backend +``` + +**BLACKLISTED MODULES:** `nouveau` to prevent driver conflicts + +#### 5. Audio System (`nixos/audio.nix`) + +**Purpose:** Modern audio daemon stack with hardware acceleration + +**Configuration:** +- **PipeWire** enabled as default audio server (replaces PulseAudio) +- **WirePlumber** for session and policy management +- **Alsa** backend with 32-bit application support +- **JACK** compatibility layer for professional audio tools +- **Camera monitoring disabled** for privacy +- **Real-time scheduling:** `rtkit` for performance + +#### 6. Bluetooth (`nixos/bluetooth.nix`) + +**Purpose:** Bluetooth hardware support with persistent power state + +**Configuration:** +- **Bluetooth hardware:** Enabled and powered on at boot +- **Standard profiles:** A2DP, HFP, HID, etc. + +#### 7. USBGuard (`nixos/usbguard.nix`) + +**Purpose:** USB device authorization framework for security + +**Configuration:** +- **Default policy:** Block implicit (unknown) USB devices +- **IPC access:** Allowed for root and configured user +- **Security layer:** Prevents unauthorized USB devices from mounting + +#### 8. HP Omen Laptop Support (`nixos/omen.nix`) + +**Purpose:** Specialized configuration for HP Omen gaming laptops + +**Features:** +- **RGB control:** Kernel module `hp-wmi` for custom lighting +- **RGB zones:** 4 zones with custom access (`/sys/devices/platform/hp-wmi/rgb_zones/zoneXX`) +- **User group:** `omen-rgb` for RGB management permissions +- **Sysfs permissions:** Set via tmpfiles rules and udev rules +- **Kernel command line:** `hp_wmi.force_slow_fan_control=1` for battery-friendly fan control + +--- + +## ๐Ÿ‘ฅ User Groups & Package Groups + +### Predefined Software Groups + +Nixy Pro includes **two main package groups** for quick environment setup: + +#### ๐Ÿ”ฌ Cybersecurity Group + +**Purpose:** Security research, penetration testing, and digital forensics + +**Package Categories:** +- **Web:** dirb, ffuf, katana, whatweb +- **Hashes & Cracking:** hashcat, haiti, hydra, john +- **Databases:** mariadb, redis, sqlmap, nosqli +- **Network:** inetutils, termshark (TUI Wireshark), dnsrecon, whois, dig, nmap, samba +- **Exploitation:** metasploit, nuclei +- **VPN:** openvpn +- **Secrets:** trufflehog +- **Forensics:** binwalk +- **Additional:** spilltea, jwt-tui (from NUR package collection) + +**Quick Install (without full system setup):** +```bash +nix shell github:anotherhadi/nixy#cybersecurity +``` + +**Packages Available:** 22+ security tools curated for penetration testing and security research + +--- + +#### ๐Ÿ’ป Development Group + +**Purpose:** Development environment with essential tools + +**Package Categories:** +- **Languages:** Go, Node.js, Python 3 +- **Build Tools:** gcc, jq, rsync +- **Development Utilities:** air (Go live reload), duckdb (SQLite-compatible DB), nix-prefetch-github +- **Editors:** claude-code (CLI for Claude), bash tools + +**Quick Install (without full system setup):** +```bash +nix shell github:anotherhadi/nixy#dev +``` + +**Packages Available:** 9+ essential development tools + +--- + +### Home-manager User Groups + +Users automatically receive: +- **NetworkManager** integration (GUI network configuration) +- **Sudo access** (passwordless for wheel group) +- **Zsh shell** with completions +- **Caelestia-shell** (Hyprland-compatible desktop environment) +- **Input method:** Fcitx5 for international keyboard layouts +- **XDG compliance** with proper directory structure + +--- + +## ๐Ÿ–ฅ๏ธ Host Configurations + +### Supported Host Types + +Nixy Pro manages **four distinct host configurations**: + +| Host | Type | Hardware Profile | Network Configuration | +|------|------|----------------|---------------------| +| `h-laptop` | Personal laptop | AMD/Nvidia GPU | NetworkManager, mobile broadband | +| `h-work` | Work computer | Unknown (configurable) | NetworkManager, VPN | +| `jack` | Self-hosted server | Server-grade hardware | Static IP, Cloudflare Tunnel | + +### Host Configuration Structure + +Each host includes: + +``` +hosts// +โ”œโ”€โ”€ flake.nix # Host-specific flake +โ”œโ”€โ”€ configuration.nix # System configuration imports +โ”œโ”€โ”€ hardware-configuration.nix # Auto-generated hardware config +โ”œโ”€โ”€ variables.nix # Host-specific variables +โ”œโ”€โ”€ variables.secret # Encrypted secrets (via SOPS-nix) +โ””โ”€โ”€ secrets/ # Unencrypted secrets if not using SOPS +``` + +**Example configuration.nix:** +```nix +{ + imports = [ + # Core system modules + ../../nixos/nix.nix + ../../nixos/systemd-boot.nix + ../../nixos/users.nix + ../../nixos/utils.nix + ../../nixos/audio.nix + ../../nixos/bluetooth.nix + ../../nixos/docker.nix + ../../nixos/amd-graphics.nix # or nvidia.nix + ../../nixos/fonts.nix + ../../nixos/hyprland.nix + ../../nixos/tuigreet.nix + ../../nixos/usbguard.nix + ]; + + # Host-specific variables + cfg = import ./variables.nix { inherit inputs pkgs; }; +} +``` + +### Variable System + +All hosts use **centralized variables** defined in `variables.nix`: + +```nix +{ + hostname = "laptop"; # Machine hostname + username = "hadi"; # Main user account + keyboardLayout = "us,de"; # Keyboard layouts + timeZone = "Europe/Berlin"; # System timezone + defaultLocale = "en_US.UTF-8"; # Primary locale + extraLocale = "de_DE.UTF-8"; # Secondary locale + autoGarbageCollector = true; # Nix garbage collection enabled + autoUpgrade = true; # Auto-update enabled + configDirectory = "/etc/nixos"; # Config location + flake = "/etc/nixos"; # Flake path +} +``` + +--- + +## ๐ŸŒ Self-Hosted Services + +The server configuration (`hosts/server/`) includes **modular service definitions** for: + +### ๐Ÿ”ง Server Architecture + +**Cloudflare Tunnel** as the secure gateway with: +- **Zero public IP exposure** - Only accessible via Cloudflare +- **Access control** via Cloudflare's Zero Trust policies +- **Custom domain support** for easy access + +### ๐Ÿ“ฆ Services Modules + +| Module | Purpose | Technology | +|--------|---------|------------| +| `adguardhome.nix` | Network-wide ad blocking and DNS filtering | AdGuard Home | +| `arr.nix` | Media management stack (movies/TV shows automation) | Radarr, Sonarr, etc. | +| `cyberchef.nix` | Cyber Swiss Army Knife for data manipulation | Node.js web app | +| `fail2ban.nix` | Security: brute force prevention | Fail2Ban | +| `firewall.nix` | Network filtering and protection | systemd, nftables | +| `glance/` | System monitoring dashboard | Glance | +| `mealie.nix` | Self-hosted meal planning and recipe management | Mealie | +| `stirling-pdf.nix` | Web-based PDF editor and converter | Node.js | +| `ssh.nix` | Secure remote access | OpenSSH | + +### ๐ŸŒ High-Priority Services + +1. **NGINX** - Reverse proxy routing traffic to services +2. **AdGuard Home** - Block ads/trackers at DNS level +3. **Glance** - System monitoring dashboard +4. **Arr Stack** - Automated media management (Radarr, Sonarr, etc.) +5. **Mealie** - Recipe manager for meal planning +6. **Stirling-PDF** - Client-side PDF editing/manipulation +7. **CyberChef** - Encryption, encoding, and data analysis +8. **Mazanoke** - Image processing and optimization +9. **Cloudflared** - Secure tunnel via Cloudflare +10. **Fail2Ban** - Intrusion prevention and brute force blocking + +### ๐Ÿ“Š Security Features + +- **Cloudflared:** Encrypted tunnel with authentication +- **Fail2Ban:** IP blocking after failed login attempts +- **Firewall:** nftables-based filtering +- **Port forwarding:** Only essential ports exposed via reverse proxy +- **Timed access:** Scheduled firewall rules +- **Network isolation:** Docker networks isolated + +--- + +## ๐ŸŽจ Theming System + +### Stylix Integration + +Nixy Pro uses **[Stylix](https://stylix.danth.me/)** for consistent theming across: +- **Hyprland** (WM colors) +- **Terminal emulators** +- **GTK applications** +- **Rofi/Waybar/menu styling** +- **Shell prompts** + +### Available Themes + +See **[THEMES.md](docs/THEMES.md)** for theme configurations and screenshots. + +### Theme Gallery Examples + +![Rose-pine theme example showing home screen, flake display, and browser/notification panel](https://raw.githubusercontent.com/anotherhadi/nixy/main/.github/assets/rose-pine/home.png) +*Rose-pine theme showcasing consistent color scheme across applications* + +--- + +## โš™๏ธ Service Configuration Layer + +### Essential System Services + +| Service | Purpose | Configuration File | +|---------|---------|------------------| +| **NetworkManager** | Network configuration GUI | `utils.nix` | +| **dbus-broker** | Desktop Bus implementation | `utils.nix` | +| **GNOME Keyring** | Password storage | `utils.nix` | +| **UDisks2** | Removable media management | `utils.nix` | +| **Upower** | Battery monitoring | `utils.nix` | +| **Power Profiles Daemon** | Power management profiles | `utils.nix` | +| **GVFS** | Virtual file system support | `utils.nix` | +| **libinput** | Touchpad/trackpoint input | `utils.nix` | +| **dconf** | Desktop configuration storage | `utils.nix` | +| **Greetd + Tuigreet** | Display manager | `tuigreet.nix` | +| **XDG Portal** | File picker and portal integration | `utils.nix` | + +### Font Management + +**30+ fonts installed** including: +- **Sans-serif:** Roboto, Work Sans, Source Sans, Comfortaa, Inter, Jost, Lexend +- **Serif:** Comic Neue +- **Monospace:** Fira Code (Nerd Font), Meslo LG (Nerd Font) +- **Default:** DejaVu, Noto (including CJK and color emoji) +- **Special:** OpenMoji, Twemoji + +**Note:** Default font packages disabled to allow user selection via home-manager + +--- + +## ๐Ÿ› ๏ธ Installation Guide + +### Prerequisites + +1. **NixOS System** (latest stable or unstable) +2. **Git** and **sudo** access +3. **Internet connection** for package downloads +4. **Disk space:** Minimum 30GB recommended for full installation +5. **UEFI system** (systemd-boot requirement) + +### Installation Steps + +#### Step 1: Clone the Repository + +```bash +# Recommended location for NixOS configurations +git clone https://gitea.doomlabs.de/KptltD00M/nixy.git /etc/nixos +cd /etc/nixos +``` + +#### Step 2: Copy Appropriate Host Configuration + +```bash +# Choose your hardware profile: +# - Laptop (AMD/Nvidia) +# - Home workstation +# - Work computer +# - Server + +# For example, if setting up a laptop: +cp -r hosts/laptop hosts/$(hostname) + +# Navigate to new host configuration +cd hosts/$(hostname) +``` + +#### Step 3: Configure Host-Specific Variables + +```bash +# Edit host variables +nano variables.nix +``` + +**Change `CHANGEME` values:** +- `hostname` +- `username` +- `keyboardLayout` +- `timeZone` +- `defaultLocale` + +#### Step 4: Set Up Secrets + +```bash +# Either: +# Option A: Use SOPS-nix for encrypted secrets (recommended) +pdo export secrets/ > secrets/secrets.yaml.age +../../bin/update-secrets + +# Option B: Manual secrets +# Copy secrets template if needed +cp -r hosts/laptop/secrets hosts/$(hostname)/secrets +``` + +#### Step 5: Review and Apply Configuration + +1. **Check for CHANGEME comments:** +```bash +# Quick scan for required changes +rg "CHANGEME" /etc/nixos +``` + +2. **Verify hardware configuration:** +```bash +# Import appropriate GPU module in configuration.nix +# - AMD: ../../nixos/amd-graphics.nix +# - Nvidia: ../../nixos/nvidia.nix +# - HP Omen: ../../nixos/omen.nix +``` + +3. **Apply configuration:** +```bash +# Dry run first +sudo nixos-rebuild dry-activate --flake .#$(hostname) + +# Apply +sudo nixos-rebuild switch --flake .#$(hostname) +``` + +#### Step 6: Home-manager Setup + +```bash +# Update home-manager configuration +home-manager switch --flake /etc/nixos#$(username)@$(hostname) + +# Optional: Generate hardware configuration if rebuilding from scratch +sudo nixos-generate-config --root /mnt +``` + +--- + +## ๐Ÿ”ง Usage & Maintenance + +### Daily Commands + +| Command | Purpose | +|---------|---------| +| `sudo nixos-rebuild switch --flake .#laptop` | Rebuild and apply system changes | +| `home-manager switch --flake .#hadi@laptop` | Update home-manager configuration | +| `sudo nixos-rebuild boot --flake .#laptop` | Set new generation as default boot | +| `nix flake update` | Update flake inputs | +| `sudo nixos-rebuild switch --upgrade` | Update system and packages | +| `nix store gc` | Cleanup unused packages | +| `nix profile list` | List installed packages | +| `nix profile wipe-history` | Remove old package versions | + +### Flake Update Process + +```bash +# Update all flake inputs +nix flake update + +# Rebuild all systems +for host in h-laptop h-work jack; do + sudo nixos-rebuild switch --flake .#$host +done + +# Update home-manager +for host in h-laptop h-work jack; do + home-manager switch --flake .#username@$host +done +``` + +### System Updates + +**Automatic Updates Enabled:** +```nix +system.autoUpgrade = { + enable = true; # System updates + dates = "04:00"; # Daily at 4 AM + flake = config.var.configDir; # Self-update + flags = ["--update-input" "nixpkgs"]; + allowReboot = false; # Manual reboot required +}; +``` + +**Recommendation:** Check system status weekly: +```bash +systemctl status --user wireplumber pulseaudio-esd autostart-vpn +journalctl --vacuum-time=7d +``` + +--- + +## ๐Ÿ’ก Troubleshooting + +### Common Issues & Solutions + +#### โŒ Audio not working + +**Diagnosis:** +- PipeWire service status +- WirePlumber activity +- Audio device detection + +**Solutions:** +```bash +# Check PipeWire status +systemctl --user status wireplumber pulseaudio-esd + +# Verify audio devices +pw-cli list-objects | grep -i audio + +# Restart audio services +systemctl --user restart wireplumber +``` + +--- + +#### โŒ Hyprland fails to start + +**Symptoms:** +- Black screen after login +- Wayland session crash +- Missing display manager + +**Diagnosis:** +- XDG_RUNTIME_DIR environment +- PipeWire running +- Required files present + +**Solutions:** +```bash +# Check environment +echo $XDG_RUNTIME_DIR +whoami # Should be logged-in user + +# Verify services +systemctl --way status +ls /run/current-system/sw/share/wayland-sessions/ +``` + +**Manual start:** +```bash +$XDG_RUNTIME_DIR=/run/user/$(id -u) Hyprland +``` + +--- + +#### โŒ Nvidia drivers not loading + +**Diagnostics:** +- Kernel parameters check +- Secure boot status +- Driver conflicts + +**Common fixes:** +```bash +# Check kernel parameters +cat /proc/cmdline | grep nvidia + +# Verify module loading +lsmod | grep nvidia + +# Blacklist nouveau (if not already done) +echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf +sudo update-initramfs -u -k all +``` + +**Secure boot workaround (if enabled):** +- Disable secure boot in BIOS +- Or sign Nvidia modules + +--- + +#### โš ๏ธ Home-manager not applying changes + +**Solutions:** +```bash +# Check home-manager configuration +home-manager build --flake /etc/nixos#username@hostname --show-trace +home-manager generations + +# Force fresh rebuild +rm -rf ~/.local/share/nix/profiles/home-manager +home-manager switch --flake /etc/nixos#username@hostname +``` + +--- + +#### ๐Ÿ”„ USB devices blocked by USBGuard + +**Diagnosis:** +- USBGuard service status +- Policy decisions + +**Solutions:** +```bash +# Check USBGuard status +systemctl status usbguard + +# List USB devices +lsusb + +# Temporarily allow device +usbguard list-devices +usbguard allow-device +``` + +**Configuration:** Edit `/etc/usbguard/rules.conf` for permanent changes + +--- + +### System Recovery + +**If system fails to boot:** +1. Reboot into recovery ISO +2. Remount root partition +3. Apply configuration: +```bash +sudo nixos-rebuild switch --flake /etc/nixos#hostname +``` + +**If home-manager breaks:** +```bash +# Reinstall from scratch +home-manager uninstall +home-manager switch --flake /etc/nixos#username@hostname +``` + +--- +## ๐Ÿ“š Further Reading & Resources + +### NixOS Documentation +- **[NixOS Manual](https://nixos.org/manual/nixos/stable/)** - Official NixOS documentation +- **[Nix Flakes Guide](https://nixos.wiki/wiki/Flakes)** - Flakes feature documentation +- **[Home Manager Manual](https://nix-community.github.io/home-manager/)** - User-level configuration + +### Related Projects +- **[Hyprland](https://wiki.hyprland.org/)** - Wayland compositor +- **[Stylix](https://stylix.danth.me/)** - Theming system +- **[Caelestia Shell](https://github.com/caelestia-dots/shell)** - Desktop environment +- **[SOPS-nix](https://github.com/Mic92/sops-nix)** - Secret management +- **[Helium Browser](https://github.com/oxcl/nix-flake-helium-browser)** - Flutter-based browser + +### Repository Documentation +- **[GROUPS.md](docs/GROUPS.md)** - Package groups (dev, cybersecurity) and how to use them +- **[SERVER.md](docs/SERVER.md)** - Server-specific service configurations +- **[NEOVIM.md](docs/NEOVIM.md)** - Neovim configuration (nvf) +- **[THEMES.md](docs/THEMES.md)** - Theme system and color schemes +- **[CONTRIBUTING.md](docs/CONTRIBUTING.md)** - Contribution guidelines + +### Useful Commands Reference +```bash +# Show generation history +sudo nix-env --list-generations + +# Switch to specific generation +sudo nixos-rebuild switch --flake .#laptop --profile /nix/var/nix/profiles/system- + +# Rollback to previous generation +sudo nix-env --rollback +sudo nixos-rebuild switch + +# Clean old generations (keep 5 latest) +sudo nix-collect-garbage -d +sudo nix-env --delete-generations old +``` + +--- \ No newline at end of file diff --git a/flake.nix b/flake.nix index a35bc0a..5752270 100644 --- a/flake.nix +++ b/flake.nix @@ -68,8 +68,8 @@ { formatter.${system} = pkgs.alejandra; nixosConfigurations = { - h-laptop = import ./hosts/laptop/flake.nix args; - h-work = import ./hosts/work/flake.nix args; + thinkpad = import ./hosts/laptop/flake.nix args; + home-pc = import ./hosts/home-pc/flake.nix args; jack = import ./hosts/server/flake.nix args; }; } diff --git a/home/programs/group/dev-packages.nix b/home/programs/group/dev-packages.nix index cd2701e..5e3d182 100644 --- a/home/programs/group/dev-packages.nix +++ b/home/programs/group/dev-packages.nix @@ -4,7 +4,7 @@ }: (with pkgs; [ go - claude-code + #claude-code ]) ++ (with pkgs-stable; [ nodejs diff --git a/home/programs/librewolf/default.nix b/home/programs/librewolf/default.nix new file mode 100644 index 0000000..48b5c5f --- /dev/null +++ b/home/programs/librewolf/default.nix @@ -0,0 +1,51 @@ +{ config, pkgs, lib, ... }: + +let + librewolfPkg = pkgs.librewolf; + +in { + programs.librewolf = { + enable = true; + package = librewolfPkg; + + profiles.default = { + isDefault = true; + + settings = { + # UI / behavior + "browser.startup.homepage" = "https://duckduckgo.com"; + "browser.newtabpage.enabled" = false; + + # Privacy baseline (LibreWolf already hardens most of this) + "privacy.resistFingerprinting" = true; + "privacy.trackingprotection.enabled" = true; + + # Disable telemetry completely + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.unified" = false; + + # Network / DNS (optional redundancy with policies) + "network.trr.mode" = 3; + "network.trr.uri" = "https://dns.quad9.net/dns-query"; + + # UI behavior + "browser.tabs.warnOnClose" = false; + "browser.quitShortcut.disabled" = true; + + # Security tightening + "dom.event.clipboardevents.enabled" = false; + "geo.enabled" = false; + "media.autoplay.default" = 5; + }; + + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + firefox-multi-account-containers + noscript + ]; + }; + }; + + # Make LibreWolf default browser + home.sessionVariables.BROWSER = "${librewolfPkg}/bin/librewolf"; +} diff --git a/home/programs/librewolf/system.nix b/home/programs/librewolf/system.nix new file mode 100644 index 0000000..f558ba6 --- /dev/null +++ b/home/programs/librewolf/system.nix @@ -0,0 +1,75 @@ +{ ... }: { + + programs.librewolf = { + enable = true; + + policies = { + # ----------------------- + # Privacy / telemetry + # ----------------------- + DisableTelemetry = true; + DisableFirefoxStudies = true; + DisablePocket = true; + + # ----------------------- + # Accounts / sync + # ----------------------- + OfferToSaveLogins = false; + PasswordManagerEnabled = false; + SyncDisabled = true; + + # ----------------------- + # Security baseline + # ----------------------- + DefaultCookiesSetting = 1; + DefaultGeolocationSetting = 2; + DefaultNotificationsSetting = 2; + DefaultPopupsSetting = 2; + + # ----------------------- + # DNS over HTTPS + # ----------------------- + DNSOverHTTPS = { + Enabled = true; + ProviderURL = "https://dns.quad9.net/dns-query"; + Locked = true; + }; + + # ----------------------- + # Search engine + # ----------------------- + SearchEngines = { + Default = "Startpage"; + PreventInstalls = true; + }; + + # ----------------------- + # UI restrictions + # ----------------------- + Homepage = { + URL = "https://duckduckgo.com"; + StartPage = "homepage"; + }; + + ShowHomeButton = false; + BookmarkBar = false; + + # ----------------------- + # Extensions (optional enforcement) + # ----------------------- + ExtensionSettings = { + "uBlock0@raymondhill.net" = { + installation_mode = "force_installed"; + }; + + "multi-account-containers@mozilla.org" = { + installation_mode = "force_installed"; + }; + + "{73a6fe31-595d-460b-a920-fcc0f8843232}" = { + installation_mode = "force_installed"; # NoScript + }; + }; + }; + }; +} diff --git a/home/programs/zen/default.nix b/home/programs/zen/default.nix new file mode 100644 index 0000000..aa6e653 --- /dev/null +++ b/home/programs/zen/default.nix @@ -0,0 +1,62 @@ +{ + pkgs, + lib, + config, + ... +}: +{ + programs.zen-browser = { + enable = true; + + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + DisablePocket = true; + + OfferToSaveLogins = false; + PasswordManagerEnabled = false; + + AutofillAddressEnabled = false; + AutofillCreditCardEnabled = false; + + DontCheckDefaultBrowser = true; + + DNSOverHTTPS = { + Enabled = true; + ProviderURL = "https://dns.quad9.net/dns-query"; + Locked = true; + }; + }; + + profiles.default = { + search = { + force = true; + default = "Startpage"; + }; + + settings = { + "browser.startup.homepage" = "https://duckduckgo.com"; + + "browser.newtabpage.enabled" = false; + + "privacy.resistFingerprinting" = true; + "privacy.trackingprotection.enabled" = true; + + "geo.enabled" = false; + "dom.webnotifications.enabled" = false; + + "signon.rememberSignons" = false; + + "toolkit.telemetry.enabled" = false; + }; + + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + firefox-multi-account-containers + noscript + ]; + }; + }; + + home.sessionVariables.BROWSER = "zen"; +} diff --git a/home/programs/zen/system.nix b/home/programs/zen/system.nix new file mode 100644 index 0000000..e0a75a7 --- /dev/null +++ b/home/programs/zen/system.nix @@ -0,0 +1,24 @@ +{ + programs.zen-browser = { + enable = true; + + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + + OfferToSaveLogins = false; + PasswordManagerEnabled = false; + + DNSOverHTTPS = { + Enabled = true; + ProviderURL = "https://dns.quad9.net/dns-query"; + Locked = true; + }; + + Homepage = { + URL = "https://duckduckgo.com"; + StartPage = "homepage"; + }; + }; + }; +} diff --git a/hosts/home-pc/configuration.nix b/hosts/home-pc/configuration.nix new file mode 100644 index 0000000..92c3c91 --- /dev/null +++ b/hosts/home-pc/configuration.nix @@ -0,0 +1,41 @@ +{config, ...}: { + imports = [ + # Mostly system related configuration + ../../nixos/audio.nix + ../../nixos/bluetooth.nix + ../../nixos/fonts.nix + ../../nixos/home-manager.nix + ../../nixos/nix.nix + ../../nixos/systemd-boot.nix + ../../nixos/tuigreet.nix + ../../nixos/usbguard.nix + ../../nixos/users.nix + ../../nixos/utils.nix + ../../nixos/hyprland.nix + ../../home/programs/helium/system.nix # I hate browser's configuration.. + + # You should let those lines as is + ./hardware-configuration.nix + ./variables.nix + ]; + + home-manager.users."${config.var.username}" = import ./home.nix; + + # USBGuard: + # Allow all USB devices until a proper policy is configured. + # Run `sudo usbguard generate-policy` with your devices plugged in, + # then set rules = "" and switch implicitPolicyTarget to "block". + # services.usbguard.implicitPolicyTarget = lib.mkForce "allow"; + services.usbguard.rules = '' + allow id 1d6b:0002 serial "0000:00:14.0" name "xHCI Host Controller" hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type "" + allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" hash "prM+Jby/bFHCn2lNjQdAMbgc6tse3xVx+hZwjOPHSdQ=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type "" + allow id 17ef:608d serial "" name "Lenovo USB Optical Mouse" hash "klpDZuv1jhWGNqZLOl+KXF+75Ir3PfBm6D6ncjoLRBU=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-7" with-interface 03:01:02 with-connect-type "hotplug" + allow id 17ef:6190 serial "" name "Lenovo Calliope USB Keyboard G2" hash "CfZ9R/aoXGm7BN/ojVEzKQwVoxCUtRWMuACrE7BL/5Y=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-10" with-interface { 03:01:01 03:00:00 } with-connect-type "hotplug" + allow id 0781:5581 name " SanDisk 3.2Gen1" + ''; + + networking.firewall.allowedTCPPorts = [9001]; + + # Don't touch this + system.stateVersion = "24.05"; +} diff --git a/hosts/home-pc/flake.nix b/hosts/home-pc/flake.nix new file mode 100644 index 0000000..963a5c2 --- /dev/null +++ b/hosts/home-pc/flake.nix @@ -0,0 +1,18 @@ +{ + inputs, + nixpkgs, + ... +}: +nixpkgs.lib.nixosSystem { + modules = [ + { + nixpkgs.overlays = []; + _module.args = {inherit inputs;}; + } + inputs.home-manager.nixosModules.home-manager + inputs.stylix.nixosModules.stylix + inputs.nix-index-database.nixosModules.default + inputs.helium-browser.nixosModules.default + ./configuration.nix + ]; +} diff --git a/hosts/home-pc/hardware-configuration.nix b/hosts/home-pc/hardware-configuration.nix new file mode 100644 index 0000000..5357795 --- /dev/null +++ b/hosts/home-pc/hardware-configuration.nix @@ -0,0 +1,45 @@ +# 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" + "usb_storage" + "usbhid" + "sd_mod" + ]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/5dbf85d3-d236-4af8-b489-d6066bfe1eb7"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/043E-1755"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = []; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/home-pc/home.nix b/hosts/home-pc/home.nix new file mode 100644 index 0000000..39c64dc --- /dev/null +++ b/hosts/home-pc/home.nix @@ -0,0 +1,57 @@ +{config, ...}: { + imports = [ + # Programs + #../../home/programs/proton + ../../home/programs/helium + ../../home/programs/ghostty + ../../home/programs/nvf + ../../home/programs/shell + ../../home/programs/git + ../../home/programs/git/lazygit.nix + ../../home/programs/thunar + ../../home/programs/nixy + ../../home/programs/nightshift + ../../home/programs/nix-utils + ../../home/programs/spotatui + ../../home/programs/yazi + + ../../home/programs/group/basic-apps.nix + ../../home/programs/group/cybersecurity.nix + ../../home/programs/group/dev.nix + ../../home/programs/group/misc.nix + + # System (Desktop environment like stuff) + ../../home/system/hyprland + ../../home/system/caelestia-shell + ../../home/system/hyprpaper + ../../home/system/mime + ../../home/system/udiskie + + ./variables.nix # Mostly user-specific configuration + ./secrets # CHANGEME: You should probably remove this line, this is where I store my secrets + ]; + + home = { + inherit (config.var) username; + homeDirectory = "/home/" + config.var.username; + file.".face" = { + source = ./profile_picture.jpg; + }; + + # Don't touch this + stateVersion = "24.05"; + }; + + wayland.windowManager.hyprland.settings.monitor = [ + "DP-3,1920x1080@144.0,1920x0,1.0" + "HDMI-A-1,1920x1080@60.0,0x0,1.0" + ]; + + programs = { + home-manager.enable = true; + nixy = { + enable = true; + configDirectory = config.var.configDirectory; + }; + }; +} diff --git a/hosts/home-pc/profile_picture.jpg b/hosts/home-pc/profile_picture.jpg new file mode 100644 index 0000000..a0f4294 Binary files /dev/null and b/hosts/home-pc/profile_picture.jpg differ diff --git a/hosts/home-pc/secrets/default.nix b/hosts/home-pc/secrets/default.nix new file mode 100644 index 0000000..093d5f0 --- /dev/null +++ b/hosts/home-pc/secrets/default.nix @@ -0,0 +1,58 @@ +# Those are my secrets, encrypted with sops +# You shouldn't import this file, unless you edit it +{ + inputs, + pkgs, + config, + ... +}: let + home = config.home.homeDirectory; +in { + imports = [inputs.sops-nix.homeManagerModules.sops]; + + sops = { + age.keyFile = "${home}/.config/sops/age/keys.txt"; + defaultSopsFile = ./secrets.yaml; + secrets = { + ssh-config = { + path = "${home}/.ssh/config"; + }; + netrc = { + path = "${home}/.netrc"; + }; + github-key = { + path = "${home}/.ssh/github"; + }; + gitlab-key = { + path = "${home}/.ssh/gitlab"; + }; + }; + }; + + home.file.".config/nixos/.sops.yaml".text = '' + keys: + - &primary age12yvtj49pfh3fqzqflscm0ek4yzrjhr6cqhn7x89gdxnlykq0xudq5c7334 + - &work age1c8pawdsxptfslgrz2c56s39mrtnjzc5mm3hfzgr2wdwu2v6vfsdsupjsq6 + creation_rules: + - path_regex: hosts/laptop/secrets/secrets.yaml$ + key_groups: + - age: + - *primary + - path_regex: hosts/server/secrets/secrets.yaml$ + key_groups: + - age: + - *primary + - path_regex: hosts/work/secrets/secrets.yaml$ + key_groups: + - age: + - *work + ''; + + systemd.user.services.mbsync.Unit.After = ["sops-nix.service"]; + home.packages = with pkgs; [ + sops + age + ]; + + wayland.windowManager.hyprland.settings.exec-once = ["systemctl --user start sops-nix"]; +} diff --git a/hosts/home-pc/secrets/secrets.yaml b/hosts/home-pc/secrets/secrets.yaml new file mode 100644 index 0000000..ae328cb --- /dev/null +++ b/hosts/home-pc/secrets/secrets.yaml @@ -0,0 +1,19 @@ +ssh-config: ENC[AES256_GCM,data:npBcAOSwHpApUASlZmRo4stwMrOjdrdmhfYwumjbTpcq8aQ2ybV8le7cjNdVqIyxgwxUFV4/tGfmsq4nlrWIO/85spwfC5DyPGaZ848NI3UZJj8k2GKuw5qk/xGsTveNhq+vNZQcHeL4aeXF2TRmFLDHYGTku9anFL7FWkQ75MmGW78XfPUEyZJ52ylXq3gkYeVSrl6cXuwJw/QBlu+XTgFk4MM+E5BTXBFFNJOYkIt4GwWX7wdI+QqPEof8J0ENYdxUAMKMueL4pLNclWP0fu7QC7gwwRJWjauCNElJiDhpVFa6WukJV/Ut+I30FH9cJtj0rSodeu0hq2fWaiQ0wVbQudxi0JcnxJQs+B9nb6kpF+TN0MiD,iv:c7DMZSmlgMMnNlR0/kNRKPYjCzvNQJ46mZzojHppSg8=,tag:ausjsFk0H9nOiiMebHXSUg==,type:str] +netrc: ENC[AES256_GCM,data:EOpuZhDVXe7Q4P/98C3gtEvkdawI26d4oX/wRNytyp/mAdkHytXiLpFdsuO/3DADOG8h1CCo1UTs9ex+bqoD/LdChdp7INfNDSQ+aDxTiG0rLBgjvy8TIj8=,iv:tc/RbN1Upbjv+3rU5zUR3P//a1Hj1xODInLMShg4i1Y=,tag:7E9G2g4g+eMeJrwI20R/1g==,type:str] +github-key: ENC[AES256_GCM,data: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,iv:2Mvmz1CFO1112RxjIl6sxyNIDqa/cg00um6RcQaHNY8=,tag:+zygdwQdCBeBXVLvAj/jJQ==,type:str] +gitlab-key: ENC[AES256_GCM,data:1iAAh7CEeJGYibM1wcFn9MRK8TtgRFA2dCSVZThiCI53GKkbbf5JZ2cYJm3p/D9loP0/lU7TbNR8IjVyqqGP8MF+u4cm0gFIEL0i9+wBKIJsYXxzXV7XIQNTF1JU26/b+hpfUEcqXANQ88wdaGTrEDYAaMV0kYcBUkpMgUdIU+iCJkr3bPKZRjengA3/Sj6QkRzBTBrWo8ANEAnmi+Nn8NTFdHbwp+uLwelijCOz4iiShMTRjJYtBZ8zlGXf7qv9warXn91oh1p5aPYBRH6CuUwX1lZYDPmFGxOS5usYYippqsRmEEg9Haas0EwxU8CAZgX6cNnfjhq3le86vCapqZnzdNAwR5rvMEQ178Fl89Ri5Ka7n9GU7CFRzzXpykPErKbsG+T3KtfO20Lo2eDWO/gXuQILZcwaFDEbZuXq7qbrtyJ1TmtXQF73paG7yEITwOFLaMeJVRX/WvdXbzFo9X8V7zv7iuyyi4Y/RzkW2g7Ck0x3MIgxyUkDQZnb9XLYm5PzoKZ54uXIC6tqaC7ux7o785VOvaaNJiu1r+mtm7tN3VD3nQGBMGC4BqM4iYEt/KcTC4fn4rSwecfcYTpGQf6LfDOWgZvBz8Fw8AraWIANjHkOMrlWhIJJ8g7N+35rThEfrC1hGAptWsOSVZ0NbZk3UMCzv88KpDJA/9rekLIpAodJaZafM3VhK2ZLU4i6IYprKlsFYB/+WDwvppX+LIofMdhZfGhI+hRyiNF1egh+PBv/UzHIdanNLiITXO6/Kt5kgSujVmr2O6NWOlx+Ve1udxXWzNxp0qrMKa2JVljBS4UFw4HPM0LzQ2KMW3rZ1fWq88/dRtzoBJfouL8smeSrc+VJJACEzHevXq4e8zgjg9+QnK+ZWNwcna1bQgB+lG76hGnfVvIHF4PQM6tGSS6RLQrwsAMI8DMsiRhYUc8Bdrj2+fM8GFTC81pYyRsmha6tJmq+S8oM919iTqFFGFk4NFMy1Mj/95Ckrb0tkCIiJe+Quvu91oLVzLAbkRdDF/H6rudrndhqlAANQs0acPemuD4/rrUfv+jFEiOazjydGrHTae0jnJyS5mR3QZxWst0p7Q+yIlduU+kY9uX+ZuDwjUsOqy56K2mn9+dPVA10D0hqSiWUQQ+TQU5QGaalJRjt4RG2V3fcwCs8nla4XNrxaSty67141CBJHgh4I37qCFcu1f7YqqKJNmVJwBX2/70Rg0nb63FPDh6UWtyaheQD4GL+2ZUJmlh+ZMPzJZEO6fABOQoyyMZhOv2Pem+AQHD97sN32E2WoCiSxMFYFe4Pc9sy5rFkZb7OsdNK3VzoeWVkklhNqpis0sU50Bqt48V+2qXFU12LGUuglzo9dBTJCgaD6xqadEYlh+WH18Q6yQPefcwcWzl0Ql/Y/F0XfSEgaIyd/VZdQ6QP3ZF6q4oEtKOCg+AnkbMVUw5TA+RdW/UnhJlErIs+AQRkKZ8JwpIalTccAEk7VgQQdRiCD1PBhc+0T9gzTbQTqCB8pCqy7M6UEUbumOfyUKOtkosk0Bx8MLtyzX7va+3D0h7Cdze4CFTUT8EZquSWoX5ozwF1DdsBs3wrunIa1FYYaZQDiMiYLZ64TRzVBujeyZxFQLgKPbEBBr1BalgJglGALLZUfkmz01g5stgkZDeXvbTgA0W9PKFhZ+lLfrZ2NQzblZ6DiLeFM5ybxSbCbBSx2gzzBuMgbWOVTFDXLRuGOE0GRWVpzEtcqTncQfbJT+6AicA86e6MuXn12Zq3uyF4HoiybBFEAkYF24qLz2XZ6K9E7aNdWJAY2dcvq+LCoaHKlpekSUO+jrfykEfH5eFhnSj+hrwtSa3+3tLkuNdzjEpTcvq3l0d9dVAcMswv93RrU9PNGs66W7wRKiiOYvC+BqjOIkUvXVxr5Tl/1WDUgah1BTaQO80KEphtmEen4s1gLQEUN6lA0HsBAyDOMHGfkDgcT2pH8A6s5bc8BpXyyGZOLQ89h5vpvCPFFbxHNxffKXgRWLUfoNoXDqBG0kxDm7+CLmkD9jmH1XkRu3a0qr9KgZDUqQoVHCpUMXF8/HN7+1VHIUP5pWO9mupX0jL91ymF16HBCucJQiCWmKr2Cn+huPwtzcRblAoQAZY4da1PbIBwdys8Q77WETrTiK/XrQHiE/ZRiPFZK3B4wPFjMGyp7yhnF23ram76E3ny0xqunfjvyTLcLVmkmdDIz6FpNCa2Qd+oqpkKzFEF3hcmZgue9uqsmjJk4ymAKqTXB2PUdz0GoOe7obg6QyZS0WvgsuCuem5yePjYL43AXiFfyDp4fDRRaB5qpJzXS8HzCh0Whyg3z8UEygVnXMmL1k/84LsfME4/ubMV4cJn5Q9rDFGIwUfk4M98Y1ylPWQfcbwpAxtipBN0uQL6WX6L4dglE4wcf/0d6IGmIxF03E08BvvQvniox7fZEIYY8dP9LlitXZBfKqSDw3jQ5JuLllGI//hbXGu8IxWFnABz5i/NkNGJnSb6b4V5vWXAWSBi918ZZYMmxqH87hypen6ONq2jxPXdgN4lphyQDxL7Sx1oNAUUdm8NqTj47g6Ny0RWHUJPAnKAZNpAljmbCny0fkTzDzg/OhetkUv6+BSRZq800gaGkNz41cmJvTZBe+MOrGEvHwc5C2uFsLJuagJ+vryyN0sdpuSFVF/3Zm8Ch/aFldeS5xjwf7Yfy2Nb2H2WRJbFa01sEbMiMkrhLLpyQdwL9XoFBN/1IKoZyQE0fBLXwU8D9BnL3PCBbSeVDoswRt7hPe40SyBMTu9uhzn9n7DXhWqb+hpbM1ViDlT1wE/P4xx3UcRRb+xx5ANkbuF11Yf16cAa0hwM/2BmRAVInmgeNS4Lp/gre0WBO9x21I3rZ5YaRxRsOUTBlaElYRMcxQQTkw6sc1TM3u7lK+b6Ug8iS8jYP+3m/QGHF4W/3eHVoELfBq8vwYCPa87338sQwlLAmQlf5REYBqDhV0Z075hmwGeOPW/Q+2cKpY8XdlD/eYKhgNuHV1pL1CRAbWCkZg21Lq7zVR+wYuu3tuEqmIT7+P0Yj4EjNiODe523wBNPH2gxLzupPZmT/fR1YoI/ij51qj6QPCQgy1eJB4TTlmNJHDNBKEakVr26wFg4Pd6y+99W1sEPNn6weoezXLk5DWSXln0AdAmYcxa5I8ZWGwDrTMASf6QUNlg0lTXbqw9khZgdk069zrfYzBhtcSyHAqg6DzyHeLzUbPNXmvBS2WGbbJUZX73tqB+cRAD4UUDv02ZQ2YrUT0AQpvc9+dekzWuv/UGnQ1Y085NMSP6s+sGL0WfcOamb39Y7Ov4y6hCikq5M1TiHogndk7Apkm1hQLOiUM3Tb0IXmrBtmX6RxvUgXBLQ+XuZjJ3884soM0swwdt9f2vKljG2lnOnCdHPVSQUO3XQ90itLXQhq21B8SOiFA0DvRWJMEhr4d3LdNOAbj6Iu1yQ0PvdEaD0X+1ND/3Tot6yAlAqzA6+47tnU1Gq0s6Y6uqkW5u2oSSwMoeIoRInBIKLO4tSW/rKICWJznuDivRIm5BHPFajEnahJdzclA7sPsbbKNwXEj7jzJELl+oUympJ/L1dpPfxcM3tSmErgwfwdNWNkf97kml9MZ03F2bUm71Azm1tq26aFUUOGxbsGI2T8NNFJsf25m5CfC06YK3F5Yb8pG08IhKRrkihM356uJcjC0m5V+OUETF2fTQLytWbq1gthXfaG+gE4Gk/MUX1vHfGUprTf3JYgiIZzgIIZeaX5j4XJ7hykwb6ahhIMX/ndB5XYGCER2vkDrDPwspsAL/pXiIOMDFSwJVsvf/9fbLDttYNJCR2B9/Enbjh87abaYlQsgUjsPFPAGH2nw7hX6iuEihrPyLZdUp0xJb2PIq8R4xpiStzomDdVkC018YPRWank9mKXHYf4+1QdQ3AftOs5iDMgf50XASNl/6F4V+NGX2vRiPJ2gxWBvpoPu5csSgKetHiJCqNLbHLggFQEjYJyW3Cepsm87LC1/eEa7AEPdR+eQYsIp4Xr1LMD9cEogHpz+/VOgdtcQmPMrNHsRolTaO5lT1vbrRJE+SM6byoi/ACDKI2pRObI+FPzflmm5X0/Kh+b6InGzCXR+k1CXyUauI6wro82J8T+vHdxPEy59kdXlAicy7q0/+UZ8zF4ApNT7XXV9sgmyhzD3/v1kWwDPnowptr/JJT01TTHTUPtDDqy5X497h56jqwjWex3Lc7cTusrkVrcHg26fIMw/zyTW3pgmrwpGayVC8kg3pNJQw+MX6xYO5Cq/EQv72rOKVw5YY83IWqkh6GHn3bTghvMETiWoCDUPB0JNsPY1i7hrFCYzGJib+p6M53ngNCfjI786qZ78CQVhmIyl8VGGwYrvtHY3UFArXUDK/Y9rc2lvMoCIBCwhq5w/eaJiTN1BhMgFVvgbdI+Y9cj/UgtE3yFjsQp/kI+oEyCDQntuzO1UhZiP2/9nXm4Lyf/ZhUcdEI9I0=,iv:aG4nqGJ/TRiAtiWoPwqej6We+IWEWFibCqL7bGwXbkA=,tag:c5ckW2o4+2rm/5mrGF1tzg==,type:str] +sops: + age: + - recipient: age1c8pawdsxptfslgrz2c56s39mrtnjzc5mm3hfzgr2wdwu2v6vfsdsupjsq6 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVby9Wa1NUUkpyeDMwU3dM + R0EyeFVtT0tJU0pKaWtXQzRkTDBPY3JjcTFrClNIQnl2WVorS0FZZjhicTQ5V2kx + MUZTZWZtaUk2a1ZhUTBCUnhkWHFIMFUKLS0tIElLcjJLZWNLOUJYN0NNVGFNUEFN + RkMrdTYwNkY1Tlc3M3dxTFdkRXJJZUEKUlYU45jXpS9hJO9Z/uAQ6XMj9QWgMMRI + LbJxvt48+yC+Y0XKOtDE0lHAuGNzUG8R/7FB1tTD8NCamBe46KGCIg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-04-23T07:50:07Z" + mac: ENC[AES256_GCM,data:V3us1oxkQxIg5hn8TMiSHWa0RhNbio2mP8j59lSCKDLjnpTUHUAUZZOan+fkBwPxxtIdZFVZQl/kZuEHcnNwXk8J0DLeT8jrs8pvlDCHMAc+C9uzThNjQ9CrZ2C/dNtoI6uop3a6qo8UMhKhvAus08yR8rLsY7Gqt/In28HKqxU=,iv:g8wmq1thPfkSSfG+mtJS0431wbon/uylDTfH0P31dlw=,tag:5Z6CJMWeGN6frTLJQMxGGw==,type:str] + unencrypted_suffix: _unencrypted + version: 3.12.2 diff --git a/hosts/home-pc/variables.nix b/hosts/home-pc/variables.nix new file mode 100644 index 0000000..5bbad51 --- /dev/null +++ b/hosts/home-pc/variables.nix @@ -0,0 +1,38 @@ +{ + config, + lib, + ... +}: { + imports = [ + # Choose your theme here: + ../../themes/nixy.nix + ]; + + config.var = { + hostname = "home-pc"; + username = "andi"; + configDirectory = "/home/" + config.var.username + "/.config/nixos"; # The path of the nixos configuration directory + + keyboardLayout = "de"; + + timeZone = "Europe/Berlin"; + defaultLocale = "de_DE.UTF-8"; + extraLocale = "en_EN.UTF-8"; + + git = { + username = "kptltd00m"; + email = "kptltd00m.doomlabs.de"; + }; + + autoUpgrade = false; + autoGarbageCollector = true; + }; + + # DON'T TOUCH THIS + options = { + var = lib.mkOption { + type = lib.types.attrs; + default = {}; + }; + }; +} diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix index 20ffcae..c81f585 100644 --- a/hosts/laptop/configuration.nix +++ b/hosts/laptop/configuration.nix @@ -16,11 +16,9 @@ imports = [ ../../nixos/usbguard.nix ../../home/programs/helium/system.nix -``` # Machine-specific files ./hardware-configuration.nix ./variables.nix -``` ]; diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index 0d9e1a8..e9fcada 100644 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -37,7 +37,7 @@ inherit (config.var) username; homeDirectory = "/home/" + config.var.username; file.".face" = { - source = ./profile_picture.png; + source = ./profile_picture.jpg; }; sessionVariables = { diff --git a/hosts/laptop/profile_picture.jpg b/hosts/laptop/profile_picture.jpg new file mode 100644 index 0000000..a0f4294 Binary files /dev/null and b/hosts/laptop/profile_picture.jpg differ diff --git a/hosts/laptop/profile_picture.png b/hosts/laptop/profile_picture.png deleted file mode 100644 index 71c63c9..0000000 Binary files a/hosts/laptop/profile_picture.png and /dev/null differ diff --git a/hosts/laptop/variables.nix b/hosts/laptop/variables.nix index 26a7149..0ad1c06 100644 --- a/hosts/laptop/variables.nix +++ b/hosts/laptop/variables.nix @@ -15,7 +15,7 @@ keyboardLayout = "de"; - timeZone = "Europe/Paris"; + timeZone = "Europe/Berlin"; defaultLocale = "de_DE.UTF-8"; extraLocale = "en_EN.UTF-8"; diff --git a/nixos/usbguard.nix b/nixos/usbguard.nix index a1567d1..a70c1cb 100644 --- a/nixos/usbguard.nix +++ b/nixos/usbguard.nix @@ -1,6 +1,6 @@ {config, ...}: { services.usbguard = { - enable = true; + enable = false; implicitPolicyTarget = "block"; IPCAllowedUsers = [ "root"