Author SHA1 Message Date
tomasr 206780c3f9 hyprland: migrated from hyprlang to lua
- all hyprlandScripts were migrated to lua functions
- hyprland.nix just handles the host specific and replacing the
  placeholders from hyprland.lua
2026-08-14 09:25:17 +02:00
tomasr 6f342a6338 flake: updated flake.lock 2026-08-14 09:25:07 +02:00
tomasr f1dae5ab9c snapshot pre-autoupdate-2026-08-13T07-15-33Z 2026-08-13 09:15:33 +02:00
tomasr b6690407f7 restore mullvad 2026-08-12 19:48:54 +02:00
tomasr 21c366244b add dolphin plugin 2026-08-12 15:32:46 +02:00
tomasr ec22349a7a add ark for dolphin 2026-08-12 15:24:38 +02:00
tomasr 29c7a4a86c reactivate battery warning 2026-08-12 15:05:22 +02:00
tomasr 6263a11c4c fix archivebox extesnion 2026-08-11 17:06:16 +02:00
tomasr 1471a976f1 remove temp mullvad 2026-08-11 17:03:55 +02:00
tomasr 0ce25113e7 add archivebox extension 2026-08-11 16:17:48 +02:00
tomasr e49019c8ba add browser bookmark noogle.dev 2026-08-11 16:14:32 +02:00
tomasr bd85b284a6 reactivate qtbatticon 2026-08-11 16:13:11 +02:00
tomasr 7f2367720b oga bouga 2026-08-09 14:48:54 +02:00
tomasr 14751f5cf0 snapshot pre-cleanup-2026-08-08T20-52-19Z 2026-08-08 22:52:19 +02:00
tomasr 419f5a6214 flack lock change 2026-08-08 10:14:54 +02:00
tomasr b5b329ab17 snapshot pre-autoupdate-2026-08-08T08-02-18Z 2026-08-08 10:02:18 +02:00
tomasr dc1b4caa24 rss reader 2026-08-04 19:50:32 +02:00
tomasr c7d72333d4 debugging max battery 2026-08-04 14:16:53 +02:00
tomasr 04b3257c7d debugging max battery 2026-08-04 14:13:16 +02:00
tomasr 12bcb8ad6a fix calendar? 2026-08-04 11:29:50 +02:00
tomasr 229201a7c7 add kontact 2026-08-04 11:25:52 +02:00
tomasr ace1780097 add KOrganizer 2026-08-04 11:21:17 +02:00
tomasr 928b192611 Auto: cleanup-2026-08-02T11-15-39Z 2026-08-02 13:15:57 +02:00
tomasr 3160e6a409 snapshot pre-cleanup-2026-08-02T11-15-39Z 2026-08-02 13:15:39 +02:00
tomasr f76e16266b snapshot pre-autoupdate-2026-08-01T08-20-53Z 2026-08-01 10:20:53 +02:00
tomasr eec6da5803 librewolf: remove old bookmark 2026-07-30 21:28:31 +02:00
tomasr 282d076bf3 first tmux config 2026-07-30 21:18:33 +02:00
tomasr 0e67b49ebd tmux: init config 2026-07-30 14:06:41 +02:00
tomasr dd1c9bd990 hledger-ui: replace by puffin 2026-07-29 21:11:21 +02:00
tomasr 20cef053c0 replace rss reader 2026-07-29 18:46:20 +02:00
tomasr 553796d6c7 fix pagers 2026-07-26 21:54:17 +02:00
tomasr 63ec8d1945 flack.lock change 2026-07-26 18:41:00 +02:00
tomasr 588a1e77e8 migrate nixpkgs-notifier to ntfy 2026-07-26 16:46:26 +02:00
tomasr eca6ad278d Auto: cleanup-2026-07-26T14-02-17Z 2026-07-26 16:02:39 +02:00
tomasr 5e7550f6d7 snapshot pre-cleanup-2026-07-26T14-02-17Z 2026-07-26 16:02:17 +02:00
tomasr abd6a6ca3c snapshot pre-cleanup-2026-07-26T13-59-06Z 2026-07-26 15:59:06 +02:00
tomasr a7370a65e7 snapshot pre-cleanup-2026-07-26T13-57-11Z 2026-07-26 15:57:11 +02:00
tomasr 01cd080bf1 snapshot pre-cleanup-2026-07-26T13-54-32Z 2026-07-26 15:54:32 +02:00
tomasr b24b16728a setup agenix and migrate from matrix-commander-rs to ntfy for phone notifications 2026-07-26 15:48:54 +02:00
tomasr a80629a6e4 snapshot pre-autoupdate-2026-07-26T13-20-51Z 2026-07-26 15:20:51 +02:00
tomasr ff26348536 snapshot pre-autoupdate-2026-07-26T13-04-37Z 2026-07-26 15:04:37 +02:00
tomasr e672a99d95 snapshot pre-autoupdate-2026-07-26T13-01-03Z 2026-07-26 15:01:03 +02:00
tomasr 35542be154 snapshot pre-autoupdate-2026-07-26T12-55-52Z 2026-07-26 14:55:52 +02:00
tomasr 8b1e206d4f snapshot pre-autoupdate-2026-07-26T12-53-35Z 2026-07-26 14:53:35 +02:00
tomasr 6304c65ea6 snapshot pre-autoupdate-2026-07-26T12-46-58Z 2026-07-26 14:46:58 +02:00
tomasr 325ee56fa3 snapshot pre-autoupdate-2026-07-26T12-33-05Z 2026-07-26 14:33:05 +02:00
tomasr a9874f1b2a snapshot pre-autoupdate-2026-07-26T12-32-47Z 2026-07-26 14:32:47 +02:00
tomasr ba4f2b5bf2 setup agenix 2026-07-26 14:09:18 +02:00
tomasr 72fae98a43 snapshot pre-cleanup-2026-07-25T22-02-24Z 2026-07-26 00:02:24 +02:00
tomasr ab6b81a228 snapshot pre-autoupdate-2026-07-25T15-13-11Z 2026-07-25 17:13:11 +02:00
tomasr 247ddefdc6 onyx fix 2026-07-25 16:03:34 +02:00
tomasr 1a646b0c06 add gvfs 2026-07-24 20:03:26 +02:00
tomasr 5d4d51b475 notewrapper: use kdrive directly 2026-07-24 17:40:27 +02:00
tomasr c6a30039e8 neovim: add hledger integration 2026-07-21 16:53:32 +02:00
tomasr 2b45b7f179 neovim: add lean lsp and config 2026-07-21 16:51:34 +02:00
tomasr 8268324958 hledger: init 2026-07-21 11:38:27 +02:00
tomasr 2d0c655658 snapshot pre-autoupdate-2026-07-20T23-03-59Z 2026-07-21 01:03:59 +02:00
tomasr fb5cd58254 CI: fix crash when no diff 2026-07-21 00:46:12 +02:00
tomasr 20ad4bb594 snapshot pre-autoupdate-2026-07-20T22-36-16Z 2026-07-21 00:36:16 +02:00
tomasr d83045353f snapshot pre-cleanup-2026-07-20T22-15-38Z 2026-07-21 00:15:38 +02:00
tomasr 806215b1b8 snapshot pre-autoupdate-2026-07-20T22-12-08Z 2026-07-21 00:12:08 +02:00
tomasr 63baafdca6 snapshot pre-autoupdate-2026-07-20T22-05-05Z 2026-07-21 00:05:05 +02:00
16 changed files with 352 additions and 686 deletions

No files matched your search

+16 -1
View File
@@ -49,12 +49,21 @@ 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 }}" \
@@ -63,6 +72,7 @@ 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
@@ -70,6 +80,7 @@ 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 }}" \
@@ -84,22 +95,26 @@ 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
+167 -622
View File
@@ -1,464 +1,195 @@
# NixOS Configuration ⚠️ 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](/assets/example.png) ![NixOS configuration](/assets/example.png)
This repository contains my personal NixOS configuration. ## Installation Guide
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. ⚠️ **Important Notes**
Before applying this configuration on another system, make sure to:
- Update the `hostName` (in `configuration.nix` and `home.nix`).
See the [dendritic pattern repository](https://github.com/mightyiam/dendritic) for an explanation of the approach. Requirements: `git` installed. Then run:
---
## 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 ```bash
cd ~ cd
git clone https://github.com/tomasriveral/nixos.git git clone https://github.com/Totorile1/nixos.git
cd nixos cd nixos
sudo cp /etc/nixos/hardware-configuration.nix ./hosts/laptop/hardware-configuration
sudo nixos-rebuild switch --flake ~/nixos/#laptop
``` ```
The available hosts are: ### Things That Don't Work Reliably and need manual setup
```text - Librewolf's extension settings
hosts/ - Librewolf's bookmarks
├── laptop.nix - Thunderbird's email servers and settings and birdtray's settings[^1]
└── desktop.nix - Inkscape's settings
```
Build and switch to a host with:
```bash [^1]: You must change in Advanced settings Thunderbird command line to the result of `where thunderbird`.
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 ## Configuration Structure
```text ```text
nixos/ nixos/
├── assets/ # Wallpapers, images, sounds and other static assets ├── assets/ # Images, icons, wallpapers, sounds
├── docs/ # Additional documentation ├── hosts/laptop/ # Host-specific NixOS config
│ └── printing.md
│
├── modules/ ├── modules/
│ ├── applications/ # Application and desktop application configuration │ ├── home-manager/ # User-level configurations (apps, shell, WM, plugins)
│ ├── hardware/ # Hardware, boot, disk, battery, GPU and device configuration │ ├── nixos/ # System-level modules (daemons, services, udev, ly)
│ ├── other/ # Fonts, cursor, printer, desktop entries, user configuration, etc. │ ├── qt/ # qt modules (qtbatticon)
│ ├── packages/ # Custom packages and scripts │ └── scripts/ # Custom scripts called from keybinds or tools
│ └── utilities/ # Reusable utilities and supporting services
│
├── hosts/
│ ├── laptop.nix # Laptop-specific configuration
│ └── desktop.nix # Desktop-specific configuration
│
├── other/ ├── other/
│ ├── hyprland/ # Hyprland configuration │ ├── kblayouts/ # Framework 16 RGB macropad layout
│ │ ├── hyprland.conf # Previous hyprlang configuration │ └── quickshell/ # QML configuration for topbar, notifications, screenshot, etc.
│ │ ├── 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
--- ---
# Hosts ## Applications & Tools
Host-specific configuration is kept under: ### Shell & Terminal
- [`zsh`](https://www.zsh.org/) with [`oh-my-zsh`](https://ohmyz.sh/) for shell customization
- [`kitty`](https://sw.kovidgoyal.net/kitty/) terminal
```text ### Window Management
hosts/ - [`hyprland`](https://github.com/hyprwm/Hyprland) (tiling window manager)
``` - [`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
Currently: ### Browsing & Productivity
- [`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
```text ### Utilities
hosts/ - [`cliphist`](https://github.com/skywind3000/cliphist) clipboard manager
├── laptop.nix - [`zoxide`](https://github.com/ajeetdsouza/zoxide) faster directory navigation
└── desktop.nix - [`fastfetch`](https://github.com/LinusDierheimer/fastfetch) system info
``` - [`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`
The host files combine the nixos and home-manager modules needed for each machine. ### System & Hardware
- [`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)
--- ---
# Hyprland ## Keybindings
Hyprland is configured using its **Lua configuration API**. ### Window Management
| 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 |
The current configuration is: ### Workspaces
| 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 |
```text ### Layout
other/hyprland/hyprland.lua | Key | Action |
``` |-----|--------|
| `$mod + A` | Scroll layout column left |
| `$mod + D` | Scroll layout column right |
The previous hyprlang configuration remains here: ### Applications
| 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|
```text ### Multimedia & System
other/hyprland/hyprland.conf | Key | Action |
``` |-----|--------|
| F1 | Mute audio |
Host specific hyprland settings are generated by `/modules/applications/hyprland.nix` as `host.lua` which is imported by `hyprland.lua`. | F2 / F3 | Volume down / up |
| F4 / F5 / F6 | Media prev / play / next |
| F7 / F8 | Brightness down / up |
## Workspace layouts | `$mod + mouse` | Move / resize window |
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.
--- ---
# Hyprland Keybindings ### Framework 16 RGB Macropad
`SUPER` is the primary modifier. The **Framework 16 RGB macropad** is a 4×6 programmable key grid. Each key triggers one of the keybindings above via a macro.
## Window management 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:
| 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 |
| ----------------------------------- | ----------------- | |-------------|-----------------------|
| `SUPER + W` | Toggle floating | | `<Space>` | `<leader>` |
| `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 3, Col 1 | Pomodoro timer (`CTRL + ALT + 0`) |
| 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 |
@@ -469,222 +200,36 @@ The configuration includes LSP support, Telescope, Git tooling, grammar tooling
| `<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 | | `<leader><leader>` | Launch runner (terminal) |
| `<leader>r1` | Run Fugitive | | `<leader>r1` | Run fugit |
| `t` | Count French syllables | | `t` | Count syllabes (french) |
Some movement macros involving `<Space>`, `g`, and recording with `q` are intentionally disabled. All moving macros with `<Space>`, `g`, and the recording with `q` are 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` |
--- ---
# Shell ## Useful Information
- 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`
The shell is based on **zsh**. - `ls` is an alias for `eza`. If you want more info than the normal `ls` run `eza`, `l`, `ll` or `la`
- `qtbatticon` is a custom battery icon tray, because `cbatticon` and `batticonplus` did not work. Click on it to get more info about the battery.
Relevant configuration is primarily found in: - `man` and `manix` use `fzf` for fuzzy search of pages.
- `pkgs-unstable` can be used for unstable nixpkgs packages.
```text - Nix garbage collection runs weekly, deleting generations older than 7 days.
modules/applications/zsh.nix - Non-free packages (e.g., Obsidian) are allowed.
``` - `neovim` plugins configured in `./modules/home-manager/neovim.nix`
- `oh-my-zsh` plugins configured in `./modules/home-manager/oh-my-zsh.nix`
and related application modules. - `ripgrep` default flags: `-S -. -p -n`
- Wallpapers change per workspace (5 paintings from Thomas Cole’s *The Course of Empire*).
`oh-my-zsh` is used for shell customization. - LibreWolf search engines: `@q` (Quant), `@hm` (Home-manager), `@np` (nixpkgs), `@nw` (Nixwiki), `@map` (OpenStreetMap).
- `ccat` colors `cat` output when not redirected; disables coloring if output is redirected (e.g., `>>`) to avoid breaking pipelines.
`deja` is used for shell completion. - Anki addons: `./modules/nixos/anki.nix`
- TLP config: `./modules/nixos/battery.nix`
Useful command-line tools include: - Framework 16 RGB macropad layout: `./other/kblayouts/framework_laptop_16_rgb_macropad.layout.json`
* `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.
---
# 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
---
# 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
+106 -43
View File
@@ -1,5 +1,30 @@
{ {
"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": [
@@ -11,11 +36,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781239472, "lastModified": 1786071436,
"narHash": "sha256-WFL8jZMWNH1tx3UwaJ9aa9NN25uOEJ9mbKPRNQJY/xM=", "narHash": "sha256-/CQJ781dRGWWUMrJ34vIj1PQnNEEWgnEEuod0r5LKGk=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "cli", "repo": "cli",
"rev": "3f3229aed4f36752a02fd870fd6cad94bd76555f", "rev": "751fbc555a83faba5dd589270d14eeb22afab174",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -34,11 +59,11 @@
"quickshell": "quickshell" "quickshell": "quickshell"
}, },
"locked": { "locked": {
"lastModified": 1781408632, "lastModified": 1786238888,
"narHash": "sha256-kYVf3Jye4UhyBrtubYcSrmVyFv9uqOY2JvjmElFiZHE=", "narHash": "sha256-pnO0u0UUYwkr72pJR5Giu93LZfU/fhTKJZYa1xeM7Po=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "shell", "repo": "shell",
"rev": "f86c359cd90530bacc800e94e35ffbebecd3f58f", "rev": "817a220e8e87c4df9f3681033a0d8a8054cdaa30",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -47,6 +72,28 @@
"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": [
@@ -72,12 +119,12 @@
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1778716662, "lastModified": 1785627969,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", "narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", "rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
"revCount": 475, "revCount": 483,
"type": "tarball", "type": "tarball",
"url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.475%2Brev-f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb/019e2533-0324-7e90-93eb-29b02e1a61cd/source.tar.gz" "url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.483%2Brev-427bf4bd9435fdf21321c8cc628c24efc14c0f7a/019fc124-5bcc-79d1-a1e4-306df724dc0a/source.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -86,7 +133,7 @@
}, },
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -108,11 +155,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781319724, "lastModified": 1785119570,
"narHash": "sha256-ZGuxexEMo4Xv28KJ0dX/m/PHN4oZIOnxHZpNTyrvx4M=", "narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "8355f0a16b2dbb06a97959a918af5b239bbe05ae", "rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -124,11 +171,11 @@
}, },
"import-tree": { "import-tree": {
"locked": { "locked": {
"lastModified": 1778781969, "lastModified": 1784254960,
"narHash": "sha256-Jjuz5CmSkur8KvLDoGa+vylEp+RkQtv4mt/qcMznpH0=", "narHash": "sha256-iI88R3wHz8wTKQb5orvpc51L/Xr64AJyxid/0MKa/b8=",
"owner": "vic", "owner": "vic",
"repo": "import-tree", "repo": "import-tree",
"rev": "d321337efd0f23a9eb14a42adb7b2c29313ab274", "rev": "4ebb10ae17d5f1ad366e7aef5b92cb8eecf24f69",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -164,11 +211,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781373243, "lastModified": 1786462419,
"narHash": "sha256-CpZ5FEU1BtW6K4FywtCCE2wJs6R/Ifps3etRDh8NJ9w=", "narHash": "sha256-A7Q3UIyzDg1O54E0W6HOQIzvsVJq/rMuelJR+ELLRvI=",
"owner": "tomasriveral", "owner": "tomasriveral",
"repo": "nix-git-cherry-picker", "repo": "nix-git-cherry-picker",
"rev": "9865dba535620831ae7cab395bf404f8f464df0e", "rev": "aec69257dc9b68d875333ec9f4a7b310d878abd1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -179,11 +226,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1781216227, "lastModified": 1786535285,
"narHash": "sha256-9mUW6gNwoN2SWc/l0fW4svPNOulXLl8ijqKyeSOGgJE=", "narHash": "sha256-rG5HKMAgAhMgydvKGtco6rqTxRq4EDZQCx9USLvVqYw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a0374025a863d007d98e3297f6aa46cc3141c2f0", "rev": "9f78f44a87948854445dae0b6bf82b2e87e4efb5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -195,11 +242,11 @@
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1777168982, "lastModified": 1785031560,
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=", "narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14", "rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -218,11 +265,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781273662, "lastModified": 1785077063,
"narHash": "sha256-50dd7Cs1mUHq1srw7UojdzCYOB4TfrIXMv7XHHPU9zw=", "narHash": "sha256-rJxX9Mq16TOiIlf+nNR4SaLsWf1yII8xsQpJUNio3Yg=",
"owner": "tomasriveral", "owner": "tomasriveral",
"repo": "nixpkgs-notifier", "repo": "nixpkgs-notifier",
"rev": "12183f26e8b196d9906f82dc05f9672793c61038", "rev": "39a89ffbdc49cc9ab6f67bc4be7ea2f7d3e2b38c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -233,11 +280,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1781328464, "lastModified": 1786534138,
"narHash": "sha256-j9uBlHI0eJ9zWU9IlF6SlBBPdeJu30hcvar31IRKHpw=", "narHash": "sha256-fBJMdnKUTUDtfi/BYLr71HLaC9dG382arxLF2Egg2uo=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5a722a7155bfc9fbe657f28d26b71860d95324bc", "rev": "044bfe75bfe4c7bbe043dc17b5e42ea823b84a09",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -257,11 +304,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780908812, "lastModified": 1786346006,
"narHash": "sha256-syxEJP0NNgVZYHp/zRVuz32VYf+ULD9itZk7V06SCos=", "narHash": "sha256-PDM9fB1zBhqVVE75WxRM7vIo3QhL2LGKKdd6N+hTGlg=",
"owner": "tomasriveral", "owner": "tomasriveral",
"repo": "notewrapper", "repo": "notewrapper",
"rev": "e670ef935f0dd87dc8a8c6982147a9b8dce7565e", "rev": "689c3074c03328e2086dc032a2fc3de00bbef466",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -281,11 +328,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1781158593, "lastModified": 1786270331,
"narHash": "sha256-zxlheX4o1MK00dkYzoXm7Srj5SD9iOCSp4N7f1iShr0=", "narHash": "sha256-GRhNuYIXR/0WWBya4CHfTKyCbL3wuFPJC5yBh5pHU8s=",
"owner": "r14dd", "owner": "r14dd",
"repo": "patent", "repo": "patent",
"rev": "68772d068088d62a030619090959165af5e71ed1", "rev": "d852cea921124a8b9002db9beb2af2d935af8130",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -302,11 +349,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781053488, "lastModified": 1785704021,
"narHash": "sha256-P4WEBaKgl8flRckHxXGHzT0potPvB3x8ZFIp9gLEAMY=", "narHash": "sha256-eQtczKMAS4ItlB4pr1B3MqBZiyRVl2nkqNdtyRSQMa8=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "d99d87d5e5ec4e696815348692fdaaf0b6be1b2c", "rev": "28771c7c74b42e20afca0b1b63980cb46515537c",
"revCount": 822, "revCount": 835,
"type": "git", "type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell" "url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}, },
@@ -317,6 +364,7 @@
}, },
"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",
@@ -369,6 +417,21 @@
"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",
+5
View File
@@ -47,6 +47,11 @@
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";
-1
View File
@@ -1,5 +1,4 @@
_: { _: {
flake.homeModules.tmux = _: { flake.homeModules.tmux = _: {
programs.tmux = { programs.tmux = {
enable = true; enable = true;
-6
View File
@@ -36,7 +36,6 @@ _: {
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 = {
@@ -90,11 +89,6 @@ _: {
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";
}; };
}; };
}; };
+2 -2
View File
@@ -2,8 +2,8 @@ _: {
flake.nixosModules.hardwareUtils-laptop = {pkgs, ...}: { flake.nixosModules.hardwareUtils-laptop = {pkgs, ...}: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# 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
]; ];
}; };
+10
View File
@@ -0,0 +1,10 @@
_: {
flake.nixosModules.onxyboox = {pkgs, ...}: {
services.gvfs.enable = true;
environment.systemPackages = with pkgs; [
gvfs
calibre
kdePackages.kio-extras
];
};
}
+2 -2
View File
@@ -44,7 +44,7 @@
notifications notifications
nvidia nvidia
office office
ollama #ollama
otherUtils otherUtils
performance-desktop performance-desktop
printer printer
@@ -133,7 +133,7 @@
home.homeDirectory = "/home/tomasr"; home.homeDirectory = "/home/tomasr";
home.sessionVariables = { home.sessionVariables = {
EDITOR = "neovim"; EDITOR = "nvim";
TERMINAL = "kitty"; TERMINAL = "kitty";
}; };
+5 -2
View File
@@ -9,6 +9,8 @@
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
@@ -18,7 +20,7 @@
audioAndMedia audioAndMedia
autoCleanup-laptop autoCleanup-laptop
autoUpdate-laptop autoUpdate-laptop
battery-laptop #battery-laptop
bluetooth bluetooth
bootloader bootloader
browsers browsers
@@ -45,6 +47,7 @@
nixUtils nixUtils
notifications notifications
office office
onxyboox
#ollama #ollama
otherUtils otherUtils
printer printer
@@ -129,7 +132,7 @@
home.homeDirectory = "/home/tomasr"; home.homeDirectory = "/home/tomasr";
home.sessionVariables = { home.sessionVariables = {
EDITOR = "neovim"; EDITOR = "nvim";
TERMINAL = "kitty"; TERMINAL = "kitty";
SYSTEMD_PAGER = "cat"; SYSTEMD_PAGER = "cat";
PAGER = "cat"; PAGER = "cat";
+14 -4
View File
@@ -19,6 +19,9 @@
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";
@@ -73,6 +76,9 @@
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";
@@ -112,8 +118,9 @@
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
git git
nixos-rebuild nixos-rebuild
matrix-commander-rs curl
libnotify libnotify
nix
]; ];
text = '' text = ''
@@ -135,7 +142,7 @@
# update lock only # update lock only
nix flake update --flake "$FLAKE_DIR" nix flake update --flake "$FLAKE_DIR"
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule 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 ! 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
@@ -180,11 +187,14 @@
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"
@@ -201,7 +211,7 @@
# update lock only # update lock only
nix flake update --flake "$FLAKE_DIR" nix flake update --flake "$FLAKE_DIR"
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule 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 ! 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
+1 -1
View File
@@ -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 = _: {
+7 -1
View File
@@ -48,11 +48,17 @@
"configFetchTime": 1, "configFetchTime": 1,
"localNotify": true, "localNotify": true,
"matrix": { "matrix": {
"enable": true, "enable": false,
"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"
} }
} }
''; '';
+9 -1
View File
@@ -16,7 +16,15 @@ _: {
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
# Enable the OpenSSH daemon. # Enable the OpenSSH daemon.
# services.openssh.enable = true; services.openssh = {
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 = [ ... ];
BIN
View File
Binary file not shown.
+8
View File
@@ -0,0 +1,8 @@
I am testing the tool ngcp i created. If this file disapears. It means I coded it wrong.
The problem before was that it did:
1. cherry pick
2. push
I didn't pulled changed before cherry picking