Compare commits

...

38 Commits

Author SHA1 Message Date
linusemr618 c6a0a5196a Merge pull request 'Fix Zen' (#5) from linusemr618/nixy:main into main
Reviewed-on: #5
2026-07-22 12:04:24 +00:00
linusemr618 41e2814bc0 merge upstream 2026-07-22 12:03:38 +00:00
Linus Emmerich c00b1353d1 maybe fix zen idk
brauchte doch ein NUR overlay wegen proprietary extensions
2026-07-22 12:54:57 +02:00
linusemr618 1234d20495 Merge pull request 'add zen du pic' (#4) from linusemr618/nixy:main into main
Reviewed-on: #4
2026-07-21 21:49:04 +00:00
Linus Emmerich b8be0e0c27 add zen du pic
eat my feet
2026-07-21 23:46:59 +02:00
kptltd00m 59e6f4015a feat(tor): add tor service files 2026-07-19 20:14:58 +02:00
kptltd00m ffe610e64f add tor browser and cwtch 2026-07-17 15:34:56 +02:00
kptltd00m 1c6d700768 enables dynamic linking and added extraGroups to user 2026-07-12 23:27:36 +02:00
kptltd00m 8a4c1e7f1d feat(dev): add Claude Code package to development environment 2026-07-10 16:50:35 +02:00
kptltd00m 93bf7545cc chore(dev): replace VS Code with VSCodium in dev-packages
Switched the development environment to use the open‑source VSCodium build instead of Microsoft VS Code
2026-07-10 16:43:58 +02:00
kptltd00m d3e18dfc53 add keepass, fix docker 2026-07-09 16:52:34 +02:00
kptltd00m b173c4d44f feat: music apps, vscode, kodi and keepass 2026-07-09 16:52:00 +02:00
kptltd00m 5e25ed4d5e feat(music): added guitarix to music-apps.nix 2026-07-03 22:11:05 +02:00
kptltd00m e540227a19 feat(gaming): fix hyprland mouse acceleration & mnt hdd on home-pc setup 2026-06-28 19:25:53 +02:00
KptltD00M 7321b840b7 Merge pull request 'feat/gaming' (#3) from feat/gaming into main
Reviewed-on: #3
2026-06-28 15:00:07 +00:00
kptltd00m 7a7917b361 feat(star-citizen): enabled star citizen on pc and created documentation
for install
2026-06-28 16:59:06 +02:00
kptltd00m bcfe305813 Add Hyprlock and refactor Hyprland bindings
- Add hyprlock module and package plus hyprlock.conf XDG config
- Rework bindings: introduce mkMenu, gui/term helpers and grouped
  menus (apps, dev, gaming, utility, system) and wire them into the
  main popup; change session lock to hyprlock
- Simplify gaming-apps.nix: use pkgs, reorder packages and add
  wineWow64Packages.staging, steam-run and appimage-run
2026-06-28 15:36:40 +02:00
KptltD00M 51d333d289 Merge pull request 'feat/waybar' (#2) from feat/waybar into feat/gaming
Reviewed-on: #2
2026-06-28 12:48:30 +00:00
kptltd00m 1bb36771dd chore(home): add elephant service and improve waybar configuration
- Add elephant backend service with systemd user service
- Update walker service to depend on elephant service
- Improve waybar configuration with new modules (tray, bluetooth, battery)
- Add click handlers for network, pulseaudio, and bluetooth
- Update colors and styling for better visibility
- Include gaming-apps in laptop home configuration
2026-06-28 14:42:33 +02:00
kptltd00m beda752703 Polish Waybar and add Bluetooth and walker service
Refactor Waybar config and CSS: add rgb/radius helpers and tweak
sizes, spacing, colors, tooltips, icons and transitions

Enable gtk-layer-shell and reload-on-change. Move exec-once into
settings and adjust modules and workspaces formatting

Add blueman and bluez to basic apps for Bluetooth support

Add elephant to home packages and add a systemd user service for
walker; change Hyprland exec-once to enable and start elephant.service
2026-06-28 13:58:14 +02:00
kptltd00m 849b0f0cfd Replace caelestia shell with Waybar and Walker
Remove caelestia-shell/cli inputs and prune corresponding flake.lock
entries. Update Hyprland keybindings to use walker, grimblast and
Waybar, use loginctl for locking and pkill/waybar for restart. Add
new home/system modules for waybar and walker and enable them in
host configs. Delete obsolete INSTALL-laptop.md.
2026-06-28 12:48:00 +02:00
admin c2e5500051 feat: integrate nix-citizen and star-citizen support in NixOS configuration 2026-06-28 12:10:01 +02:00
admin 1b44016dab feat: add gaming applications configuration for NixOS 2026-06-28 11:09:20 +02:00
kptltd00m a95d1fbd35 chore: update browser, theme, and locale configurations
- Replace Librewolf with Firefox as the backup browser
- Update default and extra locales to en_US.UTF-8 and de_DE.UTF-8 respectively
- Change theme fetch setting from 'none' to 'fastfetch' and update wallpaper
- Minor formatting cleanup in THEMES.md
2026-06-26 22:58:09 +02:00
KptltD00M 638fcdd416 Merge pull request 'feat/setup' (#1) from feat/setup into main
Reviewed-on: #1
2026-06-26 20:05:10 +00:00
admin 9ed809c27d Fix missing fileSystems configuration for ThinkPad installation 2026-06-24 22:03:48 +02:00
kptltd00m c9475a7246 added thinkpad hardware-configuration 2026-06-24 21:57:03 +02:00
KptltD00M 40ccfd34ab docs: add ThinkPad NixOS installation guide
Add comprehensive installation guide for ThinkPad laptops in INSTALL-laptop.md, covering:
- Prerequisites and preparation steps
- Detailed disk partitioning and formatting instructions
- NixOS installation and configuration process
- ThinkPad-specific optimizations (trackpad, keyboard backlight, power management)
- Troubleshooting section for common issues
- Maintenance and update procedures

Includes ThinkPad T480/X1 Carbon specific configurations and hardware-specific optimizations.
2026-06-24 21:17:51 +02:00
KptltD00M 5b6e5a537c chore: update gitignore and nix configurations
- Add `result` and `result/` to `.gitignore`
- Remove `proton-ge-bin` from Steam packages
- Update laptop flake configuration with hardware optimizations
- Adjust graphics and locale settings
- Disable `power-profiles-daemon` in utils and laptop configs
2026-06-24 21:12:46 +02:00
admin 0ab18663e6 Enable Flatpak services in configuration files and clean up home program imports 2026-06-23 23:04:38 +02:00
admin 4e28ca9b48 Remove unused configurations and packages from laptop setup
- Removed USBGuard configuration and its associated comments from configuration.nix.
- Cleaned up flake.nix by removing unnecessary overlays.
- Updated home.nix to remove references to Helium and Proton, and added Steam.
- Deleted secrets.default.nix and secrets.secrets.yaml files for security reasons.
- Removed Omen laptop specific configuration from omen.nix.
- Deleted vencord.nix as it is no longer needed.
2026-06-23 22:23:40 +02:00
KptltD00M d22689f3b6 Add homeManagerModules output for Home Manager integration 2026-06-23 20:33:28 +02:00
KptltD00M 633b2aadd0 Add Steam and Vencord configurations: include desktop entries, session variables, and system packages 2026-06-23 20:27:54 +02:00
admin 0205b8fe89 Refactor flake.nix and home.nix: modernize homeManagerModules output and comment out secrets import 2026-06-23 16:37:01 +02:00
admin c91bb0df4b Refactor flake.nix: update homeManagerModules output and modernize nvim app metadata 2026-06-22 23:43:00 +02:00
admin a3359274b6 Fix flake warnings: modernize outputs, add metadata, clean structure 2026-06-22 23:18:22 +02:00
admin 7ea20554a6 Add configuration for Librewolf and Zen browser with privacy-focused policies
- Created Librewolf configuration in `home/programs/librewolf/system.nix` with telemetry disabled, enhanced security settings, and enforced extensions.
- Added Zen browser configuration in `home/programs/zen/default.nix` and `home/programs/zen/system.nix`, including similar privacy policies and default search engine settings.
- Introduced `hosts/home-pc/configuration.nix` for system-wide settings, including USBGuard rules and firewall configurations.
- Established `hosts/home-pc/flake.nix` to manage NixOS modules and configurations.
- Generated `hosts/home-pc/hardware-configuration.nix` for hardware-specific settings.
- Created `hosts/home-pc/home.nix` to import various user-specific applications and settings.
- Added profile picture in `hosts/home-pc/profile_picture.jpg`.
- Implemented secrets management in `hosts/home-pc/secrets/default.nix` and `hosts/home-pc/secrets/secrets.yaml` using SOPS for encryption.
- Defined user-specific variables in `hosts/home-pc/variables.nix`, including hostname, username, and locale settings.
- Added profile picture for laptop in `hosts/laptop/profile_picture.jpg`.
2026-06-22 23:11:52 +02:00
KptltD00M a45e7a2c9b Refactor configuration files and update user-specific settings 2026-06-22 21:24:27 +02:00
52 changed files with 3774 additions and 620 deletions
+52
View File
@@ -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
+63
View File
@@ -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
+2
View File
@@ -1,3 +1,5 @@
.sops.yaml
.claude/
old/
result/
result
+16 -16
View File
@@ -1,16 +1,16 @@
# Contributing to Nixy
Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the issues!
The process is straight-forward.
- Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1)
- Fork Nixy [git repository](https://github.com/anotherhadi/nixy).
- Write your changes (new theme, bug fixes, issues fix, ...).
- Create a Pull Request against the main branch of Nixy.
> [!TIP]
> To update the README, change the `./.github/assets/README_template.md`
> [!IMPORTANT]
> Don't push your host's folder
# Contributing to Nixy
Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the issues!
The process is straight-forward.
- Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1)
- Fork Nixy [git repository](https://github.com/anotherhadi/nixy).
- Write your changes (new theme, bug fixes, issues fix, ...).
- Create a Pull Request against the main branch of Nixy.
> [!TIP]
> To update the README, change the `./.github/assets/README_template.md`
> [!IMPORTANT]
> Don't push your host's folder
+141
View File
@@ -0,0 +1,141 @@
# Using Groups with a Different Remote Origin URL
When your repository URL differs from the default `github:anotherhadi/nixy`, you need to update the input URL in your consuming flake. Here's how to use the groups with any remote URL.
## Update the Input in Your Flake
### Example 1: GitHub URL
```nix
inputs.nixy.url = "github:yourusername/nixy";
```
### Example 2: GitLab URL
```nix
inputs.nixy.url = "gitlab:yourusername/nixy";
```
### Example 3: Gitea URL (like the current origin)
```nix
inputs.nixy.url = "gitea:yourusername/nixy.git";
```
### Example 4: SSH URL
```nix
inputs.nixy.url = "git+ssh://git@github.com/yourusername/nixy.git";
```
### Example 5: Local file path (for development/testing)
```nix
inputs.nixy.url = "path:/path/to/nixy";
```
## Using Groups in Home Manager
Once the input URL is configured, you can import any group module:
```nix
{ inputs, ... }: {
imports = [
inputs.nixy.homeManagerModules.cybersecurity
# inputs.nixy.homeManagerModules.dev
# inputs.nixy.homeManagerModules.basic-apps
# inputs.nixy.homeManagerModules.misc
];
}
```
This will:
- Install all packages from the cybersecurity group
- Set up `~/Cyber/wordlists/` directory with SecLists, fuzz4bounty, and hashcat rules
- Create `~/Cyber/tmp/` as a temporary workspace
## Using Groups in nix shell
For a quick shell with the group's packages without installing:
```sh
nix shell yourusername/nixy#cybersecurity
nix shell yourusername/nixy#dev
```
Replace `yourusername/nixy` with the actual path to the flake.
## Important Notes
### 1. Group Output Names Must Match
The group names available in your local flake (`flake.nix`) are defined in the `homeManagerModules` output. Currently these groups are defined:
- `dev` - Go, Bun, Air, and other development tools
- `cybersecurity` - Security tools (nmap, john, dirb, ffuf, etc.)
- `basic-apps` - Basic applications
- `misc` - Miscellaneous packages
### 2. Access to Groups vs Packages
There are two ways to access groups:
- **`inputs.nixy.homeManagerModules.<group>`** - For Home Manager integration (packages + files + systemd units)
- **`inputs.nixy.packages.<group>`** - For standalone environments (packages only)
Both require the same input URL configuration.
### 3. Flake Lock Consistency
After changing the input URL, run:
```sh
nix flake lock --update-input nixy
```
or
```sh
nix flake update
```
This ensures the `flake.lock` file references the correct commit.
### 4. Using with Multiple Remote URLs
If you need to reference the same flake from different remotes, you can specify multiple inputs:
```nix
inputs = {
nixy-main.url = "github:anotherhadi/nixy";
nixy-personal.url = "github:yourusername/nixy";
# Then reference them as inputs.nixy-main.homeManagerModules.cybersecurity
# or inputs.nixy-personal.packages.dev
};
```
### 5. Checking Available Groups
You can check which groups are available by inspecting the flake output:
```sh
nix flake show yourusername/nixy#groups
```
This will display all available outputs including the `homeManagerModules` and `packages` groups.
## Troubleshooting
### Error: "Unknown flake output"
**Cause:** The input URL points to a location that doesn't have the expected flake structure.
**Solution:** Verify the repository has the expected flake.nix and the correct outputs are defined.
### Error: "Not a flake"
**Cause:** The input URL might be pointing to a non-git repository or a branch/tag that doesn't have a flake.
**Solution:** Check the URL path and ensure it points to a valid git repository with a flake.nix file.
### Error: "Permission denied"
**Cause:** Using SSH URLs with read-only access or incorrect credentials.
**Solution:** Use HTTPS URLs for read-only access, or configure SSH keys properly for SSH URLs.
+10 -4
View File
@@ -17,10 +17,10 @@ For the Cybersecurity group, the home-manager module also sets up:
## Use in another flake
Add this repo as an input:
Add this repo as an input (update the URL to match your repository):
```nix
inputs.nixy.url = "github:anotherhadi/nixy";
inputs.nixy.url = "github:yourusername/nixy";
```
Import the home-manager module in your home configuration:
@@ -30,15 +30,21 @@ Import the home-manager module in your home configuration:
imports = [
inputs.nixy.homeManagerModules.cybersecurity
# inputs.nixy.homeManagerModules.dev
# inputs.nixy.homeManagerModules.basic-apps
# inputs.nixy.homeManagerModules.misc
];
}
```
See [GROUPS-REMOTE.md](GROUPS-REMOTE.md) for complete documentation on using groups with different remote URLs and troubleshooting tips.
## Quick shell without installing
```sh
nix shell github:anotherhadi/nixy#cybersecurity
nix shell github:anotherhadi/nixy#dev
nix shell yourusername/nixy#cybersecurity
nix shell yourusername/nixy#dev
```
This drops you into a shell with all tools in `PATH`. No home-manager required, no wordlists or systemd units.
Replace `yourusername/nixy` with your actual repository path.
+908
View File
@@ -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
<leader>ffFind files
<leader>fgLive grep
<leader>feDocument symbols
<leader>bbBuffer list
<leader>++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.<group> # 📦 Install package group
];
}
```
Or via **nix shell command**:
```bash
nix shell github:anotherhadi/nixy#<group> # 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.<program>
# 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
---
+788
View File
@@ -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/<hostname>/
├── 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 <device-id>
```
**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-<generation>
# 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
```
---
+17 -17
View File
@@ -1,17 +1,17 @@
# Themes
Themes are defined in `themes`. Those themes define the colors, fonts, icons, etc, used by Hyprland and the apps/programs installed.
You can change the selected theme by changing the import statement of your host's variables.nix file.
## Create your theme
Create a copy of one of the existing themes and change the variables.
Wallpapers are loaded from the [hadi's awesome-wallpapers](https://github.com/anotherhadi/awesome-wallpapers) repo.
## Gallery
### Rose-pine
![Home](../.github/assets/rose-pine/home.png)
![Flake & Spotify](../.github/assets/rose-pine/flake-spotify.png)
![Browser and notification center](../.github/assets/rose-pine/browser-and-notifications.png)
# Themes
Themes are defined in `themes`. Those themes define the colors, fonts, icons, etc, used by Hyprland and the apps/programs installed.
You can change the selected theme by changing the import statement of your host's variables.nix file.
## Create your theme
Create a copy of one of the existing themes and change the variables.
Wallpapers are loaded from the [hadi's awesome-wallpapers](https://github.com/anotherhadi/awesome-wallpapers) repo.
## Gallery
### Rose-pine
![Home](../.github/assets/rose-pine/home.png)
![Flake & Spotify](../.github/assets/rose-pine/flake-spotify.png)
![Browser and notification center](../.github/assets/rose-pine/browser-and-notifications.png)
Generated
+258 -183
View File
@@ -213,98 +213,6 @@
"type": "github"
}
},
"caelestia-cli": {
"inputs": {
"caelestia-shell": "caelestia-shell",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1780375472,
"narHash": "sha256-Q8RAJoYlakA6B2I5DVcuxzNbhCNU1nnIjqQZYP1KGrM=",
"owner": "caelestia-dots",
"repo": "cli",
"rev": "d1c8c8fc09738d1b40576e97c274b4a11a2e0ac7",
"type": "github"
},
"original": {
"owner": "caelestia-dots",
"repo": "cli",
"type": "github"
}
},
"caelestia-cli_2": {
"inputs": {
"caelestia-shell": [
"caelestia-shell"
],
"nixpkgs": [
"caelestia-shell",
"nixpkgs"
]
},
"locked": {
"lastModified": 1779768519,
"narHash": "sha256-2n/447oNfAZrl1yncafLPgXMx5tuTF6T2B+zI/zFYkI=",
"owner": "caelestia-dots",
"repo": "cli",
"rev": "64a5507e74f6c7d0c29f9131964412f8f8c4dd89",
"type": "github"
},
"original": {
"owner": "caelestia-dots",
"repo": "cli",
"type": "github"
}
},
"caelestia-shell": {
"inputs": {
"caelestia-cli": [
"caelestia-cli"
],
"nixpkgs": [
"caelestia-cli",
"nixpkgs"
],
"quickshell": "quickshell"
},
"locked": {
"lastModified": 1780196414,
"narHash": "sha256-iXmyWULTZuRd68xRL79e9GyYL9FZ6gfh6zl1PPlWX2A=",
"owner": "caelestia-dots",
"repo": "shell",
"rev": "63bb82762bb29ac9b7fcd5b97839abae721ce860",
"type": "github"
},
"original": {
"owner": "caelestia-dots",
"repo": "shell",
"type": "github"
}
},
"caelestia-shell_2": {
"inputs": {
"caelestia-cli": "caelestia-cli_2",
"nixpkgs": [
"nixpkgs"
],
"quickshell": "quickshell_2"
},
"locked": {
"lastModified": 1780196414,
"narHash": "sha256-iXmyWULTZuRd68xRL79e9GyYL9FZ6gfh6zl1PPlWX2A=",
"owner": "caelestia-dots",
"repo": "shell",
"rev": "63bb82762bb29ac9b7fcd5b97839abae721ce860",
"type": "github"
},
"original": {
"owner": "caelestia-dots",
"repo": "shell",
"type": "github"
}
},
"crane": {
"locked": {
"lastModified": 1779130139,
@@ -372,6 +280,38 @@
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1777699697,
@@ -442,6 +382,24 @@
}
},
"flake-parts_4": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib_4"
},
"locked": {
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_5": {
"inputs": {
"nixpkgs-lib": [
"nvf",
@@ -462,7 +420,7 @@
"type": "github"
}
},
"flake-parts_5": {
"flake-parts_6": {
"inputs": {
"nixpkgs-lib": [
"stylix",
@@ -499,6 +457,32 @@
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"nix-gaming",
"flake-compat"
],
"gitignore": "gitignore_2",
"nixpkgs": [
"nix-gaming",
"nixpkgs"
]
},
"locked": {
"lastModified": 1781733627,
"narHash": "sha256-U3yTuGBnmXvXoQI3qkpfEDsn9RovQPAjN7ndRco+3u0=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "3bbec39bc90eadfa031e6f3b77272f3f60803e39",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
@@ -521,6 +505,28 @@
"type": "github"
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"nix-gaming",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
@@ -999,6 +1005,50 @@
"type": "github"
}
},
"nix-citizen": {
"inputs": {
"flake-compat": "flake-compat_2",
"nix-gaming": [
"nix-gaming"
],
"nixpkgs": "nixpkgs_7",
"treefmt-nix": "treefmt-nix_4"
},
"locked": {
"lastModified": 1782345817,
"narHash": "sha256-HfMMa51hKi6KPrGGerg6vrdKdJcSEmhEbCM1hCCQNX8=",
"owner": "LovingMelody",
"repo": "nix-citizen",
"rev": "9d93df2ace0c1c2f83b7d03bfee81441d63ec5e0",
"type": "github"
},
"original": {
"owner": "LovingMelody",
"repo": "nix-citizen",
"type": "github"
}
},
"nix-gaming": {
"inputs": {
"flake-compat": "flake-compat_3",
"flake-parts": "flake-parts_4",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_8"
},
"locked": {
"lastModified": 1782619847,
"narHash": "sha256-13XsPDHTG3vkNjagqQvFRG0zZK0yrDwfcU5ou/KtIFM=",
"owner": "fufexan",
"repo": "nix-gaming",
"rev": "55d03bdd91952ff6fd0b0779efe79da67323b6c5",
"type": "github"
},
"original": {
"owner": "fufexan",
"repo": "nix-gaming",
"type": "github"
}
},
"nix-index-database": {
"inputs": {
"nixpkgs": [
@@ -1021,8 +1071,8 @@
},
"nixarr": {
"inputs": {
"nixpkgs": "nixpkgs_7",
"treefmt-nix": "treefmt-nix_4",
"nixpkgs": "nixpkgs_9",
"treefmt-nix": "treefmt-nix_5",
"vpnconfinement": "vpnconfinement",
"website-builder": "website-builder"
},
@@ -1042,7 +1092,7 @@
},
"nixos-hardware": {
"inputs": {
"nixpkgs": "nixpkgs_8"
"nixpkgs": "nixpkgs_10"
},
"locked": {
"lastModified": 1780310866,
@@ -1120,6 +1170,21 @@
"type": "github"
}
},
"nixpkgs-lib_4": {
"locked": {
"lastModified": 1777168982,
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1779796641,
@@ -1137,6 +1202,35 @@
}
},
"nixpkgs_10": {
"locked": {
"lastModified": 1767892417,
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_11": {
"locked": {
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_12": {
"locked": {
"lastModified": 1778869304,
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
@@ -1152,7 +1246,7 @@
"type": "github"
}
},
"nixpkgs_11": {
"nixpkgs_13": {
"locked": {
"lastModified": 1780749050,
"narHash": "sha256-3av0pIjlOWQ6rDbNOmpUSvbNnJkGORQKKjb4LtCZsIY=",
@@ -1168,7 +1262,7 @@
"type": "github"
}
},
"nixpkgs_12": {
"nixpkgs_14": {
"locked": {
"lastModified": 1778869304,
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
@@ -1184,7 +1278,7 @@
"type": "github"
}
},
"nixpkgs_13": {
"nixpkgs_15": {
"locked": {
"lastModified": 1775888245,
"narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
@@ -1200,7 +1294,7 @@
"type": "github"
}
},
"nixpkgs_14": {
"nixpkgs_16": {
"locked": {
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
@@ -1297,6 +1391,38 @@
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1781577229,
"narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "567a49d1913ce81ac6e9582e3553dd90a955875f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1782175435,
"narHash": "sha256-EMzXKmnOtBQ2MnvpiNOm7E+kOMvdPrIKaeg52Tip2Uk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "89570f24e97e614aa34aa9ab1c927b6578a43775",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1775595990,
"narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=",
@@ -1312,39 +1438,10 @@
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1767892417,
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1780243769,
"narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "331800de5053fcebacf6813adb5db9c9dca22a0c",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"notashelf-tuigreet": {
"inputs": {
"crane": "crane",
"nixpkgs": "nixpkgs_10",
"nixpkgs": "nixpkgs_12",
"rust-overlay": "rust-overlay"
},
"locked": {
@@ -1388,7 +1485,7 @@
},
"nur-anotherhadi": {
"inputs": {
"nixpkgs": "nixpkgs_11"
"nixpkgs": "nixpkgs_13"
},
"locked": {
"lastModified": 1781028989,
@@ -1427,11 +1524,11 @@
},
"nvf": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts_4",
"flake-compat": "flake-compat_4",
"flake-parts": "flake-parts_5",
"mnw": "mnw",
"ndg": "ndg",
"nixpkgs": "nixpkgs_12",
"nixpkgs": "nixpkgs_14",
"systems": "systems_5"
},
"locked": {
@@ -1471,64 +1568,21 @@
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"caelestia-cli",
"caelestia-shell",
"nixpkgs"
]
},
"locked": {
"lastModified": 1779430452,
"narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=",
"ref": "refs/heads/master",
"rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00",
"revCount": 819,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"quickshell_2": {
"inputs": {
"nixpkgs": [
"caelestia-shell",
"nixpkgs"
]
},
"locked": {
"lastModified": 1779430452,
"narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=",
"ref": "refs/heads/master",
"rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00",
"revCount": 819,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"root": {
"inputs": {
"awesome-wallpapers": "awesome-wallpapers",
"blog": "blog",
"caelestia-cli": "caelestia-cli",
"caelestia-shell": "caelestia-shell_2",
"default-creds": "default-creds",
"helium-browser": "helium-browser",
"home-manager": "home-manager",
"hyprland": "hyprland",
"iknowyou": "iknowyou",
"nix-citizen": "nix-citizen",
"nix-gaming": "nix-gaming",
"nix-index-database": "nix-index-database",
"nixarr": "nixarr",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_9",
"nixpkgs": "nixpkgs_11",
"nixpkgs-stable": "nixpkgs-stable",
"notashelf-tuigreet": "notashelf-tuigreet",
"nur-anotherhadi": "nur-anotherhadi",
@@ -1560,7 +1614,7 @@
},
"sops-nix": {
"inputs": {
"nixpkgs": "nixpkgs_13"
"nixpkgs": "nixpkgs_15"
},
"locked": {
"lastModified": 1780547341,
@@ -1583,9 +1637,9 @@
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_5",
"flake-parts": "flake-parts_6",
"gnome-shell": "gnome-shell",
"nixpkgs": "nixpkgs_14",
"nixpkgs": "nixpkgs_16",
"nur": "nur",
"systems": "systems_6",
"tinted-kitty": "tinted-kitty",
@@ -1828,6 +1882,27 @@
}
},
"treefmt-nix_4": {
"inputs": {
"nixpkgs": [
"nix-citizen",
"nixpkgs"
]
},
"locked": {
"lastModified": 1780220602,
"narHash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "db947814a175b7ca6ded66e21383d938df01c227",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"treefmt-nix_5": {
"inputs": {
"nixpkgs": [
"nixarr",
+38 -8
View File
@@ -16,6 +16,9 @@
notashelf-tuigreet.url = "github:NotAShelf/tuigreet";
helium-browser.url = "github:oxcl/nix-flake-helium-browser";
nur-anotherhadi.url = "github:anotherhadi/nur-packages";
nix-citizen.url = "github:LovingMelody/nix-citizen";
nix-gaming.url = "github:fufexan/nix-gaming";
nix-citizen.inputs.nix-gaming.follows = "nix-gaming";
nix-index-database = {
url = "github:nix-community/nix-index-database";
@@ -25,15 +28,19 @@
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
caelestia-shell = {
url = "github:caelestia-dots/shell";
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
caelestia-cli = {
url = "github:caelestia-dots/cli";
inputs.nixpkgs.follows = "nixpkgs";
zen-browser = {
url = "github:0xc000022070/zen-browser-flake";
inputs = {
home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
};
};
# Server
nixarr.url = "github:rasmus-kirk/nixarr";
default-creds.url = "github:anotherhadi/default-creds";
@@ -66,11 +73,34 @@
(import ./home/programs/group/flake.nix args)
(import ./home/programs/nixy/flake.nix args)
{
# Modern app output with metadata
apps.${system} = {
default = {
type = "app";
program = "${pkgs.neovim}/bin/nvim";
meta = {
description = "Improved Vim-based text editor";
homepage = "https://neovim.io";
license = "Apache-2.0";
};
};
};
# Formatter output
formatter.${system} = pkgs.alejandra;
# Update to modern syntax (no defaultApp)
# Add homeManagerModules output for proper Home Manager integration
#homeManagerModules = {
# dev = import ./home/programs/group/dev.nix { inherit inputs nixpkgs system; };
# cybersecurity = import ./home/programs/group/cybersecurity.nix { inherit inputs nixpkgs system; };
# basic-apps = import ./home/programs/group/basic-apps.nix { inherit inputs nixpkgs system; };
# misc = import ./home/programs/group/misc.nix { inherit inputs nixpkgs system; };
#};
nixosConfigurations = {
h-laptop = import ./hosts/laptop/flake.nix args;
h-work = import ./hosts/work/flake.nix args;
jack = import ./hosts/server/flake.nix args;
thinkpad = import ./hosts/laptop/flake.nix args;
home-pc = import ./hosts/home-pc/flake.nix args;
};
}
];
+21 -17
View File
@@ -4,20 +4,18 @@
pkgs-nur-hadi,
...
}: {
home.packages = with pkgs-stable; [
vlc # Video player
home.packages = (with pkgs-stable; [
kodi # Kodi
keepassxc # Passwords
vlc # Video player
obsidian # Note taking app
textpieces # Manipulate texts
resources # Ressource monitor
gnome-clocks # Clocks app
gnome-text-editor # Basic graphic text editor
cwtch-ui # messager
ticktick # Todo app
pinta # Image editor
switcheroo # Convert images between different formats
onlyoffice-desktopeditors # Office suite
blanket # Listen to different sounds
signal-desktop # Messaging app
librewolf # Backup browser
firefox # Backup browser
tor-browser # Tor browser
# I love TUIs
caligula # User-friendly, lightweight TUI for disk imaging (ISO, USB BOOT)
@@ -27,19 +25,25 @@
tealdeer # Fast tldr client
sttr # Minimalist "cyberchef" like. Cross-platform, cli app to perform various operations on string
wiremix # Simple TUI mixer for PipeWire
slides # A terminal-based presentation tool that allows you to create and deliver presentations directly from the command line
pom # Pomodoro timer in your terminal
pkgs.wifitui # TUI for managing wifi
pkgs-nur-hadi.usbguard-tui # TUI for managing USBGuard rules
pkgs-nur-hadi.sheets # Terminal based spreadsheet tool
blueman # Bluetooth manager (blueman-manager, blueman-adapters, blueman-sendto)
bluez # Bluetooth stack tools (bluetoothctl)
# I love CLIs
httpie # Command-line HTTP client, a user-friendly cURL replacement
gh # GitHub
gh-dash # A terminal dashboard for GitHub
figlet # Transform text into ASCII art
pastel # Command-line tool to generate, analyze, convert and manipulate colors
imagemagick # Image manipulation tool
chafa # Image to ANSI/Unicode converter and more.
];
])
++ (with pkgs; [
vesktop # Vencord Discord Mod
tor # tor network service
]);
}
+9 -5
View File
@@ -4,14 +4,18 @@
}:
(with pkgs; [
go
claude-code
zig
claude-code # Claude Code
zed-editor #Zed
vscodium # VS Code
])
++ (with pkgs-stable; [
nodejs
air
duckdb
bun
python3
jq
nix-prefetch-github
rsync
rustc
cargo
])
+45
View File
@@ -0,0 +1,45 @@
{
pkgs,
...
}: {
home.packages = (with pkgs; [
# ─────────────────────────────────────────────────────────────
# Game launchers
# ─────────────────────────────────────────────────────────────
lutris # Universal launcher for Wine, emulators, and native games
#prismlauncher # Minecraft launcher with Fabric/Forge/Quilt support
# ─────────────────────────────────────────────────────────────
# Performance & overlays
# ─────────────────────────────────────────────────────────────
mangohud # FPS and hardware monitoring overlay
goverlay # GUI for MangoHud and vkBasalt
gamescope # Micro-compositor for better fullscreen, scaling and frame limiting
gamemode # Requests performance optimizations while gaming
# ─────────────────────────────────────────────────────────────
# Proton & Wine
# ─────────────────────────────────────────────────────────────
protonup-qt # Install and update GE-Proton, Wine-GE, Luxtorpeda, etc.
winetricks # Install Windows runtimes into Wine prefixes
protontricks # Winetricks for Steam Proton prefixes
wineWow64Packages.staging # Wine (32/64-bit) with staging patches
# ─────────────────────────────────────────────────────────────
# Vulkan layers
# ─────────────────────────────────────────────────────────────
vkbasalt # Vulkan post-processing (CAS sharpening, FXAA, etc.)
# ─────────────────────────────────────────────────────────────
# Runner layers
# ─────────────────────────────────────────────────────────────
steam-run # Run generic Linux binaries inside Steam's runtime
appimage-run # Execute AppImages on NixOS
]);
}
-3
View File
@@ -5,12 +5,9 @@
...
}: {
home.packages = with pkgs-stable; [
tty-solitaire
bastet
peaclock
cbonsai
pipes
cmatrix
fastfetch
];
}
+11
View File
@@ -0,0 +1,11 @@
{
pkgs,
...
}: {
home.packages = (with pkgs; [
ardour # DAW
guitarix # Digital AMP
carla # Hosting of VSTs
hydrogen# Drums
]);
}
+19 -7
View File
@@ -19,13 +19,25 @@
in {
packages.${system}.nvim = nvimConfig.neovim;
apps.${system}.nvim = {
type = "app";
program = "${nvimConfig.neovim}/bin/nvim";
};
defaultApp.${system} = {
type = "app";
program = "${nvimConfig.neovim}/bin/nvim";
apps.${system} = {
nvim = {
type = "app";
program = "${nvimConfig.neovim}/bin/nvim";
meta = {
description = "Improved Vim-based text editor";
homepage = "https://neovim.io";
license = "Apache-2.0";
};
};
default = {
type = "app";
program = "${nvimConfig.neovim}/bin/nvim";
meta = {
description = "Improved Vim-based text editor";
homepage = "https://neovim.io";
license = "Apache-2.0";
};
};
};
homeManagerModules.nvim = {
+110
View File
@@ -0,0 +1,110 @@
# Star Citizen on Nixy
This repo already includes Star Citizen support through `nix-citizen`.
Relevant files:
- `flake.nix` — declares the `nix-citizen` and `nix-gaming` inputs
- `home/programs/star-citizen/default.nix` — Home Manager module that installs the chosen Star Citizen package
- `home/programs/steam/system.nix` — Steam / gamescope / gamemode setup
- `home/programs/group/gaming-apps.nix` — extra gaming tools such as `lutris`, `mangohud`, `protonup-qt`, and `wine`
## Recommended package
For most setups, start with:
- `rsi-launcher-umu`
If you want the game package instead of just the launcher, try:
- `star-citizen-umu`
The `*-umu` variants are usually the safest choice on Nix-based gaming setups because they are designed around UMU/Proton style runtime handling.
## How to enable it
Your laptop and home-pc profiles already import the module:
- `hosts/laptop/home.nix`
- `hosts/home-pc/home.nix`
So you only need to turn it on in the relevant Home Manager config.
Add or update:
```nix
programs.star-citizen = {
enable = true;
package = "rsi-launcher-umu";
};
```
If you want the packaged game instead of the launcher, use:
```nix
programs.star-citizen = {
enable = true;
package = "star-citizen-umu";
};
```
## Rebuild
This flake exposes NixOS host outputs, so apply the change with your normal host rebuild command from the repo root:
```bash
sudo nixos-rebuild switch --flake .#thinkpad
```
or:
```bash
sudo nixos-rebuild switch --flake .#home-pc
```
If youre building from one of the host directories directly, use the host-specific `nixos-rebuild` flow you already use in this repo.
## First launch checklist
Before launching the game, make sure:
- `Steam` module is enabled
- `gamescope` and `gamemode` are available
- `protonup-qt` is installed so you can manage `GE-Proton` / `Wine-GE`
- you have enough disk space for the launcher and game files
- your GPU drivers are set up properly
Useful tools already included in this repo:
- `lutris`
- `mangohud`
- `goverlay`
- `gamescope`
- `gamemode`
- `protonup-qt`
- `winetricks`
- `protontricks`
## Notes
- Star Citizen is a Windows game, so the launcher/game still downloads its own data after installation.
- If the launcher starts but the game fails to launch, try switching the package to another `nix-citizen` option from `home/programs/star-citizen/default.nix`.
- If you want overlay/performance debugging, launch the game with `MANGOHUD=1` or use the included `mangohud` / `goverlay` tools.
## Troubleshooting
### Launcher doesnt appear
- Rebuild the Home Manager profile
- Check that `programs.star-citizen.enable = true;`
- Confirm the module is imported in the host profile you are using
### Launcher opens but game fails
- Try `rsi-launcher-umu` or `star-citizen-umu`
- Verify `protonup-qt` has a current `GE-Proton`
- Make sure `gamescope` / `gamemode` are enabled in your gaming setup
### Need a clean reset
If you want to switch package variants, change `programs.star-citizen.package` and rebuild again. The package selection is the only thing the module installs.
+35
View File
@@ -0,0 +1,35 @@
{
config,
inputs,
lib,
pkgs,
...
}:
let
cfg = config.programs.star-citizen;
system = pkgs.stdenv.hostPlatform.system;
in {
options.programs.star-citizen = {
enable = lib.mkEnableOption "Star Citizen via nix-citizen";
package = lib.mkOption {
type = lib.types.enum [
"rsi-launcher"
"rsi-launcher-git"
"rsi-launcher-umu"
"star-citizen"
"star-citizen-git"
"star-citizen-umu"
"lug-helper"
];
default = "rsi-launcher";
description = "Package from nix-citizen to install when Star Citizen is enabled.";
};
};
config = lib.mkIf cfg.enable {
home.packages = [
inputs.nix-citizen.packages.${system}.${cfg.package}
];
};
}
+8
View File
@@ -0,0 +1,8 @@
{
...
}: {
home.sessionVariables = {
# Better Steam scaling on HiDPI displays
STEAM_FORCE_DESKTOPUI_SCALING = "1.25";
};
}
+27
View File
@@ -0,0 +1,27 @@
{
pkgs,
...
}: {
hardware.graphics = {
enable = true;
enable32Bit = true;
};
programs.steam = {
enable = true;
gamescopeSession.enable = true;
remotePlay.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
extraCompatPackages = with pkgs; [
proton-ge-bin
];
};
programs.gamescope.enable = true;
programs.gamemode.enable = true;
hardware.steam-hardware.enable = true;
}
+98
View File
@@ -0,0 +1,98 @@
{
inputs,
pkgs,
...
}: {
imports = [inputs.zen-browser.homeModules.beta];
programs.zen-browser = {
enable = true;
profiles.default = {
extensions = {
packages = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
video-downloadhelper
multi-account-containers
noscript
];
};
search = {
force = true;
default = "startpage";
engines = {
nixos-options = {
name = "NixOS Options";
urls = [{template = "https://search.nixos.org/options?channel=unstable&query={searchTerms}";}];
definedAliases = ["@no"];
};
nixos-packages = {
name = "NixOS Packages";
urls = [{template = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}";}];
definedAliases = ["@np"];
};
nixos-wiki = {
name = "NixOS Wiki";
urls = [{template = "https://wiki.nixos.org/w/index.php?search={searchTerms}";}];
definedAliases = ["@nw"];
};
startpage = {
name = "Startpage";
urls = [
{
method = "POST";
template = "https://www.startpage.com/sp/search";
params = [
{
name = "query";
value = "{searchTerms}";
}
{
name = "prfe";
value = "26b77e0ef13273610e32813c3233d92429c5426b277dcad41b2f2d38f94a44e839aa1abc7cf4223afd5872a185d5c9976949b9b1f0f83bbde3f9d4ac610d8fffa03947db6336c7a249ef62c2824adfd1";
}
];
}
{
type = "application/x-suggestions+json";
template = "https://www.startpage.com/osuggestions?query={searchTerms}";
}
];
definedAliases = ["@sp"];
};
};
};
settings = {
"browser.download.useDownloadDir" = false;
"browser.ml.linkPreview.enabled" = true;
"browser.ml.linkPreview.optin" = true;
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = true;
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = true;
"browser.search.suggest.enabled" = true;
"browser.search.suggest.enabled.private" = true;
"browser.translations.neverTranslateLanguages" = "de";
"dom.security.https_only_mode" = true;
"network.trr.mode" = 3;
"network.trr.uri" = "https://mozilla.cloudflare-dns.com/dns-query";
"privacy.history.custom" = false;
"privacy.trackingprotection.allow_list.convenience.enabled" = true;
"zen.tabs.select-recently-used-on-close" = false;
"zen.tabs.show-newtab-vertical" = false;
"zen.view.show-newtab-button-top" = false;
"zen.workspaces.continue-where-left-off" = true;
"browser.contentblocking.category" = "strict";
"network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation" = true;
"network.lna.blocking" = true;
"privacy.annotate_channels.strict_list.enabled" = true;
"privacy.bounceTrackingProtection.mode" = 1;
"privacy.fingerprintingProtection" = true;
"privacy.query_stripping.enabled" = true;
"privacy.query_stripping.enabled.pbmode" = true;
"privacy.trackingprotection.consentmanager.skip.pbmode.enabled" = false;
"privacy.trackingprotection.emailtracking.enabled" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true;
};
};
};
}
+62
View File
@@ -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";
}
+24
View File
@@ -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";
};
};
};
}
+244 -87
View File
@@ -2,29 +2,226 @@
pkgs,
lib,
config,
pkgs-nur-hadi,
...
}: let
}:
let
colors = config.lib.stylix.colors;
mkMenu = menu: let
configFile = pkgs.writeText "config.yaml" (
lib.generators.toYAML {} {
anchor = "bottom-right";
border = "#${colors.base0D}80";
background = "#${colors.base01}EE";
color = "#${colors.base05}";
margin_right = 15;
margin_bottom = 15;
rows_per_column = 5;
mkMenu = menu:
let
configFile = pkgs.writeText "config.yaml" (
lib.generators.toYAML { } {
anchor = "bottom-right";
border = "#${colors.base0D}80";
background = "#${colors.base01}EE";
color = "#${colors.base05}";
margin_right = 15;
margin_bottom = 15;
rows_per_column = 5;
inherit menu;
}
);
in
inherit menu;
}
);
in
pkgs.writeShellScriptBin "menu" ''
exec ${lib.getExe pkgs.wlr-which-key} ${configFile}
'';
in {
gui = exe: "uwsm app -- ${exe}";
term = exe: "uwsm app -- ${pkgs.ghostty}/bin/ghostty -e ${exe}";
appsMenu = mkMenu [
{
key = "f";
desc = "Firefox";
cmd = gui "${pkgs.firefox}/bin/firefox";
}
{
key = "o";
desc = "Obsidian";
cmd = gui "${pkgs.obsidian}/bin/obsidian";
}
{
key = "t";
desc = "TickTick";
cmd = gui "${pkgs.ticktick}/bin/ticktick";
}
{
key = "n";
desc = "OnlyOffice";
cmd = gui "${pkgs.onlyoffice-desktopeditors}/bin/onlyoffice-desktopeditors";
}
{
key = "v";
desc = "Vesktop";
cmd = gui "${pkgs.vesktop}/bin/vesktop";
}
{
key = "l";
desc = "VLC";
cmd = gui "${pkgs.vlc}/bin/vlc";
}
];
devMenu = mkMenu [
{
key = "z";
desc = "Zed";
cmd = gui "${pkgs.zed-editor}/bin/zed";
}
{
key = "c";
desc = "VSCodium";
cmd = gui "${pkgs.vscodium}/bin/codium";
}
{
key = "g";
desc = "Ghostty";
cmd = gui "${pkgs.ghostty}/bin/ghostty";
}
{
key = "f";
desc = "Fastfetch";
cmd = term "${pkgs.fastfetch}/bin/fastfetch";
}
{
key = "d";
desc = "Dysk";
cmd = term "${pkgs.dysk}/bin/dysk";
}
{
key = "w";
desc = "Wikiman";
cmd = term "${pkgs.wikiman}/bin/wikiman";
}
{
key = "s";
desc = "STTR";
cmd = term "${pkgs.sttr}/bin/sttr";
}
];
gamingMenu = mkMenu [
{
key = "l";
desc = "Lutris";
cmd = gui "${pkgs.lutris}/bin/lutris";
}
{
key = "p";
desc = "ProtonUp-Qt";
cmd = gui "${pkgs.protonup-qt}/bin/protonup-qt";
}
{
key = "g";
desc = "GOverlay";
cmd = gui "${pkgs.goverlay}/bin/goverlay";
}
];
utilityMenu = mkMenu [
{
key = "B";
desc = "Blueman";
cmd = gui "${pkgs.blueman}/bin/blueman-manager";
}
{
key = "x";
desc = "Bluetoothctl";
cmd = term "${pkgs.bluez}/bin/bluetoothctl";
}
{
key = "w";
desc = "WiFi TUI";
cmd = term "${pkgs.wifitui}/bin/wifitui";
}
{
key = "m";
desc = "Wiremix";
cmd = term "${pkgs.wiremix}/bin/wiremix";
}
{
key = "u";
desc = "USBGuard TUI";
cmd = term "${pkgs-nur-hadi.usbguard-tui}/bin/usbguard-tui";
}
{
key = "c";
desc = "Caligula";
cmd = term "${pkgs.caligula}/bin/caligula";
}
{
key = "h";
desc = "Browsh";
cmd = term "${pkgs.browsh}/bin/browsh";
}
{
key = "p";
desc = "Peaclock";
cmd = term "${pkgs.peaclock}/bin/peaclock";
}
{
key = "o";
desc = "Cbonsai";
cmd = term "${pkgs.cbonsai}/bin/cbonsai";
}
{
key = "i";
desc = "Pipes";
cmd = term "${pkgs.pipes}/bin/pipes";
}
{
key = "t";
desc = "Tealdeer";
cmd = term "${pkgs.tealdeer}/bin/tldr";
}
{
key = "s";
desc = "Hyprlock";
cmd = gui "${pkgs.hyprlock}/bin/hyprlock";
}
];
systemMenu = mkMenu [
{
key = "l";
desc = "Lock";
cmd = "hyprlock";
}
{
key = "w";
desc = "Restart Waybar";
cmd = "pkill -x waybar; waybar";
}
{
key = "r";
desc = "Restart Walker";
cmd = "systemctl --user restart walker.service";
}
{
key = "e";
desc = "Restart Elephant";
cmd = "systemctl --user restart elephant.service";
}
{
key = "s";
desc = "Suspend";
cmd = "systemctl suspend";
}
{
key = "p";
desc = "Power Off";
cmd = "systemctl poweroff";
}
{
key = "b";
desc = "Reboot";
cmd = "systemctl reboot";
}
];
in
{
wayland.windowManager.hyprland.settings = {
"$mod" = "SUPER";
"$shiftMod" = "SUPER_SHIFT";
@@ -37,68 +234,42 @@ in {
+ lib.getExe (mkMenu [
{
key = "a";
desc = "Proton Authenticator";
cmd = "env WEBKIT_DISABLE_COMPOSITING_MODE=1 ${pkgs.proton-authenticator}/bin/proton-authenticator";
desc = "Apps";
cmd = lib.getExe appsMenu;
}
{
key = "p";
desc = "Proton Pass";
cmd = "${pkgs.proton-pass}/bin/proton-pass";
key = "d";
desc = "Dev";
cmd = lib.getExe devMenu;
}
{
key = "v";
desc = "Proton VPN";
cmd = "${pkgs.proton-vpn}/bin/protonvpn-app";
key = "g";
desc = "Gaming";
cmd = lib.getExe gamingMenu;
}
{
key = "c";
desc = "Proton Calendar";
cmd = "${config.programs.helium.package}/bin/helium 'https://calendar.proton.me/'";
}
{
key = "m";
desc = "Proton Mail";
cmd = "${config.programs.helium.package}/bin/helium 'https://mail.proton.me/'";
}
{
key = "o";
desc = "Obsidian";
cmd = "${pkgs.obsidian}/bin/obsidian";
key = "u";
desc = "Utilities";
cmd = lib.getExe utilityMenu;
}
{
key = "s";
desc = "Signal";
cmd = "${pkgs.signal-desktop}/bin/signal-desktop";
}
{
key = "t";
desc = "TickTick";
cmd = "${pkgs.ticktick}/bin/ticktick";
}
{
key = "b";
desc = "Helium";
cmd = "${config.programs.helium.package}/bin/helium";
}
{
key = "i";
desc = "Helium (Incognito)";
cmd = "${config.programs.helium.package}/bin/helium --incognito";
desc = "System";
cmd = lib.getExe systemMenu;
}
])
)
"$mod,B, exec, uwsm app -- ${config.programs.helium.package}/bin/helium" # Browser
"$mod,B, exec, uwsm app -- ${config.programs.librewolf.package}/bin/helium" # Browser
# Power
"$mod, X, global, caelestia:session" # Powermenu
(
"$shiftMod, X, exec, "
"$mod, X, exec, "
+ lib.getExe (mkMenu [
{
key = "l";
desc = "Lock";
cmd = "hyprctl dispatch global caelestia:lock";
cmd = "hyprlock";
}
{
key = "s";
@@ -122,8 +293,8 @@ in {
}
{
key = "c";
desc = "Restart caelestia";
cmd = "hyprctl dispatch exec 'caelestia-shell kill | sleep 1 | caelestia-shell'";
desc = "Restart Waybar";
cmd = "pkill -x waybar; waybar";
}
])
)
@@ -131,10 +302,9 @@ in {
# Quick launch
"$mod,RETURN, exec, uwsm app -- ${pkgs.ghostty}/bin/ghostty" # Ghostty (terminal)
"$mod,E, exec, uwsm app -- ${pkgs.thunar}/bin/thunar" # Thunar
"$shiftMod, E, exec, pkill fuzzel || caelestia emoji -p" # Emoji picker
"$mod, SPACE, global, caelestia:launcher" # Launcher
"$mod, N, exec, caelestia shell drawers toggle sidebar" # Sidebar (Notifications, quick actions)
"$mod, D, exec, caelestia shell drawers toggle dashboard" # Dashboard
"$mod, SPACE, exec, walker" # Launcher
"$mod, N, exec, ${lib.getExe pkgs.grimblast} save area" # Save screenshot
"$mod, D, exec, ${lib.getExe pkgs.grimblast} copy area" # Copy screenshot
# Windows
"$mod,Q, killactive," # Close window
@@ -152,10 +322,9 @@ in {
"$shiftMod,L, focusmonitor, 1" # Focus next monitor
# Utilities
"$shiftMod, SPACE, exec, caelestia shell gameMode toggle" # Toggle Focus/Game mode
"$shiftMod, S, global, caelestia:screenshotFreeze" # Capture region (freeze)
", Print, global, caelestia:screenshotFreeze" # Capture region (freeze)
"$shiftMod+Alt, S, global, caelestia:screenshot" # Capture region
"$shiftMod, S, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region
", Print, exec, ${lib.getExe pkgs.grimblast} copy area" # Capture region
"$shiftMod+Alt, S, exec, ${lib.getExe pkgs.grimblast} save area" # Capture region
]
++ (builtins.concatLists (
builtins.genList (
@@ -176,32 +345,20 @@ in {
bindl = [
# Brightness
", XF86MonBrightnessUp, global, caelestia:brightnessUp"
", XF86MonBrightnessDown, global, caelestia:brightnessDown"
", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set 5%+"
", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%-"
# Media
", XF86AudioPlay, global, caelestia:mediaToggle"
", XF86AudioPause, global, caelestia:mediaToggle"
", XF86AudioNext, global, caelestia:mediaNext"
", XF86AudioPrev, global, caelestia:mediaPrev"
", XF86AudioStop, global, caelestia:mediaStop"
", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause"
", XF86AudioPause, exec, ${lib.getExe pkgs.playerctl} play-pause"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next"
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous"
", XF86AudioStop, exec, ${lib.getExe pkgs.playerctl} stop"
# Sound
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
];
bindin = [
# Launcher
"$mod, mouse:272, global, caelestia:launcherInterrupt"
"$mod, mouse:273, global, caelestia:launcherInterrupt"
"$mod, mouse:274, global, caelestia:launcherInterrupt"
"$mod, mouse:275, global, caelestia:launcherInterrupt"
"$mod, mouse:276, global, caelestia:launcherInterrupt"
"$mod, mouse:277, global, caelestia:launcherInterrupt"
"$mod, mouse_up, global, caelestia:launcherInterrupt"
"$mod, mouse_down, global, caelestia:launcherInterrupt"
];
};
}
+5 -1
View File
@@ -19,6 +19,7 @@ in {
./animations.nix
./bindings.nix
./polkitagent.nix
./hyprlock.nix
./keyboard-backlight.nix # CHANGEME: This is for omen laptop only
];
@@ -31,6 +32,7 @@ in {
libxcb
hyprland-qtutils
adw-gtk3
hyprlock
hyprshot
hyprpicker
swappy
@@ -152,7 +154,9 @@ in {
kb_options = "caps:escape";
follow_mouse = 1;
sensitivity = 0.5;
sensitivity = 0.0; # or whatever speed you prefer
accel_profile = "flat";
repeat_delay = 300;
repeat_rate = 50;
numlock_by_default = true;
+58
View File
@@ -0,0 +1,58 @@
{config, ...}: let
c = config.lib.stylix.colors;
fontSans = config.stylix.fonts.sansSerif.name;
in {
xdg.configFile."hypr/hyprlock.conf".text = ''
general {
hide_cursor = true
grace = 0
}
background {
monitor =
color = rgba(${c."base00-rgb-r"}, ${c."base00-rgb-g"}, ${c."base00-rgb-b"}, 0.90)
blur_passes = 2
blur_size = 8
noise = 0.01
}
label {
monitor =
text = cmd[update:1000] date +"%A, %d %B %Y"
color = rgba(${c."base05-rgb-r"}, ${c."base05-rgb-g"}, ${c."base05-rgb-b"}, 1.0)
font_size = 30
font_family = "${fontSans}"
position = 0, 140
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] date +"%H:%M"
color = rgba(${c."base0D-rgb-r"}, ${c."base0D-rgb-g"}, ${c."base0D-rgb-b"}, 1.0)
font_size = 54
font_family = "${fontSans}"
position = 0, 60
halign = center
valign = center
}
input-field {
monitor =
size = 320, 52
outline_thickness = 2
outer_color = rgba(${c."base03-rgb-r"}, ${c."base03-rgb-g"}, ${c."base03-rgb-b"}, 0.60)
inner_color = rgba(${c."base01-rgb-r"}, ${c."base01-rgb-g"}, ${c."base01-rgb-b"}, 0.92)
font_color = rgba(${c."base05-rgb-r"}, ${c."base05-rgb-g"}, ${c."base05-rgb-b"}, 1.0)
fail_color = rgba(${c."base08-rgb-r"}, ${c."base08-rgb-g"}, ${c."base08-rgb-b"}, 1.0)
check_color = rgba(${c."base0B-rgb-r"}, ${c."base0B-rgb-g"}, ${c."base0B-rgb-b"}, 1.0)
dots_spacing = 0.3
dots_center = true
hide_input = false
position = 0, -20
halign = center
valign = center
}
'';
}
+42
View File
@@ -0,0 +1,42 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
walker
elephant
];
systemd.user.services.elephant = {
Unit = {
Description = "Elephant backend service";
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
};
Service = {
ExecStart = "${pkgs.elephant}/bin/elephant";
Restart = "on-failure";
RestartSec = 5;
};
};
systemd.user.services.walker = {
Unit = {
Description = "Walker application service";
PartOf = [ "graphical-session.target" ];
After = [ "elephant.service" "graphical-session.target" ];
Requires = [ "elephant.service" ];
};
Service = {
ExecStart = "${pkgs.walker}/bin/walker --gapplication-service";
Restart = "on-failure";
RestartSec = 5;
};
};
wayland.windowManager.hyprland.settings.exec-once = [
"dbus-update-activation-environment --systemd --all"
"systemctl --user start elephant.service walker.service"
];
}
+277
View File
@@ -0,0 +1,277 @@
{ pkgs, config, lib, ... }:
let
colors = config.lib.stylix.colors;
rgb = base:
"${colors."${base}-rgb-r"}, ${colors."${base}-rgb-g"}, ${colors."${base}-rgb-b"}";
terminal = cmd: "uwsm app -- ${lib.getExe pkgs.ghostty} -e ${cmd}";
radius = toString config.theme.bar-rounding;
in
{
home.packages = with pkgs; [
waybar
];
xdg.configFile."waybar/config".text = builtins.toJSON {
layer = "top";
position = "top";
height = 38;
spacing = 10;
"margin-top" = 8;
"margin-left" = 8;
"margin-right" = 8;
"gtk-layer-shell" = true;
"reload_style_on_change" = true;
"modules-left" = [
"hyprland/workspaces"
"tray"
];
"modules-center" = [
"hyprland/window"
];
"modules-right" = [
"custom/bluetooth"
"network"
"battery"
"pulseaudio"
"clock"
];
"hyprland/workspaces" = {
format = "{name}";
"disable-scroll" = true;
"all-outputs" = true;
"on-click" = "activate";
"persistent-workspaces" = {
"*" = 5;
};
};
"hyprland/window" = {
format = "{}";
"max-length" = 70;
"separate-outputs" = true;
};
tray = {
spacing = 8;
"icon-size" = 20;
};
network = {
interval = 2;
"format-wifi" = "󰖩 {signalStrength}%";
"format-ethernet" = "󰈀 {ifname}";
"format-linked" = "󰈀 {ifname}";
"format-disconnected" = "󰖪";
"tooltip-format" = "{essid}\n{ipaddr}";
"on-click" = terminal "wifitui";
};
battery = {
interval = 30;
states = {
warning = 30;
critical = 15;
};
format = "󰁹 {capacity}%";
"format-charging" = "󰂄 {capacity}%";
"format-plugged" = "󰂄 {capacity}%";
"format-full" = "󰁹 {capacity}%";
"tooltip-format" = "Battery {capacity}%\n{timeTo} remaining";
};
"custom/bluetooth" = {
exec = "echo 󰂯";
interval = 3600;
tooltip = false;
"on-click" = "uwsm app -- blueman-manager";
};
pulseaudio = {
"scroll-step" = 5;
format = "󰕾 {volume}%";
"format-muted" = "󰖁";
tooltip = true;
"on-click" = terminal "wiremix";
};
clock = {
interval = 1;
format = "󰥔 {:%H:%M}";
"tooltip-format" = "<big>{:%A, %d %B %Y}</big>";
};
};
xdg.configFile."waybar/style.css".text = ''
* {
border: none;
min-height: 0;
font-family:
"${config.stylix.fonts.sansSerif.name}",
"${config.stylix.fonts.monospace.name}",
sans-serif;
font-size: 13px;
}
window#waybar {
background: transparent;
color: #${colors.base05};
}
.modules-left,
.modules-center,
.modules-right {
margin: 6px 0;
}
#workspaces,
#window,
#tray,
#custom-bluetooth,
#network,
#battery,
#pulseaudio,
#clock {
background: rgba(${rgb "base01"}, 0.76);
border: 1px solid rgba(${rgb "base03"}, 0.45);
border-radius: ${radius}px;
padding: 0 14px;
margin: 6px 4px;
transition:
background-color 180ms ease,
border-color 180ms ease,
color 180ms ease;
}
#workspaces {
padding: 4px;
}
#workspaces button {
background: transparent;
color: #${colors.base04};
padding: 0 12px;
margin: 0 2px;
border-radius: ${radius}px;
transition: all 180ms ease;
}
#workspaces button:hover {
background: rgba(${rgb "base02"}, 0.70);
color: #${colors.base05};
}
#workspaces button.active {
background: #${colors.base0D};
color: #${colors.base00};
}
#workspaces button.urgent {
background: #${colors.base08};
color: #${colors.base00};
}
#window {
min-width: 260px;
padding-left: 18px;
padding-right: 18px;
color: #${colors.base05};
}
#window.empty {
background: transparent;
border: none;
}
#tray {
padding-left: 10px;
padding-right: 10px;
}
#custom-bluetooth {
color: #${colors.base0E};
}
#network {
color: #${colors.base0C};
}
#network.disconnected {
color: #${colors.base08};
}
#battery {
color: #${colors.base0A};
}
#battery.charging,
#battery.plugged {
color: #${colors.base0B};
}
#battery.warning {
color: #${colors.base0A};
}
#battery.critical {
color: #${colors.base08};
}
#pulseaudio {
color: #${colors.base0B};
}
#pulseaudio.muted {
color: #${colors.base08};
}
#clock {
color: #${colors.base0D};
font-weight: 600;
}
tooltip {
background: rgba(${rgb "base00"}, 0.90);
border: 1px solid rgba(${rgb "base03"}, 0.70);
border-radius: ${radius}px;
}
tooltip label {
color: #${colors.base05};
}
'';
wayland.windowManager.hyprland.settings = {
exec-once = [
"waybar"
];
};
}
+39
View File
@@ -0,0 +1,39 @@
{config, ...}: {
imports = [
# ─────────────────────────────────────────────────────────────
# System configuration
# ─────────────────────────────────────────────────────────────
../../nixos/audio.nix
../../nixos/docker.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
# ─────────────────────────────────────────────────────────────
# Graphics Card
# ─────────────────────────────────────────────────────────────
../../nixos/amd-graphics.nix
# ─────────────────────────────────────────────────────────────
# System integration for Steam
# ─────────────────────────────────────────────────────────────
../../nixos/steam.nix
# You should let those lines as is
./hardware-configuration.nix
./variables.nix
];
programs.nix-ld.enable = true; #Dynamic Linking
home-manager.users."${config.var.username}" = import ./home.nix;
services.flatpak.enable = true;
# Don't touch this
system.stateVersion = "24.05";
}
+37
View File
@@ -0,0 +1,37 @@
{
inputs,
nixpkgs,
...
}:
nixpkgs.lib.nixosSystem {
modules = [
{
nixpkgs.overlays = [];
_module.args = {
inherit inputs;
};
}
({ config, pkgs, lib, ... }: {
# ─────────────────────────────────────────────────────────────
# AMD Microcode
# ─────────────────────────────────────────────────────────────
hardware.cpu.amd.updateMicrocode = true;
# ─────────────────────────────────────────────────────────────
# Hardware accelaration
# ─────────────────────────────────────────────────────────────
hardware.graphics = {
enable = true;
enable32Bit = true;
};
})
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
inputs.nix-index-database.nixosModules.default
./configuration.nix
];
}
+50
View File
@@ -0,0 +1,50 @@
# 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 = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/4eb8dac5-6a57-4cfd-a5f7-e0a74e72d9db";
fsType = "btrfs";
};
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/4eb8dac5-6a57-4cfd-a5f7-e0a74e72d9db";
fsType = "btrfs";
options = [ "subvol=home" ];
};
fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/4eb8dac5-6a57-4cfd-a5f7-e0a74e72d9db";
fsType = "btrfs";
options = [ "subvol=nix" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/E823-261A";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
fileSystems."/mnt/hdd" = {
device = "/dev/disk/by-uuid/8b6e4527-2ea7-4f08-9f86-12a766e39313";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/d0243bc0-10fb-4fa6-9933-945eb2965385"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+73
View File
@@ -0,0 +1,73 @@
{config, ...}: {
imports = [
# ─────────────────────────────────────────────────────────────
# Programs
# ─────────────────────────────────────────────────────────────
../../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
# ─────────────────────────────────────────────────────────────
# Gaming
# ─────────────────────────────────────────────────────────────
../../home/programs/steam
../../home/programs/star-citizen
# ─────────────────────────────────────────────────────────────
# Groups
# ─────────────────────────────────────────────────────────────
../../home/programs/group/basic-apps.nix
../../home/programs/group/dev.nix
../../home/programs/group/misc.nix
../../home/programs/group/gaming-apps.nix
../../home/programs/group/music-apps.nix
# ─────────────────────────────────────────────────────────────
# System
# ─────────────────────────────────────────────────────────────
../../home/system/hyprland
../../home/system/waybar
../../home/system/walker
../../home/system/hyprpaper
../../home/system/mime
../../home/system/udiskie
./variables.nix # Mostly user-specific configuration
];
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;
star-citizen = {
enable = true;
package = "rsi-launcher-umu";
};
nixy = {
enable = true;
configDirectory = config.var.configDirectory;
};
};
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

+38
View File
@@ -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 = "en_US.UTF-8";
extraLocale = "de_DE.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 = {};
};
};
}
+28 -53
View File
@@ -1,58 +1,33 @@
{config, ...}: {
imports = [
# Mostly system related configuration
../../nixos/nvidia.nix # CHANGEME: Remove this line if you don't have an Nvidia GPU
../../nixos/audio.nix
../../nixos/bluetooth.nix
../../nixos/fonts.nix
../../nixos/home-manager.nix
../../nixos/nix.nix
../../nixos/systemd-boot.nix
../../nixos/tuigreet.nix
../../nixos/users.nix
../../nixos/utils.nix
../../nixos/hyprland.nix
../../nixos/usbguard.nix
../../home/programs/helium/system.nix # I hate browser's configuration..
{ config, ... }: {
imports = [
# ─────────────────────────────────────────────────────────────
# System 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/users.nix
../../nixos/utils.nix
../../nixos/hyprland.nix
../../nixos/omen.nix # CHANGEME: For my laptop only, remove this (OMEN 16)
# ─────────────────────────────────────────────────────────────
# System integration for Steam
# ─────────────────────────────────────────────────────────────
../../nixos/steam.nix
# You should let those lines as is
./hardware-configuration.nix
./variables.nix
];
# You should let those lines as is
./hardware-configuration.nix
./variables.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 = "<output>" and switch implicitPolicyTarget to "block".
# services.usbguard.implicitPolicyTarget = lib.mkForce "allow";
];
services.usbguard.rules = ''
allow id 1d6b:0002 serial "0000:05:00.3" name "xHCI Host Controller" hash "4a4NgfdUaJO43rkCzmWRSeHHR/uUh5+SNsXnhosm9qs=" parent-hash "ldMchY4Tt4GPUYo30eNGvai+Fs/EdnVY3vMyxJUq4Nk=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:05:00.3" name "xHCI Host Controller" hash "d+DNGWARDtv9nEK2ZvnNOCtFernuMu5/e/oZ7kCppqQ=" parent-hash "ldMchY4Tt4GPUYo30eNGvai+Fs/EdnVY3vMyxJUq4Nk=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0002 serial "0000:05:00.4" name "xHCI Host Controller" hash "icotY3rI59mWiKsGxc59BGZZeBjfbuH0b4NUByj3cbQ=" parent-hash "tHvBfznK5rpQn+oa0PEEjHa29EAEvGyCcZixsfwA6W0=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:05:00.4" name "xHCI Host Controller" hash "UbEoCZW8HT2ldc3qDeiK+IiQlGeaBC7F63681OwmKhI=" parent-hash "tHvBfznK5rpQn+oa0PEEjHa29EAEvGyCcZixsfwA6W0=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0002 serial "0000:07:00.3" name "xHCI Host Controller" hash "pz29Oo0RhQ+5+7LgOZR4v3OlcsVv3m9kCgGsGUnoUjI=" parent-hash "DRyV2/31MYHdzkIEfbPQeb/1w4/PjOW6GqWrXkftf2I=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:07:00.3" name "xHCI Host Controller" hash "O6iOpcl9StImWT62SrbeXacqbG6N/mTIipTRc0ipCGM=" parent-hash "DRyV2/31MYHdzkIEfbPQeb/1w4/PjOW6GqWrXkftf2I=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0002 serial "0000:07:00.4" name "xHCI Host Controller" hash "Hp8B0Enf+ACRT2tyy0EqXj7eNsFDAnTRZadzuh/Iqd4=" parent-hash "l2vhvC+VGVKlkBUUK/usFu8jHJ/5bWOnJG6WzRexpt4=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:07:00.4" name "xHCI Host Controller" hash "rJ3LKdvkCK3SUrCU3lV8qVbmPjA+r9Fe5106x2HlgK4=" parent-hash "l2vhvC+VGVKlkBUUK/usFu8jHJ/5bWOnJG6WzRexpt4=" with-interface 09:00:00 with-connect-type ""
allow id 0bda:c85c serial "00e04c000001" name "Bluetooth Radio" hash "Q/wlToV8WQgEYHBW/UIhnSwCCusCGqAR2D5gspSCImQ=" parent-hash "4a4NgfdUaJO43rkCzmWRSeHHR/uUh5+SNsXnhosm9qs=" with-interface { e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 } with-connect-type "hardwired"
allow id 30c9:009f serial "01.00.00" name "HP True Vision FHD Camera" hash "eYW5fqReJd29tfHXkEktKC63dGfDpmlRMo5uMGUWwME=" parent-hash "icotY3rI59mWiKsGxc59BGZZeBjfbuH0b4NUByj3cbQ=" with-interface { 0e:01:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 0e:02:01 fe:01:01 } with-connect-type "hardwired"
allow id 03f0:036b serial "" name "HP USB-C Dock G5" hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" parent-hash "Hp8B0Enf+ACRT2tyy0EqXj7eNsFDAnTRZadzuh/Iqd4=" via-port "7-1" with-interface { 09:00:01 09:00:02 } with-connect-type "hotplug"
allow id 03f0:066b serial "" name "HP USB-C Dock G5" hash "JHDjLFApQNqijjmuKdJSWH5+1oLL7S6LQ9QHTAk5fTk=" parent-hash "rJ3LKdvkCK3SUrCU3lV8qVbmPjA+r9Fe5106x2HlgK4=" via-port "8-1" with-interface 09:00:00 with-connect-type "hotplug"
allow id 03f0:056b serial "201604140001" name "USB Audio" hash "OxQ8HQenW3/4HSGEBOSYFS15rXDTOaNDnjMbICweHgw=" parent-hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" with-interface { 01:01:00 01:02:00 01:02:00 01:02:00 01:02:00 03:00:00 } with-connect-type "unknown"
allow id 03f0:086b serial "" name "USB2734" hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" parent-hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" via-port "7-1.3" with-interface { 09:00:01 09:00:02 } with-connect-type "unknown"
allow id 03f0:046b serial "11AD1D0A89EA2D08310E0B00" name "HP USB-C Dock G5" hash "DEGeuj1u4lwqrzp0UksFX7mSEY9JnGLxg7yxGbglAKE=" parent-hash "iPFGrgGz0sWgKQjWD/F8eNOhkeR728dTG8JJtkUSvuM=" with-interface { 11:00:00 ff:03:00 03:00:00 } with-connect-type "unknown"
allow id 03f0:076b serial "" name "USB5734" hash "BshoqybYo0IKgoDORYPRtbhhlmQrYAxPQb2EAm1JsWA=" parent-hash "JHDjLFApQNqijjmuKdJSWH5+1oLL7S6LQ9QHTAk5fTk=" via-port "8-1.3" with-interface 09:00:00 with-connect-type "unknown"
allow id 0bda:8153 serial "000001000000" name "USB 10/100/1000 LAN" hash "utEnXKJ57kRUbPcGUaNWhEyoOEbLOYAFxvlsyC0PZkk=" parent-hash "JHDjLFApQNqijjmuKdJSWH5+1oLL7S6LQ9QHTAk5fTk=" with-interface { ff:ff:00 02:06:00 0a:00:00 0a:00:00 } with-connect-type "unknown"
allow id 046d:0ab7 serial "2046BAB04T68" name "Blue Microphones" hash "cC6AQ2e1Q/BeFeostpbf1mH2WpoUmt6bhau4NlA3niU=" parent-hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" with-interface { 01:01:00 01:02:00 01:02:00 01:02:00 01:02:00 01:02:00 01:02:00 03:00:00 } with-connect-type "unknown"
allow id 1532:02a1 serial "" name "Razer Ornata V3" hash "wfuIjBhhGuge8gflyA526SKqKoy8rHJZQZ+2o6usMiE=" parent-hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" via-port "7-1.3.3" with-interface { 03:01:01 03:00:01 03:00:02 } with-connect-type "unknown"
allow id 13fd:5900 serial "50026B76861EE752 " name "External" hash "l/QvVV5hzZj1z6OUwB/kWl+WnH/7awrdMBoiNVx660M=" parent-hash "MSXcPAlZqkpTyZQylOhSIB8eMfST2AzVHV9EbrBGTWc=" with-interface { 08:06:50 08:06:62 } with-connect-type "unknown"
'';
home-manager.users."${config.var.username}" = import ./home.nix;
# Don't touch this
system.stateVersion = "24.05";
programs.nix-ld.enable = true; #Dynamic Linking
home-manager.users."${config.var.username}" = import ./home.nix;
services.flatpak.enable = true;
# Don't touch this
system.stateVersion = "24.05";
}
+38 -5
View File
@@ -3,18 +3,51 @@
nixpkgs,
...
}:
nixpkgs.lib.nixosSystem {
modules = [
{
nixpkgs.overlays = [
];
_module.args = {inherit inputs;};
nixpkgs.overlays = [];
_module.args = {
inherit inputs;
};
}
inputs.nixos-hardware.nixosModules.omen-16-n0005ne
({ config, pkgs, lib, ... }: {
# ─────────────────────────────────────────────────────────────
# Intel Microcode
# ─────────────────────────────────────────────────────────────
hardware.cpu.intel.updateMicrocode = true;
# ─────────────────────────────────────────────────────────────
# Hardware accelaration
# ─────────────────────────────────────────────────────────────
hardware.graphics = {
enable = true;
enable32Bit = true;
};
# ─────────────────────────────────────────────────────────────
# Power management
# ─────────────────────────────────────────────────────────────
powerManagement.cpuFreqGovernor = "powersave";
services.tlp.enable = true;
services.power-profiles-daemon.enable = false;
# ─────────────────────────────────────────────────────────────
# Kernel modules commonly needed on ThinkPads
# ─────────────────────────────────────────────────────────────
boot.kernelModules = [
"i915"
"snd_hda_intel"
"iwlwifi"
];
})
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
inputs.nix-index-database.nixosModules.default
inputs.helium-browser.nixosModules.default
./configuration.nix
];
}
+24 -41
View File
@@ -1,52 +1,35 @@
# 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, ... }:
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"uas"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/6320d3c6-0231-45ec-817a-c6f0e39aab73";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/5251-9B85";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
# Root filesystem configuration - REQUIRED for NixOS installation
fileSystems."/" = {
device = "/dev/disk/by-uuid/dabf7455-d7e7-4764-8cb2-c7bb912e763f";
fsType = "btrfs";
};
swapDevices = [];
# Boot partition configuration - REQUIRED for EFI systems
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/F6E8-6DF5";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
# 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.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.enp7s0f4u1u4.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
swapDevices =
[ { device = "/dev/disk/by-uuid/d9df86d6-3e7b-42f5-b8f4-bae56b7adcb3"; }
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+22 -12
View File
@@ -1,47 +1,58 @@
{config, ...}: {
imports = [
# ─────────────────────────────────────────────────────────────
# Programs
../../home/programs/helium
../../home/programs/proton
../../home/programs/proton/auto-start-vpn.nix
# ─────────────────────────────────────────────────────────────
../../home/programs/ghostty
../../home/programs/nvf
../../home/programs/shell
../../home/programs/git
../../home/programs/git/lazygit.nix
../../home/programs/git/signing.nix # CHANGEME: Change the key or remove this file
../../home/programs/thunar
../../home/programs/nixy
../../home/programs/nightshift
../../home/programs/nix-utils
../../home/programs/spotatui
../../home/programs/yazi
../../home/programs/zen
# ─────────────────────────────────────────────────────────────
# Gaming
# ─────────────────────────────────────────────────────────────
../../home/programs/steam
# ─────────────────────────────────────────────────────────────
# Groups
# ─────────────────────────────────────────────────────────────
../../home/programs/group/basic-apps.nix
../../home/programs/group/cybersecurity.nix
../../home/programs/group/dev.nix
../../home/programs/group/misc.nix
../../home/programs/group/gaming-apps.nix
# System (Desktop environment like stuff)
# ─────────────────────────────────────────────────────────────
# System
# ─────────────────────────────────────────────────────────────
../../home/system/hyprland
../../home/system/caelestia-shell
../../home/system/waybar
../../home/system/walker
../../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
#./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.png;
source = ./profile_picture.jpg;
};
sessionVariables = {
AQ_DRM_DEVICES = "/dev/dri/card2:/dev/dri/card1"; # CHANGEME: Related to the GPU
# Graphics devices for Intel Iris Xe Graphics
# AQ_DRM_DEVICES = "/dev/dri/card0"; # Single GPU configuration
};
# Don't touch this
@@ -49,8 +60,7 @@
};
wayland.windowManager.hyprland.settings.monitor = [
"eDP-2,highres,0x0,1" # My internal laptop screen
"desc:AOC U34G2G1 0x00000E06,3440x1440@99.98,auto,1" # My external monitor
"eDP-1,1920x1080,0x0,1.5" # My internal laptop screen
];
programs = {
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

-61
View File
@@ -1,61 +0,0 @@
# 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";
};
github-key = {
path = "${home}/.ssh/github";
};
jack-key = {
path = "${home}/.ssh/jack";
};
signing-key = {
path = "${home}/.ssh/key";
};
signing-pub-key = {
path = "${home}/.ssh/key.pub";
};
};
};
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"];
}
-20
View File
@@ -1,20 +0,0 @@
ssh-config: ENC[AES256_GCM,data:/TWslzoF2wtZ9T41H1y0wLNEx+Xzff8pQGr6AfEcACExRCv4rd5hD9pNAlmlcTtISJJBPEWY45WsLfSKuD4r3715IENM2biQUvlq47THfkGviQuQ6KAXiJxBQ/7qRNqGGt7WFRlWFRGYCiyjw9h4pOhovGgw8TU6tIgIsXjo0psclHoJoE4B3cSOby7DbN8jVI9NjpBGiQMXmUB3JVz7muC9F5EAs+XZUIl7TjQMxob3PiF5LqTJITODSxboAAk901rjS5gjQKpQKfj28TpUs5yCIo9RzSBO3z5orJy+ylupocRuqtC8ujAMqNb828G+0nRx18tpiGqXxRWUBZRNbM+vQHWzb5JWQpEBsu1twsOownVVrkyPkbLpYX4YSSnRdnL8VHmlZfLk1ZFURbsdDSRf57F+Bxo5Yn8XAkFaM5HYgUo4VBabGzVVAHOBWJWi3lRrlAqYdMBbSvDl1t6eQ0xp990RGh7wZvwnaTDqtkOJnLoAknTFi4yjMzSyk5UV,iv:1UJQU4eBZE1BMVnJY2CQTDH8jXSMlrv3gGU3cKTOvdU=,tag:OzLQRkTAKG2KQXv+Vh7Msw==,type:str]
github-key: ENC[AES256_GCM,data:xUgFMlBo8e+3eXqNscxbby1dWug3SgUagDiNUe/IGVbU6cczkaJ3uOaB0OuRBQ8AYhOLkzXj0pIKjUrElHwmYrhURtS1aF4SFEGJsjhhobNA//j3E2/5/nLVjfco+lRzyHdwmsNhEUCqEhsXrrodJMb39H4b5oip3z0rjc729YveiWUKQxXVZVPurp3nq9yNnix9R4CA6XYFRW6T6MNqgPD5qhbcDlhxLb/SN+uI5h+5eZIS24VDWlKaTaCLL5KLhZmfuA37SquOQ+edi9Yg8MnfrZkMrp/3qmAjP2rSQLMOc4QdQCLQBQSf0/snpydgLwY+FoJmMSztwtkqUdIZWOfDUJbJxegEOrAR68jLTNbp+GYiDn3thtOZDiK5p/M1amjCT+A9qeFMed5WS+aZHNTRbR9UcfiP6+48MGZFt1mr7q+/CoL04/DTp0w6tUf6/SZD31NvTJDqngkhpc0ZH9Dh5+2JcnBWpq25AM36kZTn1hIQCLNTr/oGWZXSLA2tksAhQCaUcFj4IIh6Bl96,iv:GEJsAs5NriwENYTV/VShgJF6iMmrtTwNiXOvfXyEP8E=,tag:nfZgsFqaet075GjQAoVZxQ==,type:str]
jack-key: ENC[AES256_GCM,data:VfCl3wH0MMBc8QDyjLDFeSvzSEsf7uGpfJvRjFrmjW+bPRUXBpZhJV8a9VQIAz7z7zZXvzARMfCeI0ydyC57CW81GH5/H5pneJ4b+xreINjVfdLbL1nC1thelo/O64jda/L+xVKhgE+QQi8/zt4JmXGghkP+74nYcTTaMpmcbgWw354J1ybXqyCEY+88nsJ1d2s+M7M2bplx4fGb7sLUs6sqdsad3sENzhH/0HQCFXreHTtgsLbIs8ccmdRgFNKM8/wD0OoW76rOQsJoA9JY4yOTQNVoX5M8+Olj6+wVlt6QBrWrYRuEztGnHrHvzxiHXtmEkMwVNfoPpEflQyRYRa0rVp/66REOkMckGx6/LbxKFgrxnifRlsK3kWd28v2bRGVQOghUluYUtVkaJ+eh6o6ik0NQKx8/H6BznBSDE6MjDwbLv434LHBfDtAqhWN1eMbOlunFivsl5Hb/6rl9kydHlcCS6FY8cUHoKQ90gDaUuDrvUifwmdO5hU0GH5tgvGi1ReK9ndcpQsrHptG6,iv:oC1xU5Tu3The105VYRmxIw4kEwDoqe8T/EH6mmqpqwQ=,tag:Pu8c536u6W7ALrqjRsvXDw==,type:str]
signing-key: ENC[AES256_GCM,data:NvLqmt7NzrWkbQQqFfosmSMvEv8C8+MDDpxSoDo3zZ3MR6WXr9B+6CnUc6rtevM230wgE17VC9XlmcQxX+PjJsWq6gZteK5THTIcrR5zPJVNlVCEyeLKoFj/6m7qBgyyoN3OjCNjgMkhsm009jwBgNk0qJMAYebOGo8eoP/al+4ytm7dhna+iX5WZabAg0J4z4JMDQonqQl3SaDnCEdHvk9m7ZEP2vUFscPkbLj4ewgFq+bUCHOOQb2uqRJoEgcR/NetRFcQfzcU6lp7JxobaICaO3zdmomUm7oabIUTrc3Kom3Wjw8ryqfqC1/SC0SHr5XGk2ygk0WnlQ4kNshqriL2dwbWAzy1Z/cTX9+aB/KNtC0U6zWG1bpnL3dgSgvhRiocIis/eNg1HWsLWVicmdebL/lXHztxFMdTuX/gWgQBotggTmx+OFGZfP9ZGlF3635mDxM/fEOCtTyA195dMicCUsjEpBegNtXsp+oOtxyRI0jSW47MBcXFP09f5ywELTPyz4eOUHO8sQ6UfJ6X,iv:KNQUlMPaiR4x1Fw+HZe/EOmh/gfsrqlefpq23uflz/8=,tag:illu42HKunQXnijjsUIvnQ==,type:str]
signing-pub-key: ENC[AES256_GCM,data:XuokZmCsnaNQ0rvVa3k81T4vtxw//r63xp1yHDLaNAMwA2r2bh6addl9WoAmm76g1rweqZrAAIw1PXDb90ubPaBP1iEHSkGZpwUpy/tOTePRdHMW2WtVvidpHQ==,iv:auB/bA89cJK6DnQi1BK2uldXRPyJfo+r7nl5qOLefUk=,tag:/I3kB6El1yesBMGOjJ+oHA==,type:str]
sops:
age:
- recipient: age12yvtj49pfh3fqzqflscm0ek4yzrjhr6cqhn7x89gdxnlykq0xudq5c7334
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHVWN4YjZqczB3Q21WL1lz
ckROWkhRditHblVHVEpOS0E0aGVqdW14M0ZvCkNzRXlCOWFBWmQwTGpTYVdFRlpq
bFdOR2pSTEZpUVpvUHo2NklrQm5EU1kKLS0tIFZ5ZWhYcHg1Z0hTOTZIdHR1QUxv
cmVxVC8rVDlWMUdZaGw3bmdOaWZGS1EKYahBlc8XpB5UdKZQkvxbLcKQ/xkFJjWo
FSfQWnjhe/a7BJtJEcKZkjOQU0mYqlSu+uT2RA9diCQeRUJPRF+nAw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-04-25T11:23:30Z"
mac: ENC[AES256_GCM,data:ZnLSwtyhaiMIcXxzlwhtk0dWVnOkn0avfeRezPPNBUXd0oyJY+krBsLXJdSNPHV/X/L58476okYjUzfIQzEAkrL9Fb7v/Jt0aw4SDrxbF+qbcfdvsWPUjFDJIPovuf3ee3o7iXGU2ItGTaJa2eFACoyd37KVc7jZd6gvYYAyULA=,iv:7IKqe0c5CTgJrS7OgCQWhtxaCVKo+UWEibttFUVCWGM=,tag:OfCrKPzrPBZThCR1j7IB7A==,type:str]
unencrypted_suffix: _unencrypted
version: 3.12.2
+7 -7
View File
@@ -9,19 +9,19 @@
];
config.var = {
hostname = "h-laptop";
username = "hadi";
hostname = "thinkpad";
username = "andi";
configDirectory = "/home/" + config.var.username + "/.config/nixos"; # The path of the nixos configuration directory
keyboardLayout = "fr";
keyboardLayout = "de";
timeZone = "Europe/Paris";
timeZone = "Europe/Berlin";
defaultLocale = "en_US.UTF-8";
extraLocale = "fr_FR.UTF-8";
extraLocale = "de_DE.UTF-8";
git = {
username = "Hadi";
email = "112569860+anotherhadi@users.noreply.github.com";
username = "kptltd00m";
email = "kptltd00m@doomlabs.de";
};
autoUpgrade = false;
+3 -2
View File
@@ -22,13 +22,14 @@
# System (Desktop environment like stuff)
../../home/system/hyprland
../../home/system/caelestia-shell
../../home/system/waybar
../../home/system/walker
../../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
#./secrets # CHANGEME: You should probably remove this line, this is where I store my secrets
];
home = {
+8 -3
View File
@@ -22,9 +22,12 @@ in {
];
}
];
nixpkgs.config = {
allowUnfree = true;
allowBroken = false;
nixpkgs = {
config = {
allowUnfree = true;
allowBroken = false;
};
overlays = [inputs.nur.overlays.default];
};
nix = {
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
@@ -44,11 +47,13 @@ in {
"https://cache.nixos.org?priority=10"
"https://hyprland.cachix.org"
"https://nix-citizen.cachix.org"
"https://nix-community.cachix.org"
"https://numtide.cachix.org"
];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-citizen.cachix.org-1:lPMkWc2X8XD4/7YPEEwXKKBg+SVbYTVrAaLA2wQTKCo="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE="
];
-64
View File
@@ -1,64 +0,0 @@
# Omen laptop configuration for NixOS
# Import this only if you have an HP Omen laptop
{
config,
pkgs,
...
}: let
hp-omen-linux-module = pkgs.callPackage (
{
kernel ? config.boot.kernelPackages.kernel,
stdenv,
fetchFromGitHub,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "hp-omen-linux-module";
version = "rebase-6.14";
src = fetchFromGitHub {
owner = "ranisalt";
repo = "hp-omen-linux-module";
rev = finalAttrs.version;
sha256 = "sha256-2zCm29bdboSjRm/caMjBPGNc0tZXPUnIIYlHxxfhAok=";
};
setSourceRoot = ''
export sourceRoot=$(pwd)/${finalAttrs.src.name}/src
'';
nativeBuildInputs = kernel.moduleBuildDependencies;
makeFlags = [
"KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];
installPhase = ''
runHook preInstall
install hp-wmi.ko -Dm444 -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/platform/x86/hp/
runHook postInstall
'';
})
) {kernel = config.boot.kernelPackages.kernel;};
in {
boot.extraModulePackages = [hp-omen-linux-module];
boot.kernelModules = ["hp-wmi"];
boot.kernelParams = ["hp_wmi.force_slow_fan_control=1"];
users.groups.omen-rgb = {};
users.users.${config.var.username}.extraGroups = ["omen-rgb"];
systemd.tmpfiles.rules = [
"w /sys/devices/platform/hp-wmi/rgb_zones/zone00 0660 root omen-rgb -"
"w /sys/devices/platform/hp-wmi/rgb_zones/zone01 0660 root omen-rgb -"
"w /sys/devices/platform/hp-wmi/rgb_zones/zone02 0660 root omen-rgb -"
"w /sys/devices/platform/hp-wmi/rgb_zones/zone03 0660 root omen-rgb -"
];
services.udev.extraRules = ''
SUBSYSTEM=="platform", KERNEL=="hp-wmi", ACTION=="add", \
RUN+="${pkgs.coreutils-full}/bin/sleep 2", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone00", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone00", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone01", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone01", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone02", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone02", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone03", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone03"
'';
}
+13
View File
@@ -0,0 +1,13 @@
{ ... }: {
programs.steam = {
enable = true;
gamescopeSession.enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
};
hardware.graphics = {
enable = true;
enable32Bit = true;
};
}
+1 -1
View File
@@ -1,6 +1,6 @@
{config, ...}: {
services.usbguard = {
enable = true;
enable = false;
implicitPolicyTarget = "block";
IPCAllowedUsers = [
"root"
+2
View File
@@ -16,6 +16,8 @@ in {
extraGroups = [
"networkmanager"
"wheel"
"video"
"render"
];
};
};
+1 -1
View File
@@ -83,7 +83,7 @@ in {
};
gvfs.enable = true;
upower.enable = true;
power-profiles-daemon.enable = true;
power-profiles-daemon.enable = false;
udisks2.enable = true;
};
+2 -2
View File
@@ -75,8 +75,8 @@
polarity = "dark";
image = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/black-moutains-and-a-city.png";
sha256 = "sha256-RTTA3Lf+hnPpo9hwS075kbnIouz12ul2GKO3EIgP6AU=";
url = "https://upload.wikimedia.org/wikipedia/commons/1/12/Peter_Paul_Rubens_-_Fall_of_the_damned.jpg";
sha256 = "sha256-m8ii0Vo8FrUJRPrWfFvF3ojTSshGTVbIU1V8ptis4aQ=";
};
};
}