- Table of Contents
- π Showcase
- π Acknowledgement
- π About
- π¦ Content
- π Useful aliases in Fish Shell
- π οΈ Developement Environment
- π§ Components
- β¨οΈ Keybindings
- π Installation
- π Tips & Tricks
- π License
Note
More comming soon (or not) ...
First of all, a big Thank to XNM1 for his incredible NixOS Configuration, which was a massive inspiration for my own.
Go CHECKOUT his config if you want to see the full details !!
Note
This README is also inspired of his, modified to match my configuration details for Keybindings, Softwares and Aliases
However, it also adds more custom and specific informations
Other inspirations (not exhaustive, but those I could remember and/or find back)
- Sioodmy - dotfiles
- DarkKronicle - nazarik
- DrTheodor - nixos-dotfiles
- JaKooLit - NixOS-Hyprland
- ryan4in - nix-config
- end-4 - dots-hyprland
- and probably many others
THANKS to all of them for there incredible configurations I took pleasure to admire, read and understand
This repository houses my NixOS π§ Linux βοΈ flake configuration, using Hyprland and full-disk encryption with LUKS.
Note
It's essential to note that this configuration is not minimalistic or lightweight and may require some disk space and knowledge to understand.
This system leverages cutting-edge channels and versions of software to provide the latest updates and features. Notably, it utilizes:
- flake (An experimental feature of the Nix package manager)
- nixpkgs: unstable
- home-manager: Used to setup user environment (dotfiles)
- LUKS: Used for full-disk encryption
In this repository, you'll find my :
- Dotfiles - in
/home/config - Nix configuration files - in
/system/modules - Home-manager configuration files - in
/home/user
This system includes a fish shell configuration file (config.fish)
that provides various aliases to enhance my experience.
Common commands:
cl: clear the terminal screen (shorthand forclear)c: because I have no time to waste (sure ...)cls: because I spent to much time using the devil (Windows)
lgit: launch thelazygitcommand-line Git clientldocker: launch thelazydockercommand-line Docker clientopen: open file with default programm (open-xdg)
Git:
ga: alias forgit add . -Ags: alias forgit statusgl: alias forgit log --all --color --decorate --oneline --graph
NixOS-specific commands:
rebuild: rebuild your system using the current flakengc: delete all old generations of user profiles (equivalentsudo nix-collect-garbage -d)npw: wipe system history
And many others ...
| Alias | Description |
|---|---|
clk |
Launches rsclock in color mode. |
tree |
Runs tre with extended mode. (tre -e) |
ls |
Enhanced ls using eza with colors, Git info, icons, etc. |
ll |
Lists all files including hidden in detailed view. (ls -la) |
cd |
Uses z for smarter directory jumping. |
ps |
Uses procs, a modern replacement for ps. |
man |
Uses tldr for simplified man pages. |
du |
Uses dust for better disk usage display. |
mkdir |
Creates parent directories as needed. (mkdir -p) |
home |
Goes to home directory. (cd ~) |
vi |
Opens current directory in nvim. (nvim .) |
cat |
Uses bat for syntax-highlighted file viewing. |
df |
Uses duf for modern disk usage info. |
hex |
Displays binary files in hexadecimal format. (hexyl) |
dua |
Opens interactive disk usage analyzer. (dua -i) |
code |
Opens current directory in VSCodium. (codium .) |
Note
I mainly code in Python, C / C++, Typescript / Javascript and some basic HTML, CSS, but I would like to learn and use Go.
I also regularly use Markdown and Latex for documents editing.
To set up my different developement environments, I use flake.nix with those great
templates as a starting point, that I then extend
to my needs.
It provides a local, consistent and reproducible environment for each project in every programming / scripting language, and I find it the most practical way to get things done.
Important
It works particularly well for C / C++ projects where I need to use libraries like SFML, SDL or Dear ImGUI, because it would be a PAIN to setup otherwise.
I also direnv to automatically load the developement environement in the
shell when I'm in the directory (do direnv allow in the project directory to make it happen).
Tip
There are also the devenv and devbox projects that are even simplier to work with and configure when beginning.
Here is a list of every components that I use on my system to perform the various tasks of a modern OS.
| Component | Name |
|---|---|
| Distro | NixOS |
| Shell | Fish |
| Display Server | Wayland |
| WM (Compositor) | Hyprland |
| Bar | Waybar |
| Notification | Dunst |
| Launcher | Rofi |
| Editor | Helix, Nvim, Zed, VSCodium |
| Terminal | Kitty + Starship |
| OSD | Avizo |
| Night Gamma | Hyprsunset |
| Fetch Utility | Neofetch, Fastfetch, Onefetch |
| Theme | Catppuccin Macchiato |
| Icons | Numix-Circle |
| Font | JetBrains Mono + Nerd Font Patch |
| Player | Spotify + Spicetify + VLC |
| File Browser | Nemo + Yazi |
| Internet Browser | Firefox, Brave (chronium) |
| Private Browser | Tor Browser |
| Calculator | qalculate-gtk (GUI) + libqalculate |
| Mimetypes | MPV, Imv, Zathura |
| Image Editor | Swappy |
| Screenshot | Grim + Slurp & Flameshot |
| Recorder | OSB Studio |
| Clipboard | Wl-clipboard + Cliphist |
| Idle | Hypridle |
| Lock | Hyprlock |
| Logout menu | Wlogout |
| Wallpaper | Hyprpaper |
| Graphical Boot | Plymouth + Catppuccin-plymouth |
| Display Manager | SDDM |
| Containerization | Podman |
| Terminal Multiplexer | Zellij |
| Office Suite | OnlyOffice |
| Email Client | Thunderbird |
| Notetaking | Obsidian |
| Messaging | Discord + Signal + Telegram |
| Image Editing | GIMP + Inkspace |
| Backup | Rclone |
| 3D Slicer | Orca Slicer |
Here you'll find all my Hyprland specific keyboard shortcuts.
Note
As I'm currently using a Dell Laptop as my main computer, I do use the "Windows" home key as a SUPER.
I'm also using the special Print key for screenshots related actions
| Key Combination | Action |
|---|---|
| SUPER + SHIFT + Arrows | Resize windows |
| SUPER + ALT + Arrows | Move windows |
| SUPER + H, J, K, L/Arrows | Change window focus |
| SUPER + 1..0 | Change workspace (1-10) |
| SUPER + SHIFT + 1..0 | Move window to workspace (1-10) |
| SUPER + M | Switch to special workspace |
| SUPER + SHIFT + M | Move window to special workspace |
| SUPER + Q / ALT + F4 | Kill active window |
| SUPER + W | Toggle floating window |
| ALT + Return / Enter | Toggle full-screen |
| SUPER + O | Toggle split |
| SUPER + P | Toggle pseudo |
| SUPER + T | Launch kitty |
| SUPER | Launch rofi -drun |
| SUPER + F | Launch firefox |
| SUPER + E | Launch thunar |
| SUPER + ESCAPE / ALT + M | Launch wlogout |
| SUPER + S | Launch spotify |
| SUPER + D | Launch discord |
| SUPER + A | Launch ags |
| ALT + L | Launch hyprlock |
| SUPER + B | Launch btop |
| Take screenshot | |
| ALT + Print | Launch swappy to edit last taken screenshot |
| SUPER + C | Launch color picker (using pyprland) |
| SUPER + Z | Toggle Zoom (with pyprland) |
| SUPER + V | Launch clipboard menu (rofi -dmenu) |
| SUPER + I | Toggle night mode |
| ALT / ALT + TAB | Switch window menu |
| SUPER + CTRL + Arrows | Move to next / previous workspace |
| CTRL + ALT + A | Reloads ags config |
| CTRL + ALT + W | Reloads waybar config |
| SUPER + Space | Launch zellij inside kitty |
| SHIFT 1..4 | Change Waybar Theme (waybar-theme) |
You can find all other keybindings in /home/config/hypr/hyprland.conf in the bind section. All
system fish scripts are located at /home/config/fish/functions directory.
Note
This section is mostly for my personal use, but feel free to use it if you want to.
Important
This is how MY system is configured by default from now on
You can refer to this guide (which I used) to setup your system with LVM & LUKS full-disk encryption.
Caution
Refer to this section to avoid problems related to keyboard layout when entering LUKS password.
It shouldn't be needed, but I still recommend to it as it appear the best way to ensure everything will work as expected.
-
Download and Install NixOS from the official site.
-
Temporarily install ripgrep, fish and git using the command:
nix-shell -p ripgrep fish git --run fish. You can also use classic bash and grep for the next step without installing fish and ripgrep. -
Run the command
rg --hidden FIXMEand change/add lines to match your device, swaps, partitions, peripherals, file systems, etc. in the configuration files.[!IMPORTANT]
I highly recommend you to go throught all the configurations files and ensure everything is configured to your needs.
Don't forget to delete or change settings and configurations that are unique to you, like git settings, username, etc ...
-
Enable
flakesupport (more right here) on your current system. Don't forget to runsudo nixos-rebuild switchafter enablingflakein your/etc/configuration.nix. -
Clone this repository
git clone https://github.com/leoraclet/nixos-config
-
Then,
cd nixos-config -
Run the command
sudo nix flake update --flake /etc/nixos && sudo nixos-rebuild switch --flake ./#your-hostname --upgrade. Don't forget to replaceyour-hostnamewith your hostname before running the command; by default, hostname is set toleonne.
Note
This section mostly contains fixes and tips related to issues that I have encountered while configuring NixOS
When launching Discord for the first time with my current configuration, it will crash because OpenASAR can't find the Discord config files. To fix this issue, just launch Discord a first time as a standalone program before running it the usual way.
NIXPKGS_ALLOW_UNFREE=1 nix run --impure nixpkgs\#discordIf problems arise when switching to new configuration, you can see home-manager's related errors with the following command
journalctl -u home-manager-leonne.service -bsudo ifconfig wlan0 down
sudo macchanger -m 24:95:2f:d2:bc:79 wlan0
sudo ifconfig wlan0 upTo enumerate all power devices, execute
upower --enumerateThen to show information on the battery (for example)
upower -i (upower --enumerate | grep battery)For detailed instructions, please refer to this link.
The database is stored in the directory /var/lib/open-webui.
In my experience, the most straightforward solution was to delete the database entirely:
sudo rm -rf /var/lib/open-webui/webui.dbhyprsunset --temperature 2500or
hyprsunset --help # To see all avaible commandsOn machine A
code --list-extensions | xargs -L 1 echo code --install-extension > install-vscode-extensions.shOn machine B
chmod +x install-vscode-extensions.sh
./install-vscode-extensions.shUse the built-in Settings Sync functionality of VSCode.
- Syncing (works great) - Sync all of your VSCode settings across multiple devices
- local sync - Sync your settings to a local directory
Note
If you're connected to a printer via USB, you may first verify that the printer is detected by the system using the command lsusb.
First, configure printing in NixOS following the wiki.
Then, to list all available printers, use the following command:
lpstat -aCaution
If you don't see any printers, you may need to install the printer drivers. For example, for a Canon printer, you may need to install cnijfilter2.
Then to add the printer, go to the CUPS web interface at https://127.0.0.1:631 and add the printer manually.
To print a document from the terminal, use the following command:
lp -d <printer-name> <file-name>First, configure scanning in NixOS following the wiki.
To scan a document from the terminal, use the following command:
scanimage --device <your-device> --format=png > output.pngTip
You can use scanimage -L to list all available scanners.
When using LUKS encryption, the default key map used at the password prompt is US QWERTY.
To avoid issues caused by mismatched keyboard layouts, you can follow this Stack Overflow answer to add an additional key for decrypting the LUKS device.
This project is licensed under the MIT License - see the LICENSE file for details.



