Compare commits
38 Commits
5082521524
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c6a0a5196a | |||
| 41e2814bc0 | |||
| c00b1353d1 | |||
| 1234d20495 | |||
| b8be0e0c27 | |||
| 59e6f4015a | |||
| ffe610e64f | |||
| 1c6d700768 | |||
| 8a4c1e7f1d | |||
| 93bf7545cc | |||
| d3e18dfc53 | |||
| b173c4d44f | |||
| 5e25ed4d5e | |||
| e540227a19 | |||
| 7321b840b7 | |||
| 7a7917b361 | |||
| bcfe305813 | |||
| 51d333d289 | |||
| 1bb36771dd | |||
| beda752703 | |||
| 849b0f0cfd | |||
| c2e5500051 | |||
| 1b44016dab | |||
| a95d1fbd35 | |||
| 638fcdd416 | |||
| 9ed809c27d | |||
| c9475a7246 | |||
| 40ccfd34ab | |||
| 5b6e5a537c | |||
| 0ab18663e6 | |||
| 4e28ca9b48 | |||
| d22689f3b6 | |||
| 633b2aadd0 | |||
| 0205b8fe89 | |||
| c91bb0df4b | |||
| a3359274b6 | |||
| 7ea20554a6 | |||
| a45e7a2c9b |
@@ -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
|
||||
@@ -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
|
||||
@@ -1,3 +1,5 @@
|
||||
.sops.yaml
|
||||
.claude/
|
||||
old/
|
||||
result/
|
||||
result
|
||||
|
||||
+16
-16
@@ -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
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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>ff → Find files
|
||||
<leader>fg → Live grep
|
||||
<leader>fe → Document symbols
|
||||
<leader>bb → Buffer 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
@@ -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 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
@@ -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
|
||||
|
||||

|
||||

|
||||

|
||||
# 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
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
Generated
+258
-183
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
@@ -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
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
])
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
]);
|
||||
}
|
||||
@@ -5,12 +5,9 @@
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs-stable; [
|
||||
tty-solitaire
|
||||
bastet
|
||||
peaclock
|
||||
cbonsai
|
||||
pipes
|
||||
cmatrix
|
||||
fastfetch
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.packages = (with pkgs; [
|
||||
ardour # DAW
|
||||
guitarix # Digital AMP
|
||||
carla # Hosting of VSTs
|
||||
hydrogen# Drums
|
||||
]);
|
||||
}
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 you’re 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 doesn’t 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.
|
||||
@@ -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}
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
...
|
||||
}: {
|
||||
home.sessionVariables = {
|
||||
# Better Steam scaling on HiDPI displays
|
||||
STEAM_FORCE_DESKTOPUI_SCALING = "1.25";
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
'';
|
||||
}
|
||||
@@ -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"
|
||||
];
|
||||
}
|
||||
@@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
Executable
+50
@@ -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;
|
||||
}
|
||||
@@ -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 |
@@ -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 = {};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 |
@@ -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"];
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
@@ -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
@@ -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="
|
||||
];
|
||||
|
||||
@@ -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"
|
||||
'';
|
||||
}
|
||||
@@ -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
@@ -1,6 +1,6 @@
|
||||
{config, ...}: {
|
||||
services.usbguard = {
|
||||
enable = true;
|
||||
enable = false;
|
||||
implicitPolicyTarget = "block";
|
||||
IPCAllowedUsers = [
|
||||
"root"
|
||||
|
||||
@@ -16,6 +16,8 @@ in {
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"video"
|
||||
"render"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
+1
-1
@@ -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
@@ -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=";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user