mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-10-10 17:02:43 +02:00
Compare commits
96
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b0c997dad | ||
|
|
21349e4585 | ||
|
|
f23ec09369 | ||
|
|
7d5ae9fa2c | ||
|
|
8f4117f3e7 | ||
|
|
bd97ba4df7 | ||
|
|
bd678ae32d | ||
|
|
9879131aca | ||
|
|
c2f733d4c9 | ||
|
|
44709a3b7c | ||
|
|
ce8c4f7d73 | ||
|
|
2f2d3cd2ba | ||
|
|
b738cbb8ef | ||
|
|
fdb4d53ec0 | ||
|
|
1a29fda1f9 | ||
|
|
b760904557 | ||
|
|
28d56cf671 | ||
|
|
4db1f329f2 | ||
|
|
7afe2cf7b6 | ||
|
|
434e6ed31d | ||
|
|
f1e266331c | ||
|
|
f745a79af8 | ||
|
|
a99cb710b3 | ||
|
|
9805986c10 | ||
|
|
bc67f2b0e8 | ||
|
|
7cd934c58c | ||
|
|
6e3286419f | ||
|
|
c7781b7483 | ||
|
|
682a5c13df | ||
|
|
82bd78bc73 | ||
|
|
1071ce70d7 | ||
|
|
1ff4785399 | ||
|
|
ed9ccd4b11 | ||
|
|
13cdae0655 | ||
|
|
d0b7183849 | ||
|
|
cea0d0e3f8 | ||
|
|
a4c66b4aff | ||
|
|
56a9bba86b | ||
|
|
1dab571e12 | ||
|
|
93f7328a3b | ||
|
|
0e222a9c50 | ||
|
|
d1125d1571 | ||
|
|
550413c6b1 | ||
|
|
b4537796a2 | ||
|
|
4c0fbc5f0e | ||
|
|
d0a9511ff7 | ||
|
|
262476404e | ||
|
|
9f9906d423 | ||
|
|
0d616266ff | ||
|
|
6b282b5344 | ||
|
|
19fd3ec35d | ||
|
|
324d54683c | ||
|
|
0030034418 | ||
|
|
fb7be79e86 | ||
|
|
5db8135dd5 | ||
|
|
2107d23209 | ||
|
|
77f4b0fc5f | ||
|
|
1642dc97ca | ||
|
|
2b59031896 | ||
|
|
d323e9f702 | ||
|
|
25813d8ab5 | ||
|
|
05ef065d75 | ||
|
|
2722840919 | ||
|
|
9e862337ca | ||
|
|
876ec4ce21 | ||
|
|
e2b7fd8a64 | ||
|
|
752957818b | ||
|
|
1c600dbf3c | ||
|
|
4a648b7f7c | ||
|
|
67d21671c5 | ||
|
|
b8d8ef1aa8 | ||
|
|
2d16f3893b | ||
|
|
2a0c85275f | ||
|
|
23a9fdd4e8 | ||
|
|
246412ae4b | ||
|
|
88eb91c780 | ||
|
|
3b73438d4f | ||
|
|
8088f78f05 | ||
|
|
3b89cf7b35 | ||
|
|
89eb25ca7d | ||
|
|
3ea36fa6bb | ||
|
|
3d468572d5 | ||
|
|
d23c6979f9 | ||
|
|
552d898680 | ||
|
|
5b7c43c8f9 | ||
|
|
f1e9c76d02 | ||
|
|
37f76a4439 | ||
|
|
143f699365 | ||
|
|
d20f0d87d5 | ||
|
|
45639e2531 | ||
|
|
2d2d4fd4a8 | ||
|
|
d49c7ba99e | ||
|
|
29554e41ca | ||
|
|
2a318bdced | ||
|
|
763bbbacd4 | ||
|
|
99f1dd3ec8 |
No files matched your search
@@ -49,21 +49,12 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
- name: Check for changes
|
|
||||||
run: |
|
|
||||||
git fetch origin main "${{ steps.branch.outputs.source }}"
|
|
||||||
HAS_CHANGES=true
|
|
||||||
if git diff --quiet \
|
|
||||||
"origin/main...origin/${{ steps.branch.outputs.source }}"; then
|
|
||||||
HAS_CHANGES=false
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check for existing PR
|
- name: Check for existing PR
|
||||||
id: existing
|
id: existing
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
if $HAS_CHANGES; then
|
|
||||||
PR_NUMBER=$(gh pr list \
|
PR_NUMBER=$(gh pr list \
|
||||||
--base main \
|
--base main \
|
||||||
--head "${{ steps.branch.outputs.source }}" \
|
--head "${{ steps.branch.outputs.source }}" \
|
||||||
@@ -72,7 +63,6 @@ jobs:
|
|||||||
--jq '.[0].number // empty')
|
--jq '.[0].number // empty')
|
||||||
|
|
||||||
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Create PR
|
- name: Create PR
|
||||||
id: create
|
id: create
|
||||||
@@ -80,7 +70,6 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
if $HAS_CHANGES; then
|
|
||||||
gh pr create \
|
gh pr create \
|
||||||
--base main \
|
--base main \
|
||||||
--head "${{ steps.branch.outputs.source }}" \
|
--head "${{ steps.branch.outputs.source }}" \
|
||||||
@@ -95,26 +84,22 @@ jobs:
|
|||||||
--jq '.[0].number')
|
--jq '.[0].number')
|
||||||
|
|
||||||
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
|
||||||
- name: Determine PR number
|
- name: Determine PR number
|
||||||
id: pr
|
id: pr
|
||||||
run: |
|
run: |
|
||||||
if $HAS_CHANGES; then
|
|
||||||
if [ -n "${{ steps.existing.outputs.number }}" ]; then
|
if [ -n "${{ steps.existing.outputs.number }}" ]; then
|
||||||
echo "number=${{ steps.existing.outputs.number }}" >> "$GITHUB_OUTPUT"
|
echo "number=${{ steps.existing.outputs.number }}" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
echo "number=${{ steps.create.outputs.number }}" >> "$GITHUB_OUTPUT"
|
echo "number=${{ steps.create.outputs.number }}" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Enable auto-merge
|
- name: Enable auto-merge
|
||||||
if: steps.pr.outputs.number != ''
|
if: steps.pr.outputs.number != ''
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
if $HAS_CHANGES; then
|
|
||||||
gh pr merge \
|
gh pr merge \
|
||||||
"${{ steps.pr.outputs.number }}" \
|
"${{ steps.pr.outputs.number }}" \
|
||||||
--auto \
|
--auto \
|
||||||
--merge
|
--merge
|
||||||
fi
|
|
||||||
@@ -1,195 +1,463 @@
|
|||||||
⚠️ Documentation outdated. I recently rewrote the entire config using the [dendritic pattern](https://github.com/mightyiam/dendritic/). One of these days, I will update the README.
|
|
||||||
|
|
||||||
# NixOS Configuration
|
# NixOS Configuration
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Installation Guide
|
This repository contains my personal NixOS configuration.
|
||||||
|
|
||||||
⚠️ **Important Notes**
|
The configuration uses the **[dendritic pattern](https://github.com/mightyiam/dendritic)**. Instead of keeping one large system configuration, functionality is split into smaller, composable modules. This makes it easier to reuse pieces of the configuration across hosts and to keep application, hardware, utility, and host-specific configuration separate.
|
||||||
Before applying this configuration on another system, make sure to:
|
|
||||||
- Update the `hostName` (in `configuration.nix` and `home.nix`).
|
|
||||||
|
|
||||||
Requirements: `git` installed. Then run:
|
See the [dendritic pattern repository](https://github.com/mightyiam/dendritic) for an explanation of the approach.
|
||||||
|
|
||||||
```bash
|
|
||||||
cd
|
|
||||||
git clone https://github.com/Totorile1/nixos.git
|
|
||||||
cd nixos
|
|
||||||
sudo cp /etc/nixos/hardware-configuration.nix ./hosts/laptop/hardware-configuration
|
|
||||||
sudo nixos-rebuild switch --flake ~/nixos/#laptop
|
|
||||||
```
|
|
||||||
|
|
||||||
### Things That Don't Work Reliably and need manual setup
|
|
||||||
|
|
||||||
- Librewolf's extension settings
|
|
||||||
- Librewolf's bookmarks
|
|
||||||
- Thunderbird's email servers and settings and birdtray's settings[^1]
|
|
||||||
- Inkscape's settings
|
|
||||||
|
|
||||||
|
|
||||||
[^1]: You must change in Advanced settings Thunderbird command line to the result of `where thunderbird`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Configuration Structure
|
## Installation
|
||||||
|
|
||||||
|
This configuration is primarily designed for my own machines, so some parts are host- and hardware-specific.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
* NixOS
|
||||||
|
* Git
|
||||||
|
* Nix flakes enabled
|
||||||
|
|
||||||
|
Clone the repository:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
git clone https://github.com/tomasriveral/nixos.git
|
||||||
|
cd nixos
|
||||||
|
```
|
||||||
|
|
||||||
|
The available hosts are:
|
||||||
|
|
||||||
|
```text
|
||||||
|
hosts/
|
||||||
|
├── laptop.nix
|
||||||
|
└── desktop.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
Build and switch to a host with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch --flake ~/nixos#laptop
|
||||||
|
```
|
||||||
|
|
||||||
|
or:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch --flake ~/nixos#desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
For a temporary test generation:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild test --flake ~/nixos#laptop
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hardware configuration
|
||||||
|
|
||||||
|
Hardware-specific configuration is kept under:
|
||||||
|
|
||||||
|
```text
|
||||||
|
modules/hardware/
|
||||||
|
```
|
||||||
|
|
||||||
|
This includes:
|
||||||
|
|
||||||
|
* bootloader configuration
|
||||||
|
* disks and filesystems
|
||||||
|
* battery and power management
|
||||||
|
* Bluetooth
|
||||||
|
* NVIDIA
|
||||||
|
* performance settings
|
||||||
|
* udev rules
|
||||||
|
* hardware utilities
|
||||||
|
|
||||||
|
Declarative disk configuration is located in:
|
||||||
|
|
||||||
|
```text
|
||||||
|
modules/hardware/disko/
|
||||||
|
```
|
||||||
|
|
||||||
|
When deploying this configuration to a new machine, review the host and hardware modules rather than assuming the existing hardware configuration is appropriate.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Repository Structure
|
||||||
|
|
||||||
```text
|
```text
|
||||||
nixos/
|
nixos/
|
||||||
├── assets/ # Images, icons, wallpapers, sounds
|
├── assets/ # Wallpapers, images, sounds and other static assets
|
||||||
├── hosts/laptop/ # Host-specific NixOS config
|
├── docs/ # Additional documentation
|
||||||
|
│ └── printing.md
|
||||||
|
│
|
||||||
├── modules/
|
├── modules/
|
||||||
│ ├── home-manager/ # User-level configurations (apps, shell, WM, plugins)
|
│ ├── applications/ # Application and desktop application configuration
|
||||||
│ ├── nixos/ # System-level modules (daemons, services, udev, ly)
|
│ ├── hardware/ # Hardware, boot, disk, battery, GPU and device configuration
|
||||||
│ ├── qt/ # qt modules (qtbatticon)
|
│ ├── other/ # Fonts, cursor, printer, desktop entries, user configuration, etc.
|
||||||
│ └── scripts/ # Custom scripts called from keybinds or tools
|
│ ├── packages/ # Custom packages and scripts
|
||||||
|
│ └── utilities/ # Reusable utilities and supporting services
|
||||||
|
│
|
||||||
|
├── hosts/
|
||||||
|
│ ├── laptop.nix # Laptop-specific configuration
|
||||||
|
│ └── desktop.nix # Desktop-specific configuration
|
||||||
|
│
|
||||||
├── other/
|
├── other/
|
||||||
│ ├── kblayouts/ # Framework 16 RGB macropad layout
|
│ ├── hyprland/ # Hyprland configuration
|
||||||
│ └── quickshell/ # QML configuration for topbar, notifications, screenshot, etc.
|
│ │ ├── hyprland.conf # Previous hyprlang configuration
|
||||||
|
│ │ ├── hyprland.lua # Current Lua configuration
|
||||||
|
│ │ └── README.md
|
||||||
|
│ ├── kblayouts/ # Keyboard and Framework macropad layouts
|
||||||
|
│ ├── mullvad/ # Mullvad configuration
|
||||||
|
│ └── quickshell/ # Quickshell configuration
|
||||||
|
│
|
||||||
|
├── secrets/ # agenix-encrypted secrets
|
||||||
├── flake.nix
|
├── flake.nix
|
||||||
├── flake.lock
|
├── flake.lock
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
> other/quickshell is the older quickshell configuration.
|
---
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
|
||||||
|
## Applications
|
||||||
|
|
||||||
|
`modules/applications/` contains configuration for applications and desktop components.
|
||||||
|
|
||||||
|
Some examples:
|
||||||
|
|
||||||
|
* `anki.nix`
|
||||||
|
* `browser.nix`
|
||||||
|
* `caelestia.nix`
|
||||||
|
* `git.nix`
|
||||||
|
* `gtk.nix`
|
||||||
|
* `hypridle.nix`
|
||||||
|
* `hyprland.nix`
|
||||||
|
* `kitty.nix`
|
||||||
|
* `neovim.nix`
|
||||||
|
* `obsidian.nix`
|
||||||
|
* `rofi.nix`
|
||||||
|
* `thunderbird.nix`
|
||||||
|
* `waybar.nix`
|
||||||
|
* `wlogout.nix`
|
||||||
|
* `zsh.nix`
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
|
||||||
|
`modules/hardware/` contains machine-level configuration such as:
|
||||||
|
|
||||||
|
* battery and power management
|
||||||
|
* Bluetooth
|
||||||
|
* bootloader
|
||||||
|
* disks
|
||||||
|
* hardware detection/configuration
|
||||||
|
* NVIDIA
|
||||||
|
* performance tuning
|
||||||
|
* udev rules
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
`modules/other/` contains configuration that does not fit directly into applications or hardware, such as:
|
||||||
|
|
||||||
|
* cursors
|
||||||
|
* desktop entries
|
||||||
|
* fonts
|
||||||
|
* I/O configuration
|
||||||
|
* printers
|
||||||
|
* user configuration
|
||||||
|
|
||||||
|
## Packages
|
||||||
|
|
||||||
|
`modules/packages/` contains custom packages and scripts used throughout the configuration.
|
||||||
|
|
||||||
|
Examples include:
|
||||||
|
|
||||||
|
* `custom-bottom`
|
||||||
|
* `custom-browserprofiles`
|
||||||
|
* `custom-colorpicker`
|
||||||
|
* `custom-cowsay`
|
||||||
|
* `custom-syllabes`
|
||||||
|
* `custom-tomato`
|
||||||
|
* `custom-weather`
|
||||||
|
* manually derived packages
|
||||||
|
|
||||||
|
Many of these packages are called directly by Hyprland keybindings.
|
||||||
|
|
||||||
|
## Utilities
|
||||||
|
|
||||||
|
`modules/utilities/` contains reusable system utilities and services, including:
|
||||||
|
|
||||||
|
* agenix
|
||||||
|
* audio/media configuration
|
||||||
|
* automatic cleanup
|
||||||
|
* automatic updates
|
||||||
|
* communication and notifications
|
||||||
|
* development tools
|
||||||
|
* documentation tools
|
||||||
|
* Git backup
|
||||||
|
* LaTeX
|
||||||
|
* networking
|
||||||
|
* Nix utilities
|
||||||
|
* office tools
|
||||||
|
* Ollama
|
||||||
|
* RSS tools
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Applications & Tools
|
# Hosts
|
||||||
|
|
||||||
### Shell & Terminal
|
Host-specific configuration is kept under:
|
||||||
- [`zsh`](https://www.zsh.org/) with [`oh-my-zsh`](https://ohmyz.sh/) for shell customization
|
|
||||||
- [`kitty`](https://sw.kovidgoyal.net/kitty/) terminal
|
|
||||||
|
|
||||||
### Window Management
|
```text
|
||||||
- [`hyprland`](https://github.com/hyprwm/Hyprland) (tiling window manager)
|
hosts/
|
||||||
- [`ly`](https://github.com/fairyglade/ly) login manager
|
```
|
||||||
- [`swaylock`](https://github.com/swaywm/swaylock) screen locking
|
|
||||||
- [`hypridle`](https://github.com/hyprwm/Hyprland/wiki/HyprIdle) for idle mode
|
|
||||||
|
|
||||||
### Browsing & Productivity
|
Currently:
|
||||||
- [`librewolf`](https://librewolf-community.gitlab.io/) browser
|
|
||||||
- Extensions: [AdNauseam](https://github.com/dhowe/AdNauseam), [Enhancer for YouTube](https://github.com/ParticleCore/yt-enhancer), [TrackMeNot](https://www.tornhq.com/tmn/), [SponsorBlock](https://sponsor.ajay.app/)
|
|
||||||
- Privacy options mostly enabled; some disabled to avoid conflicts with AdNauseam
|
|
||||||
- [`thunderbird`](https://www.thunderbird.net/) email client
|
|
||||||
- [`obsidian`](https://obsidian.md/) notes and knowledge management
|
|
||||||
- [`libreoffice`](https://www.libreoffice.org/) full-featured office suite
|
|
||||||
|
|
||||||
### Utilities
|
```text
|
||||||
- [`cliphist`](https://github.com/skywind3000/cliphist) clipboard manager
|
hosts/
|
||||||
- [`zoxide`](https://github.com/ajeetdsouza/zoxide) faster directory navigation
|
├── laptop.nix
|
||||||
- [`fastfetch`](https://github.com/LinusDierheimer/fastfetch) system info
|
└── desktop.nix
|
||||||
- [`gnome-calculator`](https://wiki.gnome.org/Apps/Calculator)
|
```
|
||||||
- [`gnome-characters`](https://wiki.gnome.org/Apps/Characters)
|
|
||||||
- [`gnome-disk-utility`](https://wiki.gnome.org/Apps/Disks)
|
|
||||||
- [`gnome-font-viewer`](https://wiki.gnome.org/Apps/FontViewer)
|
|
||||||
- [`nautilus`](https://wiki.gnome.org/Apps/Nautilus) file manager
|
|
||||||
- [`okular`](https://okular.kde.org/) document & image viewer
|
|
||||||
- [`vlc`](https://www.videolan.org/vlc/) media player
|
|
||||||
- [`krita`](https://krita.org/) and [`inkscape`](https://inkscape.org/) for image editing and drawing
|
|
||||||
- [`anki`](https://apps.ankiweb.net/) flashcards for learning
|
|
||||||
- [`texlive`](https://www.tug.org/texlive/) LaTeX distribution
|
|
||||||
- [`biber`](https://ctan.org/pkg/biber) bibliography for LaTeX
|
|
||||||
- [`eza`](https://github.com/eza-community/eza) replacement for `ls`
|
|
||||||
|
|
||||||
### System & Hardware
|
The host files combine the nixos and home-manager modules needed for each machine.
|
||||||
- [`bottom`](https://github.com/ClementTsang/bottom) system monitor
|
|
||||||
- [`tomato-c`](https://github.com/erikras/tomato-c) Pomodoro timer
|
|
||||||
- [`framework-tool-tui`](https://github.com/romanl/fx16-tui) Framework 16 laptop settings
|
|
||||||
|
|
||||||
**Daemons:** `upower`, `pipewire`, `pulseaudio`, `brightnessctl`, `playerctl`, `blueman`, `udiskie`, `networkmanager-applet`, `swww` wallpaper daemon
|
|
||||||
|
|
||||||
### Screenshots, Notifications, Bar and much more!
|
|
||||||
- [caelestia-shell](https://github.com/caelestia-dots/shell)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Keybindings
|
# Hyprland
|
||||||
|
|
||||||
### Window Management
|
Hyprland is configured using its **Lua configuration API**.
|
||||||
| Key | Action |
|
|
||||||
|-----|--------|
|
|
||||||
| `$mod + W` | Toggle floating |
|
|
||||||
| `$mod + G` | Toggle group |
|
|
||||||
| `Alt + Return` | Fullscreen |
|
|
||||||
| `$mod + Arrow keys` / `Alt + Tab` | Move focus |
|
|
||||||
| `$mod + Shift + Ctrl + Arrow keys` | Move window |
|
|
||||||
| `$mod + Shift + Arrow keys` | Resize window |
|
|
||||||
|
|
||||||
### Workspaces
|
The current configuration is:
|
||||||
| Key | Action |
|
|
||||||
|-----|--------|
|
|
||||||
| `$mod + 1..0` | Switch workspace |
|
|
||||||
| `$mod + Shift + 1..0` | Move window to workspace |
|
|
||||||
| `$mod + Ctrl + Arrow keys` | Cycle workspaces |
|
|
||||||
| `$mod + Mouse wheel` | Scroll workspace |
|
|
||||||
| `$mod + S` / `Alt + $mod + S` | Special workspace |
|
|
||||||
|
|
||||||
### Layout
|
```text
|
||||||
| Key | Action |
|
other/hyprland/hyprland.lua
|
||||||
|-----|--------|
|
```
|
||||||
| `$mod + A` | Scroll layout column left |
|
|
||||||
| `$mod + D` | Scroll layout column right |
|
|
||||||
|
|
||||||
### Applications
|
The previous hyprlang configuration remains here:
|
||||||
| Key | Action |
|
|
||||||
|-----|--------|
|
|
||||||
| `$mod + T` | Terminal |
|
|
||||||
| `$mod + E` | File manager |
|
|
||||||
| `$mod + F` | Browser |
|
|
||||||
| `$mod + N` | Notes |
|
|
||||||
| `$mod + Shift + A` | App launcher |
|
|
||||||
| `$mod + Alt + A` | Toggle sidebar |
|
|
||||||
| `$mod + Q` | Kill apps (Steam/Pomodoro to special workspace) |
|
|
||||||
| `$mod + L` | Lock screen |
|
|
||||||
| `$mod + Shift + S` | Screenshot a window|
|
|
||||||
| `F11` | Screenshot the whole screen|
|
|
||||||
|
|
||||||
### Multimedia & System
|
```text
|
||||||
| Key | Action |
|
other/hyprland/hyprland.conf
|
||||||
|-----|--------|
|
```
|
||||||
| F1 | Mute audio |
|
|
||||||
| F2 / F3 | Volume down / up |
|
Host specific hyprland settings are generated by `/modules/applications/hyprland.nix` as `host.lua` which is imported by `hyprland.lua`.
|
||||||
| F4 / F5 / F6 | Media prev / play / next |
|
|
||||||
| F7 / F8 | Brightness down / up |
|
|
||||||
| `$mod + mouse` | Move / resize window |
|
## Workspace layouts
|
||||||
|
|
||||||
|
The current layout configuration is:
|
||||||
|
|
||||||
|
| Workspace | Layout |
|
||||||
|
| --------- | ----------- |
|
||||||
|
| `1` | `master` |
|
||||||
|
| `2` | `scrolling` 0.45 width |
|
||||||
|
| `other` | `dwindle` |
|
||||||
|
|
||||||
|
## Wallpapers
|
||||||
|
|
||||||
|
The wallpapers are stored in:
|
||||||
|
|
||||||
|
```text
|
||||||
|
assets/
|
||||||
|
├── wallpaper1.jpg
|
||||||
|
├── wallpaper2.jpg
|
||||||
|
├── wallpaper3.jpg
|
||||||
|
├── wallpaper4.jpg
|
||||||
|
└── wallpaper5.jpg
|
||||||
|
```
|
||||||
|
|
||||||
|
The active wallpaper is selected based on the workspace:
|
||||||
|
|
||||||
|
| Workspace | Wallpaper |
|
||||||
|
| --------- | ---------------- |
|
||||||
|
| `1` | `wallpaper1.jpg` |
|
||||||
|
| `2` | `wallpaper2.jpg` |
|
||||||
|
| `3` | `wallpaper3.jpg` |
|
||||||
|
| `4` | `wallpaper4.jpg` |
|
||||||
|
| `5` | `wallpaper5.jpg` |
|
||||||
|
| `6` | `wallpaper1.jpg` |
|
||||||
|
| `7` | `wallpaper2.jpg` |
|
||||||
|
| `8` | `wallpaper3.jpg` |
|
||||||
|
| `9` | `wallpaper4.jpg` |
|
||||||
|
| `10` | `wallpaper5.jpg` |
|
||||||
|
|
||||||
|
The Lua configuration contains placeholders for these paths, which are replaced by Nix during configuration generation.
|
||||||
|
|
||||||
|
The five wallpapers are paintings from Thomas Cole's *The Course of Empire* series.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Framework 16 RGB Macropad
|
# Hyprland Keybindings
|
||||||
|
|
||||||
The **Framework 16 RGB macropad** is a 4×6 programmable key grid. Each key triggers one of the keybindings above via a macro.
|
`SUPER` is the primary modifier.
|
||||||
|
|
||||||
If you **don’t have the physical macropad**, the table below shows which keybinding each macro triggers so you can run it from the keyboard instead:
|
## Window management
|
||||||
|
|
||||||
| Macropad Key | Linked Action (Hyprland keybinding) |
|
|
||||||
| ------------ | -------------------------------------------- |
|
|
||||||
| Row 1, Col 1 | Kill all apps except focused (`Ctrl+$mod+6`) |
|
|
||||||
| Row 1, Col 2 | Performance mode (`Ctrl+Alt+7`) |
|
|
||||||
| Row 1, Col 3 | Do not disturb (`Ctrl+$mod+4` |
|
|
||||||
| Row 1, Col 4 | Notification center (`Ctrl+Alt+1`) |
|
|
||||||
| Row 2, Col 1 | Pulseaudio control (`Ctrl+$mod+3`) |
|
|
||||||
| Row 2, Col 2 | Change audio output (`Ctrl+Alt+Shift+0`) |
|
|
||||||
| Row 2, Col 3 | Special characters (`Ctrl+$mod+3`) |
|
|
||||||
| Row 2, Col 4 | Color picker (`Ctrl+Alt+8`) |
|
|
||||||
| Row 3, Col 1 | Pomodoro timer (`Ctrl+Alt+0`) |
|
|
||||||
| Row 4, Col 1 | Launch Anki (`Ctrl+Alt+9`) |
|
|
||||||
|
|
||||||
> Positions are labeled as `[row, column]` starting from top-left `[1,1]`.
|
|
||||||
> Each macro calls a script or application from this configuration.
|
|
||||||
|
|
||||||
### Neovim keybinds
|
|
||||||
|
|
||||||
| Key | Action |
|
| Key | Action |
|
||||||
|-------------|-----------------------|
|
| ----------------------------------- | ----------------- |
|
||||||
| `<Space>` | `<leader>` |
|
| `SUPER + W` | Toggle floating |
|
||||||
|
| `SUPER + G` | Toggle group |
|
||||||
|
| `ALT + Return` | Toggle fullscreen |
|
||||||
|
| `SUPER + Arrow keys` | Move focus |
|
||||||
|
| `SUPER + CTRL + A` | Swap column left |
|
||||||
|
| `SUPER + CTRL + D` | Swap column right |
|
||||||
|
| `SUPER + SHIFT + CTRL + Arrow keys` | Move window |
|
||||||
|
| `SUPER + SHIFT + Arrow keys` | Resize window |
|
||||||
|
| `SUPER + Z` | Drag window |
|
||||||
|
| `SUPER + X` | Resize window |
|
||||||
|
| `SUPER + mouse:272` | Drag window |
|
||||||
|
| `SUPER + mouse:273` | Resize window |
|
||||||
|
|
||||||
|
## Workspaces
|
||||||
|
|
||||||
|
| Key | Action |
|
||||||
|
| ---------------------- | --------------------------------------- |
|
||||||
|
| `SUPER + 1..9` | Focus workspace 1–9 |
|
||||||
|
| `SUPER + 0` | Focus workspace 10 |
|
||||||
|
| `SUPER + SHIFT + 1..9` | Move window to workspace 1–9 |
|
||||||
|
| `SUPER + SHIFT + 0` | Move window to workspace 10 |
|
||||||
|
| `SUPER + CTRL + Right` | Move to relative workspace `+1` |
|
||||||
|
| `SUPER + CTRL + Left` | Move to relative workspace `-1` |
|
||||||
|
| `SUPER + CTRL + Down` | Focus an empty workspace |
|
||||||
|
| `SUPER + mouse_down` | Next workspace |
|
||||||
|
| `SUPER + mouse_up` | Previous workspace |
|
||||||
|
| `SUPER + S` | Toggle special workspace |
|
||||||
|
| `SUPER + ALT + S` | Move active window to special workspace |
|
||||||
|
|
||||||
|
## Scrolling layout
|
||||||
|
|
||||||
|
| Key | Action |
|
||||||
|
| ----------- | --------------------------- |
|
||||||
|
| `SUPER + A` | Move scrolling layout left |
|
||||||
|
| `SUPER + D` | Move scrolling layout right |
|
||||||
|
|
||||||
|
## Custom window management
|
||||||
|
|
||||||
|
### `SUPER + Q`
|
||||||
|
|
||||||
|
A custom Lua function checks the active window.
|
||||||
|
|
||||||
|
* Steam → move it to the special workspace
|
||||||
|
* `custom-pomodoro` → move it to the special workspace
|
||||||
|
* anything else → close the window
|
||||||
|
|
||||||
|
### `SUPER + CTRL + 6`
|
||||||
|
|
||||||
|
Closes every window on the current workspace except the currently focused window.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Applications
|
||||||
|
|
||||||
|
| Key | Action |
|
||||||
|
| ------------------- | ------------------------ |
|
||||||
|
| `SUPER + T` | Kitty |
|
||||||
|
| `SUPER + E` | Dolphin |
|
||||||
|
| `SUPER + F` | Browser profile selector |
|
||||||
|
| `SUPER + N` | Obsidian vault selector |
|
||||||
|
| `SUPER + SHIFT + A` | Application launcher |
|
||||||
|
| `SUPER + Backspace` | Session drawer |
|
||||||
|
| `CTRL + ALT + W` | Sidebar |
|
||||||
|
| `SUPER + L` | Lock screen |
|
||||||
|
| `SUPER + SHIFT + S` | Screenshot picker |
|
||||||
|
| `F11` | Screenshot |
|
||||||
|
| `SUPER + V` | Clipboard history
|
||||||
|
|
||||||
|
Additional bindings launch or control:
|
||||||
|
|
||||||
|
* Hyprland keybinding viewer
|
||||||
|
* Pavucontrol
|
||||||
|
* GNOME Characters
|
||||||
|
* Anki
|
||||||
|
* custom performance mode
|
||||||
|
* custom tomato/pomodoro
|
||||||
|
* custom bottom launcher
|
||||||
|
* custom audio-output selector
|
||||||
|
* Caelestia shell
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Multimedia and Hardware Keys
|
||||||
|
|
||||||
|
| Key | Action |
|
||||||
|
| ---- | -------------------- |
|
||||||
|
| `F1` | Mute audio |
|
||||||
|
| `F2` | Volume down |
|
||||||
|
| `F3` | Volume up |
|
||||||
|
| `F4` | Previous media track |
|
||||||
|
| `F5` | Play/pause |
|
||||||
|
| `F6` | Next media track |
|
||||||
|
| `F7` | Brightness down |
|
||||||
|
| `F8` | Brightness up |
|
||||||
|
|
||||||
|
Volume and brightness bindings repeat while held.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Gestures
|
||||||
|
|
||||||
|
The current Hyprland configuration includes:
|
||||||
|
|
||||||
|
| Gesture | Action |
|
||||||
|
| ----------------------- | ------------- |
|
||||||
|
| Three-finger horizontal | `scroll_move` (only for scrolling layout) |
|
||||||
|
| Two-finger pinch | Cursor zoom |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Framework 16 RGB Macropad
|
||||||
|
|
||||||
|
The Framework 16 RGB Macropad layout is stored at:
|
||||||
|
|
||||||
|
```text
|
||||||
|
other/kblayouts/framework_laptop_16_rgb_macropad.layout.json
|
||||||
|
```
|
||||||
|
|
||||||
|
The macropad is used as a collection of physical shortcuts for actions that already have Hyprland keybindings.
|
||||||
|
|
||||||
|
The macros in the layout generate combinations involving `CTRL`, `ALT`, `SUPER`, and `SHIFT`. The important part is the **logical mapping** between each physical macropad position and its Hyprland shortcut.
|
||||||
|
|
||||||
|
> Positions are documented as `[row, column]`, starting from the top-left.
|
||||||
|
|
||||||
|
| Macropad Key | Linked Action |
|
||||||
|
| ------------ | ------------------------------------------------- |
|
||||||
|
| Row 1, Col 1 | Kill all apps except focused (`CTRL + SUPER + 6`) |
|
||||||
|
| Row 1, Col 2 | Performance mode (`CTRL + ALT + 7`) |
|
||||||
|
| Row 1, Col 3 | Do not disturb (`CTRL + SUPER + 4`) |
|
||||||
|
| Row 1, Col 4 | Notification center (`CTRL + ALT + 1`) |
|
||||||
|
| Row 2, Col 1 | PulseAudio control (`CTRL + SUPER + 3`) |
|
||||||
|
| Row 2, Col 2 | Change audio output (`CTRL + ALT + SHIFT + 0`) |
|
||||||
|
| Row 2, Col 3 | Special characters (`CTRL + SUPER + 5`) |
|
||||||
|
| Row 2, Col 4 | Color picker (`CTRL + ALT + 8`) |
|
||||||
|
| Row 4, Col 1 | Launch Anki (`CTRL + ALT + 9`) |
|
||||||
|
|
||||||
|
The physical layout file contains additional transparent/unused positions, but the bindings above are the active shortcuts documented for the macropad.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Neovim
|
||||||
|
|
||||||
|
Neovim is configured in:
|
||||||
|
|
||||||
|
```text
|
||||||
|
modules/applications/neovim.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
The configuration includes LSP support, Telescope, Git tooling, grammar tooling and custom commands.
|
||||||
|
|
||||||
|
`<Space>` is the leader key.
|
||||||
|
|
||||||
|
| Key | Action |
|
||||||
|
| ------------------ | ---------------------- |
|
||||||
| `§` | Cheatsheet |
|
| `§` | Cheatsheet |
|
||||||
| `<leader>1` | Open fold |
|
| `<leader>1` | Open fold |
|
||||||
| `<leader>2` | Close fold |
|
| `<leader>2` | Close fold |
|
||||||
|
| `<leader>e1` | Show error message |
|
||||||
|
| `<leader>e2` | Show correction |
|
||||||
|
| `<leader>e3` | Show diagnostics |
|
||||||
| `<leader>e4` | Previous error |
|
| `<leader>e4` | Previous error |
|
||||||
| `<leader>e5` | Next error |
|
| `<leader>e5` | Next error |
|
||||||
| `<leader>e1` | See error message |
|
|
||||||
| `<leader>e3` | See list of errors |
|
|
||||||
| `<leader>e2` | Show correction |
|
|
||||||
| `<leader>e<Tab>` | Stop grammar LSP |
|
| `<leader>e<Tab>` | Stop grammar LSP |
|
||||||
| `<leader>f1` | Telescope files |
|
| `<leader>f1` | Telescope files |
|
||||||
| `<leader>f2` | Telescope grep |
|
| `<leader>f2` | Telescope grep |
|
||||||
@@ -200,36 +468,226 @@ If you **don’t have the physical macropad**, the table below shows which keybi
|
|||||||
| `<leader>g3` | Go to declaration |
|
| `<leader>g3` | Go to declaration |
|
||||||
| `<leader>g4` | Go to implementation |
|
| `<leader>g4` | Go to implementation |
|
||||||
| `<leader>g5` | Show references |
|
| `<leader>g5` | Show references |
|
||||||
| `<leader><leader>` | Launch runner (terminal) |
|
| `<leader><leader>` | Launch runner |
|
||||||
| `<leader>r1` | Run fugit |
|
| `<leader>r1` | Run Fugitive |
|
||||||
| `t` | Count syllabes (french) |
|
| `t` | Count French syllables |
|
||||||
|
|
||||||
All moving macros with `<Space>`, `g`, and the recording with `q` are disabled.
|
Some movement macros involving `<Space>`, `g`, and recording with `q` are intentionally disabled.
|
||||||
---
|
|
||||||
|
|
||||||
## Aliases
|
|
||||||
|
|
||||||
| Alias | Command |
|
|
||||||
| ------ | ----------------------------------------------------------------- |
|
|
||||||
| `snrt` | `git add -A && sudo nixos-rebuild test --flake ~/nixos/#laptop` |
|
|
||||||
| `snrs` | `git add -A && sudo nixos-rebuild switch --flake ~/nixos/#laptop` |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Useful Information
|
# Shell
|
||||||
- If you have an error similar to `Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: App info not found for 'org.quickshell'")` see `./modules/other/desktopEntries.nix`
|
|
||||||
- `ls` is an alias for `eza`. If you want more info than the normal `ls` run `eza`, `l`, `ll` or `la`
|
The shell is based on **zsh**.
|
||||||
- `qtbatticon` is a custom battery icon tray, because `cbatticon` and `batticonplus` did not work. Click on it to get more info about the battery.
|
|
||||||
- `man` and `manix` use `fzf` for fuzzy search of pages.
|
Relevant configuration is primarily found in:
|
||||||
- `pkgs-unstable` can be used for unstable nixpkgs packages.
|
|
||||||
- Nix garbage collection runs weekly, deleting generations older than 7 days.
|
```text
|
||||||
- Non-free packages (e.g., Obsidian) are allowed.
|
modules/applications/zsh.nix
|
||||||
- `neovim` plugins configured in `./modules/home-manager/neovim.nix`
|
```
|
||||||
- `oh-my-zsh` plugins configured in `./modules/home-manager/oh-my-zsh.nix`
|
|
||||||
- `ripgrep` default flags: `-S -. -p -n`
|
and related application modules.
|
||||||
- Wallpapers change per workspace (5 paintings from Thomas Cole’s *The Course of Empire*).
|
|
||||||
- LibreWolf search engines: `@q` (Quant), `@hm` (Home-manager), `@np` (nixpkgs), `@nw` (Nixwiki), `@map` (OpenStreetMap).
|
`oh-my-zsh` is used for shell customization.
|
||||||
- `ccat` colors `cat` output when not redirected; disables coloring if output is redirected (e.g., `>>`) to avoid breaking pipelines.
|
|
||||||
- Anki addons: `./modules/nixos/anki.nix`
|
`deja` is used for shell completion.
|
||||||
- TLP config: `./modules/nixos/battery.nix`
|
|
||||||
- Framework 16 RGB macropad layout: `./other/kblayouts/framework_laptop_16_rgb_macropad.layout.json`
|
Useful command-line tools include:
|
||||||
|
|
||||||
|
* `eza`
|
||||||
|
* `zoxide`
|
||||||
|
* `ripgrep`
|
||||||
|
* `fzf`
|
||||||
|
* `fastfetch`
|
||||||
|
* `man`
|
||||||
|
* `manix`
|
||||||
|
|
||||||
|
`ls` is replaced by `eza`.
|
||||||
|
|
||||||
|
Common aliases include:
|
||||||
|
|
||||||
|
```text
|
||||||
|
l
|
||||||
|
ll
|
||||||
|
la
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Git and Nix Workflow
|
||||||
|
|
||||||
|
The configuration includes tooling for Git, Nix development, backups and cherry-picking.
|
||||||
|
|
||||||
|
Relevant modules include:
|
||||||
|
|
||||||
|
```text
|
||||||
|
modules/utilities/gitBackup.nix
|
||||||
|
modules/utilities/nixGitCherryPicker.nix
|
||||||
|
modules/utilities/nixUtils.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
Two useful rebuild aliases are:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snrt
|
||||||
|
```
|
||||||
|
|
||||||
|
which runs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add -A && sudo nixos-rebuild test --flake ~/nixos/#laptop
|
||||||
|
```
|
||||||
|
|
||||||
|
and:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
snrs
|
||||||
|
```
|
||||||
|
|
||||||
|
which runs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add -A && sudo nixos-rebuild switch --flake ~/nixos/#laptop
|
||||||
|
```
|
||||||
|
|
||||||
|
These aliases currently target the laptop host.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Secrets
|
||||||
|
|
||||||
|
Secrets are managed using **agenix**.
|
||||||
|
|
||||||
|
The relevant files are:
|
||||||
|
|
||||||
|
```text
|
||||||
|
secrets/
|
||||||
|
├── ntfy.age
|
||||||
|
└── secrets.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
Encrypted secrets should remain encrypted in Git. Decrypted secret contents and private keys should not be committed.
|
||||||
|
|
||||||
|
* To edit a secret use `agenix -e <secret_file>.age -i /etc/ssh/ssh_host_ed25519_key`.
|
||||||
|
* To decrypt a secret use `sudo agenix -d <secret_file>.age -i /etc/ssh/ssh_host_ed25519_key`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Quickshell
|
||||||
|
|
||||||
|
The legacy Quickshell configuration lives under:
|
||||||
|
|
||||||
|
```text
|
||||||
|
other/quickshell/
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
# Custom Packages
|
||||||
|
|
||||||
|
Custom scripts and packages are located in:
|
||||||
|
|
||||||
|
```text
|
||||||
|
modules/packages/
|
||||||
|
```
|
||||||
|
Examples include:
|
||||||
|
|
||||||
|
* `custom-colorpicker`
|
||||||
|
* `custom-cowsay`
|
||||||
|
* `custom-syllabes`
|
||||||
|
* `custom-tomato`
|
||||||
|
* `custom-weather`
|
||||||
|
* `vivifyManuallyDerived`
|
||||||
|
* `dejaManuallyDerived`
|
||||||
|
|
||||||
|
Or imported in flake.nix from other repos.
|
||||||
|
|
||||||
|
Examples include:
|
||||||
|
* `custom-browserprofiles` Fzf selector between different LibreWolf profiles, private window and the tor browser.
|
||||||
|
* `custom-syllabes` A syllab counter when I write french poetry. (note: algorithmic syllab counting is pretty difficult in french, so this small scripts makes a lot of errors)
|
||||||
|
* `ngcp` (see the [GitHub repo](https://github.com/tomasriveral/Nix-Git-Cherry-Picker)) is what i use to manage between my `laptop` and `desktop` git branch.
|
||||||
|
* `nixpkgs-notifier` (see the [GitHub repo](https://github.com/tomasriveral/nixpkgs-notifier)) notifies my when PRs get merged to nixos-unstable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Applications and Desktop Environment
|
||||||
|
|
||||||
|
The configuration currently contains modules for applications and components such as:
|
||||||
|
|
||||||
|
* Hyprland
|
||||||
|
* Kitty
|
||||||
|
* Dolphin
|
||||||
|
* LibreWolf/browser tooling
|
||||||
|
* Thunderbird
|
||||||
|
* Obsidian
|
||||||
|
* Neovim
|
||||||
|
* Caelestia
|
||||||
|
* Quickshell
|
||||||
|
* Hypridle
|
||||||
|
* Rofi
|
||||||
|
* Waybar
|
||||||
|
* Wlogout
|
||||||
|
* Git
|
||||||
|
* SSH
|
||||||
|
* Mullvad
|
||||||
|
* Bluetooth
|
||||||
|
* audio/media tools
|
||||||
|
* office tools
|
||||||
|
* LaTeX
|
||||||
|
* development tools
|
||||||
|
* Ollama
|
||||||
|
|
||||||
|
The exact set of enabled software depends on the host configuration and imported modules.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Things That Still Require Manual Setup
|
||||||
|
|
||||||
|
Not everything used by the desktop environment is completely declarative.
|
||||||
|
|
||||||
|
Some application state may need to be configured manually after installation:
|
||||||
|
|
||||||
|
* LibreWolf extension settings
|
||||||
|
* LibreWolf bookmarks
|
||||||
|
* Thunderbird account/server settings
|
||||||
|
* Birdtray settings
|
||||||
|
* Inkscape settings
|
||||||
|
* other application-specific user data
|
||||||
|
* git configuration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Useful Information
|
||||||
|
|
||||||
|
* Wallpapers are five paintings from Thomas Cole's *The Course of Empire*.
|
||||||
|
* `qtbatticon` is a custom battery tray indicator.
|
||||||
|
* `man` and `manix` use `fzf` for fuzzy searching.
|
||||||
|
* `pkgs-unstable` is available for packages that need to come from unstable nixpkgs.
|
||||||
|
* `pkgs-master` can be enabled in flake.nix. Attention, all the packages will need to be compiled on the machine.
|
||||||
|
* `pkgs-local` can be enable in flake.nix. Attention, all the packages will need to be compiled on the machine.
|
||||||
|
* Automatic Nix garbage collection removes old generations according to the configured cleanup policy.
|
||||||
|
* Non-free packages are enabled where required.
|
||||||
|
* Neovim plugins are configured in `modules/applications/neovim.nix`.
|
||||||
|
* `oh-my-zsh` configuration is kept with the shell/application modules.
|
||||||
|
* The Framework 16 RGB Macropad layout is stored in `other/kblayouts/framework_laptop_16_rgb_macropad.layout.json`.
|
||||||
|
* Anki-related configuration is distributed across the relevant application/package modules.
|
||||||
|
* Battery and power-related configuration is under `modules/hardware/`.
|
||||||
|
* Custom commands used by Hyprland are generally provided by `modules/packages/`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
Additional documentation is kept close to the corresponding configuration where practical.
|
||||||
|
|
||||||
|
Important documentation files include:
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/printing.md
|
||||||
|
modules/applications/README.md
|
||||||
|
modules/hardware/disko/README.md
|
||||||
|
modules/packages/README.md
|
||||||
|
modules/utilities/README.md
|
||||||
|
other/hyprland/README.md
|
||||||
|
other/mullvad/README.md
|
||||||
|
other/quickshell/README.md
|
||||||
|
```
|
||||||
Generated
+43
-106
@@ -1,30 +1,5 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"agenix": {
|
|
||||||
"inputs": {
|
|
||||||
"darwin": "darwin",
|
|
||||||
"home-manager": [
|
|
||||||
"home-manager"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": "systems"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770165109,
|
|
||||||
"narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=",
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"rev": "b027ee29d959fda4b60b57566d64c98a202e0feb",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"caelestia-cli": {
|
"caelestia-cli": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"caelestia-shell": [
|
"caelestia-shell": [
|
||||||
@@ -36,11 +11,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786071436,
|
"lastModified": 1781239472,
|
||||||
"narHash": "sha256-/CQJ781dRGWWUMrJ34vIj1PQnNEEWgnEEuod0r5LKGk=",
|
"narHash": "sha256-WFL8jZMWNH1tx3UwaJ9aa9NN25uOEJ9mbKPRNQJY/xM=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "cli",
|
"repo": "cli",
|
||||||
"rev": "751fbc555a83faba5dd589270d14eeb22afab174",
|
"rev": "3f3229aed4f36752a02fd870fd6cad94bd76555f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -59,11 +34,11 @@
|
|||||||
"quickshell": "quickshell"
|
"quickshell": "quickshell"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786238888,
|
"lastModified": 1781408632,
|
||||||
"narHash": "sha256-pnO0u0UUYwkr72pJR5Giu93LZfU/fhTKJZYa1xeM7Po=",
|
"narHash": "sha256-kYVf3Jye4UhyBrtubYcSrmVyFv9uqOY2JvjmElFiZHE=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "shell",
|
"repo": "shell",
|
||||||
"rev": "817a220e8e87c4df9f3681033a0d8a8054cdaa30",
|
"rev": "f86c359cd90530bacc800e94e35ffbebecd3f58f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -72,28 +47,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"darwin": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744478979,
|
|
||||||
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lnl7",
|
|
||||||
"ref": "master",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"disko": {
|
"disko": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -119,12 +72,12 @@
|
|||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785627969,
|
"lastModified": 1778716662,
|
||||||
"narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
|
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||||
"rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
|
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
||||||
"revCount": 483,
|
"revCount": 475,
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.483%2Brev-427bf4bd9435fdf21321c8cc628c24efc14c0f7a/019fc124-5bcc-79d1-a1e4-306df724dc0a/source.tar.gz"
|
"url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.475%2Brev-f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb/019e2533-0324-7e90-93eb-29b02e1a61cd/source.tar.gz"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
@@ -133,7 +86,7 @@
|
|||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems_2"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1731533236,
|
||||||
@@ -155,11 +108,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785119570,
|
"lastModified": 1781319724,
|
||||||
"narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=",
|
"narHash": "sha256-ZGuxexEMo4Xv28KJ0dX/m/PHN4oZIOnxHZpNTyrvx4M=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d",
|
"rev": "8355f0a16b2dbb06a97959a918af5b239bbe05ae",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -171,11 +124,11 @@
|
|||||||
},
|
},
|
||||||
"import-tree": {
|
"import-tree": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784254960,
|
"lastModified": 1778781969,
|
||||||
"narHash": "sha256-iI88R3wHz8wTKQb5orvpc51L/Xr64AJyxid/0MKa/b8=",
|
"narHash": "sha256-Jjuz5CmSkur8KvLDoGa+vylEp+RkQtv4mt/qcMznpH0=",
|
||||||
"owner": "vic",
|
"owner": "vic",
|
||||||
"repo": "import-tree",
|
"repo": "import-tree",
|
||||||
"rev": "4ebb10ae17d5f1ad366e7aef5b92cb8eecf24f69",
|
"rev": "d321337efd0f23a9eb14a42adb7b2c29313ab274",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -211,11 +164,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786462419,
|
"lastModified": 1781373243,
|
||||||
"narHash": "sha256-A7Q3UIyzDg1O54E0W6HOQIzvsVJq/rMuelJR+ELLRvI=",
|
"narHash": "sha256-CpZ5FEU1BtW6K4FywtCCE2wJs6R/Ifps3etRDh8NJ9w=",
|
||||||
"owner": "tomasriveral",
|
"owner": "tomasriveral",
|
||||||
"repo": "nix-git-cherry-picker",
|
"repo": "nix-git-cherry-picker",
|
||||||
"rev": "aec69257dc9b68d875333ec9f4a7b310d878abd1",
|
"rev": "9865dba535620831ae7cab395bf404f8f464df0e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -226,11 +179,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786535285,
|
"lastModified": 1781216227,
|
||||||
"narHash": "sha256-rG5HKMAgAhMgydvKGtco6rqTxRq4EDZQCx9USLvVqYw=",
|
"narHash": "sha256-9mUW6gNwoN2SWc/l0fW4svPNOulXLl8ijqKyeSOGgJE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9f78f44a87948854445dae0b6bf82b2e87e4efb5",
|
"rev": "a0374025a863d007d98e3297f6aa46cc3141c2f0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -242,11 +195,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785031560,
|
"lastModified": 1777168982,
|
||||||
"narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
|
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "nixpkgs.lib",
|
||||||
"rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
|
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -265,11 +218,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785077063,
|
"lastModified": 1781273662,
|
||||||
"narHash": "sha256-rJxX9Mq16TOiIlf+nNR4SaLsWf1yII8xsQpJUNio3Yg=",
|
"narHash": "sha256-50dd7Cs1mUHq1srw7UojdzCYOB4TfrIXMv7XHHPU9zw=",
|
||||||
"owner": "tomasriveral",
|
"owner": "tomasriveral",
|
||||||
"repo": "nixpkgs-notifier",
|
"repo": "nixpkgs-notifier",
|
||||||
"rev": "39a89ffbdc49cc9ab6f67bc4be7ea2f7d3e2b38c",
|
"rev": "12183f26e8b196d9906f82dc05f9672793c61038",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -280,11 +233,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786534138,
|
"lastModified": 1781328464,
|
||||||
"narHash": "sha256-fBJMdnKUTUDtfi/BYLr71HLaC9dG382arxLF2Egg2uo=",
|
"narHash": "sha256-j9uBlHI0eJ9zWU9IlF6SlBBPdeJu30hcvar31IRKHpw=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "044bfe75bfe4c7bbe043dc17b5e42ea823b84a09",
|
"rev": "5a722a7155bfc9fbe657f28d26b71860d95324bc",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -304,11 +257,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786346006,
|
"lastModified": 1780908812,
|
||||||
"narHash": "sha256-PDM9fB1zBhqVVE75WxRM7vIo3QhL2LGKKdd6N+hTGlg=",
|
"narHash": "sha256-syxEJP0NNgVZYHp/zRVuz32VYf+ULD9itZk7V06SCos=",
|
||||||
"owner": "tomasriveral",
|
"owner": "tomasriveral",
|
||||||
"repo": "notewrapper",
|
"repo": "notewrapper",
|
||||||
"rev": "689c3074c03328e2086dc032a2fc3de00bbef466",
|
"rev": "e670ef935f0dd87dc8a8c6982147a9b8dce7565e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -328,11 +281,11 @@
|
|||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786270331,
|
"lastModified": 1781158593,
|
||||||
"narHash": "sha256-GRhNuYIXR/0WWBya4CHfTKyCbL3wuFPJC5yBh5pHU8s=",
|
"narHash": "sha256-zxlheX4o1MK00dkYzoXm7Srj5SD9iOCSp4N7f1iShr0=",
|
||||||
"owner": "r14dd",
|
"owner": "r14dd",
|
||||||
"repo": "patent",
|
"repo": "patent",
|
||||||
"rev": "d852cea921124a8b9002db9beb2af2d935af8130",
|
"rev": "68772d068088d62a030619090959165af5e71ed1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -349,11 +302,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785704021,
|
"lastModified": 1781053488,
|
||||||
"narHash": "sha256-eQtczKMAS4ItlB4pr1B3MqBZiyRVl2nkqNdtyRSQMa8=",
|
"narHash": "sha256-P4WEBaKgl8flRckHxXGHzT0potPvB3x8ZFIp9gLEAMY=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "28771c7c74b42e20afca0b1b63980cb46515537c",
|
"rev": "d99d87d5e5ec4e696815348692fdaaf0b6be1b2c",
|
||||||
"revCount": 835,
|
"revCount": 822,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
},
|
},
|
||||||
@@ -364,7 +317,6 @@
|
|||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
|
||||||
"caelestia-shell": "caelestia-shell",
|
"caelestia-shell": "caelestia-shell",
|
||||||
"disko": "disko",
|
"disko": "disko",
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
@@ -417,21 +369,6 @@
|
|||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"systems_2": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681028828,
|
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -47,11 +47,6 @@
|
|||||||
url = "github:nix-community/disko";
|
url = "github:nix-community/disko";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
agenix = {
|
|
||||||
url = "github:ryantm/agenix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.home-manager.follows = "home-manager";
|
|
||||||
};
|
|
||||||
/*
|
/*
|
||||||
microPlugins-vivify = {
|
microPlugins-vivify = {
|
||||||
url = "git+https://codeberg.org/gibbert/micro-vivify";
|
url = "git+https://codeberg.org/gibbert/micro-vivify";
|
||||||
@@ -69,12 +64,15 @@
|
|||||||
flake = let
|
flake = let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
unfreePkgs = [
|
unfreePkgs = [
|
||||||
|
"code"
|
||||||
"hplip"
|
"hplip"
|
||||||
"nvidia-x11"
|
"nvidia-x11"
|
||||||
"nvidia-settings"
|
"nvidia-settings"
|
||||||
"steam"
|
"steam"
|
||||||
"steam-unwrapped"
|
"steam-unwrapped"
|
||||||
"cheatsheet.nvim"
|
"cheatsheet.nvim"
|
||||||
|
"vscode"
|
||||||
|
"vscode-fhs"
|
||||||
"zoom-us"
|
"zoom-us"
|
||||||
"zoom"
|
"zoom"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -402,6 +402,24 @@
|
|||||||
keyword = "nix function search";
|
keyword = "nix function search";
|
||||||
url = "https://noogle.dev";
|
url = "https://noogle.dev";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "EPFL Moodle";
|
||||||
|
tags = ["epfl" "moodle"];
|
||||||
|
keyword = "epfl moodle";
|
||||||
|
url = "https://moodle.epfl.ch/my/courses.php";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "EPFL ICC Courseware";
|
||||||
|
tags = ["icc" "epfl" "courseware"];
|
||||||
|
keyword = "icc epfl courseware";
|
||||||
|
url = "https://courseware.epfl.ch/learner-dashboard/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Detexify";
|
||||||
|
tags = ["draw" "Latex" "symbols"];
|
||||||
|
keyword = "draw latex symbols";
|
||||||
|
url = "https://detexify.kirelabs.org/";
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
search = {
|
search = {
|
||||||
|
|||||||
@@ -24,16 +24,16 @@
|
|||||||
inhibitWhenAudio = true;
|
inhibitWhenAudio = true;
|
||||||
timeouts = [
|
timeouts = [
|
||||||
{
|
{
|
||||||
timeout = 180;
|
timeout = 1000;
|
||||||
idleAction = "lock";
|
idleAction = "lock";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
timeout = 300;
|
timeout = 1010;
|
||||||
idleAction = "dpms off"; # what's that?
|
idleAction = "dpms off"; # what's that?
|
||||||
returnAction = "dpms on";
|
returnAction = "dpms on";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
timeout = 600;
|
timeout = 12200;
|
||||||
idleAction = ["systemctl" "suspend-then-hibernate"];
|
idleAction = ["systemctl" "suspend-then-hibernate"];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ _: {
|
|||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
/*
|
/*
|
||||||
|
for some reason this doesnt work really well. So it's best to setup git imperatively
|
||||||
|
push.autoSetupRemote to true
|
||||||
settings = {
|
settings = {
|
||||||
init.defaultBranch = "main";
|
init.defaultBranch = "main";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{...}: {
|
_: {
|
||||||
flake.nixosModules.hyprland = {
|
flake.nixosModules.hyprland = {
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-unstable,
|
||||||
@@ -39,7 +39,6 @@
|
|||||||
text = ''
|
text = ''
|
||||||
hl.on("hyprland.start", function()
|
hl.on("hyprland.start", function()
|
||||||
hl.exec_cmd("qtbatticon")
|
hl.exec_cmd("qtbatticon")
|
||||||
hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
hl.monitor({
|
hl.monitor({
|
||||||
@@ -93,6 +92,7 @@ let
|
|||||||
(builtins.readFile ../../other/hyprland/hyprland.lua);
|
(builtins.readFile ../../other/hyprland/hyprland.lua);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/
|
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/
|
||||||
wayland.windowManager.hyprland.enable = true;
|
wayland.windowManager.hyprland.enable = true;
|
||||||
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland;
|
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland;
|
||||||
|
|||||||
@@ -14,7 +14,6 @@
|
|||||||
flake.nixosModules.kdrive-desktop = {pkgs-unstable, ...}: {
|
flake.nixosModules.kdrive-desktop = {pkgs-unstable, ...}: {
|
||||||
environment.systemPackages = with pkgs-unstable; [
|
environment.systemPackages = with pkgs-unstable; [
|
||||||
rclone
|
rclone
|
||||||
icloudpd
|
|
||||||
self.packages.${pkgs-unstable.system}.custom-checkKdrive
|
self.packages.${pkgs-unstable.system}.custom-checkKdrive
|
||||||
self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop
|
self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
_: {
|
|
||||||
flake.nixosModules.mullvad = _: {
|
|
||||||
services.mullvad-vpn = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
flake.homeModules.mullvad = _: {
|
|
||||||
programs.mullvad-vpn = {
|
|
||||||
# gui
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
force = true;
|
force = true;
|
||||||
text = ''
|
text = ''
|
||||||
{
|
{
|
||||||
"directory": ["~/kdrive/Notes/"],
|
"directory": ["~/Documents/Notes/"],
|
||||||
"render": true,
|
"render": true,
|
||||||
"jumpToEndOfFileOnLaunch": true,
|
"jumpToEndOfFileOnLaunch": true,
|
||||||
"editor": "neovim",
|
"editor": "neovim",
|
||||||
@@ -16,13 +16,17 @@
|
|||||||
"dateEntry": "# %Y %m %d %a",
|
"dateEntry": "# %Y %m %d %a",
|
||||||
"newLineOnOpening": true,
|
"newLineOnOpening": true,
|
||||||
"backup": {
|
"backup": {
|
||||||
"enable": false,
|
"enable": true,
|
||||||
"directory": {
|
"directory": {
|
||||||
"~/Documents/Notes/": "~/kdrive/Notes/",
|
"~/Documents/Notes/": "~/kdrive/Notes/"
|
||||||
"~/test/": "~/backupTest/"
|
|
||||||
},
|
},
|
||||||
"interval": "daily",
|
"interval": "daily",
|
||||||
"rsyncArgs": ["-Lqah", "--update"]
|
"rsyncArgs": ["-Lqah", "--update"],
|
||||||
|
"git": {
|
||||||
|
"enable": true,
|
||||||
|
"name": "Tomas Rivera",
|
||||||
|
"email": "tomas.riveral@icloud.com"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
@@ -47,7 +51,7 @@
|
|||||||
"backup": {
|
"backup": {
|
||||||
"enable": false,
|
"enable": false,
|
||||||
"directory": {
|
"directory": {
|
||||||
"~/Documents/Notes/": "~/kdrive/Notes/",
|
"~/Documents/Notes/": "~/hdd/kdrive/Notes/",
|
||||||
"~/test/": "~/backupTest/"
|
"~/test/": "~/backupTest/"
|
||||||
},
|
},
|
||||||
"interval": "daily",
|
"interval": "daily",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
_: {
|
_: {
|
||||||
|
|
||||||
flake.homeModules.tmux = _: {
|
flake.homeModules.tmux = _: {
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -36,12 +36,18 @@ _: {
|
|||||||
home.packages = [
|
home.packages = [
|
||||||
#self.packages.${pkgs.system}.dejaManuallyDerived
|
#self.packages.${pkgs.system}.dejaManuallyDerived
|
||||||
pkgs-unstable.deja
|
pkgs-unstable.deja
|
||||||
|
pkgs-unstable.trash-cli
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autosuggestion.enable = false; # zsh-autocomplete is replaced by deja
|
autosuggestion.enable = false; # zsh-autocomplete is replaced by deja
|
||||||
initContent = ''
|
initContent = ''
|
||||||
|
# those aliases can't be written in nix, because of ö
|
||||||
|
# l and ö are very close
|
||||||
|
alias -- ös=ls
|
||||||
|
alias -- öös=ls
|
||||||
|
|
||||||
# Safe cat that uses colorize plugin ccat
|
# Safe cat that uses colorize plugin ccat
|
||||||
custom-cat() {
|
custom-cat() {
|
||||||
if [[ -t 1 ]]; then
|
if [[ -t 1 ]]; then
|
||||||
@@ -60,7 +66,11 @@ _: {
|
|||||||
}
|
}
|
||||||
eval "$(direnv hook zsh)"
|
eval "$(direnv hook zsh)"
|
||||||
eval "$(deja init zsh)"
|
eval "$(deja init zsh)"
|
||||||
fastfetch''\n'';
|
if [[ "$TERM_PROGRAM" != "vscode" ]]; then
|
||||||
|
fastfetch
|
||||||
|
fi
|
||||||
|
|
||||||
|
'';
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
".." = "z ..";
|
".." = "z ..";
|
||||||
grep = "rg";
|
grep = "rg";
|
||||||
@@ -89,6 +99,11 @@ _: {
|
|||||||
nvvim = "nvim";
|
nvvim = "nvim";
|
||||||
nviim = "nvim";
|
nviim = "nvim";
|
||||||
hledger-ui = "puffin";
|
hledger-ui = "puffin";
|
||||||
|
rm = "trash-put";
|
||||||
|
rml = "trash-list";
|
||||||
|
rmr = "trash-restore";
|
||||||
|
rme = "trash-empty";
|
||||||
|
rmx = "trash-rm";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -336,184 +336,5 @@
|
|||||||
install -m755 qtbatticon $out/bin/
|
install -m755 qtbatticon $out/bin/
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
# This was replaced by caelestia shell's Game Mode
|
|
||||||
packages.custom-performance = pkgs.writeShellApplication {
|
|
||||||
name = "custom-performance";
|
|
||||||
runtimeInputs = with pkgs; [
|
|
||||||
hyprland
|
|
||||||
brightnessctl
|
|
||||||
swaynotificationcenter
|
|
||||||
self.packages.${pkgs.system}.custom-wallpaper
|
|
||||||
libnotify
|
|
||||||
inputs.caelestia-shell.packages.${pkgs.system}.default
|
|
||||||
];
|
|
||||||
text = ''
|
|
||||||
STATE="$HOME/.cache/hypr-battery-saver"
|
|
||||||
|
|
||||||
enable() {
|
|
||||||
mkdir -p "$(dirname "$STATE")"
|
|
||||||
|
|
||||||
echo "Enabling battery saver mode..."
|
|
||||||
|
|
||||||
# Save brightness
|
|
||||||
brightnessctl get > "''${STATE}.brightness" 2>/dev/null || true
|
|
||||||
|
|
||||||
# Kill heavy UI components
|
|
||||||
pkill -f caelestia-shell || true
|
|
||||||
pkill -f caelestia || true
|
|
||||||
pkill shell || true
|
|
||||||
pkill -f custom-wallpaper || true
|
|
||||||
|
|
||||||
# Start lightweight notifications
|
|
||||||
pkill swaync || true
|
|
||||||
swaync & disown
|
|
||||||
|
|
||||||
# Start lightweight waybar
|
|
||||||
pkill waybar || true
|
|
||||||
waybar & disown
|
|
||||||
|
|
||||||
# Lower refresh rate (BIGGEST win)
|
|
||||||
hyprctl keyword monitor "eDP-1,2560x1600@60,0x0,1"
|
|
||||||
|
|
||||||
# Core performance toggles
|
|
||||||
hyprctl --batch "\
|
|
||||||
keyword animations:enabled 0;\
|
|
||||||
keyword animation borderangle,0;\
|
|
||||||
keyword decoration:shadow:enabled 0;\
|
|
||||||
keyword decoration:blur:enabled 0;\
|
|
||||||
keyword decoration:rounding 0;\
|
|
||||||
keyword decoration:fullscreen_opacity 1;\
|
|
||||||
keyword general:gaps_in 0;\
|
|
||||||
keyword general:gaps_out 0;\
|
|
||||||
keyword general:border_size 1;\
|
|
||||||
keyword decoration:active_opacity 1;\
|
|
||||||
keyword decoration:inactive_opacity 1;\
|
|
||||||
keyword misc:vfr true"
|
|
||||||
|
|
||||||
# Lower brightness
|
|
||||||
brightnessctl set 5% 2>/dev/null || true
|
|
||||||
|
|
||||||
touch "$STATE"
|
|
||||||
|
|
||||||
notify-send "Battery Saver" "Enabled"
|
|
||||||
}
|
|
||||||
|
|
||||||
disable() {
|
|
||||||
echo "Disabling battery saver mode..."
|
|
||||||
|
|
||||||
# Restore refresh rate
|
|
||||||
hyprctl keyword monitor "eDP-1,2560x1600@165,0x0,1"
|
|
||||||
|
|
||||||
# Restore Caelestia
|
|
||||||
pkill swaync || true
|
|
||||||
pkill waybar || true
|
|
||||||
caelestia shell -d >/dev/null 2>&1 &
|
|
||||||
disown
|
|
||||||
|
|
||||||
|
|
||||||
# Restart wallpaper
|
|
||||||
custom-wallpaper >/dev/null 2>&1 &
|
|
||||||
disown
|
|
||||||
|
|
||||||
# Restore full UI via reload (safe here on exit)
|
|
||||||
hyprctl reload
|
|
||||||
|
|
||||||
# Restore brightness
|
|
||||||
if [[ -f "''${STATE}.brightness" ]]; then
|
|
||||||
brightnessctl set "$(cat "''${STATE}.brightness")" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f "$STATE" "''${STATE}.brightness"
|
|
||||||
|
|
||||||
notify-send "Battery Saver" "Disabled"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ -f "$STATE" ]]; then
|
|
||||||
disable
|
|
||||||
else
|
|
||||||
enable
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
# Old script that was used for the battery. Might not work.
|
|
||||||
packages.custom-olddeprecatedbatterynotify = pkgs.writeShellApplication {
|
|
||||||
name = "custom-olddeprecatedbatterynotify";
|
|
||||||
|
|
||||||
runtimeInputs = with pkgs; [
|
|
||||||
libnotify # provides notify-send
|
|
||||||
systemd # provides systemctl
|
|
||||||
];
|
|
||||||
|
|
||||||
text = ''
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
LOW="''${BATTERY_LOW_THRESHOLD:-20}"
|
|
||||||
CRITICAL="''${BATTERY_CRITICAL_THRESHOLD:-5}"
|
|
||||||
FULL="''${BATTERY_FULL_THRESHOLD:-95}"
|
|
||||||
INTERVAL="''${BATTERY_INTERVAL:-30}"
|
|
||||||
ACTION="''${BATTERY_CRITICAL_ACTION:-systemctl suspend}"
|
|
||||||
|
|
||||||
notify() {
|
|
||||||
notify-send -a "Battery" -u "$1" "$2" "$3"
|
|
||||||
}
|
|
||||||
|
|
||||||
get_info() {
|
|
||||||
total=0
|
|
||||||
count=0
|
|
||||||
|
|
||||||
for bat in /sys/class/power_supply/BAT*; do
|
|
||||||
[ -f "$bat/capacity" ] || continue
|
|
||||||
capacity=$(<"$bat/capacity")
|
|
||||||
status=$(<"$bat/status")
|
|
||||||
total=$((total + capacity))
|
|
||||||
count=$((count + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
[ "$count" -gt 0 ] || exit 0
|
|
||||||
percentage=$((total / count))
|
|
||||||
}
|
|
||||||
|
|
||||||
last_state=""
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
get_info
|
|
||||||
|
|
||||||
if [[ "$status" == "Discharging" && "$percentage" -le "$CRITICAL" ]]; then
|
|
||||||
notify critical "Battery Critically Low" "$percentage% — suspending."
|
|
||||||
$ACTION
|
|
||||||
|
|
||||||
elif [[ "$status" == "Discharging" && "$percentage" -le "$LOW" ]]; then
|
|
||||||
if [[ "$last_state" != "low" ]]; then
|
|
||||||
notify normal "Battery Low" "$percentage% remaining."
|
|
||||||
last_state="low"
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif [[ "$status" != "Discharging" && "$percentage" -ge "$FULL" ]]; then
|
|
||||||
if [[ "$last_state" != "full" ]]; then
|
|
||||||
notify normal "Battery Full" "$percentage% — unplug charger."
|
|
||||||
last_state="full"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
last_state=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep "$INTERVAL"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
flake.homeModules.cbatticon = _: {
|
|
||||||
# don't works. some GTK error. I let it here if someday, someone is interest in this shit.
|
|
||||||
# ChatGPT half baked a replacement that works on my system.
|
|
||||||
# see qtbatticon
|
|
||||||
services.cbatticon = {
|
|
||||||
enable = true;
|
|
||||||
lowLevelPercent = 20;
|
|
||||||
criticalLevelPercent = 5;
|
|
||||||
batteryId = "BAT1";
|
|
||||||
hideNotification = true; # we use another script for battery notifications
|
|
||||||
updateIntervalSeconds = 10;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,26 @@
|
|||||||
_: {
|
_: {
|
||||||
flake.nixosModules.hardwareUtils-laptop = {pkgs, ...}: {
|
flake.nixosModules.hardwareUtils-laptop = {pkgs-unstable, ...}: {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs-unstable; [
|
||||||
# used for the framework 16 laptop
|
# used for the framework 16 laptop
|
||||||
#framework-tool
|
framework-tool
|
||||||
#framework-tool-tui
|
framework-tool-tui
|
||||||
vial # Open-source GUI and QMK fork for configuring your keyboard in real time
|
vial # Open-source GUI and QMK fork for configuring your keyboard in real time
|
||||||
|
netwatch
|
||||||
|
(diskwatch.override {
|
||||||
|
withSmartmontools = true;
|
||||||
|
})
|
||||||
|
syswatch
|
||||||
];
|
];
|
||||||
|
services.fwupd.enable = true; # update device firmware
|
||||||
|
};
|
||||||
|
flake.nixosModules.hardwareUtils-desktop = {pkgs-unstable, ...}: {
|
||||||
|
environment.systemPackages = with pkgs-unstable; [
|
||||||
|
netwatch
|
||||||
|
(diskwatch.override {
|
||||||
|
withSmartmontools = true;
|
||||||
|
})
|
||||||
|
syswatch
|
||||||
|
];
|
||||||
|
services.fwupd.enable = true; # update device firmware
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
_: {
|
|
||||||
flake.nixosModules.onxyboox = {pkgs, ...}: {
|
|
||||||
services.gvfs.enable = true;
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
gvfs
|
|
||||||
calibre
|
|
||||||
kdePackages.kio-extras
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
fonts
|
fonts
|
||||||
games
|
games
|
||||||
hardware-configuration-desktop
|
hardware-configuration-desktop
|
||||||
|
hardwareUtils-desktop
|
||||||
hdd
|
hdd
|
||||||
hledger
|
hledger
|
||||||
hledger-desktop
|
hledger-desktop
|
||||||
@@ -38,19 +39,19 @@
|
|||||||
latex
|
latex
|
||||||
ly
|
ly
|
||||||
mathematics
|
mathematics
|
||||||
mullvad
|
|
||||||
networking
|
networking
|
||||||
nixUtils
|
nixUtils
|
||||||
notifications
|
notifications
|
||||||
nvidia
|
nvidia
|
||||||
office
|
office
|
||||||
#ollama
|
ollama
|
||||||
otherUtils
|
otherUtils
|
||||||
performance-desktop
|
performance-desktop
|
||||||
printer
|
printer
|
||||||
rss
|
rss
|
||||||
udev
|
udev
|
||||||
user
|
user
|
||||||
|
vpn
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
flake.homeModules.desktop = {...}: {
|
flake.homeModules.desktop = {...}: {
|
||||||
@@ -68,7 +69,6 @@
|
|||||||
hyprland-desktop
|
hyprland-desktop
|
||||||
kitty
|
kitty
|
||||||
librewolf
|
librewolf
|
||||||
mullvad
|
|
||||||
neovim
|
neovim
|
||||||
nix-git-cherry-picker-desktop
|
nix-git-cherry-picker-desktop
|
||||||
desktop-notewrapper
|
desktop-notewrapper
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
home.homeDirectory = "/home/tomasr";
|
home.homeDirectory = "/home/tomasr";
|
||||||
|
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
EDITOR = "nvim";
|
EDITOR = "neovim";
|
||||||
TERMINAL = "kitty";
|
TERMINAL = "kitty";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,6 @@
|
|||||||
inherit (self) pkgs-unstable pkgs-local pkgs-master;
|
inherit (self) pkgs-unstable pkgs-local pkgs-master;
|
||||||
};
|
};
|
||||||
modules = with self.nixosModules; [
|
modules = with self.nixosModules; [
|
||||||
inputs.agenix.nixosModules.default
|
|
||||||
agenix
|
|
||||||
# important do not remove
|
# important do not remove
|
||||||
home-manager-laptop
|
home-manager-laptop
|
||||||
laptop
|
laptop
|
||||||
@@ -20,15 +18,17 @@
|
|||||||
audioAndMedia
|
audioAndMedia
|
||||||
autoCleanup-laptop
|
autoCleanup-laptop
|
||||||
autoUpdate-laptop
|
autoUpdate-laptop
|
||||||
#battery-laptop
|
battery-laptop
|
||||||
bluetooth
|
bluetooth
|
||||||
bootloader
|
bootloader
|
||||||
browsers
|
browsers
|
||||||
caelestia
|
caelestia
|
||||||
|
cs-119l # I'm obliged to use vscode. RIP neovim
|
||||||
development
|
development
|
||||||
documentation
|
documentation
|
||||||
disk
|
disk
|
||||||
disk-laptop
|
disk-laptop
|
||||||
|
epfl
|
||||||
fonts
|
fonts
|
||||||
gitBackup
|
gitBackup
|
||||||
hardware-configuration-laptop
|
hardware-configuration-laptop
|
||||||
@@ -41,19 +41,18 @@
|
|||||||
latex
|
latex
|
||||||
ly
|
ly
|
||||||
mathematics
|
mathematics
|
||||||
mullvad
|
|
||||||
networking
|
networking
|
||||||
nixUtils-laptop
|
nixUtils-laptop
|
||||||
nixUtils
|
nixUtils
|
||||||
notifications
|
notifications
|
||||||
office
|
office
|
||||||
onxyboox
|
|
||||||
#ollama
|
#ollama
|
||||||
otherUtils
|
otherUtils
|
||||||
printer
|
printer
|
||||||
rss
|
rss
|
||||||
udev
|
udev
|
||||||
user
|
user
|
||||||
|
vpn
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
flake.homeModules.laptop = {...}: {
|
flake.homeModules.laptop = {...}: {
|
||||||
@@ -72,7 +71,6 @@
|
|||||||
hyprland-laptop
|
hyprland-laptop
|
||||||
kitty
|
kitty
|
||||||
librewolf
|
librewolf
|
||||||
mullvad
|
|
||||||
neovim
|
neovim
|
||||||
nix-git-cherry-picker-laptop
|
nix-git-cherry-picker-laptop
|
||||||
laptop-notewrapper
|
laptop-notewrapper
|
||||||
@@ -132,7 +130,7 @@
|
|||||||
home.homeDirectory = "/home/tomasr";
|
home.homeDirectory = "/home/tomasr";
|
||||||
|
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
EDITOR = "nvim";
|
EDITOR = "neovim";
|
||||||
TERMINAL = "kitty";
|
TERMINAL = "kitty";
|
||||||
SYSTEMD_PAGER = "cat";
|
SYSTEMD_PAGER = "cat";
|
||||||
PAGER = "cat";
|
PAGER = "cat";
|
||||||
|
|||||||
@@ -44,6 +44,18 @@ _: {
|
|||||||
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
||||||
options = ["NOPASSWD"];
|
options = ["NOPASSWD"];
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
command = "/run/current-system/sw/bin/open";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "${pkgs.openconnect}/bin/openconnect";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "${pkgs-unstable.openconnect}/bin/openconnect";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -13,5 +13,11 @@
|
|||||||
group = "users";
|
group = "users";
|
||||||
mode = "0400";
|
mode = "0400";
|
||||||
};
|
};
|
||||||
|
age.secrets.epfl = {
|
||||||
|
file = ../../secrets/epfl.age;
|
||||||
|
owner = "tomasr";
|
||||||
|
group = "users";
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -19,9 +19,6 @@
|
|||||||
description = "NixOS flake auto update";
|
description = "NixOS flake auto update";
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Environment = [
|
|
||||||
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
|
|
||||||
];
|
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
|
||||||
ExecStart = "/run/current-system/sw/bin/custom-autoupdate";
|
ExecStart = "/run/current-system/sw/bin/custom-autoupdate";
|
||||||
@@ -76,9 +73,6 @@
|
|||||||
description = "NixOS flake auto update";
|
description = "NixOS flake auto update";
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Environment = [
|
|
||||||
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
|
|
||||||
];
|
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
|
||||||
ExecStart = "/run/current-system/sw/bin/custom-autoupdate";
|
ExecStart = "/run/current-system/sw/bin/custom-autoupdate";
|
||||||
@@ -118,9 +112,8 @@
|
|||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
git
|
git
|
||||||
nixos-rebuild
|
nixos-rebuild
|
||||||
curl
|
matrix-commander-rs
|
||||||
libnotify
|
libnotify
|
||||||
nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
text = ''
|
text = ''
|
||||||
@@ -142,7 +135,7 @@
|
|||||||
# update lock only
|
# update lock only
|
||||||
nix flake update --flake "$FLAKE_DIR"
|
nix flake update --flake "$FLAKE_DIR"
|
||||||
|
|
||||||
if /run/wrappers/bin/sudo ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
||||||
|
|
||||||
if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then
|
if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then
|
||||||
git -C "$FLAKE_DIR" add flake.lock
|
git -C "$FLAKE_DIR" add flake.lock
|
||||||
@@ -187,14 +180,11 @@
|
|||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
git
|
git
|
||||||
nixos-rebuild
|
nixos-rebuild
|
||||||
|
matrix-commander-rs
|
||||||
libnotify
|
libnotify
|
||||||
curl
|
|
||||||
nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
text = ''
|
text = ''
|
||||||
# shellcheck disable=SC1090
|
|
||||||
source "$NTFY_SECRET"
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
FLAKE_DIR="/home/tomasr/nixos"
|
FLAKE_DIR="/home/tomasr/nixos"
|
||||||
@@ -211,7 +201,7 @@
|
|||||||
# update lock only
|
# update lock only
|
||||||
nix flake update --flake "$FLAKE_DIR"
|
nix flake update --flake "$FLAKE_DIR"
|
||||||
|
|
||||||
if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
||||||
|
|
||||||
if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then
|
if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then
|
||||||
git -C "$FLAKE_DIR" add flake.lock
|
git -C "$FLAKE_DIR" add flake.lock
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ _: {
|
|||||||
flake.nixosModules.hledger = {pkgs, ...}: {
|
flake.nixosModules.hledger = {pkgs, ...}: {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
hledger
|
hledger
|
||||||
|
hledger-ui
|
||||||
hledger-web
|
hledger-web
|
||||||
asciinema # used for some hledger demos
|
asciinema # used for some hledger demos
|
||||||
puffin
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
flake.nixosModules.hledger-laptop = _: {
|
flake.nixosModules.hledger-laptop = _: {
|
||||||
|
|||||||
@@ -4,11 +4,12 @@
|
|||||||
libnotify # Library that sends desktop notifications to a notification daemon
|
libnotify # Library that sends desktop notifications to a notification daemon
|
||||||
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
|
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
|
||||||
# battery notifications
|
# battery notifications
|
||||||
self.packages.${pkgs.system}.custom-batterynotify
|
/*self.packages.${pkgs.system}.custom-batterynotify
|
||||||
self.packages.${pkgs.system}.custom-batterywarning
|
self.packages.${pkgs.system}.custom-batterywarning*/
|
||||||
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
|
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
|
||||||
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
|
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
|
||||||
zoom-us
|
zoom-us
|
||||||
|
telegram-desktop
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
perSystem = {pkgs, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
|
|||||||
@@ -48,17 +48,11 @@
|
|||||||
"configFetchTime": 1,
|
"configFetchTime": 1,
|
||||||
"localNotify": true,
|
"localNotify": true,
|
||||||
"matrix": {
|
"matrix": {
|
||||||
"enable": false,
|
"enable": true,
|
||||||
"room": "!BXRRokBmEdNOyYdfOF:matrix.org",
|
"room": "!BXRRokBmEdNOyYdfOF:matrix.org",
|
||||||
"ping": true,
|
"ping": true,
|
||||||
"userPing": "@notificationbot_0000",
|
"userPing": "@notificationbot_0000",
|
||||||
"userPingServer": "matrix.org"
|
"userPingServer": "matrix.org"
|
||||||
},
|
|
||||||
"ntfy": {
|
|
||||||
"enable": true,
|
|
||||||
"auth": ":$NTFY_TOKEN",
|
|
||||||
"server": "$NTFY_SERVER",
|
|
||||||
"topic": "Alerts"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{self, ...}: {
|
||||||
|
flake.nixosModules.epfl = {pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
openconnect
|
||||||
|
self.packages.${pkgs.system}.custom-mountEpflDrive
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
flake.nixosModules.cs-119l = {pkgs, ...}: let
|
||||||
|
user = "tomasr";
|
||||||
|
home = "/home/${user}";
|
||||||
|
src = "${home}/epfl/cs-119l-ICC/";
|
||||||
|
dst = "${home}/kdrive/Travail/2 - Bachelor/BA1/Information, calcul, communication CS-119l/code/";
|
||||||
|
in {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
vscode-fhs
|
||||||
|
];
|
||||||
|
systemd.services.sync-cs119l-to-kdrive = {
|
||||||
|
description = "Sync CS-119l ICC to kDrive";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = user;
|
||||||
|
|
||||||
|
ExecStart = "${pkgs.rsync}/bin/rsync -a '${src}' '${dst}'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.sync-cs119l-to-kdrive = {
|
||||||
|
description = "Sync CS-119l ICC to kDrive every Thursday and Friday evening";
|
||||||
|
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = [
|
||||||
|
"Thu *-*-* 20:00:00"
|
||||||
|
"Fri *-*-* 20:00:00"
|
||||||
|
];
|
||||||
|
Persistent = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
perSystem = {pkgs, ...}: {
|
||||||
|
packages.custom-mountEpflDrive = pkgs.writeShellApplication {
|
||||||
|
name = "custom-mountEpflDrive";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
rclone
|
||||||
|
libnotify
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
REMOTE_NAME="epfl"
|
||||||
|
MOUNT_POINT="$HOME/epfl/drive"
|
||||||
|
|
||||||
|
if rclone listremotes | rg "^''${REMOTE_NAME}:"; then
|
||||||
|
echo "Mounting ''${REMOTE_NAME}..."
|
||||||
|
rclone mount "''${REMOTE_NAME}:" "$MOUNT_POINT" --vfs-cache-mode writes --allow-non-empty &
|
||||||
|
else
|
||||||
|
notify-send "rclone mount failed" \
|
||||||
|
"Remote ''${REMOTE_NAME} not found.\nConfigure rclone and create the dir ~/epfl/drive/ or comment out the exec line in hyprland.lua."
|
||||||
|
echo "Remote ''${REMOTE_NAME} not found. Configure rclone or comment out the exec line in hyprland.lua."
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -16,15 +16,7 @@ _: {
|
|||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
services.openssh = {
|
# services.openssh.enable = true;
|
||||||
enable = true;
|
|
||||||
hostKeys = [
|
|
||||||
{
|
|
||||||
path = "/etc/ssh/ssh_host_ed25519_key";
|
|
||||||
type = "ed25519";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Open ports in the firewall.
|
# Open ports in the firewall.
|
||||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
nix-index
|
nix-index
|
||||||
statix
|
statix
|
||||||
self.packages.${pkgs-unstable.system}.custom-trimmer
|
self.packages.${pkgs-unstable.system}.custom-trimmer
|
||||||
|
nix-update # nix-update <package> --build --test --format # the review will be done by nixpkgs-review-gha
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
perSystem = {pkgs, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{self, ...}: {
|
{self, ...}: {
|
||||||
flake.nixosModules.otherUtils =
|
flake.nixosModules.otherUtils =
|
||||||
# try to keep packages here at a minium. Preferably use a dedicated file
|
# try to keep packages here at a minium. Preferably use a dedicated file
|
||||||
{pkgs, ...}: {
|
{pkgs, pkgs-unstable, ...}: {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
gnome-calculator
|
gnome-calculator
|
||||||
snapshot
|
snapshot
|
||||||
@@ -18,8 +18,7 @@
|
|||||||
usbutils # used for lsusb
|
usbutils # used for lsusb
|
||||||
self.packages.${pkgs.system}.custom-tomato
|
self.packages.${pkgs.system}.custom-tomato
|
||||||
self.packages.${pkgs.system}.custom-syllabes
|
self.packages.${pkgs.system}.custom-syllabes
|
||||||
# Electron 39 EOL. https://github.com/bitwarden/clients/pull/20448 should move it to 41. For the moment use the browser extension
|
pkgs-unstable.bitwarden-desktop
|
||||||
#pkgs-unstable.bitwarden-desktop
|
|
||||||
fluffychat # matrix client
|
fluffychat # matrix client
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
# config for openconnect is in ./epfl.nix
|
||||||
|
{self, ...}: {
|
||||||
|
flake.nixosModules.vpn = {pkgs,...}: {
|
||||||
|
services.mullvad-vpn = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
environment.systemPackages = [
|
||||||
|
self.packages.${pkgs.system}.custom-vpn-picker
|
||||||
|
];
|
||||||
|
age.secrets.epfl = {
|
||||||
|
file = ../../secrets/epfl.age;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
perSystem = {pkgs, ...}: {
|
||||||
|
packages.custom-vpn-picker = pkgs.writeShellApplication {
|
||||||
|
name = "custom-vpn-picker";
|
||||||
|
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
fzf
|
||||||
|
mullvad-compass
|
||||||
|
mullvad
|
||||||
|
openconnect
|
||||||
|
gawk
|
||||||
|
wl-clipboard
|
||||||
|
cliphist
|
||||||
|
];
|
||||||
|
|
||||||
|
text = ''
|
||||||
|
mullvad_connect () {
|
||||||
|
mullvad disconnect
|
||||||
|
mullvad relay set location "$1"
|
||||||
|
mullvad connect
|
||||||
|
}
|
||||||
|
|
||||||
|
profiles=(
|
||||||
|
"mullvad-best"
|
||||||
|
"mullvad-zurich"
|
||||||
|
"mullvad-tirana"
|
||||||
|
"mullvad-bogota"
|
||||||
|
"epfl"
|
||||||
|
"disconnect"
|
||||||
|
)
|
||||||
|
|
||||||
|
selected=$(printf "%s\n" "''${profiles[@]}" |
|
||||||
|
fzf --height 8 --reverse --prompt="Select vpn:")
|
||||||
|
|
||||||
|
[[ -z "$selected" ]] && exit 0
|
||||||
|
|
||||||
|
if [[ "$selected" == "mullvad-best" ]]; then
|
||||||
|
mullvad_connect "$(
|
||||||
|
mullvad-compass |
|
||||||
|
awk '/Best server:/ {
|
||||||
|
getline
|
||||||
|
split($1, a, "-")
|
||||||
|
print a[1]
|
||||||
|
}'
|
||||||
|
)"
|
||||||
|
|
||||||
|
elif [[ "$selected" == "mullvad-zurich" ]]; then
|
||||||
|
mullvad_connect ch
|
||||||
|
|
||||||
|
elif [[ "$selected" == "mullvad-tirana" ]]; then
|
||||||
|
mullvad_connect al
|
||||||
|
|
||||||
|
elif [[ "$selected" == "mullvad-bogota" ]]; then
|
||||||
|
mullvad_connect co
|
||||||
|
|
||||||
|
elif [[ "$selected" == "epfl" ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source /run/agenix/epfl
|
||||||
|
|
||||||
|
# Put password in clipboard so it can be pasted into openconnect.
|
||||||
|
printf '%s' "$EPFL_VPN_PASSWORD" | wl-copy
|
||||||
|
|
||||||
|
sudo openconnect \
|
||||||
|
--background \
|
||||||
|
--pid-file="$HOME/.local/state/epfl-openconnect.pid" \
|
||||||
|
--server="$EPFL_VPN_SERVER" \
|
||||||
|
--user="$EPFL_VPN_USER"
|
||||||
|
|
||||||
|
# Remove the password from cliphist and clear the current clipboard.
|
||||||
|
cliphist delete-query "$EPFL_VPN_PASSWORD" || true
|
||||||
|
wl-copy --clear
|
||||||
|
|
||||||
|
elif [[ "$selected" == "disconnect" ]]; then
|
||||||
|
if [[ -f "$HOME/.local/state/epfl-openconnect.pid" ]]; then
|
||||||
|
sudo kill "$(cat "$HOME/.local/state/epfl-openconnect.pid")" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
mullvad disconnect
|
||||||
|
rm "$HOME/.local/state/epfl-openconnect.pid"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkill -f "kitty.*Select vpn option" || true
|
||||||
|
exit
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
+155
-10
@@ -38,6 +38,7 @@ local function close_other_windows()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local wallpapers_enabled = true
|
||||||
local wallpapers = {
|
local wallpapers = {
|
||||||
[1] = "WALLPAPER1/PATH/PLACEHOLDER",
|
[1] = "WALLPAPER1/PATH/PLACEHOLDER",
|
||||||
[2] = "WALLPAPER2/PATH/PLACEHOLDER",
|
[2] = "WALLPAPER2/PATH/PLACEHOLDER",
|
||||||
@@ -51,13 +52,144 @@ local wallpapers = {
|
|||||||
[10] = "WALLPAPER5/PATH/PLACEHOLDER",
|
[10] = "WALLPAPER5/PATH/PLACEHOLDER",
|
||||||
}
|
}
|
||||||
|
|
||||||
hl.on("workspace.active", function(workspace)
|
local function set_wallpaper(workspace)
|
||||||
|
if not wallpapers_enabled then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local wallpaper = wallpapers[workspace.id]
|
local wallpaper = wallpapers[workspace.id]
|
||||||
|
|
||||||
if wallpaper then
|
if wallpaper then
|
||||||
hl.exec_cmd("awww img -t none " .. wallpaper)
|
hl.exec_cmd("awww img -t none " .. wallpaper)
|
||||||
end
|
end
|
||||||
end)
|
end
|
||||||
|
|
||||||
|
hl.on("workspace.active", set_wallpaper)
|
||||||
|
|
||||||
|
local performance_mode = false
|
||||||
|
local saved_brightness = nil
|
||||||
|
|
||||||
|
local function get_brightness()
|
||||||
|
local handle = io.popen("brightnessctl get 2>/dev/null")
|
||||||
|
|
||||||
|
if not handle then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local value = handle:read("*a")
|
||||||
|
handle:close()
|
||||||
|
|
||||||
|
if not value then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
value = value:gsub("%s+$", "")
|
||||||
|
return tonumber(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_performance_mode()
|
||||||
|
if performance_mode then
|
||||||
|
hl.monitor({
|
||||||
|
output = "eDP-1",
|
||||||
|
mode = "2560x1600@165",
|
||||||
|
position = "0x0",
|
||||||
|
scale = 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.exec_cmd("pkill swaync || true")
|
||||||
|
hl.exec_cmd("pkill waybar || true")
|
||||||
|
hl.exec_cmd("caelestia shell -d")
|
||||||
|
|
||||||
|
if saved_brightness then
|
||||||
|
hl.exec_cmd("brightnessctl set " .. saved_brightness)
|
||||||
|
end
|
||||||
|
|
||||||
|
saved_brightness = nil
|
||||||
|
wallpapers_enabled = true
|
||||||
|
performance_mode = false
|
||||||
|
|
||||||
|
hl.exec_cmd("hyprctl reload")
|
||||||
|
|
||||||
|
local workspace = hl.get_active_workspace()
|
||||||
|
if workspace then
|
||||||
|
set_wallpaper(workspace)
|
||||||
|
end
|
||||||
|
|
||||||
|
hl.notification.create({
|
||||||
|
text = "Battery Saver",
|
||||||
|
subtext = "Disabled",
|
||||||
|
timeout = 3000,
|
||||||
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- Save current brightness.
|
||||||
|
saved_brightness = get_brightness()
|
||||||
|
|
||||||
|
-- Lower refresh rate.
|
||||||
|
hl.monitor({
|
||||||
|
output = "eDP-1",
|
||||||
|
mode = "2560x1600@60",
|
||||||
|
position = "0x0",
|
||||||
|
scale = 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Stop heavy UI components.
|
||||||
|
hl.exec_cmd("pkill -f caelestia-shell || true")
|
||||||
|
hl.exec_cmd("pkill -f caelestia || true")
|
||||||
|
|
||||||
|
-- Start lightweight notification daemon.
|
||||||
|
hl.exec_cmd("pkill swaync || true")
|
||||||
|
hl.exec_cmd("swaync")
|
||||||
|
|
||||||
|
-- Start lightweight status bar.
|
||||||
|
hl.exec_cmd("pkill waybar || true")
|
||||||
|
hl.exec_cmd("waybar")
|
||||||
|
|
||||||
|
-- Disable expensive Hyprland effects.
|
||||||
|
hl.config({
|
||||||
|
animations = {
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
shadow = {
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
blur = {
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
rounding = 0,
|
||||||
|
fullscreen_opacity = 1,
|
||||||
|
active_opacity = 1,
|
||||||
|
inactive_opacity = 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_in = 0,
|
||||||
|
gaps_out = 0,
|
||||||
|
border_size = 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
vfr = 1,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Lower brightness.
|
||||||
|
hl.exec_cmd("brightnessctl set 5%")
|
||||||
|
|
||||||
|
-- Disable workspace wallpaper switching.
|
||||||
|
wallpapers_enabled = false
|
||||||
|
|
||||||
|
performance_mode = true
|
||||||
|
|
||||||
|
hl.notification.create({
|
||||||
|
text = "Battery Saver",
|
||||||
|
subtext = "Enabled",
|
||||||
|
timeout = 3000,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
hl.curve("wind", { type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } })
|
hl.curve("wind", { type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } })
|
||||||
hl.curve("winIn", { type = "bezier", points = { { 0.1, 1.1 }, { 0.1, 1.1 } } })
|
hl.curve("winIn", { type = "bezier", points = { { 0.1, 1.1 }, { 0.1, 1.1 } } })
|
||||||
@@ -168,22 +300,29 @@ hl.bind(mod .. " + D", hl.dsp.layout("move +col"))
|
|||||||
hl.bind(mod .. " + T", hl.dsp.exec_cmd(term))
|
hl.bind(mod .. " + T", hl.dsp.exec_cmd(term))
|
||||||
hl.bind(mod .. " + E", hl.dsp.exec_cmd(file))
|
hl.bind(mod .. " + E", hl.dsp.exec_cmd(file))
|
||||||
hl.bind(mod .. " + F", hl.dsp.exec_cmd(browser))
|
hl.bind(mod .. " + F", hl.dsp.exec_cmd(browser))
|
||||||
hl.bind(mod .. " + N", hl.dsp.exec_cmd(notes))
|
hl.bind(mod .. " + N", hl.dsp.exec_cmd("kitty --hold --class \"custom-vpn-picker\" --name \"Select vpn option\" custom-vpn-picker"))
|
||||||
hl.bind(mod .. " + SHIFT + A", hl.dsp.exec_cmd("caelestia shell drawers toggle launcher"))
|
hl.bind(mod .. " + SHIFT + A", hl.dsp.exec_cmd("caelestia shell drawers toggle launcher"))
|
||||||
hl.bind(mod .. " + Q", close_or_move_special)
|
hl.bind(mod .. " + Q", close_or_move_special)
|
||||||
hl.bind("CTRL + ALT + W", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
|
local function toggle_sidebar()
|
||||||
|
if performance_mode then
|
||||||
|
hl.exec_cmd("swaync-client -t")
|
||||||
|
else
|
||||||
|
hl.exec_cmd("caelestia shell drawers toggle sidebar")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
hl.bind("CTRL + ALT + W", toggle_sidebar)
|
||||||
hl.bind(mod .. " + L", hl.dsp.exec_cmd("caelestia shell lock lock"))
|
hl.bind(mod .. " + L", hl.dsp.exec_cmd("caelestia shell lock lock"))
|
||||||
hl.bind("F11", hl.dsp.exec_cmd("caelestia screenshot"))
|
hl.bind("F11", hl.dsp.exec_cmd("caelestia screenshot"))
|
||||||
hl.bind(mod .. " + SHIFT + S", hl.dsp.exec_cmd("caelestia shell picker open"))
|
hl.bind(mod .. " + SHIFT + S", hl.dsp.exec_cmd("caelestia shell picker open"))
|
||||||
hl.bind(mod .. " + CTRL + 6", close_other_windows)
|
hl.bind(mod .. " + CTRL + 6", close_other_windows)
|
||||||
hl.bind("CTRL + ALT + 7", hl.dsp.exec_cmd("custom-performance"))
|
hl.bind("CTRL + ALT + 7", set_performance_mode)
|
||||||
hl.bind("CTRL + ALT + 1", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
|
hl.bind("CTRL + ALT + 1", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
|
||||||
hl.bind(mod .. " + CTRL + 4", hl.dsp.exec_cmd("caelestia shell notifs toggleDnd"))
|
hl.bind(mod .. " + CTRL + 4", hl.dsp.exec_cmd("caelestia shell notifs toggleDnd"))
|
||||||
hl.bind(mod .. " + CTRL + 3", hl.dsp.exec_cmd("pavucontrol"))
|
hl.bind(mod .. " + CTRL + 3", hl.dsp.exec_cmd("pavucontrol"))
|
||||||
hl.bind("CTRL + SHIFT + ALT + 0", hl.dsp.exec_cmd("kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\""))
|
hl.bind("CTRL + SHIFT + ALT + 0", hl.dsp.exec_cmd("kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\""))
|
||||||
hl.bind(mod .. " + CTRL + 5", hl.dsp.exec_cmd("gnome-characters"))
|
hl.bind(mod .. " + CTRL + 5", hl.dsp.exec_cmd("gnome-characters"))
|
||||||
hl.bind("CTRL + ALT + 8", hl.dsp.exec_cmd("hyprpicker | tee >(wl-copy) | cliphist store"))
|
hl.bind("CTRL + ALT + 8", hl.dsp.exec_cmd("hyprpicker | tee >(wl-copy) | cliphist store"))
|
||||||
hl.bind("CTRL + ALT + 0", hl.dsp.exec_cmd("custom-tomato"))
|
-- hl.bind("CTRL + ALT + 0", hl.dsp.exec_cmd("custom-tomato"))
|
||||||
hl.bind("CTRL + ALT + 2", hl.dsp.exec_cmd("custom-bottom"))
|
hl.bind("CTRL + ALT + 2", hl.dsp.exec_cmd("custom-bottom"))
|
||||||
hl.bind("CTRL + ALT + 9", hl.dsp.exec_cmd("anki"))
|
hl.bind("CTRL + ALT + 9", hl.dsp.exec_cmd("anki"))
|
||||||
|
|
||||||
@@ -673,6 +812,13 @@ hl.window_rule({
|
|||||||
float = true,
|
float = true,
|
||||||
size = "400 225",
|
size = "400 225",
|
||||||
})
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
match = {
|
||||||
|
class = "^(custom-vpn-picker)$",
|
||||||
|
},
|
||||||
|
float = true,
|
||||||
|
size = "350 250",
|
||||||
|
})
|
||||||
|
|
||||||
hl.window_rule({
|
hl.window_rule({
|
||||||
match = {
|
match = {
|
||||||
@@ -780,7 +926,6 @@ hl.config({
|
|||||||
|
|
||||||
hl.on("hyprland.start", function()
|
hl.on("hyprland.start", function()
|
||||||
hl.exec_cmd("/nix/store/8kih8alkk4qzgjchg5501r1c3a8a71aw-dbus-1.16.2/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target")
|
hl.exec_cmd("/nix/store/8kih8alkk4qzgjchg5501r1c3a8a71aw-dbus-1.16.2/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target")
|
||||||
hl.exec_cmd("qtbatticon")
|
|
||||||
hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
|
hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
|
||||||
hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
|
hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
|
||||||
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
|
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
|
||||||
@@ -790,12 +935,12 @@ hl.on("hyprland.start", function()
|
|||||||
hl.exec_cmd("udiskie --no-automount --smart-tray")
|
hl.exec_cmd("udiskie --no-automount --smart-tray")
|
||||||
hl.exec_cmd("nm-applet --indicator")
|
hl.exec_cmd("nm-applet --indicator")
|
||||||
hl.exec_cmd("rm -rf ~/.cache/cliphist/ && wl-paste --type text --watch cliphist store & wl-paste --type image --watch cliphist store")
|
hl.exec_cmd("rm -rf ~/.cache/cliphist/ && wl-paste --type text --watch cliphist store & wl-paste --type image --watch cliphist store")
|
||||||
hl.exec_cmd("custom-batterynotify")
|
-- hl.exec_cmd("custom-batterynotify")
|
||||||
hl.exec_cmd("custom-batterywarning")
|
-- hl.exec_cmd("custom-batterywarning")
|
||||||
hl.exec_cmd("awww img WALLPAPER/PATH/PLACEHOLDER")
|
hl.exec_cmd("awww img WALLPAPER/PATH/PLACEHOLDER")
|
||||||
hl.exec_cmd("awww-daemon")
|
hl.exec_cmd("awww-daemon")
|
||||||
hl.exec_cmd("sleep 1 && custom-wallpaper")
|
|
||||||
hl.exec_cmd("custom-checkKdrive && custom-mountkdrive")
|
hl.exec_cmd("custom-checkKdrive && custom-mountkdrive")
|
||||||
|
hl.exec_cmd("custom-mountEpflDrive")
|
||||||
hl.exec_cmd("custom-gitnotify")
|
hl.exec_cmd("custom-gitnotify")
|
||||||
hl.exec_cmd("sleep 4 & caelestia-shell")
|
hl.exec_cmd("sleep 4 & caelestia-shell")
|
||||||
hl.exec_cmd("sleep 20 && ngcp pull --automatic")
|
hl.exec_cmd("sleep 20 && ngcp pull --automatic")
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> X25519 XuDyuQL0WjW/IvtzxswKnOfXlJa42Itdu+inNPsiNhw
|
||||||
|
3z2v3GbNdMvX9QtgAMrWZB/5Y1HatgpoXGQUMnW91+M
|
||||||
|
-> ssh-ed25519 +tvThg i3NM64rsEgRRgah4PKWdrl4i0pmP6X2bgr2Etzm33Ag
|
||||||
|
OwUETps78LPyjIAcJo8eC9eh0m9qtRUh399xGzMCTwQ
|
||||||
|
--- 7LnVrVnmfA8YubysLVeGyRGlLI+ef0VxnIHRi6rRAlc
|
||||||
|
W¾TîópF’X±áì‘làBTœÝ"^ï”�-þµ‹à¤û§÷Ÿ(üÛ'™ghÕóÎôGÜqx5FË~6Èï6DÎí¬gŒz…¾w·nñSÏHtß…ÌÂÓT«Úè›æŒÅó¤˜sød@°1!P""WHA$Ÿ�›,d68Ñ“õˆ�k“tù\qXÞHŽ®R=�vÕîŸZ
|
||||||
Binary file not shown.
@@ -6,4 +6,8 @@ in {
|
|||||||
backupAgeKey
|
backupAgeKey
|
||||||
laptopHostKey
|
laptopHostKey
|
||||||
];
|
];
|
||||||
|
"epfl.age".publicKeys = [
|
||||||
|
backupAgeKey
|
||||||
|
laptopHostKey
|
||||||
|
];
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user