v4.0.0
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
16
.github/assets/README_template.md
vendored
@@ -30,8 +30,7 @@ _secrets_, and _custom theming_ all in one place.
|
||||
|
||||
**Features:**
|
||||
|
||||
- 💻 Hyprland-centric: Preconfigured Hyprland ecosystem (Hyprlock, Hyprpanel,
|
||||
etc.)
|
||||
- 💻 Hyprland & Caelestia: Preconfigured Hyprland ecosystem with Caelestia-shell (Ty to both projects!)
|
||||
- 🎨 Consistent Theming: Base16 & Stylix-powered themes
|
||||
- ⌨️ Vim-like Everywhere: Unified keybindings (Hyprland, nvim, vimium, etc.)
|
||||
|
||||
@@ -39,12 +38,11 @@ _secrets_, and _custom theming_ all in one place.
|
||||
|
||||
{md_table_of_content}
|
||||
|
||||
## Gallery
|
||||
## Screenshots
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## Architecture
|
||||
|
||||
@@ -55,7 +53,6 @@ Contains **dotfiles and settings** that apply to your user environment.
|
||||
**Subfolders:**
|
||||
|
||||
- `programs` is a collection of apps configured with home-manager
|
||||
- `scripts` is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md))
|
||||
- `system` is some "desktop environment" configuration
|
||||
|
||||
### 🐧 /nixos
|
||||
@@ -120,9 +117,6 @@ sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
|
||||
|
||||
- [SERVER](docs/SERVER.md): Check out the server documentation
|
||||
- [THEMES](docs/THEMES.md): How themes work and how to create your own
|
||||
- [SCRIPTS](docs/SCRIPTS.md): A list of available scripts and their usage
|
||||
- [KEYBINDINGS-HYPRLAND](docs/KEYBINDINGS-HYPRLAND.md): Keybindings available in
|
||||
Hyprland
|
||||
- [WALLPAPERS](https://github.com/anotherhadi/awesome-wallpapers): An awesome
|
||||
collection of wallpapers
|
||||
|
||||
|
||||
BIN
.github/assets/large.png
vendored
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 412 KiB |
BIN
.github/assets/logo.png
vendored
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 12 KiB |
BIN
.github/assets/nixy/1.png
vendored
|
Before Width: | Height: | Size: 643 KiB |
BIN
.github/assets/nixy/2.png
vendored
|
Before Width: | Height: | Size: 301 KiB |
BIN
.github/assets/nixy/3.png
vendored
|
Before Width: | Height: | Size: 404 KiB |
BIN
.github/assets/nixy/4.png
vendored
|
Before Width: | Height: | Size: 1001 KiB |
BIN
.github/assets/rose-pine/browser-and-notifications.png
vendored
Normal file
|
After Width: | Height: | Size: 837 KiB |
BIN
.github/assets/rose-pine/flake-spotify.png
vendored
Normal file
|
After Width: | Height: | Size: 738 KiB |
BIN
.github/assets/rose-pine/home.png
vendored
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
2
.github/scripts/create_readme.sh
vendored
@@ -10,7 +10,7 @@ table_of_content=$(markdown-table-of-contents --start-by 2 ./.github/assets/READ
|
||||
readme_content=$(cat "./.github/assets/README_template.md")
|
||||
|
||||
# Replace variables
|
||||
readme_content=${readme_content//\{primarycolor\}/A594FD}
|
||||
readme_content=${readme_content//\{primarycolor\}/A89AD1}
|
||||
readme_content=${readme_content//\{backgroundcolor\}/0b0b0b}
|
||||
readme_content=${readme_content//\{md_table_of_content\}/$table_of_content}
|
||||
|
||||
|
||||
26
.github/scripts/create_scripts_docs.sh
vendored
@@ -1,26 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
|
||||
|
||||
DOCS_FILE="./docs/SCRIPTS.md"
|
||||
SCRIPTS_FOLDER="./home/scripts"
|
||||
|
||||
# search for every directory in the scripts folder:
|
||||
# The docs for each scripts are in the beginning of the file prefixed by "#-" or "# -" for the title
|
||||
# Inside the folders, the scripts are stored in default.nix files
|
||||
echo "[//]: # (This file is autogenerated)" >"$DOCS_FILE"
|
||||
echo "# Scripts" >>"$DOCS_FILE"
|
||||
echo "" >>"$DOCS_FILE"
|
||||
echo "Scripts are located in the 'home/scripts' folder. Home-manager add those in the user's path." >>"$DOCS_FILE"
|
||||
echo "" >>"$DOCS_FILE"
|
||||
|
||||
for folder in "$SCRIPTS_FOLDER"/*; do
|
||||
script="$folder/default.nix"
|
||||
[[ -f "$script" ]] || continue
|
||||
|
||||
content=$(cat "$script")
|
||||
content=$(echo "$content" | grep -E "^#-|^# -" | sed 's/^#- //;s/^# - //;s/#-//')
|
||||
|
||||
echo "$content" >>"$DOCS_FILE"
|
||||
echo "" >>"$DOCS_FILE"
|
||||
done
|
||||
60
.github/scripts/keybindings_to_markdown.sh
vendored
@@ -1,60 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# A script to parse the Hyprland configuration to store keybindings in a table
|
||||
|
||||
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
|
||||
|
||||
KEYBINDINGS_FILE="./docs/KEYBINDINGS-HYPRLAND.md"
|
||||
|
||||
function getList() {
|
||||
content=$1
|
||||
name=$2
|
||||
list_start=$(echo "$content" | sed "/$name = \[/!d;=;Q")
|
||||
list=$(echo "$content" | tail +"$list_start")
|
||||
list_end=$(echo "$list" | sed '/\]/!d;=;Q')
|
||||
list=$(echo "$list" | head -n"$list_end")
|
||||
|
||||
echo "$list"
|
||||
}
|
||||
|
||||
[[ -f "./home/system/hyprland/bindings.nix" ]] || (echo "File ./home/system/hyprland/bindings.nix not found" && exit 1)
|
||||
|
||||
config=$(cat "./home/system/hyprland/bindings.nix")
|
||||
|
||||
# Bind
|
||||
bind=$(getList "$config" "bind")
|
||||
# Bindm (mouse)
|
||||
bindm=$(getList "$config" "bindm")
|
||||
# Bindl (lock)
|
||||
bindl=$(getList "$config" "bindl")
|
||||
# Bindle (lock, repetition)
|
||||
bindle=$(getList "$config" "bindle")
|
||||
|
||||
# Join the lists:
|
||||
keybindings=$(echo -e "$bind\n$bindm\n$bindl\n$bindle" | grep '"')
|
||||
|
||||
echo "[//]: # (This file is autogenerated)" >"$KEYBINDINGS_FILE"
|
||||
echo "# Keybindings for Hyprland" >>"$KEYBINDINGS_FILE"
|
||||
echo "" >>"$KEYBINDINGS_FILE"
|
||||
echo "> [!NOTE]" >>"$KEYBINDINGS_FILE"
|
||||
echo "> SUPER is the windows key by default" >>"$KEYBINDINGS_FILE"
|
||||
echo "" >>"$KEYBINDINGS_FILE"
|
||||
|
||||
echo "| Description | Keybinding |" >>"$KEYBINDINGS_FILE"
|
||||
echo "| -- | -- |" >>"$KEYBINDINGS_FILE"
|
||||
echo "| Switch Workspace | SUPER + {Number} |" >>"$KEYBINDINGS_FILE"
|
||||
echo "| Move app to Workspace | SHIFT + SUPER + {Number} |" >>"$KEYBINDINGS_FILE"
|
||||
echo "$keybindings" | while read -r line; do
|
||||
comment=$(echo "$line" | cut -d\# -f2)
|
||||
line=$(echo "$line" | cut -d\# -f1)
|
||||
line=${line:1:${#line}-3}
|
||||
mod=$(echo "$line" | cut -d, -f1)
|
||||
key=$(echo "$line" | cut -d, -f2)
|
||||
# dispatcher=$(echo "$line" | cut -d, -f3)
|
||||
# params=$(echo "$line" | cut -d, -f4)
|
||||
|
||||
[[ $mod == '$mod' ]] && mod="SUPER + "
|
||||
[[ $mod == '$shiftMod' ]] && mod="SHIFT + SUPER + "
|
||||
|
||||
echo "| ${comment:1} | $mod$key |" >>"$KEYBINDINGS_FILE"
|
||||
done
|
||||
@@ -1,24 +0,0 @@
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'home/system/hyprland/bindings.nix'
|
||||
permissions:
|
||||
contents: write
|
||||
jobs:
|
||||
update-readme:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./
|
||||
steps:
|
||||
- name: Check out the repository to the runner
|
||||
uses: actions/checkout@v4
|
||||
- name: Run a script
|
||||
run: |
|
||||
chmod +x ./.github/scripts/keybindings_to_markdown.sh
|
||||
./.github/scripts/keybindings_to_markdown.sh
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
git add .
|
||||
git commit -m "Update KEYBINDINGS-HYPRLAND.md (auto)" && git push
|
||||
exit 0
|
||||
24
.github/workflows/update-scripts-docs.yml
vendored
@@ -1,24 +0,0 @@
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'home/scripts/**'
|
||||
permissions:
|
||||
contents: write
|
||||
jobs:
|
||||
update-readme:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./
|
||||
steps:
|
||||
- name: Check out the repository to the runner
|
||||
uses: actions/checkout@v4
|
||||
- name: Run a script
|
||||
run: |
|
||||
chmod +x ./.github/scripts/create_scripts_docs.sh
|
||||
./.github/scripts/create_scripts_docs.sh
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
git add .
|
||||
git commit -m "Update SCRIPTS.md (auto)" && git push
|
||||
exit 0
|
||||
@@ -1,46 +0,0 @@
|
||||
[//]: # (This file is autogenerated)
|
||||
# Keybindings for Hyprland
|
||||
|
||||
> [!NOTE]
|
||||
> SUPER is the windows key by default
|
||||
|
||||
| Description | Keybinding |
|
||||
| -- | -- |
|
||||
| Switch Workspace | SUPER + {Number} |
|
||||
| Move app to Workspace | SHIFT + SUPER + {Number} |
|
||||
| Proton VPN | SUPER + V |
|
||||
| Proton Authenticator | SUPER + A |
|
||||
| Lock | SUPER + L |
|
||||
| Launcher | SUPER + SPACE |
|
||||
| "$mod,SPACE, exec, menu" | |
|
||||
| Powermenu | SUPER + X |
|
||||
| Toggle HyprFocus | SHIFT + SUPER + SPACE |
|
||||
| Close window | SUPER + Q |
|
||||
| Toggle Floating | SUPER + T |
|
||||
| Toggle Fullscreen | SUPER + F |
|
||||
| Move focus left | SUPER + left |
|
||||
| Move focus Right | SUPER + right |
|
||||
| Move focus Up | SUPER + up |
|
||||
| Move focus Down | SUPER + down |
|
||||
| Focus previous monitor | SHIFT + SUPER + up |
|
||||
| Focus next monitor | SHIFT + SUPER + down |
|
||||
| Add to master | SHIFT + SUPER + left |
|
||||
| Remove from master | SHIFT + SUPER + right |
|
||||
| Screenshot region | SUPER + PRINT |
|
||||
| Screenshot monitor | PRINT |
|
||||
| Screenshot window | SHIFT + SUPER + PRINT |
|
||||
| Screenshot region then edit | ALTPRINT |
|
||||
| Toggle hyprpanel | SHIFT + SUPER + T |
|
||||
| Toggle night shift | SHIFT + SUPER + F2 |
|
||||
| Toggle night shift | SHIFT + SUPER + F3 |
|
||||
| Move Window (mouse) | SUPER + mouse:272 |
|
||||
| Resize Window (mouse) | SUPER + R |
|
||||
| Toggle Mute | XF86AudioMute |
|
||||
| Play/Pause Song | XF86AudioPlay |
|
||||
| Next Song | XF86AudioNext |
|
||||
| Previous Song | XF86AudioPrev |
|
||||
| Lock when closing Lid | switch:Lid Switch |
|
||||
| Sound Up | XF86AudioRaiseVolume |
|
||||
| Sound Down | XF86AudioLowerVolume |
|
||||
| Brightness Up | XF86MonBrightnessUp |
|
||||
| Brightness Down | XF86MonBrightnessDown |
|
||||
@@ -1,92 +0,0 @@
|
||||
[//]: # (This file is autogenerated)
|
||||
# Scripts
|
||||
|
||||
Scripts are located in the 'home/scripts' folder. Home-manager add those in the user's path.
|
||||
|
||||
## Brightness
|
||||
|
||||
This module provides a set of scripts to control the brightness of the screen.
|
||||
|
||||
- `brightness-up` increases the brightness by 5%.
|
||||
- `brightness-down` decreases the brightness by 5%.
|
||||
- `brightness-set [value]` sets the brightness to the given value.
|
||||
- `brightness-change [up|down] [value]` increases or decreases the brightness by the given value.
|
||||
|
||||
## Caffeine
|
||||
|
||||
Caffeine is a simple script that toggles hypridle (disable suspend & screenlock).
|
||||
|
||||
- `caffeine-status` - Check if hypridle is running. (0/1)
|
||||
- `caffeine-status-icon` - Check if hypridle is running. (icon)
|
||||
- `caffeine` - Toggle hypridle.
|
||||
|
||||
## Hyprfocus
|
||||
|
||||
A simple script to toggle focus on few windows in Hyprland.
|
||||
(disable gaps, border, shadow, opacity, etc.)
|
||||
|
||||
- `hyprfocus-on` - Enable hyprfocus.
|
||||
- `hyprfocus-off` - Disable hyprfocus.
|
||||
- `hyprfocus-toggle` - Toggle hyprfocus.
|
||||
|
||||
## Hyprpanel
|
||||
|
||||
Quick scripts to toggle, reload, hide & show hyprpanel.
|
||||
|
||||
- `hyprpanel-toggle` - Toggle hyprpanel (hide/show).
|
||||
- `hyprpanel-show` - Show hyprpanel.
|
||||
- `hyprpanel-hide` - Hide hyprpanel.
|
||||
- `hyprpanel-reload` - Reload hyprpanel.
|
||||
|
||||
## Nerdfont FZF
|
||||
|
||||
This module provides a script to search for Nerd Fonts icons using fzf.
|
||||
|
||||
- `nerdfont-fzf` - Search for Nerd Fonts icons using fzf.
|
||||
|
||||
## Night-Shift
|
||||
|
||||
Night-Shift is a feature that reduces the amount of blue light emitted by your screen, which can help reduce eye strain and improve sleep quality. This module provides a set of scripts to control Night-Shift on your system.
|
||||
It use hyprsunset to control the screen temperature.
|
||||
|
||||
- `night-shift-on` activates Night-Shift.
|
||||
- `night-shift-off` deactivates Night-Shift.
|
||||
- `night-shift` toggles Night-Shift.
|
||||
- `night-shift-status` checks if Night-Shift is active. (0/1)
|
||||
- `night-shift-status-icon` checks if Night-Shift is active. (icon)
|
||||
|
||||
## Nixy
|
||||
|
||||
Nixy is a simple script that I use to manage my NixOS system. It's a simple script that provides a menu to rebuild, test, update, collect garbage, clean boot menu, etc.
|
||||
|
||||
- `nixy` - UI wizard to manage the system.
|
||||
- `nixy rebuild` - Rebuild the system.
|
||||
- `nixy ...` - ... see the script for more commands.
|
||||
|
||||
## Notif
|
||||
|
||||
|
||||
- `notif {id} {title} {description}` - Sends a notification
|
||||
|
||||
## Screenshot
|
||||
|
||||
This module provides a script to take screenshots using `grimblast` and `swappy`.
|
||||
|
||||
- `screenshot [region|window|monitor] [swappy]` - Take a screenshot of the region, window, or monitor. Optionally, use `swappy` to copy the screenshot to the clipboard.
|
||||
|
||||
## Sound
|
||||
|
||||
This module provides a set of scripts to control the volume of the default audio sink using `wpctl`.
|
||||
|
||||
- `sound-up` increases the volume by 5%.
|
||||
- `sound-down` decreases the volume by 5%.
|
||||
- `sound-set [value]` sets the volume to the given value.
|
||||
- `sound-toggle` toggles the mute state of the default audio sink.
|
||||
|
||||
## System
|
||||
|
||||
Usefull quick scripts
|
||||
|
||||
- `lock` - Lock the screen. (hyprlock)
|
||||
- `powermode-toggle` - Toggle between performance and balanced power mode. (powerprofilesctl)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# SERVER
|
||||
|
||||
> Update in comming. Early 2026
|
||||
|
||||
## Overview
|
||||
|
||||
This document describes the architecture and setup of the self-hosted **NixOS server**, which is securely accessible via **Tailscale**. The server is designed for private, secure, and easily manageable self-hosting of various services.
|
||||
@@ -20,8 +22,6 @@ The server hosts several key applications:
|
||||
### **Core Infrastructure**
|
||||
|
||||
- **NGINX**: Reverse proxy for routing traffic to services via `example.org`.
|
||||
- **Bitwarden**: A self-hosted password manager for secure credential storage.
|
||||
- **Nextcloud**: A private cloud solution for file synchronization and collaboration.
|
||||
|
||||
### **Networking & Security**
|
||||
|
||||
@@ -30,7 +30,6 @@ The server hosts several key applications:
|
||||
### **Monitoring & Storage**
|
||||
|
||||
- **Glance**: An awesome dashboard! (See the screenshot above)
|
||||
- **Hoarder**: A self-hostable bookmark-everything app (links, notes and images)
|
||||
|
||||
### **Media & Content Management**
|
||||
|
||||
@@ -52,11 +51,3 @@ The server hosts several key applications:
|
||||
4. **Access Control**
|
||||
- Only devices within the Tailscale network can reach the services.
|
||||
- Firewall rules restrict access further based on necessity.
|
||||
|
||||
## What's Next?
|
||||
|
||||
I want to self-host:
|
||||
|
||||
- **A great todolist app**: One that is compatible with markdown & IOS
|
||||
- **Cyberchef**
|
||||
- **Maybe**: An app to manage finances
|
||||
|
||||
@@ -3,19 +3,15 @@
|
||||
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.
|
||||
|
||||
> [!TIP]
|
||||
> To apply the theme to DuckDuckGo, follow the instructions in `$HOME/.duckduckgo-colorscheme.js`
|
||||
|
||||
## Create your theme
|
||||
|
||||
Create a copy of one of the existing themes and change the variables.
|
||||
Wallpapers are loaded from the [nixy-wallpapers](https://github.com/anotherhadi/nixy-wallpapers) repo.
|
||||
Wallpapers are loaded from the [hadi's awesome-wallpapers](https://github.com/anotherhadi/awesome-wallpapers) repo.
|
||||
|
||||
## Gallery
|
||||
|
||||
### Nixy
|
||||
### Rose-pine
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
751
flake.lock
generated
14
flake.nix
@@ -10,23 +10,29 @@
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||
hyprpanel.url = "github:Jas-SinghFSU/HyprPanel";
|
||||
stylix.url = "github:danth/stylix";
|
||||
apple-fonts.url = "github:Lyndeno/apple-fonts.nix";
|
||||
nixcord.url = "github:kaylorben/nixcord";
|
||||
sops-nix.url = "github:Mic92/sops-nix";
|
||||
nixarr.url = "github:rasmus-kirk/nixarr";
|
||||
nvf.url = "github:notashelf/nvf";
|
||||
vicinae.url = "github:vicinaehq/vicinae";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
caelestia-shell = {
|
||||
url = "github:caelestia-dots/shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
caelestia-cli = {
|
||||
url = "github:caelestia-dots/cli";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
spicetify-nix = {
|
||||
url = "github:Gerg-L/spicetify-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
# Server
|
||||
eleakxir.url = "github:anotherhadi/eleakxir";
|
||||
nixarr.url = "github:rasmus-kirk/nixarr";
|
||||
};
|
||||
|
||||
outputs = inputs @ {nixpkgs, ...}: {
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# Alacritty is a fast, cross-platform, OpenGL terminal emulator.
|
||||
{
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
window.padding = {
|
||||
x = 10;
|
||||
y = 10;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
# This file is used to sign git commits using an SSH key.
|
||||
{
|
||||
# Obviously, change this to your own SSH key.
|
||||
# CHANGEME: change this to your own SSH key.
|
||||
home.file.".ssh/allowed_signers".text = "* ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIINhWby7lUUXQNKbRu9/UOrGjWDf3fvoAwGHomWv/+lL";
|
||||
|
||||
programs.git.settings = {
|
||||
|
||||
15
home/programs/group/cybersecurity.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
wireshark
|
||||
nmap
|
||||
john
|
||||
hashcat
|
||||
inputs.eleakxir.packages.${stdenv.hostPlatform.system}.leak-utils
|
||||
caido
|
||||
nuclei
|
||||
];
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
# Kitty is a fast, featureful, GPU based terminal emulator
|
||||
{
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
keybindings = {
|
||||
"ctrl+shift+tab" = "new_tab_with_cwd";
|
||||
"ctrl+shift+enter" = "new_window_with_cwd";
|
||||
"ctrl+j" = ''kitten pass_keys.py bottom ctrl+j'';
|
||||
"ctrl+k" = ''kitten pass_keys.py top ctrl+k'';
|
||||
"ctrl+h" = ''kitten pass_keys.py left ctrl+h'';
|
||||
"ctrl+l" = ''kitten pass_keys.py right ctrl+l'';
|
||||
};
|
||||
settings = {
|
||||
scrollback_lines = 10000;
|
||||
initial_window_width = 1200;
|
||||
initial_window_height = 600;
|
||||
update_check_interval = 0;
|
||||
enable_audio_bell = false;
|
||||
confirm_os_window_close = "0";
|
||||
remember_window_size = "no";
|
||||
disable_ligatures = "never";
|
||||
url_style = "curly";
|
||||
copy_on_select = "clipboard";
|
||||
cursor_shape = "Underline";
|
||||
cursor_underline_thickness = 3;
|
||||
cursor_trail = 3;
|
||||
cursor_trail_decay = "0.1 0.4";
|
||||
window_padding_width = 10;
|
||||
open_url_with = "default";
|
||||
allow_remote_control = "yes";
|
||||
listen_on = "unix:/tmp/mykitty";
|
||||
};
|
||||
};
|
||||
|
||||
xdg.configFile = {
|
||||
"kitty/pass_keys.py".text = ''
|
||||
import re
|
||||
|
||||
from kittens.tui.handler import result_handler
|
||||
from kitty.key_encoding import KeyEvent, parse_shortcut
|
||||
|
||||
|
||||
def is_window_vim(window, vim_id):
|
||||
fp = window.child.foreground_processes
|
||||
return any(re.search(vim_id, p['cmdline'][0] if len(p['cmdline']) else "", re.I) for p in fp)
|
||||
|
||||
|
||||
def encode_key_mapping(window, key_mapping):
|
||||
mods, key = parse_shortcut(key_mapping)
|
||||
event = KeyEvent(
|
||||
mods=mods,
|
||||
key=key,
|
||||
shift=bool(mods & 1),
|
||||
alt=bool(mods & 2),
|
||||
ctrl=bool(mods & 4),
|
||||
super=bool(mods & 8),
|
||||
hyper=bool(mods & 16),
|
||||
meta=bool(mods & 32),
|
||||
).as_window_system_event()
|
||||
|
||||
return window.encoded_key(event)
|
||||
|
||||
|
||||
def main():
|
||||
pass
|
||||
|
||||
|
||||
@result_handler(no_ui=True)
|
||||
def handle_result(args, result, target_window_id, boss):
|
||||
direction = args[1]
|
||||
key_mapping = args[2]
|
||||
vim_id = args[3] if len(args) > 3 else "n?vim"
|
||||
|
||||
window = boss.window_id_map.get(target_window_id)
|
||||
|
||||
if window is None:
|
||||
return
|
||||
if is_window_vim(window, vim_id):
|
||||
for keymap in key_mapping.split(">"):
|
||||
encoded = encode_key_mapping(window, keymap)
|
||||
window.write_to_child(encoded)
|
||||
else:
|
||||
boss.active_tab.neighboring_window(direction)
|
||||
'';
|
||||
"kitty/neighboring_window.py".text = ''
|
||||
def main():
|
||||
pass
|
||||
|
||||
|
||||
def handle_result(args, result, target_window_id, boss):
|
||||
return boss.active_tab.current_layout.name
|
||||
|
||||
|
||||
handle_result.no_ui = True
|
||||
'';
|
||||
};
|
||||
}
|
||||
19
home/programs/nightshift/default.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{pkgs, ...}: let
|
||||
nightshift-toggle =
|
||||
pkgs.writeShellScriptBin "nightshift-toggle"
|
||||
# bash
|
||||
''
|
||||
if pidof "hyprsunset"; then
|
||||
pkill hyprsunset
|
||||
${pkgs.libnotify}/bin/notify-send "Night Shift Disabled" "Returning to full spectrum light. Filter disabled."
|
||||
else
|
||||
${pkgs.hyprsunset}/bin/hyprsunset -t 4500 &
|
||||
${pkgs.libnotify}/bin/notify-send "Night Shift Activated" "Welcome to the warm side. Blue light filtering is now active."
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
home.packages = with pkgs; [
|
||||
hyprsunset
|
||||
nightshift-toggle
|
||||
];
|
||||
}
|
||||
@@ -91,7 +91,7 @@
|
||||
go.enable = true;
|
||||
markdown = {
|
||||
enable = true;
|
||||
format.type = "prettierd";
|
||||
format.type = ["prettierd"];
|
||||
extensions = {
|
||||
markview-nvim = {
|
||||
enable = true;
|
||||
|
||||
19
home/programs/proton/default.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
protonvpn-gui
|
||||
proton-pass
|
||||
proton-authenticator
|
||||
];
|
||||
|
||||
# Fix Proton Authenticator desktop entry
|
||||
xdg.desktopEntries = {
|
||||
"Proton Authenticator" = {
|
||||
name = "Proton Authenticator";
|
||||
exec = "env WEBKIT_DISABLE_COMPOSITING_MODE=1 ${pkgs.proton-authenticator}/bin/proton-authenticator";
|
||||
icon = "proton-authenticator";
|
||||
type = "Application";
|
||||
categories = ["Utility"];
|
||||
terminal = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Tailscale is a VPN service that works on top of WireGuard.
|
||||
# It allows me to access my servers and devices from anywhere.
|
||||
{inputs, ...}: {
|
||||
home.packages = with inputs.nixpkgs-stable.legacyPackages.x86_64-linux; [tailscale tailscale-systray];
|
||||
|
||||
# wayland.windowManager.hyprland.settings.exec-once = ["${pkgs.tailscale-systray}/bin/tailscale-systray"];
|
||||
}
|
||||
@@ -73,26 +73,25 @@ in {
|
||||
'';
|
||||
|
||||
home.file.".config/xfce4/xfconf/xfce-perchannel-xml/thunar.xml".text = ''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.1" encoding="UTF-8"?>
|
||||
|
||||
<channel name="thunar" version="1.0">
|
||||
<property name="last-view" type="string" value="ThunarIconView"/>
|
||||
<property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_100_PERCENT"/>
|
||||
<property name="last-window-maximized" type="bool" value="true"/>
|
||||
<property name="last-separator-position" type="int" value="170"/>
|
||||
<property name="last-separator-position" type="int" value="230"/>
|
||||
<property name="last-statusbar-visible" type="bool" value="false"/>
|
||||
<property name="last-menubar-visible" type="bool" value="false"/>
|
||||
<property name="misc-single-click" type="bool" value="false"/>
|
||||
<property name="shortcuts-icon-emblems" type="bool" value="true"/>
|
||||
<property name="tree-icon-emblems" type="bool" value="true"/>
|
||||
<property name="misc-file-size-binary" type="bool" value="true"/>
|
||||
<property name="misc-thumbnail-draw-frames" type="bool" value="false"/>
|
||||
<property name="misc-text-beside-icons" type="bool" value="true"/>
|
||||
<property name="misc-change-window-icon" type="bool" value="true"/>
|
||||
<property name="misc-file-size-binary" type="bool" value="false"/>
|
||||
<property name="misc-thumbnail-draw-frames" type="bool" value="true"/>
|
||||
<property name="misc-text-beside-icons" type="bool" value="false"/>
|
||||
<property name="misc-change-window-icon" type="bool" value="false"/>
|
||||
<property name="hidden-bookmarks" type="array">
|
||||
<value type="string" value="computer:///"/>
|
||||
<value type="string" value="recent:///"/>
|
||||
<value type="string" value="file:///"/>
|
||||
<value type="string" value="network:///"/>
|
||||
</property>
|
||||
<property name="hidden-devices" type="array">
|
||||
@@ -103,35 +102,60 @@ in {
|
||||
<property name="last-location-bar" type="string" value="ThunarLocationButtons"/>
|
||||
<property name="last-show-hidden" type="bool" value="false"/>
|
||||
<property name="last-details-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_38_PERCENT"/>
|
||||
<property name="last-details-view-column-widths" type="string" value="50,50,127,50,50,50,50,50,751,50,50,75,50,145"/>
|
||||
<property name="last-toolbar-items" type="string" value="menu:1,back:1,forward:0,open-parent:0,open-home:0,undo:0,redo:0,zoom-in:0,zoom-out:0,zoom-reset:0,view-as-icons:0,view-as-detailed-list:0,view-as-compact-list:0,toggle-split-view:0,location-bar:1,reload:0,search:1,uca-action-1710183590071525-1:0,new-tab:0,new-window:0,view-switcher:0"/>
|
||||
<property name="last-details-view-column-widths" type="string" value="50,50,118,111,50,50,50,50,993,50,50,84,50,151"/>
|
||||
<property name="last-toolbar-items" type="string" value="menu:1,undo:1,back:1,forward:1,open-parent:0,open-home:0,redo:0,zoom-in:0,zoom-out:0,zoom-reset:0,location-bar:1,view-switcher:1,search:1,view-as-icons:0,view-as-detailed-list:0,view-as-compact-list:0,toggle-split-view:0,reload:0,new-tab:0,new-window:0,uca-action-1700000000000001:0"/>
|
||||
<property name="last-side-pane" type="string" value="THUNAR_SIDEPANE_TYPE_SHORTCUTS"/>
|
||||
<property name="last-image-preview-visible" type="bool" value="false"/>
|
||||
<property name="misc-use-csd" type="bool" value="true"/>
|
||||
<property name="default-view" type="string" value="ThunarIconView"/>
|
||||
<property name="misc-thumbnail-max-file-size" type="uint64" value="1073741824"/>
|
||||
<property name="misc-symbolic-icons-in-toolbar" type="bool" value="true"/>
|
||||
<property name="misc-date-style" type="string" value="THUNAR_DATE_STYLE_SIMPLE"/>
|
||||
<property name="shortcuts-icon-size" type="string" value="THUNAR_ICON_SIZE_16"/>
|
||||
<property name="tree-icon-size" type="string" value="THUNAR_ICON_SIZE_16"/>
|
||||
<property name="misc-symbolic-icons-in-sidepane" type="bool" value="true"/>
|
||||
<property name="misc-open-new-window-as-tab" type="bool" value="false"/>
|
||||
<property name="misc-full-path-in-tab-title" type="bool" value="true"/>
|
||||
<property name="misc-show-delete-action" type="bool" value="false"/>
|
||||
</channel>
|
||||
'';
|
||||
|
||||
xdg.configFile."Thunar/uca.xml".text = ''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<actions>
|
||||
<action>
|
||||
<icon>utilities-terminal</icon>
|
||||
<name>Open Terminal Here</name>
|
||||
<unique-id>1700000000000001</unique-id>
|
||||
<command>kitty -d %f</command>
|
||||
<description>Opens Kitty terminal in the selected folder</description>
|
||||
<patterns>*</patterns>
|
||||
<startup-notify/>
|
||||
<directories/>
|
||||
</action>
|
||||
<action>
|
||||
<icon></icon>
|
||||
<name>Extract here</name>
|
||||
<action>
|
||||
<icon>utilities-terminal</icon>
|
||||
<name>Open Terminal Here</name>
|
||||
<unique-id>1700000000000001</unique-id>
|
||||
<command>kitty -d %f</command>
|
||||
<description>Opens Kitty terminal in the selected folder</description>
|
||||
<patterns>*</patterns>
|
||||
<startup-notify/>
|
||||
<directories/>
|
||||
</action>
|
||||
<action>
|
||||
<icon></icon>
|
||||
<name>Extract here</name>
|
||||
<submenu></submenu>
|
||||
<unique-id>1689618425925956-3</unique-id>
|
||||
<command>xarchiver -x . %f</command>
|
||||
<description>Extracts the archive into the directory it is located in.</description>
|
||||
<range>*</range>
|
||||
<patterns>*.tar.bz2;*.tar.gz;*.tar.xz;*.tar.Z;*.tar;*.taz;*.tb2;*.tbz;*.tbz2;*.tgz;*.txz;*.zip;*.bz2;*.docx;*.apk;*.gz;*.odt;</patterns>
|
||||
<other-files/>
|
||||
</action>
|
||||
<action>
|
||||
<icon>package-x-generic</icon>
|
||||
<name>Compress here (tar.gz)</name>
|
||||
<submenu></submenu>
|
||||
<unique-id>1689618425925956-3</unique-id>
|
||||
<command>xarchiver -x . %f</command>
|
||||
<description>Extracts the archive into the directory it is located in.</description>
|
||||
<unique-id>1700000000000003</unique-id>
|
||||
<command>tar -czvf %n.tar.gz %N</command>
|
||||
<description>Creates a compressed archive (.tar.gz) of selected files/folders.</description>
|
||||
<range>*</range>
|
||||
<patterns>*.tar.bz2;*.tar.gz;*.tar.xz;*.tar.Z;*.tar;*.taz;*.tb2;*.tbz;*.tbz2;*.tgz;*.txz;*.zip;*.bz2;*.docx;*.apk;*.gz;*.odt;</patterns>
|
||||
<patterns>*</patterns>
|
||||
<directories/>
|
||||
<other-files/>
|
||||
</action>
|
||||
</action>
|
||||
</actions>
|
||||
'';
|
||||
}
|
||||
|
||||
12
home/programs/vivaldi/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{pkgs, ...}: {
|
||||
programs.vivaldi = {
|
||||
enable = true;
|
||||
commandLineArgs = [
|
||||
"--no-default-browser-check"
|
||||
];
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
DEFAULT_BROWSER = "${pkgs.vivaldi}/bin/vivaldi";
|
||||
};
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
# TODO: Misc section with VLC, Zathura etc
|
||||
# Zathura is a PDF viewer
|
||||
{
|
||||
programs.zathura = {
|
||||
@@ -1,36 +0,0 @@
|
||||
# - ## Brightness
|
||||
#-
|
||||
#- This module provides a set of scripts to control the brightness of the screen.
|
||||
#-
|
||||
#- - `brightness-up` increases the brightness by 5%.
|
||||
#- - `brightness-down` decreases the brightness by 5%.
|
||||
#- - `brightness-set [value]` sets the brightness to the given value.
|
||||
#- - `brightness-change [up|down] [value]` increases or decreases the brightness by the given value.
|
||||
{pkgs, ...}: let
|
||||
increments = "5";
|
||||
|
||||
brightness-change = pkgs.writeShellScriptBin "brightness-change" ''
|
||||
[[ $1 == "up" ]] && ${pkgs.brightnessctl}/bin/brightnessctl set ''${2-${increments}}%+
|
||||
[[ $1 == "down" ]] && ${pkgs.brightnessctl}/bin/brightnessctl set ''${2-${increments}}%-
|
||||
'';
|
||||
|
||||
brightness-set = pkgs.writeShellScriptBin "brightness-set" ''
|
||||
${pkgs.brightnessctl}/bin/brightnessctl set ''${1-100}%
|
||||
'';
|
||||
|
||||
brightness-up = pkgs.writeShellScriptBin "brightness-up" ''
|
||||
brightness-change up ${increments}
|
||||
'';
|
||||
|
||||
brightness-down = pkgs.writeShellScriptBin "brightness-down" ''
|
||||
brightness-change down ${increments}
|
||||
'';
|
||||
in {
|
||||
home.packages = [
|
||||
pkgs.brightnessctl
|
||||
brightness-change
|
||||
brightness-up
|
||||
brightness-down
|
||||
brightness-set
|
||||
];
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
# - ## Caffeine
|
||||
#-
|
||||
#- Caffeine is a simple script that toggles hypridle (disable suspend & screenlock).
|
||||
#-
|
||||
#- - `caffeine-status` - Check if hypridle is running. (0/1)
|
||||
#- - `caffeine-status-icon` - Check if hypridle is running. (icon)
|
||||
#- - `caffeine` - Toggle hypridle.
|
||||
{pkgs, ...}: let
|
||||
caffeine-status = pkgs.writeShellScriptBin "caffeine-status" ''
|
||||
[[ $(pidof "hypridle") ]] && echo "0" || echo "1"
|
||||
'';
|
||||
|
||||
caffeine-status-icon = pkgs.writeShellScriptBin "caffeine-status-icon" ''
|
||||
[[ $(pidof "hypridle") ]] && echo "" || echo ""
|
||||
'';
|
||||
|
||||
caffeine = pkgs.writeShellScriptBin "caffeine" ''
|
||||
if [[ $(pidof "hypridle") ]]; then
|
||||
systemctl --user stop hypridle.service
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Caffeine On" --custom-icon="emblem-default"
|
||||
else
|
||||
systemctl --user start hypridle.service
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Caffeine Off" --custom-icon="emblem-default"
|
||||
fi
|
||||
'';
|
||||
in {home.packages = [caffeine-status caffeine caffeine-status-icon];}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
./nixy
|
||||
./sounds
|
||||
./brightness
|
||||
./caffeine
|
||||
./hyprpanel
|
||||
./hyprfocus
|
||||
./night-shift
|
||||
./screenshot
|
||||
./nerdfont-fzf
|
||||
./notification
|
||||
./system
|
||||
];
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
# - ## Hyprfocus
|
||||
#-
|
||||
#- A simple script to toggle focus on few windows in Hyprland.
|
||||
#- (disable gaps, border, shadow, opacity, etc.)
|
||||
#-
|
||||
#- - `hyprfocus-on` - Enable hyprfocus.
|
||||
#- - `hyprfocus-off` - Disable hyprfocus.
|
||||
#- - `hyprfocus-toggle` - Toggle hyprfocus.
|
||||
{pkgs, ...}: let
|
||||
hyprfocus-on =
|
||||
pkgs.writeShellScriptBin "hyprfocus-on"
|
||||
# bash
|
||||
''
|
||||
hyprpanel-hide
|
||||
|
||||
hyprctl --batch "\
|
||||
keyword animations:enabled 0;\
|
||||
keyword decoration:shadow:enabled 0;\
|
||||
keyword decoration:blur:enabled 0;\
|
||||
keyword general:gaps_in 0;\
|
||||
keyword general:gaps_out 0;\
|
||||
keyword general:border_size 1;\
|
||||
keyword decoration:rounding 0;\
|
||||
keyword decoration:inactive_opacity 1;\
|
||||
keyword decoration:active_opacity 1"
|
||||
|
||||
echo "1" > /tmp/hyprfocus
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Hyprfocus On" --custom-icon="emblem-default"
|
||||
'';
|
||||
|
||||
hyprfocus-off =
|
||||
pkgs.writeShellScriptBin "hyprfocus-off"
|
||||
# bash
|
||||
''
|
||||
hyprctl reload
|
||||
hyprpanel-show
|
||||
rm /tmp/hyprfocus
|
||||
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Hyprfocus Off" --custom-icon="emblem-default"
|
||||
'';
|
||||
|
||||
hyprfocus-toggle =
|
||||
pkgs.writeShellScriptBin "hyprfocus-toggle"
|
||||
# bash
|
||||
''
|
||||
if [ -f /tmp/hyprfocus ]; then
|
||||
hyprfocus-off
|
||||
else
|
||||
hyprfocus-on
|
||||
fi
|
||||
'';
|
||||
in {home.packages = [hyprfocus-on hyprfocus-off hyprfocus-toggle];}
|
||||
@@ -1,45 +0,0 @@
|
||||
# - ## Hyprpanel
|
||||
#-
|
||||
#- Quick scripts to toggle, reload, hide & show hyprpanel.
|
||||
#-
|
||||
#- - `hyprpanel-toggle` - Toggle hyprpanel (hide/show).
|
||||
#- - `hyprpanel-show` - Show hyprpanel.
|
||||
#- - `hyprpanel-hide` - Hide hyprpanel.
|
||||
#- - `hyprpanel-reload` - Reload hyprpanel.
|
||||
{pkgs, ...}: let
|
||||
hyprpanel-toggle = pkgs.writeShellScriptBin "hyprpanel-toggle" ''
|
||||
hyprpanel toggleWindow bar-0
|
||||
hyprpanel toggleWindow bar-1
|
||||
hyprpanel toggleWindow bar-2
|
||||
hyprpanel toggleWindow bar-3
|
||||
'';
|
||||
|
||||
hyprpanel-hide = pkgs.writeShellScriptBin "hyprpanel-hide" ''
|
||||
status=$(hyprpanel isWindowVisible bar-0)
|
||||
if [[ $status == "true" ]]; then
|
||||
hyprpanel toggleWindow bar-0
|
||||
fi
|
||||
status=$(hyprpanel isWindowVisible bar-1)
|
||||
if [[ $status == "true" ]]; then
|
||||
hyprpanel toggleWindow bar-1
|
||||
fi
|
||||
'';
|
||||
|
||||
hyprpanel-show = pkgs.writeShellScriptBin "hyprpanel-show" ''
|
||||
status=$(hyprpanel isWindowVisible bar-0)
|
||||
if [[ $status == "false" ]]; then
|
||||
hyprpanel toggleWindow bar-0
|
||||
fi
|
||||
status=$(hyprpanel isWindowVisible bar-1)
|
||||
if [[ $status == "false" ]]; then
|
||||
hyprpanel toggleWindow bar-1
|
||||
fi
|
||||
'';
|
||||
|
||||
hyprpanel-reload = pkgs.writeShellScriptBin "hyprpanel-reload" ''
|
||||
[ $(pgrep "hyprpanel") ] && pkill hyprpanel
|
||||
hyprctl dispatch exec hyprpanel
|
||||
'';
|
||||
in {
|
||||
home.packages = [hyprpanel-toggle hyprpanel-reload hyprpanel-hide hyprpanel-show];
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
# - ## Nerdfont FZF
|
||||
#-
|
||||
#- This module provides a script to search for Nerd Fonts icons using fzf.
|
||||
#-
|
||||
#- - `nerdfont-fzf` - Search for Nerd Fonts icons using fzf.
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
nerdfont-fzf = pkgs.writeShellScriptBin "nerdfont-fzf" ''
|
||||
icons=$(${pkgs.jq}/bin/jq -r 'to_entries[] | "\(.key):\(.value.char)"' "/home/${config.var.username}/.config/nerdfont_glyphnames.json" | awk -F: '{print "\033[95m "$2" \033[0m "$1}')
|
||||
fzf_result=$(echo "$icons" | ${pkgs.fzf}/bin/fzf --ansi --border none | awk '{print $1}')
|
||||
if [ -z "$fzf_result" ]; then
|
||||
echo "No icon selected"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Copied to clipboard: $fzf_result"
|
||||
${pkgs.wl-clipboard}/bin/wl-copy "$fzf_result"
|
||||
'';
|
||||
in {
|
||||
home.packages = [nerdfont-fzf];
|
||||
|
||||
xdg.configFile."nerdfont_glyphnames.json" = {
|
||||
source = pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/ryanoasis/nerd-fonts/384b1825ea0037b0314f7f9c660a80c1ecdb219a/glyphnames.json";
|
||||
hash = "sha256-Ps0dyFcMs51RMTthBOVSOf/lafPV/53JxuNSKlmZ7cc=";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
# - ## Night-Shift
|
||||
#-
|
||||
#- Night-Shift is a feature that reduces the amount of blue light emitted by your screen, which can help reduce eye strain and improve sleep quality. This module provides a set of scripts to control Night-Shift on your system.
|
||||
#- It use hyprsunset to control the screen temperature.
|
||||
#-
|
||||
#- - `night-shift-on` activates Night-Shift.
|
||||
#- - `night-shift-off` deactivates Night-Shift.
|
||||
#- - `night-shift` toggles Night-Shift.
|
||||
#- - `night-shift-status` checks if Night-Shift is active. (0/1)
|
||||
#- - `night-shift-status-icon` checks if Night-Shift is active. (icon)
|
||||
{pkgs, ...}: let
|
||||
value = "4500"; # Default value for night-shift temperature
|
||||
|
||||
night-shift-on =
|
||||
pkgs.writeShellScriptBin "night-shift-on"
|
||||
# bash
|
||||
''
|
||||
${pkgs.hyprsunset}/bin/hyprsunset -t ${value} &
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Night-Shift On" --custom-icon="emblem-default"
|
||||
'';
|
||||
|
||||
night-shift-off =
|
||||
pkgs.writeShellScriptBin "night-shift-off"
|
||||
# bash
|
||||
''
|
||||
pkill hyprsunset
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Night-Shift Off" --custom-icon="emblem-default"
|
||||
'';
|
||||
|
||||
night-shift =
|
||||
pkgs.writeShellScriptBin "night-shift"
|
||||
# bash
|
||||
''
|
||||
if pidof "hyprsunset"; then
|
||||
night-shift-off
|
||||
else
|
||||
night-shift-on
|
||||
fi
|
||||
'';
|
||||
|
||||
night-shift-status =
|
||||
pkgs.writeShellScriptBin "night-shift-status"
|
||||
# bash
|
||||
''
|
||||
if pidof "hyprsunset"; then
|
||||
echo "1"
|
||||
else
|
||||
echo "0"
|
||||
fi
|
||||
'';
|
||||
|
||||
night-shift-status-icon =
|
||||
pkgs.writeShellScriptBin "night-shift-status-icon"
|
||||
# bash
|
||||
''
|
||||
if pidof "hyprsunset"; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
home.packages = [
|
||||
pkgs.hyprsunset
|
||||
night-shift-on
|
||||
night-shift-off
|
||||
night-shift
|
||||
night-shift-status
|
||||
night-shift-status-icon
|
||||
];
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
# - ## Notif
|
||||
#-
|
||||
# This file provides a script to send custom notifications using `notify-send`.
|
||||
#-
|
||||
#- - `notif {id} {title} {description}` - Sends a notification
|
||||
{pkgs, ...}: let
|
||||
notif =
|
||||
pkgs.writeShellScriptBin "notif" # bash
|
||||
|
||||
''
|
||||
# Shell script to send custom notifications
|
||||
# Usage: notif "sender_id" "message" ["description"]
|
||||
NOTIF_FOLDER="/tmp/notif"
|
||||
sender_id=$1 # To overwrite existing notifications
|
||||
title=$2
|
||||
description=$3
|
||||
|
||||
[[ -d "$NOTIF_FOLDER" ]] || mkdir $NOTIF_FOLDER
|
||||
[[ -f "$NOTIF_FOLDER/$sender_id" ]] || (echo "0" > "$NOTIF_FOLDER/$sender_id")
|
||||
|
||||
old_notification_id=$(cat "$NOTIF_FOLDER/$sender_id")
|
||||
[[ -z "$old_notification_id" ]] && old_notification_id=0
|
||||
|
||||
${pkgs.libnotify}/bin/notify-send \
|
||||
--replace-id="$old_notification_id" --print-id \
|
||||
--app-name="$sender_id" \
|
||||
"$title" \
|
||||
"$description" \
|
||||
> "$NOTIF_FOLDER/$sender_id"
|
||||
'';
|
||||
in {home.packages = [pkgs.libnotify notif];}
|
||||
@@ -1,32 +0,0 @@
|
||||
# - ## Screenshot
|
||||
#-
|
||||
#- This module provides a script to take screenshots using `grimblast` and `swappy`.
|
||||
#-
|
||||
#- - `screenshot [region|window|monitor] [swappy]` - Take a screenshot of the region, window, or monitor. Optionally, use `swappy` to copy the screenshot to the clipboard.
|
||||
{pkgs, ...}: let
|
||||
screenshot = pkgs.writeShellScriptBin "screenshot" ''
|
||||
if [[ $2 == "swappy" ]];then
|
||||
folder="/tmp"
|
||||
else
|
||||
folder="$HOME/Pictures"
|
||||
fi
|
||||
filename="$(date +%Y-%m-%d_%H:%M:%S).png"
|
||||
|
||||
if [[ $1 == "window" ]];then
|
||||
mode="active"
|
||||
elif [[ $1 == "region" ]];then
|
||||
mode="area"
|
||||
elif [[ $1 == "monitor" ]];then
|
||||
mode="output"
|
||||
fi
|
||||
|
||||
${pkgs.grimblast}/bin/grimblast --notify --freeze copysave $mode "$folder/$filename" || exit 1
|
||||
|
||||
if [[ $2 == "swappy" ]];then
|
||||
${pkgs.swappy}/bin/swappy -f "$folder/$filename" -o "$HOME/Pictures/$filename"
|
||||
exit 0
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
home.packages = [ screenshot pkgs.grim pkgs.grimblast ];
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
# - ## Sound
|
||||
#-
|
||||
#- This module provides a set of scripts to control the volume of the default audio sink using `wpctl`.
|
||||
#-
|
||||
#- - `sound-up` increases the volume by 5%.
|
||||
#- - `sound-down` decreases the volume by 5%.
|
||||
#- - `sound-set [value]` sets the volume to the given value.
|
||||
#- - `sound-toggle` toggles the mute state of the default audio sink.
|
||||
{pkgs, ...}: let
|
||||
increments = "5";
|
||||
|
||||
sound-change = pkgs.writeShellScriptBin "sound-change" ''
|
||||
[[ $1 == "mute" ]] && wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
[[ $1 == "up" ]] && wpctl set-volume @DEFAULT_AUDIO_SINK@ ''${2-${increments}}%+
|
||||
[[ $1 == "down" ]] && wpctl set-volume @DEFAULT_AUDIO_SINK@ ''${2-${increments}}%-
|
||||
[[ $1 == "set" ]] && wpctl set-volume @DEFAULT_AUDIO_SINK@ ''${2-100}%
|
||||
'';
|
||||
|
||||
sound-up = pkgs.writeShellScriptBin "sound-up" ''
|
||||
sound-change up ${increments}
|
||||
'';
|
||||
|
||||
sound-set = pkgs.writeShellScriptBin "sound-set" ''
|
||||
sound-change set ''${1-100}
|
||||
'';
|
||||
|
||||
sound-down = pkgs.writeShellScriptBin "sound-down" ''
|
||||
sound-change down ${increments}
|
||||
'';
|
||||
|
||||
sound-toggle = pkgs.writeShellScriptBin "sound-toggle" ''
|
||||
sound-change mute
|
||||
'';
|
||||
in {
|
||||
home.packages = [sound-change sound-up sound-down sound-toggle sound-set];
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
# - ## System
|
||||
#-
|
||||
#- Usefull quick scripts
|
||||
#-
|
||||
#- - `lock` - Lock the screen. (hyprlock)
|
||||
#- - `powermode-toggle` - Toggle between performance and balanced power mode. (powerprofilesctl)
|
||||
{pkgs, ...}: let
|
||||
menu =
|
||||
pkgs.writeShellScriptBin "menu"
|
||||
# bash
|
||||
''
|
||||
if pgrep wofi; then
|
||||
pkill wofi
|
||||
else
|
||||
wofi -p "Apps" --show drun
|
||||
fi
|
||||
'';
|
||||
powermenu =
|
||||
pkgs.writeShellScriptBin "powermenu"
|
||||
# bash
|
||||
''
|
||||
if pgrep wofi >/dev/null; then
|
||||
pkill wofi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
declare -A actions=(
|
||||
[" Lock"]="hyprlock"
|
||||
[" Logout"]="hyprctl dispatch exit"
|
||||
[" Suspend"]="systemctl suspend"
|
||||
[" Reboot"]="systemctl reboot"
|
||||
[" Shutdown"]="systemctl poweroff"
|
||||
)
|
||||
|
||||
selected_option=$(
|
||||
printf '%s\n' "''${!actions[@]}" | wofi -p "Powermenu" --dmenu
|
||||
)
|
||||
|
||||
if [[ -n "$selected_option" ]]; then
|
||||
|
||||
action_command=''${actions["''$selected_option"]}
|
||||
|
||||
if [[ -n "$action_command" ]]; then
|
||||
eval "$action_command"
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
|
||||
lock =
|
||||
pkgs.writeShellScriptBin "lock"
|
||||
# bash
|
||||
''
|
||||
${pkgs.hyprlock}/bin/hyprlock
|
||||
'';
|
||||
|
||||
powermode-toggle =
|
||||
pkgs.writeShellScriptBin "powermode-toggle"
|
||||
# bash
|
||||
''
|
||||
current_profile=$(powerprofilesctl get)
|
||||
if [ "$current_profile" = "performance" ]; then
|
||||
powerprofilesctl set balanced
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Powermode set to balanced" --custom-icon="emblem-default"
|
||||
else
|
||||
powerprofilesctl set performance
|
||||
${pkgs.swayosd}/bin/swayosd-client --custom-message="Powermode set to performance" --custom-icon="emblem-default"
|
||||
fi
|
||||
'';
|
||||
in {home.packages = [lock powermode-toggle menu powermenu];}
|
||||
49
home/system/caelestia-shell/appearance.nix
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
rounding = config.theme.rounding + config.theme.gaps-out;
|
||||
inherit (config.stylix) fonts;
|
||||
in {
|
||||
home.packages = with pkgs; [
|
||||
papirus-icon-theme
|
||||
];
|
||||
|
||||
programs.caelestia.settings = {
|
||||
paths.sessionGif = ./session-gif-hacker-cat.gif;
|
||||
background.enabled = false;
|
||||
appearance = {
|
||||
transparency = {
|
||||
enable = true;
|
||||
base = 0.85;
|
||||
layers = 0.4;
|
||||
};
|
||||
font.family = {
|
||||
material = "Material Symbols Rounded";
|
||||
mono = fonts.monospace.name;
|
||||
sans = fonts.sansSerif.name;
|
||||
};
|
||||
};
|
||||
utilities = {
|
||||
enabled = true;
|
||||
maxToasts = 4;
|
||||
toasts = {
|
||||
audioInputChanged = true;
|
||||
audioOutputChanged = true;
|
||||
capsLockChanged = false;
|
||||
chargingChanged = true;
|
||||
configLoaded = false;
|
||||
dndChanged = true;
|
||||
gameModeChanged = true;
|
||||
numLockChanged = false;
|
||||
nowPlaying = false;
|
||||
kbLayoutChanged = false;
|
||||
};
|
||||
};
|
||||
border = {
|
||||
inherit rounding;
|
||||
thickness = 8;
|
||||
};
|
||||
};
|
||||
}
|
||||
69
home/system/caelestia-shell/bar.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
programs.caelestia.settings.bar = {
|
||||
clock.showIcon = false;
|
||||
popouts.activeWindow = false;
|
||||
persistent = true;
|
||||
status = {
|
||||
showBattery = true;
|
||||
showMicrophone = false;
|
||||
showLockStatus = false;
|
||||
showBluetooth = true;
|
||||
showAudio = true;
|
||||
showKbLayout = false;
|
||||
showNetwork = true;
|
||||
};
|
||||
workspaces = {
|
||||
activeIndicator = true;
|
||||
activeLabel = " ";
|
||||
activeTrail = false;
|
||||
label = " ";
|
||||
occupiedBg = true;
|
||||
occupiedLabel = " ";
|
||||
rounded = true;
|
||||
showWindows = false;
|
||||
shown = 5;
|
||||
};
|
||||
entries = [
|
||||
{
|
||||
id = "logo";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "workspaces";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "spacer";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "activeWindow";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "spacer";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "tray";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "clock";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "statusIcons";
|
||||
enabled = true;
|
||||
}
|
||||
{
|
||||
id = "power";
|
||||
enabled = true;
|
||||
}
|
||||
];
|
||||
tray = {
|
||||
background = false;
|
||||
recolour = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
58
home/system/caelestia-shell/bindings.nix
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
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"
|
||||
];
|
||||
bind = [
|
||||
# Launcher
|
||||
"$mod, SPACE, global, caelestia:launcher"
|
||||
"$mod, X, global, caelestia:session" # Powermenu
|
||||
|
||||
# Misc
|
||||
"$mod, L, global, caelestia:lock"
|
||||
"$mod, N, exec, caelestia shell drawers toggle sidebar"
|
||||
|
||||
# Utilities
|
||||
"$mod+Shift, SPACE, exec, caelestia shell gameMode toggle" # Toggle Focus/Game mode
|
||||
"$mod+Shift, S, global, caelestia:screenshotFreeze" # Capture region (freeze)
|
||||
"$mod+Shift+Alt, S, global, caelestia:screenshot" # Capture region
|
||||
"$mod+Alt, R, exec, caelestia record -s" # Record screen with sound
|
||||
"Ctrl+Alt, R, exec, caelestia record" # Record screen
|
||||
"$mod+Shift+Alt, R, exec, caelestia record -r" # Record region
|
||||
|
||||
"$mod+Shift, E, exec, pkill fuzzel || caelestia emoji -p"
|
||||
];
|
||||
bindl = [
|
||||
# Brightness
|
||||
", XF86MonBrightnessUp, global, caelestia:brightnessUp"
|
||||
", XF86MonBrightnessDown, global, caelestia:brightnessDown"
|
||||
"$mod, F2, exec, nightshift-toggle"
|
||||
"$mod, F3, exec, nightshift-toggle"
|
||||
|
||||
# Media
|
||||
", XF86AudioPlay, global, caelestia:mediaToggle"
|
||||
", XF86AudioPause, global, caelestia:mediaToggle"
|
||||
", XF86AudioNext, global, caelestia:mediaNext"
|
||||
", XF86AudioPrev, global, caelestia:mediaPrev"
|
||||
", XF86AudioStop, global, caelestia:mediaStop"
|
||||
|
||||
# Sound
|
||||
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
|
||||
# Utilities
|
||||
", Print, exec, caelestia screenshot" # Full screen capture > clipboard
|
||||
];
|
||||
bindle = [
|
||||
", 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%-"
|
||||
];
|
||||
};
|
||||
}
|
||||
62
home/system/caelestia-shell/default.nix
Normal file
@@ -0,0 +1,62 @@
|
||||
# Caelestia Shell Home Manager Configuration
|
||||
# See https://github.com/caelestia-dots/shell
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.caelestia-shell.homeManagerModules.default
|
||||
./bindings.nix
|
||||
./bar.nix
|
||||
./launcher.nix
|
||||
./appearance.nix
|
||||
./scheme.nix
|
||||
];
|
||||
|
||||
programs.caelestia = {
|
||||
enable = true;
|
||||
systemd.enable = false;
|
||||
settings = {
|
||||
services.weatherLocation = "Paris";
|
||||
general = {
|
||||
apps = {
|
||||
terminal = ["ghostty"];
|
||||
audio = ["pavucontrol"];
|
||||
explorer = ["thunar"];
|
||||
};
|
||||
idle = {
|
||||
timeouts = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
cli = {
|
||||
enable = true;
|
||||
settings.theme = {
|
||||
enableTerm = false;
|
||||
enableDiscord = false;
|
||||
enableSpicetify = false;
|
||||
enableBtop = false;
|
||||
enableCava = false;
|
||||
enableHypr = false;
|
||||
enableGtk = false;
|
||||
enableQt = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
gpu-screen-recorder
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland.settings.exec-once = [
|
||||
"uwsm app -- caelestia resizer -d"
|
||||
"uwsm app -- caelestia shell -d"
|
||||
"caelestia scheme set -n custom"
|
||||
];
|
||||
|
||||
services.cliphist = {
|
||||
enable = true;
|
||||
allowImages = true;
|
||||
};
|
||||
}
|
||||
124
home/system/caelestia-shell/launcher.nix
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
programs.caelestia.settings = {
|
||||
session.commands = {
|
||||
logout = ["loginctl" "terminate-user" ""];
|
||||
shutdown = ["systemctl" "poweroff"];
|
||||
hibernate = ["systemctl" "hibernate"];
|
||||
reboot = ["systemctl" "reboot"];
|
||||
};
|
||||
launcher = {
|
||||
actionPrefix = "/";
|
||||
actions = [
|
||||
{
|
||||
name = "Calculator";
|
||||
icon = "calculate";
|
||||
description = "Do simple math equations (powered by Qalc)";
|
||||
command = ["autocomplete" "calc"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Shutdown";
|
||||
icon = "power_settings_new";
|
||||
description = "Shutdown the system";
|
||||
command = ["systemctl" "poweroff"];
|
||||
enabled = true;
|
||||
dangerous = true;
|
||||
}
|
||||
{
|
||||
name = "Reboot";
|
||||
icon = "cached";
|
||||
description = "Reboot the system";
|
||||
command = ["systemctl" "reboot"];
|
||||
enabled = true;
|
||||
dangerous = true;
|
||||
}
|
||||
{
|
||||
name = "Logout";
|
||||
icon = "exit_to_app";
|
||||
description = "Log out of the current session";
|
||||
command = ["loginctl" "terminate-user" ""];
|
||||
enabled = true;
|
||||
dangerous = true;
|
||||
}
|
||||
{
|
||||
name = "Lock";
|
||||
icon = "lock";
|
||||
description = "Lock the current session";
|
||||
command = ["loginctl" "lock-session"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Sleep";
|
||||
icon = "bedtime";
|
||||
description = "Suspend then hibernate";
|
||||
command = ["systemctl" "suspend-then-hibernate"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Restart caelestia";
|
||||
icon = "cached";
|
||||
description = "Restart caelestia";
|
||||
command = ["hyprctl" "dispatch" "exec" "caelestia-shell kill | sleep 1 | caelestia-shell"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Emoji Picker";
|
||||
icon = "mood";
|
||||
description = "Toggle the emoji picker";
|
||||
command = ["caelestia" "emoji" "-p"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Clipboard History";
|
||||
icon = "content_paste";
|
||||
description = "Toggle the clipboard history";
|
||||
command = ["caelestia" "clipboard"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Delete from Clipboard History";
|
||||
icon = "content_paste_off";
|
||||
description = "Delete a line from the clipboard history";
|
||||
command = ["caelestia" "clipboard"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Night Shift";
|
||||
icon = "moon_stars";
|
||||
description = "Toggle Night Shift, the blue light filter";
|
||||
command = ["nightshift-toggle"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
{
|
||||
name = "Hyprpicker";
|
||||
icon = "colorize";
|
||||
description = "Pick an hex color";
|
||||
command = ["hyprpicker" "-a"];
|
||||
enabled = true;
|
||||
dangerous = false;
|
||||
}
|
||||
];
|
||||
dragThreshold = 50;
|
||||
enableDangerousActions = false;
|
||||
maxShown = 7;
|
||||
specialPrefix = "@";
|
||||
useFuzzy = {
|
||||
apps = false;
|
||||
actions = false;
|
||||
schemes = false;
|
||||
variants = false;
|
||||
wallpapers = false;
|
||||
};
|
||||
showOnHover = false;
|
||||
hiddenApps = [];
|
||||
};
|
||||
};
|
||||
}
|
||||
132
home/system/caelestia-shell/scheme.nix
Normal file
@@ -0,0 +1,132 @@
|
||||
# This Nix module customizes the color scheme of the Caelestia CLI application using the Stylix base16 color palette.
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
colors = config.lib.stylix.colors;
|
||||
|
||||
customSchemeFile = pkgs.writeText "custom-dark.txt" ''
|
||||
primary_paletteKeyColor ${colors.base0D}
|
||||
secondary_paletteKeyColor ${colors.base04}
|
||||
tertiary_paletteKeyColor ${colors.base08}
|
||||
neutral_paletteKeyColor ${colors.base03}
|
||||
neutral_variant_paletteKeyColor ${colors.base03}
|
||||
background ${colors.base00}
|
||||
onBackground ${colors.base05}
|
||||
surface ${colors.base00}
|
||||
surfaceDim ${colors.base00}
|
||||
surfaceBright ${colors.base02}
|
||||
surfaceContainerLowest ${colors.base01}
|
||||
surfaceContainerLow ${colors.base01}
|
||||
surfaceContainer ${colors.base01}
|
||||
surfaceContainerHigh ${colors.base02}
|
||||
surfaceContainerHighest ${colors.base02}
|
||||
onSurface ${colors.base05}
|
||||
surfaceVariant ${colors.base02}
|
||||
onSurfaceVariant ${colors.base04}
|
||||
inverseSurface ${colors.base05}
|
||||
inverseOnSurface ${colors.base00}
|
||||
outline ${colors.base03}
|
||||
outlineVariant ${colors.base02}
|
||||
shadow ${colors.base00}
|
||||
scrim ${colors.base00}
|
||||
surfaceTint ${colors.base0D}
|
||||
primary ${colors.base0D}
|
||||
onPrimary ${colors.base00}
|
||||
primaryContainer ${colors.base0D}
|
||||
onPrimaryContainer ${colors.base05}
|
||||
inversePrimary ${colors.base0D}
|
||||
secondary ${colors.base0C}
|
||||
onSecondary ${colors.base00}
|
||||
secondaryContainer ${colors.base02}
|
||||
onSecondaryContainer ${colors.base0C}
|
||||
tertiary ${colors.base08}
|
||||
onTertiary ${colors.base00}
|
||||
tertiaryContainer ${colors.base08}
|
||||
onTertiaryContainer ${colors.base00}
|
||||
error ${colors.base08}
|
||||
onError ${colors.base00}
|
||||
errorContainer ${colors.base08}
|
||||
onErrorContainer ${colors.base05}
|
||||
primaryFixed ${colors.base0D}
|
||||
primaryFixedDim ${colors.base0D}
|
||||
onPrimaryFixed ${colors.base00}
|
||||
onPrimaryFixedVariant ${colors.base00}
|
||||
secondaryFixed ${colors.base0C}
|
||||
secondaryFixedDim ${colors.base0C}
|
||||
onSecondaryFixed ${colors.base00}
|
||||
onSecondaryFixedVariant ${colors.base02}
|
||||
tertiaryFixed ${colors.base08}
|
||||
tertiaryFixedDim ${colors.base08}
|
||||
onTertiaryFixed ${colors.base00}
|
||||
onTertiaryFixedVariant ${colors.base00}
|
||||
term0 ${colors.base00}
|
||||
term1 ${colors.base08}
|
||||
term2 ${colors.base0B}
|
||||
term3 ${colors.base0A}
|
||||
term4 ${colors.base0D}
|
||||
term5 ${colors.base0E}
|
||||
term6 ${colors.base0C}
|
||||
term7 ${colors.base05}
|
||||
term8 ${colors.base03}
|
||||
term9 ${colors.base08}
|
||||
term10 ${colors.base0B}
|
||||
term11 ${colors.base0A}
|
||||
term12 ${colors.base0D}
|
||||
term13 ${colors.base0E}
|
||||
term14 ${colors.base0C}
|
||||
term15 ${colors.base07}
|
||||
rosewater ${colors.base06}
|
||||
flamingo ${colors.base0F}
|
||||
pink ${colors.base0E}
|
||||
mauve ${colors.base0D}
|
||||
red ${colors.base08}
|
||||
maroon ${colors.base08}
|
||||
peach ${colors.base09}
|
||||
yellow ${colors.base0A}
|
||||
green ${colors.base0B}
|
||||
teal ${colors.base0C}
|
||||
sky ${colors.base0C}
|
||||
sapphire ${colors.base0C}
|
||||
blue ${colors.base0D}
|
||||
lavender ${colors.base0D}
|
||||
klink ${colors.base0D}
|
||||
klinkSelection ${colors.base0D}
|
||||
kvisited ${colors.base0E}
|
||||
kvisitedSelection ${colors.base0E}
|
||||
knegative ${colors.base08}
|
||||
knegativeSelection ${colors.base08}
|
||||
kneutral ${colors.base0A}
|
||||
kneutralSelection ${colors.base0A}
|
||||
kpositive ${colors.base0B}
|
||||
kpositiveSelection ${colors.base0B}
|
||||
text ${colors.base05}
|
||||
subtext1 ${colors.base04}
|
||||
subtext0 ${colors.base03}
|
||||
overlay2 ${colors.base03}
|
||||
overlay1 ${colors.base03}
|
||||
overlay0 ${colors.base02}
|
||||
surface2 ${colors.base02}
|
||||
surface1 ${colors.base01}
|
||||
surface0 ${colors.base01}
|
||||
base ${colors.base00}
|
||||
mantle ${colors.base00}
|
||||
crust ${colors.base00}
|
||||
success ${colors.base0B}
|
||||
onSuccess ${colors.base00}
|
||||
successContainer ${colors.base0B}
|
||||
onSuccessContainer ${colors.base05}
|
||||
'';
|
||||
|
||||
customCli = inputs.caelestia-cli.packages.${pkgs.stdenv.hostPlatform.system}.default.overrideAttrs (oldAttrs: {
|
||||
postUnpack = ''
|
||||
mkdir -p $sourceRoot/src/caelestia/data/schemes/custom/main
|
||||
cp ${customSchemeFile} $sourceRoot/src/caelestia/data/schemes/custom/main/dark.txt
|
||||
echo "Custom scheme added to source"
|
||||
'';
|
||||
});
|
||||
in {
|
||||
programs.caelestia.cli.package = customCli;
|
||||
}
|
||||
BIN
home/system/caelestia-shell/session-gif-hacker-cat.gif
Normal file
|
After Width: | Height: | Size: 51 KiB |
@@ -1,32 +0,0 @@
|
||||
# Hypridle is a daemon that listens for user activity and runs commands when the user is idle.
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
services.hypridle = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
ignore_dbus_inhibit = false;
|
||||
lock_cmd = "pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock";
|
||||
before_sleep_cmd = "loginctl lock-session";
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||
};
|
||||
|
||||
listener = [
|
||||
{
|
||||
timeout = 600;
|
||||
on-timeout = "pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock";
|
||||
}
|
||||
|
||||
{
|
||||
timeout = 660;
|
||||
on-timeout = "systemctl suspend";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
systemd.user.services.hypridle.Unit.After =
|
||||
lib.mkForce "graphical-session.target";
|
||||
}
|
||||
@@ -1,20 +1,19 @@
|
||||
{pkgs, ...}: {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
"$mod" = "SUPER";
|
||||
"$shiftMod" = "SUPER_SHIFT";
|
||||
|
||||
bind =
|
||||
[
|
||||
"$mod,RETURN, exec, uwsm app -- ${pkgs.ghostty}/bin/ghostty" # Ghostty (terminal)
|
||||
"$mod,E, exec, uwsm app -- ${pkgs.xfce.thunar}/bin/thunar" # Thunar
|
||||
"$mod,B, exec, uwsm app -- ${pkgs.brave}/bin/brave" # Brave Browser
|
||||
"$mod,B, exec, uwsm app -- ${pkgs.vivaldi}/bin/vivaldi" # Browser (Vivaldi)
|
||||
"$mod,K, exec, uwsm app -- ${pkgs.proton-pass}/bin/proton-pass" # Proton Pass
|
||||
"$mod,M, exec, uwsm app -- ${pkgs.protonmail-desktop}/bin/proton-mail" # Proton Mail
|
||||
"$mod,V, exec, uwsm app -- ${pkgs.protonvpn-gui}/bin/protonvpn-app" # Proton VPN
|
||||
"$mod,A, exec, uwsm app -- ${pkgs.proton-authenticator}/bin/proton-authenticator" # Proton Authenticator
|
||||
"$mod,L, exec, uwsm app -- ${pkgs.hyprlock}/bin/hyprlock" # Lock
|
||||
"$mod,SPACE, exec, vicinae toggle" # Launcher
|
||||
# "$mod,SPACE, exec, menu" # Launcher
|
||||
"$mod,X, exec, powermenu" # Powermenu
|
||||
|
||||
"$shiftMod,SPACE, exec, hyprfocus-toggle" # Toggle HyprFocus
|
||||
"$mod,A, exec, uwsm app -- env WEBKIT_DISABLE_COMPOSITING_MODE=1 ${pkgs.proton-authenticator}/bin/proton-authenticator" # Proton Auth
|
||||
"$mod,M, exec, uwsm app -- ${pkgs.vivaldi}/bin/vivaldi --profile-directory=Default --app-id=jnpecgipniidlgicjocehkhajgdnjekh" # Proton Mail (PWA)
|
||||
"$mod,C, exec, uwsm app -- ${pkgs.vivaldi}/bin/vivaldi --profile-directory=Default --app-id=ojibjkjikcpjonjjngfkegflhmffeemk" # Proton Calendar (PWA)
|
||||
"$mod,I, exec, uwsm app -- ${pkgs.vivaldi}/bin/vivaldi --profile-directory=Default --app-id=lcfjlhjhpmdjimnbkdfjnkojodddgfmd" # Proton Lumo (PWA)
|
||||
|
||||
"$mod,Q, killactive," # Close window
|
||||
"$mod,T, togglefloating," # Toggle Floating
|
||||
@@ -27,15 +26,6 @@
|
||||
"$shiftMod,down, focusmonitor, 1" # Focus next monitor
|
||||
"$shiftMod,left, layoutmsg, addmaster" # Add to master
|
||||
"$shiftMod,right, layoutmsg, removemaster" # Remove from master
|
||||
|
||||
"$mod,PRINT, exec, screenshot region" # Screenshot region
|
||||
",PRINT, exec, screenshot monitor" # Screenshot monitor
|
||||
"$shiftMod,PRINT, exec, screenshot window" # Screenshot window
|
||||
"ALT,PRINT, exec, screenshot region swappy" # Screenshot region then edit
|
||||
|
||||
"$shiftMod,T, exec, hyprpanel-toggle" # Toggle hyprpanel
|
||||
"$shiftMod,F2, exec, night-shift" # Toggle night shift
|
||||
"$shiftMod,F3, exec, night-shift" # Toggle night shift
|
||||
]
|
||||
++ (builtins.concatLists (builtins.genList (i: let
|
||||
ws = i + 1;
|
||||
@@ -49,20 +39,5 @@
|
||||
"$mod,mouse:272, movewindow" # Move Window (mouse)
|
||||
"$mod,R, resizewindow" # Resize Window (mouse)
|
||||
];
|
||||
|
||||
bindl = [
|
||||
",XF86AudioMute, exec, sound-toggle" # Toggle Mute
|
||||
",XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause" # Play/Pause Song
|
||||
",XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next" # Next Song
|
||||
",XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous" # Previous Song
|
||||
",switch:Lid Switch, exec, ${pkgs.hyprlock}/bin/hyprlock" # Lock when closing Lid
|
||||
];
|
||||
|
||||
bindle = [
|
||||
",XF86AudioRaiseVolume, exec, sound-up" # Sound Up
|
||||
",XF86AudioLowerVolume, exec, sound-down" # Sound Down
|
||||
",XF86MonBrightnessUp, exec, brightness-up" # Brightness Up
|
||||
",XF86MonBrightnessDown, exec, brightness-down" # Brightness Down
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
rounding = config.theme.rounding;
|
||||
blur = config.theme.blur;
|
||||
keyboardLayout = config.var.keyboardLayout;
|
||||
background = "rgb(" + config.lib.stylix.colors.base00 + ")";
|
||||
background = "rgba(" + config.lib.stylix.colors.base00 + "77)";
|
||||
in {
|
||||
imports = [
|
||||
./animations.nix
|
||||
@@ -27,13 +27,14 @@ in {
|
||||
qt6.qtwayland
|
||||
libsForQt5.qt5ct
|
||||
qt6Packages.qt6ct
|
||||
hyprland-qtutils
|
||||
adw-gtk3
|
||||
hyprshot
|
||||
hyprpicker
|
||||
swappy
|
||||
imv
|
||||
wf-recorder
|
||||
wlr-randr
|
||||
wl-clipboard
|
||||
brightnessctl
|
||||
gnome-themes-extra
|
||||
libva
|
||||
@@ -58,12 +59,8 @@ in {
|
||||
portalPackage = null;
|
||||
|
||||
settings = {
|
||||
"$mod" = "SUPER";
|
||||
"$shiftMod" = "SUPER_SHIFT";
|
||||
|
||||
exec-once = [
|
||||
"dbus-update-activation-environment --systemd --all &"
|
||||
"systemctl --user enable --now hyprpaper.service &"
|
||||
];
|
||||
|
||||
monitor = [
|
||||
@@ -138,6 +135,16 @@ in {
|
||||
|
||||
gesture = "3, horizontal, workspace";
|
||||
|
||||
windowrule = [
|
||||
"match:class proton-authenticator, float on"
|
||||
"match:class proton-authenticator, suppress_event maximize"
|
||||
"match:class proton-authenticator, center on"
|
||||
"match:class proton-authenticator, size 500 400"
|
||||
"match:class protonvpn-app, float on"
|
||||
"match:class protonvpn-app, center on"
|
||||
"match:class protonvpn-app, size 500 400"
|
||||
];
|
||||
|
||||
misc = {
|
||||
vfr = true;
|
||||
disable_hyprland_logo = true;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
alert-when-low-battery = false;
|
||||
keyboard-backlight = pkgs.writeShellScriptBin "keyboard-backlight" ''
|
||||
function set_keyboard_backlight {
|
||||
local color=$1
|
||||
@@ -15,6 +16,9 @@
|
||||
}
|
||||
state="white"
|
||||
set_keyboard_backlight ${config.lib.stylix.colors.base0D}
|
||||
if [ "${toString alert-when-low-battery}" = "false" ]; then
|
||||
exit 0
|
||||
fi
|
||||
while true; do
|
||||
BATTERY_LEVEL=$(cat /sys/class/power_supply/BAT*/capacity)
|
||||
IS_CHARGING=$(cat /sys/class/power_supply/BAT*/status)
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
# Hyprlock is a lockscreen for Hyprland
|
||||
{ config, lib, ... }:
|
||||
let
|
||||
foreground = "rgba(${config.theme.textColorOnWallpaper}ee)";
|
||||
font = config.stylix.fonts.serif.name;
|
||||
in {
|
||||
programs.hyprlock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
ignore_empty_input = true;
|
||||
hide_cursor = true;
|
||||
};
|
||||
|
||||
background = { brightness = 0.7172; };
|
||||
|
||||
label = [
|
||||
{
|
||||
# Day-Month-Date
|
||||
monitor = "";
|
||||
text = ''cmd[update:1000] echo -e "$(date +"%A, %B %d")"'';
|
||||
color = foreground;
|
||||
font_size = 28;
|
||||
font_family = font + " Bold";
|
||||
position = "0, 490";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
# Time
|
||||
{
|
||||
monitor = "";
|
||||
text = ''cmd[update:1000] echo "<span>$(date +"%I:%M")</span>"'';
|
||||
color = foreground;
|
||||
font_size = 160;
|
||||
font_family = "steelfish outline regular";
|
||||
position = "0, 370";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
# USER
|
||||
{
|
||||
monitor = "";
|
||||
text = " $USER";
|
||||
color = foreground;
|
||||
font_size = 18;
|
||||
font_family = font + " Bold";
|
||||
position = "0, -180";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
];
|
||||
|
||||
# INPUT FIELD
|
||||
input-field = lib.mkForce {
|
||||
size = "300, 60";
|
||||
outline_thickness = 2;
|
||||
dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = true;
|
||||
outer_color = "rgba(25, 25, 25, 0)";
|
||||
inner_color = "rgba(25, 25, 25, 0.1)";
|
||||
font_color = foreground;
|
||||
fade_on_empty = false;
|
||||
font_family = font + " Bold";
|
||||
placeholder_text = "<i>🔒 Enter Password</i>";
|
||||
position = "0, -250";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,267 +0,0 @@
|
||||
# Hyprpanel is the bar on top of the screen
|
||||
# Display information like workspaces, battery, wifi, ...
|
||||
{config, ...}: let
|
||||
transparentButtons = config.theme.bar.transparentButtons;
|
||||
|
||||
accent = "#${config.lib.stylix.colors.base0D}";
|
||||
accent-alt = "#${config.lib.stylix.colors.base03}";
|
||||
background = "#${config.lib.stylix.colors.base00}";
|
||||
background-alt = "#${config.lib.stylix.colors.base01}";
|
||||
foreground = "#${config.lib.stylix.colors.base05}";
|
||||
foregroundOnWallpaper = "#${config.theme.textColorOnWallpaper}";
|
||||
font = "${config.stylix.fonts.serif.name}";
|
||||
fontSizeForHyprpanel = "${toString config.stylix.fonts.sizes.desktop}px";
|
||||
|
||||
rounding = config.theme.rounding;
|
||||
border-size = config.theme.border-size;
|
||||
|
||||
gaps-out = config.theme.gaps-out;
|
||||
gaps-in = config.theme.gaps-in;
|
||||
|
||||
floating = config.theme.bar.floating;
|
||||
transparent = config.theme.bar.transparent;
|
||||
position = config.theme.bar.position; # "top" ou "bottom"
|
||||
|
||||
notificationOpacity = 90;
|
||||
|
||||
location = config.var.location;
|
||||
|
||||
homeDir = "/home/${config.var.username}";
|
||||
in {
|
||||
wayland.windowManager.hyprland.settings.exec-once = ["hyprpanel"];
|
||||
|
||||
programs.hyprpanel = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
bar.layouts = {
|
||||
"*" = {
|
||||
left = ["dashboard" "workspaces" "windowtitle"];
|
||||
middle = ["media" "cava"];
|
||||
right = [
|
||||
"systray"
|
||||
"volume"
|
||||
"bluetooth"
|
||||
"battery"
|
||||
"network"
|
||||
"clock"
|
||||
"notifications"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
theme.font.name = font;
|
||||
theme.font.size = fontSizeForHyprpanel;
|
||||
|
||||
theme.bar.outer_spacing =
|
||||
if floating && transparent
|
||||
then "0px"
|
||||
else "8px";
|
||||
theme.bar.buttons.y_margins =
|
||||
if floating && transparent
|
||||
then "0px"
|
||||
else "8px";
|
||||
theme.bar.buttons.spacing = "0.3em";
|
||||
theme.bar.buttons.radius =
|
||||
(
|
||||
if transparent
|
||||
then toString rounding
|
||||
else toString (rounding - 8)
|
||||
)
|
||||
+ "px";
|
||||
theme.bar.floating = floating;
|
||||
theme.bar.buttons.padding_x = "0.8rem";
|
||||
theme.bar.buttons.padding_y = "0.4rem";
|
||||
|
||||
theme.bar.margin_top =
|
||||
(
|
||||
if position == "top"
|
||||
then toString (gaps-in * 2)
|
||||
else "0"
|
||||
)
|
||||
+ "px";
|
||||
theme.bar.margin_bottom =
|
||||
(
|
||||
if position == "top"
|
||||
then "0"
|
||||
else toString (gaps-in * 2)
|
||||
)
|
||||
+ "px";
|
||||
theme.bar.margin_sides = toString gaps-out + "px";
|
||||
theme.bar.border_radius = toString rounding + "px";
|
||||
theme.bar.transparent = transparent;
|
||||
theme.bar.location = position;
|
||||
theme.bar.dropdownGap = "4.5em";
|
||||
theme.bar.menus.shadow =
|
||||
if transparent
|
||||
then "0 0 0 0"
|
||||
else "0px 0px 3px 1px #16161e";
|
||||
theme.bar.buttons.style = "default";
|
||||
theme.bar.buttons.monochrome = true;
|
||||
theme.bar.menus.monochrome = true;
|
||||
theme.bar.menus.card_radius = toString rounding + "px";
|
||||
theme.bar.menus.border.size = toString border-size + "px";
|
||||
theme.bar.menus.border.radius = toString rounding + "px";
|
||||
theme.bar.menus.menu.media.card.tint = 90;
|
||||
|
||||
bar.launcher.icon = "";
|
||||
bar.workspaces.show_numbered = false;
|
||||
bar.workspaces.workspaces = 5;
|
||||
bar.workspaces.numbered_active_indicator = "color";
|
||||
bar.workspaces.monitorSpecific = false;
|
||||
bar.workspaces.applicationIconEmptyWorkspace = "";
|
||||
bar.workspaces.showApplicationIcons = true;
|
||||
bar.workspaces.showWsIcons = true;
|
||||
|
||||
bar.windowtitle.label = true;
|
||||
bar.volume.label = false;
|
||||
bar.network.truncation_size = 12;
|
||||
bar.bluetooth.label = false;
|
||||
bar.clock.format = "%a %b %d %I:%M %p";
|
||||
bar.notifications.show_total = true;
|
||||
bar.media.show_active_only = true;
|
||||
|
||||
bar.customModules.updates.pollingInterval = 1440000;
|
||||
bar.customModules.cava.showIcon = false;
|
||||
bar.customModules.cava.stereo = true;
|
||||
bar.customModules.cava.showActiveOnly = true;
|
||||
|
||||
notifications.position = "top right";
|
||||
notifications.showActionsOnHover = true;
|
||||
theme.notification.opacity = notificationOpacity;
|
||||
theme.notification.enableShadow = true;
|
||||
theme.notification.border_radius = toString rounding + "px";
|
||||
|
||||
theme.osd.enable = true;
|
||||
theme.osd.orientation = "vertical";
|
||||
theme.osd.location = "left";
|
||||
theme.osd.radius = toString rounding + "px";
|
||||
theme.osd.margins = "0px 0px 0px 10px";
|
||||
theme.osd.muted_zero = true;
|
||||
|
||||
menus.clock.weather.location = location;
|
||||
menus.clock.weather.unit = "metric";
|
||||
menus.dashboard.powermenu.confirmation = false;
|
||||
menus.dashboard.powermenu.avatar.image = "~/.face.icon";
|
||||
|
||||
menus.dashboard.shortcuts.left.shortcut1.icon = "";
|
||||
menus.dashboard.shortcuts.left.shortcut1.command = "zen";
|
||||
menus.dashboard.shortcuts.left.shortcut1.tooltip = "Zen";
|
||||
menus.dashboard.shortcuts.left.shortcut2.icon = "";
|
||||
menus.dashboard.shortcuts.left.shortcut2.command = "caffeine";
|
||||
menus.dashboard.shortcuts.left.shortcut2.tooltip = "Caffeine";
|
||||
menus.dashboard.shortcuts.left.shortcut3.icon = "";
|
||||
menus.dashboard.shortcuts.left.shortcut3.command = "night-shift";
|
||||
menus.dashboard.shortcuts.left.shortcut3.tooltip = "Night-shift";
|
||||
menus.dashboard.shortcuts.left.shortcut4.icon = "";
|
||||
menus.dashboard.shortcuts.left.shortcut4.command = "menu";
|
||||
menus.dashboard.shortcuts.left.shortcut4.tooltip = "Search Apps";
|
||||
|
||||
menus.dashboard.shortcuts.right.shortcut1.icon = "";
|
||||
menus.dashboard.shortcuts.right.shortcut1.command = "hyprpicker -a";
|
||||
menus.dashboard.shortcuts.right.shortcut1.tooltip = "Color Picker";
|
||||
|
||||
menus.dashboard.shortcuts.right.shortcut3.icon = "";
|
||||
menus.dashboard.shortcuts.right.shortcut3.command = "screenshot region swappy";
|
||||
menus.dashboard.shortcuts.right.shortcut3.tooltip = "Screenshot";
|
||||
|
||||
menus.dashboard.directories.left.directory1.label = " Home";
|
||||
menus.dashboard.directories.left.directory1.command = "xdg-open ${homeDir}";
|
||||
|
||||
menus.dashboard.directories.left.directory2.label = " Documents";
|
||||
menus.dashboard.directories.left.directory2.command = "xdg-open ${homeDir}/Documents";
|
||||
|
||||
menus.dashboard.directories.left.directory3.label = " Downloads";
|
||||
menus.dashboard.directories.left.directory3.command = "xdg-open ${homeDir}/Downloads";
|
||||
|
||||
menus.dashboard.directories.right.directory1.label = " Desktop";
|
||||
menus.dashboard.directories.right.directory1.command = "xdg-open ${homeDir}/Desktop";
|
||||
|
||||
menus.dashboard.directories.right.directory2.label = " Videos";
|
||||
menus.dashboard.directories.right.directory2.command = "xdg-open ${homeDir}/Videos";
|
||||
|
||||
menus.dashboard.directories.right.directory3.label = " Pictures";
|
||||
menus.dashboard.directories.right.directory3.command = "xdg-open ${homeDir}/Pictures";
|
||||
|
||||
menus.power.lowBatteryNotification = true;
|
||||
|
||||
wallpaper.enable = false;
|
||||
|
||||
# theme.bar.buttons.workspaces.hover = accent-alt;
|
||||
# theme.bar.buttons.workspaces.active = accent;
|
||||
# theme.bar.buttons.workspaces.available = accent-alt;
|
||||
# theme.bar.buttons.workspaces.occupied = accent-alt;
|
||||
#
|
||||
# theme.bar.menus.background = background;
|
||||
# theme.bar.menus.cards = background-alt;
|
||||
# theme.bar.menus.label = foreground;
|
||||
# theme.bar.menus.text = foreground;
|
||||
# theme.bar.menus.border.color = accent;
|
||||
# theme.bar.menus.popover.text = foreground;
|
||||
# theme.bar.menus.popover.background = background-alt;
|
||||
# theme.bar.menus.listitems.active = accent;
|
||||
# theme.bar.menus.icons.active = accent;
|
||||
# theme.bar.menus.switch.enabled = accent;
|
||||
# theme.bar.menus.check_radio_button.active = accent;
|
||||
# theme.bar.menus.buttons.default = accent;
|
||||
# theme.bar.menus.buttons.active = accent;
|
||||
# theme.bar.menus.iconbuttons.active = accent;
|
||||
# theme.bar.menus.progressbar.foreground = accent;
|
||||
# theme.bar.menus.slider.primary = accent;
|
||||
# theme.bar.menus.tooltip.background = background-alt;
|
||||
# theme.bar.menus.tooltip.text = foreground;
|
||||
# theme.bar.menus.dropdownmenu.background = background-alt;
|
||||
# theme.bar.menus.dropdownmenu.text = foreground;
|
||||
|
||||
# theme.bar.background =
|
||||
# background
|
||||
# + (
|
||||
# if transparentButtons && transparent
|
||||
# then "00"
|
||||
# else ""
|
||||
# );
|
||||
# theme.bar.buttons.text =
|
||||
# if transparent && transparentButtons
|
||||
# then foregroundOnWallpaper
|
||||
# else foreground;
|
||||
# theme.bar.buttons.background =
|
||||
# (
|
||||
# if transparent
|
||||
# then background
|
||||
# else background-alt
|
||||
# )
|
||||
# + (
|
||||
# if transparentButtons
|
||||
# then "00"
|
||||
# else ""
|
||||
# );
|
||||
# theme.bar.buttons.icon = accent;
|
||||
#
|
||||
# theme.bar.buttons.notifications.background = background-alt;
|
||||
# theme.bar.buttons.hover = background;
|
||||
# theme.bar.buttons.notifications.hover = background;
|
||||
# theme.bar.buttons.notifications.total = accent;
|
||||
# theme.bar.buttons.notifications.icon = accent;
|
||||
#
|
||||
# theme.osd.bar_color = accent;
|
||||
# theme.osd.bar_overflow_color = accent-alt;
|
||||
# theme.osd.icon = background;
|
||||
# theme.osd.icon_container = accent;
|
||||
# theme.osd.label = accent;
|
||||
# theme.osd.bar_container = background-alt;
|
||||
#
|
||||
# theme.bar.menus.menu.media.background.color = background-alt;
|
||||
# theme.bar.menus.menu.media.card.color = background-alt;
|
||||
#
|
||||
# theme.notification.background = background-alt;
|
||||
# theme.notification.actions.background = accent;
|
||||
# theme.notification.actions.text = foreground;
|
||||
# theme.notification.label = accent;
|
||||
# theme.notification.border = background-alt;
|
||||
# theme.notification.text = foreground;
|
||||
# theme.notification.labelicon = accent;
|
||||
# theme.notification.close_button.background = background-alt;
|
||||
# theme.notification.close_button.label = "#f38ba8";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -11,4 +11,8 @@
|
||||
};
|
||||
systemd.user.services.hyprpaper.Unit.After =
|
||||
lib.mkForce "graphical-session.target";
|
||||
|
||||
wayland.windowManager.hyprland.settings.exec-once = [
|
||||
"systemctl --user enable --now hyprpaper.service"
|
||||
];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
with lib; let
|
||||
defaultApps = {
|
||||
# check desktop files here: `ls $(echo $XDG_DATA_DIRS| sed "s/:/ /g")`
|
||||
browser = ["brave-browser.desktop"];
|
||||
browser = ["vivaldi-stable.desktop"];
|
||||
text = ["org.gnome.TextEditor.desktop"];
|
||||
image = ["imv-dir.desktop"];
|
||||
audio = ["mpv.desktop"];
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{inputs, ...}: {
|
||||
imports = [inputs.vicinae.homeManagerModules.default];
|
||||
|
||||
services.vicinae = {
|
||||
enable = true;
|
||||
autoStart = true;
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland.settings.exec-once = ["systemctl enable --now --user vicinae.service"];
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
# Wofi is a launcher for Wayland, inspired by rofi.
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
accent = "#${config.lib.stylix.colors.base0D}";
|
||||
background = "#${config.lib.stylix.colors.base00}";
|
||||
background-alt = "#${config.lib.stylix.colors.base01}";
|
||||
foreground = "#${config.lib.stylix.colors.base05}";
|
||||
font = config.stylix.fonts.serif.name;
|
||||
rounding = config.theme.rounding;
|
||||
font-size = config.stylix.fonts.sizes.popups;
|
||||
in {
|
||||
home.packages = with pkgs; [wofi-emoji];
|
||||
|
||||
programs.wofi = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
allow_markup = true;
|
||||
width = 450;
|
||||
show = "drun";
|
||||
prompt = "Apps";
|
||||
normal_window = true;
|
||||
height = 305;
|
||||
allow_images = true;
|
||||
image_size = 24;
|
||||
insensitive = true;
|
||||
hide_scroll = true;
|
||||
no_actions = true;
|
||||
gtk_dark = true;
|
||||
};
|
||||
|
||||
style =
|
||||
lib.mkForce
|
||||
# css
|
||||
''
|
||||
* {
|
||||
font-family: "${font}";
|
||||
font-weight: 500;
|
||||
font-size: ${toString font-size}px;
|
||||
}
|
||||
|
||||
#window {
|
||||
background-color: ${background};
|
||||
color: ${foreground};
|
||||
border-radius: ${toString rounding}px;
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
#input {
|
||||
background-color: ${background-alt};
|
||||
border: 0px solid ${accent};
|
||||
color: ${foreground};
|
||||
padding: 8px 12px;
|
||||
}
|
||||
|
||||
#scroll {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#inner-box {}
|
||||
|
||||
#img {
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
#text {
|
||||
color: ${foreground};
|
||||
}
|
||||
|
||||
#text:selected {
|
||||
color: ${foreground};
|
||||
}
|
||||
|
||||
#entry {
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
background-color: ${accent};
|
||||
color: ${foreground};
|
||||
}
|
||||
|
||||
#unselected {}
|
||||
|
||||
#selected {}
|
||||
|
||||
#input,
|
||||
#entry:selected {
|
||||
border-radius: ${toString rounding}px;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
../../nixos/hyprland.nix
|
||||
../../nixos/docker.nix
|
||||
|
||||
../../nixos/omen.nix # For my laptop only
|
||||
../../nixos/omen.nix # CHANGEME: For my laptop only, remove this (OMEN 16)
|
||||
|
||||
# You should let those lines as is
|
||||
./hardware-configuration.nix
|
||||
|
||||
@@ -1,72 +1,54 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
# Mostly user-specific configuration
|
||||
./variables.nix
|
||||
|
||||
# Programs
|
||||
../../home/programs/kitty
|
||||
# ../../home/programs/alacritty
|
||||
../../home/programs/vivaldi
|
||||
../../home/programs/proton
|
||||
../../home/programs/ghostty
|
||||
../../home/programs/nvf
|
||||
../../home/programs/shell
|
||||
../../home/programs/fetch
|
||||
../../home/programs/git
|
||||
../../home/programs/git/signing.nix
|
||||
../../home/programs/git/lazygit.nix
|
||||
../../home/programs/git/signing.nix # Change the key or remove this file
|
||||
../../home/programs/spicetify
|
||||
../../home/programs/thunar
|
||||
../../home/programs/lazygit
|
||||
../../home/programs/discord
|
||||
../../home/programs/tailscale
|
||||
|
||||
# Scripts
|
||||
../../home/scripts # All scripts
|
||||
../../home/programs/nixy
|
||||
../../home/programs/zathura
|
||||
../../home/programs/nightshift
|
||||
../../home/programs/group/cybersecurity.nix
|
||||
|
||||
# System (Desktop environment like stuff)
|
||||
../../home/system/hyprland
|
||||
../../home/system/hyprlock
|
||||
../../home/system/hyprpanel
|
||||
../../home/system/caelestia-shell
|
||||
../../home/system/hyprpaper
|
||||
../../home/system/zathura
|
||||
../../home/system/mime
|
||||
../../home/system/udiskie
|
||||
../../home/system/vicinae
|
||||
../../home/system/wofi
|
||||
# ../../home/system/hypridle
|
||||
|
||||
./variables.nix # Mostly user-specific configuration
|
||||
./secrets # CHANGEME: You should probably remove this line, this is where I store my secrets
|
||||
];
|
||||
|
||||
home = {
|
||||
inherit (config.var) username;
|
||||
homeDirectory = "/home/" + config.var.username;
|
||||
|
||||
packages = with pkgs; [
|
||||
# Apps
|
||||
bitwarden-desktop # Password manager
|
||||
vlc # Video player
|
||||
blanket # White-noise app
|
||||
obsidian # Note taking app
|
||||
planify # Todolists
|
||||
textpieces # Manipulate texts
|
||||
curtail # Compress images
|
||||
resources # Ressource monitor
|
||||
gnome-clocks # Clocks app
|
||||
gnome-text-editor # Basic graphic text editor
|
||||
mpv # Video player
|
||||
brave # Web browser
|
||||
|
||||
# Privacy
|
||||
ticktick # Todo app
|
||||
session-desktop # Session app, private messages
|
||||
signal-desktop # Signal app, private messages
|
||||
protonvpn-gui
|
||||
proton-pass
|
||||
proton-authenticator
|
||||
ticktick # Privacy friendly todo app
|
||||
stirling-pdf # TODO: Server version
|
||||
calibre
|
||||
|
||||
# Dev
|
||||
go
|
||||
@@ -79,32 +61,24 @@
|
||||
pnpm
|
||||
air
|
||||
duckdb
|
||||
inputs.eleakxir.packages.${stdenv.hostPlatform.system}.leak-utils
|
||||
caido
|
||||
wireshark
|
||||
nuclei
|
||||
|
||||
# Utils
|
||||
zip
|
||||
unzip
|
||||
optipng
|
||||
jpegoptim
|
||||
pfetch
|
||||
btop
|
||||
fastfetch
|
||||
|
||||
# Just cool
|
||||
peaclock
|
||||
cbonsai
|
||||
pipes
|
||||
cmatrix
|
||||
fastfetch
|
||||
|
||||
# Backup
|
||||
vscode
|
||||
brave
|
||||
];
|
||||
|
||||
# Import my profile picture, used by the hyprpanel dashboard
|
||||
file.".face.icon" = {source = ./profile_picture.png;};
|
||||
inherit (config.var) username;
|
||||
homeDirectory = "/home/" + config.var.username;
|
||||
|
||||
# Import a profile picture, used by the caelestia dashboard
|
||||
file.".face" = {source = ./profile_picture.png;};
|
||||
|
||||
# Don't touch this
|
||||
stateVersion = "24.05";
|
||||
|
||||
@@ -13,11 +13,9 @@
|
||||
secrets = {
|
||||
sshconfig = {path = "/home/hadi/.ssh/config";};
|
||||
github-key = {path = "/home/hadi/.ssh/github";};
|
||||
gitlab-key = {path = "/home/hadi/.ssh/gitlab";};
|
||||
jack-key = {path = "/home/hadi/.ssh/jack";};
|
||||
signing-key = {path = "/home/hadi/.ssh/key";};
|
||||
signing-pub-key = {path = "/home/hadi/.ssh/key.pub";};
|
||||
pia = {path = "/home/hadi/.config/pia/pia.ovpn";};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}: {
|
||||
imports = [
|
||||
# Choose your theme here:
|
||||
../../themes/nixy.nix
|
||||
../../themes/rose-pine.nix
|
||||
];
|
||||
|
||||
config.var = {
|
||||
@@ -32,7 +32,7 @@
|
||||
autoGarbageCollector = true;
|
||||
};
|
||||
|
||||
# Let this here
|
||||
# DON'T TOUCH THIS
|
||||
options = {
|
||||
var = lib.mkOption {
|
||||
type = lib.types.attrs;
|
||||
|
||||
@@ -23,6 +23,10 @@ in {
|
||||
}
|
||||
];
|
||||
|
||||
environment.systemPackages = with inputs.nixpkgs-stable.legacyPackages.x86_64-linux; [
|
||||
tailscale
|
||||
];
|
||||
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
package = inputs.nixpkgs-stable.legacyPackages.x86_64-linux.tailscale;
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
# TUIGreet is a display manager.
|
||||
# Legacy, I'm now using SDDM
|
||||
{pkgs, ...}: {
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --asterisks --container-padding 2 --time --time-format '%I:%M %p | %a • %h | %F' --cmd Hyprland";
|
||||
user = "greeter";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [greetd.tuigreet];
|
||||
|
||||
# this is a life saver.
|
||||
# literally no documentation about this anywhere.
|
||||
# might be good to write about this...
|
||||
# https://www.reddit.com/r/NixOS/comments/u0cdpi/tuigreet_with_xmonad_how/
|
||||
systemd.services.greetd.serviceConfig = {
|
||||
Type = "idle";
|
||||
StandardInput = "tty";
|
||||
StandardOutput = "tty";
|
||||
StandardError = "journal"; # Without this errors will spam on screen
|
||||
# Without these bootlogs will spam on screen
|
||||
TTYReset = true;
|
||||
TTYVHangup = true;
|
||||
TTYVTDisallocate = true;
|
||||
};
|
||||
}
|
||||
@@ -90,7 +90,6 @@ in {
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
hyprland-qtutils
|
||||
fd
|
||||
bc
|
||||
gcc
|
||||
@@ -99,9 +98,17 @@ in {
|
||||
xdg-utils
|
||||
wget
|
||||
curl
|
||||
gnupg
|
||||
openssl
|
||||
vim
|
||||
go
|
||||
comma
|
||||
zip
|
||||
unzip
|
||||
optipng
|
||||
jpegoptim
|
||||
pfetch
|
||||
btop
|
||||
];
|
||||
|
||||
xdg.portal = {
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
options.theme = lib.mkOption {
|
||||
type = lib.types.attrs;
|
||||
default = {
|
||||
rounding = 17;
|
||||
gaps-in = 8;
|
||||
gaps-out = 8 * 2;
|
||||
active-opacity = 0.97;
|
||||
inactive-opacity = 0.94;
|
||||
blur = true;
|
||||
border-size = 3;
|
||||
animation-speed = "fast"; # "fast" | "medium" | "slow"
|
||||
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
||||
textColorOnWallpaper =
|
||||
config.lib.stylix.colors.base01; # Color of the text displayed on the wallpaper (Lockscreen, display manager, ...)
|
||||
|
||||
bar = {
|
||||
# Hyprpanel
|
||||
position = "top"; # "top" | "bottom"
|
||||
transparent = true;
|
||||
transparentButtons = false;
|
||||
floating = true;
|
||||
};
|
||||
};
|
||||
description = "Theme configuration options";
|
||||
};
|
||||
|
||||
config.stylix = {
|
||||
enable = true;
|
||||
|
||||
# Mocha
|
||||
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
||||
base16Scheme = {
|
||||
base00 = "0F0F15"; # Default Background
|
||||
base01 = "15151A"; # Lighter Background (Used for status bars, line number and folding marks)
|
||||
base02 = "313244"; # Selection Background
|
||||
base03 = "45475a"; # Comments, Invisibles, Line Highlighting
|
||||
base04 = "585b70"; # Dark Foreground (Used for status bars)
|
||||
base05 = "cdd6f4"; # Default Foreground, Caret, Delimiters, Operators
|
||||
base06 = "f5e0dc"; # Light Foreground (Not often used)
|
||||
base07 = "b4befe"; # Light Background (Not often used)
|
||||
base08 = "f38ba8"; # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
|
||||
base09 = "fab387"; # Integers, Boolean, Constants, XML Attributes, Markup Link Url
|
||||
base0A = "f9e2af"; # Classes, Markup Bold, Search Text Background
|
||||
base0B = "a6e3a1"; # Strings, Inherited Class, Markup Code, Diff Inserted
|
||||
base0C = "94e2d5"; # Support, Regular Expressions, Escape Characters, Markup Quotes
|
||||
base0D = "89b4fa"; # Functions, Methods, Attribute IDs, Headings, Accent color
|
||||
base0E = "cba6f7"; # Keywords, Storage, Selector, Markup Italic, Diff Changed
|
||||
base0F = "f2cdcd"; # Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?>
|
||||
};
|
||||
|
||||
cursor = {
|
||||
name = "phinger-cursors-light";
|
||||
package = pkgs.phinger-cursors;
|
||||
size = 20;
|
||||
};
|
||||
|
||||
fonts = {
|
||||
monospace = {
|
||||
package = pkgs.nerd-fonts.jetbrains-mono;
|
||||
name = "JetBrains Mono Nerd Font";
|
||||
};
|
||||
sansSerif = {
|
||||
package = pkgs.source-sans-pro;
|
||||
name = "Source Sans Pro";
|
||||
};
|
||||
serif = config.stylix.fonts.sansSerif;
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-color-emoji;
|
||||
name = "Noto Color Emoji";
|
||||
};
|
||||
sizes = {
|
||||
applications = 13;
|
||||
desktop = 13;
|
||||
popups = 13;
|
||||
terminal = 13;
|
||||
};
|
||||
};
|
||||
|
||||
polarity = "dark";
|
||||
image = pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/japan-houses.png";
|
||||
sha256 = "sha256-BeTFz+WeulDt5ixg5ni09J439PxMnofWnJz5PGEUgf8=";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
options.theme = lib.mkOption {
|
||||
type = lib.types.attrs;
|
||||
default = {
|
||||
rounding = 20;
|
||||
gaps-in = 10;
|
||||
gaps-out = 10 * 2;
|
||||
active-opacity = 0.96;
|
||||
inactive-opacity = 0.92;
|
||||
blur = true;
|
||||
border-size = 3;
|
||||
animation-speed = "fast"; # "fast" | "medium" | "slow"
|
||||
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
||||
textColorOnWallpaper =
|
||||
config.lib.stylix.colors.base05; # Color of the text displayed on the wallpaper (Lockscreen, display manager, ...)
|
||||
|
||||
bar = {
|
||||
# Hyprpanel
|
||||
position = "top"; # "top" | "bottom"
|
||||
transparent = false;
|
||||
transparentButtons = false;
|
||||
floating = false;
|
||||
};
|
||||
};
|
||||
description = "Theme configuration options";
|
||||
};
|
||||
|
||||
config.stylix = {
|
||||
enable = true;
|
||||
|
||||
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
||||
base16Scheme = {
|
||||
base00 = "09090B"; # Default Background
|
||||
base01 = "1c1e1f"; # Lighter Background (Used for status bars, line number and folding marks)
|
||||
base02 = "313244"; # Selection Background
|
||||
base03 = "45475a"; # Comments, Invisibles, Line Highlighting
|
||||
base04 = "585b70"; # Dark Foreground (Used for status bars)
|
||||
base05 = "cdd6f4"; # Default Foreground, Caret, Delimiters, Operators
|
||||
base06 = "f5e0dc"; # Light Foreground (Not often used)
|
||||
base07 = "b4befe"; # Light Background (Not often used)
|
||||
base08 = "f38ba8"; # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
|
||||
base09 = "fab387"; # Integers, Boolean, Constants, XML Attributes, Markup Link Url
|
||||
base0A = "f9e2af"; # Classes, Markup Bold, Search Text Background
|
||||
base0B = "a6e3a1"; # Strings, Inherited Class, Markup Code, Diff Inserted
|
||||
base0C = "94e2d5"; # Support, Regular Expressions, Escape Characters, Markup Quotes
|
||||
base0D = "8771DA"; # Functions, Methods, Attribute IDs, Headings, Accent color
|
||||
base0E = "cba6f7"; # Keywords, Storage, Selector, Markup Italic, Diff Changed
|
||||
base0F = "f2cdcd"; # Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?>
|
||||
};
|
||||
|
||||
cursor = {
|
||||
name = "phinger-cursors-light";
|
||||
package = pkgs.phinger-cursors;
|
||||
size = 20;
|
||||
};
|
||||
|
||||
fonts = {
|
||||
monospace = {
|
||||
package = pkgs.nerd-fonts.jetbrains-mono;
|
||||
name = "JetBrains Mono Nerd Font";
|
||||
};
|
||||
sansSerif = {
|
||||
package = pkgs.source-sans-pro;
|
||||
name = "Source Sans Pro";
|
||||
};
|
||||
serif = config.stylix.fonts.sansSerif;
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-color-emoji;
|
||||
name = "Noto Color Emoji";
|
||||
};
|
||||
sizes = {
|
||||
applications = 13;
|
||||
desktop = 13;
|
||||
popups = 13;
|
||||
terminal = 13;
|
||||
};
|
||||
};
|
||||
|
||||
polarity = "dark";
|
||||
image = pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/cat-watching-the-star_pixelart_purple_static.png";
|
||||
sha256 = "sha256-P8gCiCC9CZPJyGL4kpvAaOqlNor010s/BUA0muBVfK0=";
|
||||
};
|
||||
};
|
||||
}
|
||||
82
themes/rose-pine.nix
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
options.theme = lib.mkOption {
|
||||
type = lib.types.attrs;
|
||||
default = {
|
||||
rounding = 30;
|
||||
gaps-in = 12;
|
||||
gaps-out = 12 * 2;
|
||||
active-opacity = 0.96;
|
||||
inactive-opacity = 0.94;
|
||||
blur = true;
|
||||
border-size = 4;
|
||||
animation-speed = "fast"; # "fast" | "medium" | "slow"
|
||||
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
||||
textColorOnWallpaper =
|
||||
config.lib.stylix.colors.base00; # Color of the text displayed on the wallpaper (Lockscreen, display manager, ...)
|
||||
};
|
||||
description = "Theme configuration options";
|
||||
};
|
||||
|
||||
config.stylix = {
|
||||
enable = true;
|
||||
|
||||
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
||||
base16Scheme = {
|
||||
base00 = "151320"; # Default Background
|
||||
base01 = "1f1d2e"; # Lighter Background (Used for status bars, line number and folding marks)
|
||||
base02 = "26233a"; # Selection Background
|
||||
base03 = "6e6a86"; # Comments, Invisibles, Line Highlighting
|
||||
base04 = "908caa"; # Dark Foreground (Used for status bars)
|
||||
base05 = "e0def4"; # Default Foreground, Caret, Delimiters, Operators
|
||||
base06 = "e0def4"; # Light Foreground (Not often used)
|
||||
base07 = "524f67"; # Light Background (Not often used)
|
||||
base08 = "eb6f92"; # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
|
||||
base09 = "f6c177"; # Integers, Boolean, Constants, XML Attributes, Markup Link Url
|
||||
base0A = "ebbcba"; # Classes, Markup Bold, Search Text Background
|
||||
base0B = "31748f"; # Strings, Inherited Class, Markup Code, Diff Inserted
|
||||
base0C = "9ccfd8"; # Support, Regular Expressions, Escape Characters, Markup Quotes
|
||||
base0D = "c4a7e7"; # Functions, Methods, Attribute IDs, Headings, Accent color
|
||||
base0E = "f6c177"; # Keywords, Storage, Selector, Markup Italic, Diff Changed
|
||||
base0F = "524f67"; # Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?>
|
||||
};
|
||||
|
||||
cursor = {
|
||||
name = "BreezeX-RosePine-Linux";
|
||||
package = pkgs.rose-pine-cursor;
|
||||
size = 20;
|
||||
};
|
||||
|
||||
fonts = {
|
||||
monospace = {
|
||||
package = pkgs.nerd-fonts.jetbrains-mono;
|
||||
name = "JetBrains Mono Nerd Font";
|
||||
};
|
||||
sansSerif = {
|
||||
package = pkgs.source-sans-pro;
|
||||
name = "Source Sans Pro";
|
||||
};
|
||||
serif = config.stylix.fonts.sansSerif;
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-color-emoji;
|
||||
name = "Noto Color Emoji";
|
||||
};
|
||||
sizes = {
|
||||
applications = 13;
|
||||
desktop = 13;
|
||||
popups = 13;
|
||||
terminal = 13;
|
||||
};
|
||||
};
|
||||
|
||||
polarity = "dark";
|
||||
image = pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/pink-clouds.png";
|
||||
sha256 = "sha256-IvINf62mg9rKjml4sh8hl/j7UHrQQlbm6QnZTaI+TRk=";
|
||||
};
|
||||
};
|
||||
}
|
||||