mirror of
https://github.com/anotherhadi/nixy.git
synced 2026-08-21 10:45:49 +02:00
Compare commits
94 Commits
446e610c59
..
v2.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 4875fce088 | |||
| 6ff18b7d15 | |||
| a6526de2a4 | |||
| bf04dce6d5 | |||
| fdabd7edf9 | |||
| a13ea2b8da | |||
| 0473880942 | |||
| c2afa515ee | |||
| ecee3e4daa | |||
| 39c70d2152 | |||
| c6cc2b3e2b | |||
| 61eac2f021 | |||
| 55cfb67493 | |||
| 082fbb2130 | |||
| 207caa7ba5 | |||
| 9d03a16364 | |||
| 7832f5f750 | |||
| c9775af4ea | |||
| 146afb1de5 | |||
| e9e7d4f06f | |||
| 273fd77b86 | |||
| cf04176b10 | |||
| eb3083346f | |||
| 5078a34ee3 | |||
| b5f27c6ed6 | |||
| cb7c2f3c40 | |||
| 3e6f8b856d | |||
| 38b516453a | |||
| 2e9fd1710f | |||
| 4b8593b097 | |||
| fd5dfea2c4 | |||
| b623474fc0 | |||
| ffcd2c0c19 | |||
| aa1a9c25d7 | |||
| cd837e208e | |||
| eca9b216ba | |||
| f1bff29cd9 | |||
| e452d79f0c | |||
| 0fb184e8d3 | |||
| 5b337e5e94 | |||
| 498c03decc | |||
| 5f6fb011a2 | |||
| 46b913a7d3 | |||
| 0ecb821342 | |||
| f7d23ddee9 | |||
| fb63d4c0e9 | |||
| 9bddf6dab9 | |||
| 2f39827f03 | |||
| 41a6417a2d | |||
| 02331d9deb | |||
| 742aa325aa | |||
| 6d487ab9f0 | |||
| a0f7128a28 | |||
| fdd5d685d6 | |||
| 62213109f7 | |||
| 9c43c89a3f | |||
| 9c1fc992e2 | |||
| cc2b0989d3 | |||
| 3ee5f2097d | |||
| 5657e0b24c | |||
| b51725e7cd | |||
| 86f8c99554 | |||
| c256b870aa | |||
| 94103e9dfb | |||
| af6319c8ec | |||
| 6edda0e6e1 | |||
| 3ba7648eb0 | |||
| 484d82a788 | |||
| be0d934622 | |||
| abab0d1b96 | |||
| 9dd462b0b8 | |||
| 28404f07cd | |||
| eb0e205e99 | |||
| 0c856fe2d2 | |||
| 26452fbf23 | |||
| 6f2ad22139 | |||
| e79b8ac14c | |||
| 9826faa7d0 | |||
| 68e5393f5d | |||
| f3e7766229 | |||
| 76f7b763cf | |||
| 51191f82c7 | |||
| e86c831653 | |||
| 91f8e392ef | |||
| 7ce04c1ae9 | |||
| 1aff187d21 | |||
| 856c0c3212 | |||
| acfaa9d9e8 | |||
| 20307f9096 | |||
| ff1d70ba79 | |||
| 188e34a575 | |||
| 373c2d4546 | |||
| ae1335d4d2 | |||
| 70e9831d3a |
+2
-2
@@ -1,11 +1,11 @@
|
||||
keys:
|
||||
- &primary age12yvtj49pfh3fqzqflscm0ek4yzrjhr6cqhn7x89gdxnlykq0xudq5c7334
|
||||
creation_rules:
|
||||
- path_regex: secrets/laptop.yaml$
|
||||
- path_regex: hosts/laptop/secrets/laptop.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- path_regex: secrets/server.yaml$
|
||||
- path_regex: hosts/server/secrets/server.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[//]: # (Title: Nixy)
|
||||
[//]: # (Description: Nixy is a Hyprland NixOS configuration with home-manager, secrets and custom theming all in one place. It's a simple way to manage your system configuration and dotfiles.)
|
||||
[//]: # (Author: Hadi)
|
||||
[//]: # (Date: 06/25/24)
|
||||
[//]: # (Version: v2.0.0)
|
||||
[//]: # (Date: 08/19/24)
|
||||
[//]: # (Version: v2.1.0)
|
||||
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/anotherhadi/nixy/main/docs/src/logo.png" width="100px" />
|
||||
@@ -15,7 +15,7 @@
|
||||
<br>
|
||||
<div align="center">
|
||||
<a href="https://github.com/anotherhadi/nixy">
|
||||
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=Version&message=v2.0.0&colorA=181825&colorB=89b4fa&logo=githubactions&logoColor=89b4fa"/>
|
||||
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=Version&message=v2.1.0&colorA=181825&colorB=89b4fa&logo=githubactions&logoColor=89b4fa"/>
|
||||
</a>
|
||||
<a href="https://github.com/anotherhadi/nixy/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/anotherhadi/nixy?color=89b4fa&labelColor=181825&style=for-the-badge&logo=starship&logoColor=89b4fa">
|
||||
@@ -51,14 +51,16 @@ It's a simple way to manage your system configuration and dotfiles.
|
||||
|
||||
## Architecture
|
||||
|
||||
- 🏠 `home` are the dotfiles and configuration files for the user
|
||||
- 🏠 `home` are the dotfiles and configuration files for the users
|
||||
- 'programs' is a collection of apps configured with home-manager
|
||||
- 'scripts' is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md))
|
||||
- 'system' is some "desktop environment" configuration
|
||||
- 'wallpapers' are... wallpapers
|
||||
- 💻 `hosts` are the system configuration files
|
||||
- 'laptop' is my configuration for my laptop with Nvidia
|
||||
- 'server' is for my Nixos server (w/nextcloud, nginx, vaultwarden, ... look `hosts/server`)
|
||||
- 'guest' is a *template* that you can copy and modify for *your own system*
|
||||
- 'laptop' is my configuration for my laptop with Nvidia that you can copy
|
||||
- 'server' is for my homeserver (w/nextcloud, nginx, vaultwarden, ... look `hosts/server`)
|
||||
- 'themes' contains all the *themes* available *(see [THEMES.md](docs/THEMES.md))*
|
||||
- 'modules' are some nix modules that you can import (Nvidia, prime, fonts, ...)
|
||||
- 🤫 `secrets` are the secrets files encrypted with sops-nix
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -66,9 +68,9 @@ It's a simple way to manage your system configuration and dotfiles.
|
||||
git clone https://github.com/anotherhadi/nixy ~/.config/nixos
|
||||
```
|
||||
|
||||
- Copy the `hosts/guest` folder, rename it to your system name, and change the variables inside the `variables.nix` file
|
||||
- Copy the `hosts/laptop` folder, rename it to your system name, and change the variables inside the `variables.nix` file
|
||||
- Add your `hardware-configuration.nix` to your new host's folder
|
||||
- Add your 'nixosConfigurations' inside `flake.nix` (You can edit the "yourhostname" one and change the lines containing '# CHANGEME')
|
||||
- Add your 'nixosConfigurations' inside `flake.nix` (You can edit your hostname one and change the lines containing '# CHANGEME')
|
||||
|
||||
> [!NOTE]
|
||||
> When you add new files, don't forget to run `git add .` to add them to the git repository
|
||||
@@ -82,6 +84,9 @@ sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
|
||||
- [THEMES.md](docs/THEMES.md): How themes work and how to create your own
|
||||
- [APPS.md](docs/APPS.md): Which apps are installed
|
||||
- [SCRIPTS.md](docs/SCRIPTS.md): Scripts that are available
|
||||
- [KEYBINDINGS.md](docs/KEYBINDINGS.md): Keybindings available in Hyprland
|
||||
- [WALLPAPERS.md](docs/WALLPAPERS.md): Preview of every wallpapers available
|
||||
|
||||
- [TODO.md](docs/TODO.md): What's next (feel free to contribute)
|
||||
- [CONTRIBUTING.md](docs/CONTRIBUTING.md): How to contribute
|
||||
- [LICENSE](LICENSE): MIT Licensey
|
||||
- [LICENSE](LICENSE): MIT License
|
||||
|
||||
+32
-33
@@ -4,45 +4,45 @@
|
||||
|
||||
## Laptop
|
||||
|
||||
The laptop configuration is used by a Omen 16 laptop w/ nvidia and an amd gpu running NixOS.
|
||||
The laptop configuration is used by an Omen 16 laptop w/ nvidia and an amd gpu running NixOS.
|
||||
The configurations files can be found in the `hosts/laptop` directory.
|
||||
|
||||
|
||||
| Category | Name |
|
||||
|----------------|---------------|
|
||||
| WM | Hyprland |
|
||||
| | hyprlock |
|
||||
| | hyprpaper |
|
||||
| | hypridle |
|
||||
| | wlogout |
|
||||
| Bar | waybar |
|
||||
| Terminal | kitty |
|
||||
| Shell | zsh |
|
||||
| | tmux |
|
||||
| | starship |
|
||||
| | bat |
|
||||
| | eza |
|
||||
| | zoxide |
|
||||
| | fzf |
|
||||
| Editor | neovim(nixvim)|
|
||||
| File manager | lf |
|
||||
| | thunar |
|
||||
| Browser | qutebrowser |
|
||||
| Music | spicetify |
|
||||
| Notifications | dunst |
|
||||
| Launcher | wofi |
|
||||
| DM | tuigreet |
|
||||
| Secrets | sops-nix |
|
||||
| Misc | lazygit |
|
||||
| | neofetch |
|
||||
| | cava |
|
||||
| See [hosts/laptop](../hosts/laptop/)... | |
|
||||
| Category | Name |
|
||||
| --------------------------------------- | -------------- |
|
||||
| WM | Hyprland |
|
||||
| | hyprlock |
|
||||
| | hyprpaper |
|
||||
| | hypridle |
|
||||
| | hyprcursor |
|
||||
| | wlogout |
|
||||
| Bar | waybar |
|
||||
| Terminal | kitty |
|
||||
| Shell | zsh |
|
||||
| | tmux |
|
||||
| | starship |
|
||||
| | bat |
|
||||
| | eza |
|
||||
| | zoxide |
|
||||
| | fzf |
|
||||
| Editor | neovim(nixvim) |
|
||||
| File manager | lf |
|
||||
| | thunar |
|
||||
| Browser | qutebrowser |
|
||||
| Music | spicetify |
|
||||
| Notifications | dunst |
|
||||
| Launcher | wofi |
|
||||
| DM | tuigreet |
|
||||
| Secrets | sops-nix |
|
||||
| Misc | lazygit |
|
||||
| | neofetch |
|
||||
| | cava |
|
||||
| See [hosts/laptop](../hosts/laptop/)... | |
|
||||
|
||||
## Server
|
||||
|
||||
The server configuration is used by a home server running NixOS.
|
||||
The configurations files can be found in the `hosts/server` directory.
|
||||
I mainly use it for self hosting websites and services such as Nextcloud, Vaultwarden, ...
|
||||
I mainly use it for self-hosting websites and services such as Nextcloud, Vaultwarden, ...
|
||||
I exposed some services to the internet using a reverse proxy (Nginx) and cloudflare-dyndns, others are accessed through a tailscale network
|
||||
|
||||
### Apps
|
||||
@@ -50,7 +50,6 @@ I exposed some services to the internet using a reverse proxy (Nginx) and cloudf
|
||||
- Nextcloud
|
||||
- Vaultwarden
|
||||
- Adguard Home
|
||||
- Unifi Controler
|
||||
- Uptime Kuma
|
||||
- "Jackflix"
|
||||
- Jellyfin, Transmission, *arr
|
||||
|
||||
+10
-4
@@ -1,13 +1,19 @@
|
||||
# Contributing to Nixy
|
||||
|
||||
Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the `docs/TODO.md` file!
|
||||
Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the [TODO.md](./TODO.md) file!
|
||||
|
||||
The process is straight-forward.
|
||||
|
||||
- Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1)
|
||||
- Fork Nixy [git repository](https://github.com/anotherhadi/nixy).
|
||||
- Write your changes (new theme, bug fixes, task in todo, ...).
|
||||
- Write your changes (new theme, bug fixes, task in to-do, ...).
|
||||
- Create a Pull Request against the main branch of Nixy.
|
||||
|
||||
> [!WARNING]
|
||||
> Don't push your host's files, secrets, or home configuration
|
||||
> [!TIP]
|
||||
> When wallpapers are added, run `./docs/scripts/compress_png.sh` and `./docs/scripts/create_preview_wallpapers.sh`
|
||||
|
||||
> [!TIP]
|
||||
> To update the README, change the `./docs/src/README_template.md` and run `./docs/scripts/create_readme.sh`
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Don't push your host's folder
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Keybindings
|
||||
|
||||
The list of the keybindings working on Hyprland:
|
||||
|
||||
| Description | Keybinding |
|
||||
|-----------------------------|--------------------------|
|
||||
| Switch Workspace | SUPER + {Number} |
|
||||
| Move app to Workspace | SHIFT + SUPER + {Number} |
|
||||
| Kitty | SUPER + RETURN |
|
||||
| Thunar | SUPER + E |
|
||||
| Qutebrowser | SUPER + B |
|
||||
| Bitwarden | SUPER + K |
|
||||
| Peaclock | SUPER + C |
|
||||
| Lock | SUPER + L |
|
||||
| Powermenu | SUPER + X |
|
||||
| Launcher | SUPER + SPACE |
|
||||
| Close window | SUPER + Q |
|
||||
| Toggle Floating | SUPER + T |
|
||||
| Toggle Fullscreen | SUPER + F |
|
||||
| Move focus left | SUPER + left |
|
||||
| Move focus Right | SUPER + right |
|
||||
| Move focus Up | SUPER + up |
|
||||
| Move focus Down | SUPER + down |
|
||||
| Screenshot window | SUPER + PRINT |
|
||||
| Screenshot monitor | PRINT |
|
||||
| Screenshot region | SHIFT + SUPER + PRINT |
|
||||
| Screenshot region then edit | ALT PRINT |
|
||||
| Turn off night shift | SUPER + F2 |
|
||||
| Turn on night shift | SUPER + F3 |
|
||||
| Choose sound output | SUPER + F5 |
|
||||
| Move Window (mouse) | SUPER + mouse:272 |
|
||||
| Resize Window (mouse) | SUPER + R |
|
||||
| Toggle Mute | XF86AudioMute |
|
||||
| Lock when closing Lid | switch:Lid Switch |
|
||||
| Sound Up | XF86AudioRaiseVolume |
|
||||
| Sound Down | XF86AudioLowerVolume |
|
||||
| Brightness Up | XF86MonBrightnessUp |
|
||||
| Brightness Down | XF86MonBrightnessDown |
|
||||
@@ -39,6 +39,8 @@ Caffeine is a simple script that toggles hypridle (disable suspend & screenlock)
|
||||
|
||||
Blue light filter, using wlsunset
|
||||
|
||||
- `night-shift` # Toggle night shift
|
||||
- `night-shift-status` # Return active/inactive
|
||||
- `night-shift-on`
|
||||
- `night-shift-off`
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ Themes are defined in `hosts/themes`. Those themes define the colors, fonts, ico
|
||||
You can change the selected theme by changing the import statement of your host's variables.nix file.
|
||||
|
||||
> [!TIP]
|
||||
> To apply the theme to Duckduckgo, follow the instructions in `$HOME/.duckduckgo-colorscheme.js`
|
||||
> To apply the theme to DuckDuckGo, follow the instructions in `$HOME/.duckduckgo-colorscheme.js`
|
||||
|
||||
## Create your theme
|
||||
|
||||
|
||||
+21
-29
@@ -3,40 +3,32 @@
|
||||
feel free to contribute <3 ([CONTRIBUTING.md](CONTRIBUTING.md))
|
||||
|
||||
- [ ] Nixy
|
||||
- [ ] Installation script ([install.sh](./scripts/install.sh) to test on a fresh install)
|
||||
- [ ] Variables-template with defaults
|
||||
- [ ] Themes
|
||||
- [ ] Upload new wallpapers
|
||||
- [ ] MacOS theme
|
||||
- [ ] GithubFetch: Neofetch like, github calendar in the terminal
|
||||
- [ ] Write a hyprland shortcuts markdown file (Parse the hyprland settings conf)
|
||||
- [ ] Tofi (Wofi but terminal based)
|
||||
|
||||
- [ ] Waybar
|
||||
- [ ] Caffeine status
|
||||
- [ ] Night-shift status
|
||||
- [ ] Qutebrowser
|
||||
- [ ] !!! Bitwarden integration (I need this.)
|
||||
|
||||
- [ ] Hyprland
|
||||
- [ ] Make hyprcursor work
|
||||
- [ ] Animations based on app name
|
||||
- [ ] Wofi: popin
|
||||
- [ ] Wlogout: fade in
|
||||
- [ ] Fix screenshots
|
||||
- [ ] Implement Hyprcursor
|
||||
echo "Compresing png files..."
|
||||
- [ ] wofi: popin
|
||||
- [ ] wlogout: fade in
|
||||
- [ ] Fix screenshots (screenshot region's border shows up in the screenshot, hyprshot jq error?)
|
||||
- [ ] Hyprlock themes
|
||||
- [ ] Hypridle fix: suspend not working?
|
||||
|
||||
- [ ] Nixvim
|
||||
- [ ] Telescope: find with file content
|
||||
- [ ] Markdown snippets
|
||||
- [ ] Whichkey: Description for keybindings
|
||||
- [ ] Spelling
|
||||
- [ ] Keymaps:
|
||||
- Trouble
|
||||
- Tagbar (actually not working)
|
||||
- [ ] Disable background color for headlines.nvim for titles
|
||||
|
||||
- [ ] Backup system for some folders ($home/dev, $home/pictures, ...)
|
||||
- [ ] Exclude file pattern (nodes modules, ...)
|
||||
- [ ] Auto backup when a specific usb key is plugged
|
||||
## Server
|
||||
|
||||
- [ ] Usb security for laptop & server, variable in variables.nix, disable for guest
|
||||
|
||||
- [ ] Server
|
||||
- [ ] Bitcoin-git
|
||||
- [ ] ServerFetch: Neofetch like, but for server: CPU, RAM, Disk, Network, Uptime, status (check with uptime kuma API)
|
||||
- [ ] Ntfy auth file
|
||||
- [ ] Launch transmission-openvpn on boot (see hosts/server/modules/jackflix/transmission.nix)
|
||||
- [ ] Server configuration is actually broken, need to update with the new modules
|
||||
- [ ] Jackflix V2
|
||||
- Backup Radarr, Prowlarr, Sonarr config
|
||||
- Take a look into buildarr
|
||||
- [ ] Bitcoin-git: to test
|
||||
- [ ] Ntfy auth file
|
||||
- [ ] Secrets mode 0444: not secure
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# Wallpapers
|
||||
|
||||
Wallpapers can be found in the `/home/wallpapers` folder.
|
||||
|
||||
| Name | Preview |
|
||||
|---------------------|----------------------------------------------------------------|
|
||||
| astronaut.png |  |
|
||||
| aurore.png |  |
|
||||
| barcode.png |  |
|
||||
| cat-leaves.png |  |
|
||||
| city.png |  |
|
||||
| cloud.png |  |
|
||||
| clouds2.png |  |
|
||||
| clouds.png |  |
|
||||
| coffee.png |  |
|
||||
| dark_cloud.png |  |
|
||||
| dark.png |  |
|
||||
| fuji-dark.png |  |
|
||||
| fuji-light.png |  |
|
||||
| galaxy.png |  |
|
||||
| house-cloud.png |  |
|
||||
| key.png |  |
|
||||
| lavender-cat.png |  |
|
||||
| lofi-computer.png |  |
|
||||
| lofi-urban.png |  |
|
||||
| magma.png |  |
|
||||
| mountains-black.png |  |
|
||||
| mountains.png |  |
|
||||
| nix.png |  |
|
||||
| problems.png |  |
|
||||
| sea2.png |  |
|
||||
| sea.png |  |
|
||||
| space2.png |  |
|
||||
| space.png |  |
|
||||
| street.png |  |
|
||||
| sun.png |  |
|
||||
| tokyo.png |  |
|
||||
| train.png |  |
|
||||
| windows.png |  |
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Compress png files in ./docs/src
|
||||
# Compress png files in ./docs/src and ./home/wallpapers
|
||||
|
||||
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
|
||||
|
||||
@@ -14,6 +14,7 @@ for file in ./docs/src/*/*.png; do
|
||||
optipng "$file"
|
||||
done
|
||||
|
||||
# Wallpapers
|
||||
for file in ./home/wallpapers/*.png; do
|
||||
optipng "$file"
|
||||
done
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# This script is used to copy my own configuration to the `./hosts/guest` one, and changing some settings
|
||||
|
||||
[[ -d "./hosts" ]] || (
|
||||
echo "Folder ./hosts not found"
|
||||
exit 1
|
||||
)
|
||||
|
||||
LAPTOP_CONFIG="./hosts/laptop"
|
||||
GUEST_CONFIG="./hosts/guest"
|
||||
|
||||
cp "$LAPTOP_CONFIG/configuration.nix" "$GUEST_CONFIG/configuration.nix"
|
||||
cp "$LAPTOP_CONFIG/variables.nix" "$GUEST_CONFIG/variables.nix"
|
||||
|
||||
# Remove the NVIDIA driver import
|
||||
config=$(cat "$LAPTOP_CONFIG/configuration.nix")
|
||||
config=$(echo "$config" | sed 's/..\/shared\/nvidia/# ..\/shared\/nvidia/')
|
||||
config=$(echo "$config" | sed 's/..\/shared\/prime/# ..\/shared\/prime/')
|
||||
echo "$config" >"$GUEST_CONFIG/configuration.nix"
|
||||
|
||||
variables=$(cat "$LAPTOP_CONFIG/variables.nix")
|
||||
variables=$(echo "$variables" | sed 's/112569860+anotherhadi@users.noreply.github.com/your_email/')
|
||||
variables=$(echo "$variables" | sed 's/hadi/your_username/')
|
||||
variables=$(echo "$variables" | sed 's/Hadi/your_username/')
|
||||
variables=$(echo "$variables" | sed 's/sops = true/sops = false/')
|
||||
variables=$(echo "$variables" | sed 's/obsidian = true/obsidian = false/')
|
||||
variables=$(echo "$variables" | sed 's/tailscale = true/tailscale = false/')
|
||||
echo "$variables" >"$GUEST_CONFIG/variables.nix"
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
|
||||
|
||||
# Create WALLPAPERS.md to preview wallpapers in ./home/wallpapers
|
||||
|
||||
WALLPAPERS_FOLDER="./home/wallpapers"
|
||||
WALLPAPERS_MD="./docs/WALLPAPERS.md"
|
||||
[[ -d "$WALLPAPERS_FOLDER" ]] || (echo "Wallpapers folder not found" && exit 1)
|
||||
|
||||
echo "# Wallpapers" >"$WALLPAPERS_MD"
|
||||
echo "" >>"$WALLPAPERS_MD"
|
||||
echo "Wallpapers can be found in the \`/home/wallpapers\` folder." >>"$WALLPAPERS_MD"
|
||||
echo "" >>"$WALLPAPERS_MD"
|
||||
echo "| Name | Preview |" >>"$WALLPAPERS_MD"
|
||||
echo "| -- | -- |" >>"$WALLPAPERS_MD"
|
||||
|
||||
for file in "$WALLPAPERS_FOLDER"/*.png; do
|
||||
filename=$(basename "$file")
|
||||
echo "| $filename |  |" >>"$WALLPAPERS_MD"
|
||||
done
|
||||
|
||||
pandoc -t commonmark_x "$WALLPAPERS_MD" -o "/tmp/wallpapers.md"
|
||||
mv "/tmp/wallpapers.md" "$WALLPAPERS_MD"
|
||||
@@ -7,14 +7,18 @@
|
||||
README_FILE="./README.md"
|
||||
|
||||
header=$(cat "./docs/src/header.md")
|
||||
table_of_content=$(~/go/bin/md-table-of-contents ./docs/src/README_template.md)
|
||||
table_of_content=$(md-table-of-contents ./docs/src/README_template.md) # https://github.com/anotherhadi/md-table-of-contents
|
||||
version=$(git describe --tags --abbrev=0)
|
||||
readme_content=$(cat "./docs/src/README_template.md")
|
||||
description=$(curl -s https://api.github.com/repos/anotherhadi/nixy | jq .description)
|
||||
description="${description%\"}"
|
||||
description="${description#\"}"
|
||||
|
||||
header=${header//\{date\}/$(date '+%D')}
|
||||
header=${header//\{primarycolor\}/89b4fa}
|
||||
header=${header//\{backgroundcolor\}/181825}
|
||||
header=${header//\{version\}/$version}
|
||||
header=${header//\{description\}/$description}
|
||||
readme_content=${readme_content//\{md_table_of_content\}/$table_of_content}
|
||||
|
||||
echo "$header" >"$README_FILE"
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
[[ -f "./home/system/hyprland/default.nix" ]] || (echo "File ./home/system/hyprland/default.nix not found" && exit 1)
|
||||
|
||||
config=$( cat "./home/system/hyprland/default.nix")
|
||||
|
||||
# get text between
|
||||
# bind = [
|
||||
# and next ]
|
||||
|
||||
# Example:
|
||||
# "$mod, E, exec, ${pkgs.xfce.thunar}/bin/thunar" # Description
|
||||
# Steps:
|
||||
# We should remove the ""
|
||||
# $mod replace by Super key
|
||||
# $shiftMod replace by "Super Shift"
|
||||
# Concat with key
|
||||
# Remove , exec,
|
||||
# Remove variables and /bin/ if present
|
||||
|
||||
# Create a markdown table with everything
|
||||
@@ -1,78 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# https://github.com/anotherhadi/nixy
|
||||
# Installation script: Should be run on fresh nixos install.
|
||||
|
||||
printf "\n\e[0;92m- \e[0m\e[1;77mNixy's Installation Script\e[0;96m [anotherhadi/nixy]\e[0m"
|
||||
|
||||
# Check if we're on the good directory
|
||||
[[ -f "./docs/scripts/install.sh" ]] || (
|
||||
printf "\n\e[0;91mx \e[0m\e[1;77mNot in the project root directory\e[0m"
|
||||
exit 1
|
||||
)
|
||||
DIR=$PWD
|
||||
|
||||
# Create a new configuration
|
||||
read -rp $'\n\e[0;92m+\e[0m\e[1;77m Username: \e[0;96m' username
|
||||
read -rp $'\n\e[0;92m+\e[0m\e[1;77m Hostname: \e[0;96m' hostname
|
||||
|
||||
HOST_DIR="./hosts/$hostname"
|
||||
mkdir "$HOST_DIR"
|
||||
|
||||
nixos-generate-config --show-hardware-config >"$HOST_DIR/hardware-configuration.nix"
|
||||
|
||||
printf "\n\e[0;92m? \e[0m\e[1;77mInstall Nvidia drivers?\e[0;96m [y/N]\e[0m"
|
||||
read -r yn
|
||||
yn=$(echo "$yn" | tr '[:upper:]' '[:lower:]')
|
||||
if [[ $yn == "y" || $yn == "yes" ]]; then
|
||||
nvidia=true
|
||||
else
|
||||
nvidia=false
|
||||
fi
|
||||
|
||||
printf "\n\e[0;92m? \e[0m\e[1;77mInstall prime?\e[0;96m [y/N]\e[0m"
|
||||
read -r yn
|
||||
yn=$(echo "$yn" | tr '[:upper:]' '[:lower:]')
|
||||
if [[ $yn == "y" || $yn == "yes" ]]; then
|
||||
prime=true
|
||||
else
|
||||
prime=false
|
||||
fi
|
||||
|
||||
cp "$LAPTOP_CONFIG/configuration.nix" "$HOST_DIR/configuration.nix"
|
||||
cp "$LAPTOP_CONFIG/variables.nix" "$HOST_DIR/variables.nix"
|
||||
|
||||
config=$(cat "$LAPTOP_CONFIG/configuration.nix")
|
||||
if [[ $nvidia == false ]]; then
|
||||
config=$(echo "$config" | sed 's/..\/shared\/nvidia/# ..\/shared\/nvidia/')
|
||||
fi
|
||||
if [[ $prime == false ]]; then
|
||||
config=$(echo "$config" | sed 's/..\/shared\/prime/# ..\/shared\/prime/')
|
||||
fi
|
||||
echo "$config" >"$HOST_DIR/configuration.nix"
|
||||
|
||||
variables=$(cat "$LAPTOP_CONFIG/variables.nix")
|
||||
variables=$(echo "$variables" | sed 's/112569860+anotherhadi@users.noreply.github.com/your_email/')
|
||||
variables=$(echo "$variables" | sed "s/hadi/$username/")
|
||||
variables=$(echo "$variables" | sed "s/nixy/$hostname/") # FIXME: Host name can be mixed with themes
|
||||
variables=$(echo "$variables" | sed "s/Hadi/$username/")
|
||||
variables=$(echo "$variables" | sed 's/sops = true/sops = false/')
|
||||
variables=$(echo "$variables" | sed 's/obsidian = true/obsidian = false/')
|
||||
variables=$(echo "$variables" | sed 's/tailscale = true/tailscale = false/')
|
||||
echo "$variables" >"$HOST_DIR/variables.nix"
|
||||
|
||||
# Add it to the git index
|
||||
git add .
|
||||
|
||||
printf "\n\e[0;92m+ \e[0m\e[1;77mHost added!\e[0m"
|
||||
|
||||
# REBUILD
|
||||
|
||||
printf "\n\e[0;92m? \e[0m\e[1;77mDo you want to rebuild?\e[0;96m [y/N]\e[0m"
|
||||
read -r yn
|
||||
yn=$(echo "$yn" | tr '[:upper:]' '[:lower:]')
|
||||
if [[ $yn == "y" || $yn == "yes" ]]; then
|
||||
sudo nixos-rebuild switch --flake "$DIR"#"$hostname"
|
||||
fi
|
||||
|
||||
printf "\n\e[0;92m✓ \e[0m\e[1;77mDone!\e[0m"
|
||||
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# A script to parse the Hyprland configuration to store keybindings in a table
|
||||
|
||||
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
|
||||
|
||||
KEYBINDINGS_FILE="./docs/KEYBINDINGS.md"
|
||||
|
||||
function getList() {
|
||||
content=$1
|
||||
name=$2
|
||||
list_start=$(echo "$content" | sed "/$name = \[/!d;=;Q")
|
||||
list=$(echo "$content" | tail +"$list_start")
|
||||
list_end=$(echo "$list" | sed '/\]/!d;=;Q')
|
||||
list=$(echo "$list" | head -n"$list_end")
|
||||
|
||||
echo "$list"
|
||||
}
|
||||
|
||||
[[ -f "./home/system/hyprland/default.nix" ]] || (echo "File ./home/system/hyprland/default.nix not found" && exit 1)
|
||||
|
||||
config=$(cat "./home/system/hyprland/default.nix")
|
||||
|
||||
# Bind
|
||||
bind=$(getList "$config" "bind")
|
||||
# Bindm (mouse)
|
||||
bindm=$(getList "$config" "bindm")
|
||||
# Bindl (lock)
|
||||
bindl=$(getList "$config" "bindl")
|
||||
# Bindle (lock, repetition)
|
||||
bindle=$(getList "$config" "bindle")
|
||||
|
||||
# Join the lists:
|
||||
keybindings=$(echo -e "$bind\n$bindm\n$bindl\n$bindle" | grep '"')
|
||||
|
||||
echo "# Keybindings" >"$KEYBINDINGS_FILE"
|
||||
echo "" >>"$KEYBINDINGS_FILE"
|
||||
echo "The list of the keybindings working on Hyprland:" >>"$KEYBINDINGS_FILE"
|
||||
echo "" >>"$KEYBINDINGS_FILE"
|
||||
|
||||
echo "| Description | Keybinding |" >>"$KEYBINDINGS_FILE"
|
||||
echo "| -- | -- |" >>"$KEYBINDINGS_FILE"
|
||||
echo "| Switch Workspace | SUPER + {Number} |" >>"$KEYBINDINGS_FILE"
|
||||
echo "| Move app to Workspace | SHIFT + SUPER + {Number} |" >>"$KEYBINDINGS_FILE"
|
||||
echo "$keybindings" | while read line; do
|
||||
comment=$(echo "$line" | cut -d\# -f2)
|
||||
line=$(echo "$line" | cut -d\# -f1)
|
||||
line=${line:1:${#line}-3}
|
||||
mod=$(echo "$line" | cut -d, -f1)
|
||||
key=$(echo "$line" | cut -d, -f2)
|
||||
dispatcher=$(echo "$line" | cut -d, -f3)
|
||||
params=$(echo "$line" | cut -d, -f4)
|
||||
|
||||
[[ $mod == '$mod' ]] && mod="SUPER + "
|
||||
[[ $mod == '$shiftMod' ]] && mod="SHIFT + SUPER + "
|
||||
|
||||
echo "| $comment | $mod$key |" >>"$KEYBINDINGS_FILE"
|
||||
done
|
||||
|
||||
pandoc -t commonmark_x "$KEYBINDINGS_FILE" -o "/tmp/keybindings.md"
|
||||
mv "/tmp/keybindings.md" "$KEYBINDINGS_FILE"
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
|
||||
|
||||
TAG=$(git describe --tags --abbrev=0)
|
||||
echo "Current tag: $TAG"
|
||||
|
||||
read -rp "Enter the new tag name: " NEW_TAG
|
||||
|
||||
read -rp "Do you want to compress the png files? [y/N]: " COMPRESS_PNG
|
||||
if [[ "$COMPRESS_PNG" == "y" || "$COMPRESS_PNG" == "Y" ]]; then
|
||||
echo "Compresing png files..."
|
||||
bash ./docs/scripts/compress_png.sh
|
||||
fi
|
||||
|
||||
echo "Creating wallpapers preview..."
|
||||
bash ./docs/scripts/create_preview_wallpapers.sh
|
||||
echo "Creating README.md..."
|
||||
bash ./docs/scripts/create_readme.sh
|
||||
echo "Creating keybindings.md..."
|
||||
bash ./docs/scripts/keybindings_to_markdown.sh
|
||||
|
||||
git add .
|
||||
git commit -m "Release $NEW_TAG"
|
||||
git tag -a "$NEW_TAG" -m "Release $NEW_TAG"
|
||||
git push origin "$NEW_TAG"
|
||||
@@ -14,14 +14,16 @@ It's a simple way to manage your system configuration and dotfiles.
|
||||
|
||||
## Architecture
|
||||
|
||||
- 🏠 `home` are the dotfiles and configuration files for the user
|
||||
- 🏠 `home` are the dotfiles and configuration files for the users
|
||||
- 'programs' is a collection of apps configured with home-manager
|
||||
- 'scripts' is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md))
|
||||
- 'system' is some "desktop environment" configuration
|
||||
- 'wallpapers' are... wallpapers
|
||||
- 💻 `hosts` are the system configuration files
|
||||
- 'laptop' is my configuration for my laptop with Nvidia
|
||||
- 'laptop' is my configuration for my laptop with Nvidia that you can copy
|
||||
- 'server' is for my homeserver (w/nextcloud, nginx, vaultwarden, ... look `hosts/server`)
|
||||
- 'guest' is a *template* that you can copy and modify for *your own system*
|
||||
- 'themes' contains all the *themes* available *(see [THEMES.md](docs/THEMES.md))*
|
||||
- 'modules' are some nix modules that you can import (Nvidia, prime, fonts, ...)
|
||||
- 🤫 `secrets` are the secrets files encrypted with sops-nix
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -29,9 +31,9 @@ It's a simple way to manage your system configuration and dotfiles.
|
||||
git clone https://github.com/anotherhadi/nixy ~/.config/nixos
|
||||
```
|
||||
|
||||
- Copy the `hosts/guest` folder, rename it to your system name, and change the variables inside the `variables.nix` file
|
||||
- Copy the `hosts/laptop` folder, rename it to your system name, and change the variables inside the `variables.nix` file
|
||||
- Add your `hardware-configuration.nix` to your new host's folder
|
||||
- Add your 'nixosConfigurations' inside `flake.nix` (You can edit the "yourhostname" one and change the lines containing '# CHANGEME')
|
||||
- Add your 'nixosConfigurations' inside `flake.nix` (You can edit your hostname one and change the lines containing '# CHANGEME')
|
||||
|
||||
> [!NOTE]
|
||||
> When you add new files, don't forget to run `git add .` to add them to the git repository
|
||||
@@ -45,6 +47,9 @@ sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
|
||||
- [THEMES.md](docs/THEMES.md): How themes work and how to create your own
|
||||
- [APPS.md](docs/APPS.md): Which apps are installed
|
||||
- [SCRIPTS.md](docs/SCRIPTS.md): Scripts that are available
|
||||
- [KEYBINDINGS.md](docs/KEYBINDINGS.md): Keybindings available in Hyprland
|
||||
- [WALLPAPERS.md](docs/WALLPAPERS.md): Preview of every wallpapers available
|
||||
|
||||
- [TODO.md](docs/TODO.md): What's next (feel free to contribute)
|
||||
- [CONTRIBUTING.md](docs/CONTRIBUTING.md): How to contribute
|
||||
- [LICENSE](LICENSE): MIT Licensey
|
||||
- [LICENSE](LICENSE): MIT License
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
[//]: # (Title: Nixy)
|
||||
[//]: # (Description: Nixy is a Hyprland NixOS configuration with home-manager, secrets and custom theming all in one place. It's a simple way to manage your system configuration and dotfiles.)
|
||||
[//]: # (Description: {description})
|
||||
[//]: # (Author: Hadi)
|
||||
[//]: # (Date: {date})
|
||||
[//]: # (Version: {version})
|
||||
|
||||
Generated
+131
-150
@@ -11,11 +11,11 @@
|
||||
"sf-pro": "sf-pro"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1718062482,
|
||||
"narHash": "sha256-bGWs6XRVgzm1Uagx/EAnz9wnMQVImR1ZlVpAy+SDXCw=",
|
||||
"lastModified": 1719591391,
|
||||
"narHash": "sha256-sVTFewitXIYe5vBihbCFQGdBPdnT26kES1T05umBBnE=",
|
||||
"owner": "Lyndeno",
|
||||
"repo": "apple-fonts.nix",
|
||||
"rev": "eeb3521706bfe21206b1301ff8e0876defa1b6dd",
|
||||
"rev": "0e21619dad5b0d9ca2e050155e32448380547b06",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -24,20 +24,52 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"aquamarine": {
|
||||
"inputs": {
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
],
|
||||
"hyprwayland-scanner": [
|
||||
"hyprland",
|
||||
"hyprwayland-scanner"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1723920171,
|
||||
"narHash": "sha256-dVCMrAe+D/5S91erhwQj2DSzHOVzAanWqoy+vPWB9DY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "71d49670fe246cdaff4860b0effba0ab9f163b72",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"devshell": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1717408969,
|
||||
"narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=",
|
||||
"lastModified": 1722113426,
|
||||
"narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=",
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"rev": "1ebbe68d57457c8cae98145410b164b5477761f4",
|
||||
"rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -84,11 +116,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1717285511,
|
||||
"narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
|
||||
"lastModified": 1722555600,
|
||||
"narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
|
||||
"rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -120,29 +152,11 @@
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701680307,
|
||||
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_3": {
|
||||
"inputs": {
|
||||
"systems": "systems_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1685518550,
|
||||
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -153,7 +167,10 @@
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
"flake-compat": [
|
||||
"nixvim",
|
||||
"flake-compat"
|
||||
],
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
@@ -165,11 +182,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1718879355,
|
||||
"narHash": "sha256-RTyqP4fBX2MdhNuMP+fnR3lIwbdtXhyj7w7fwtvgspc=",
|
||||
"lastModified": 1723202784,
|
||||
"narHash": "sha256-qbhjc/NEGaDbyy0ucycubq4N3//gDFFH3DOmp1D3u1Q=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "8cd35b9496d21a6c55164d8547d9d5280162b07a",
|
||||
"rev": "c7012d0c18567c889b948781bc74a501e92275d1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -207,11 +224,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719180626,
|
||||
"narHash": "sha256-vZAzm5KQpR6RGple1dzmSJw5kPivES2heCFM+ZWkt0I=",
|
||||
"lastModified": 1723986931,
|
||||
"narHash": "sha256-Fy+KEvDQ+Hc8lJAV3t6leXhZJ2ncU5/esxkgt3b8DEY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "6b1f90a8ff92e81638ae6eb48cd62349c3e387bb",
|
||||
"rev": "2598861031b78aadb4da7269df7ca9ddfc3e1671",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -228,11 +245,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719037157,
|
||||
"narHash": "sha256-aOKd8+mhBsLQChCu1mn/W5ww79ta5cXVE59aJFrifM8=",
|
||||
"lastModified": 1723399884,
|
||||
"narHash": "sha256-97wn0ihhGqfMb8WcUgzzkM/TuAxce2Gd20A8oiruju4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "cd886711998fe5d9ff7979fdd4b4cbd17b1f1511",
|
||||
"rev": "086f619dd991a4d355c07837448244029fc2d9ab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -257,11 +274,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1718450675,
|
||||
"narHash": "sha256-jpsns6buS4bK+1sF8sL8AaixAiCRjA+nldTKvcwmvUs=",
|
||||
"lastModified": 1722623071,
|
||||
"narHash": "sha256-sLADpVgebpCBFXkA1FlCXtvEPu1tdEsTfqK1hfeHySE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprcursor",
|
||||
"rev": "66d5b46ff94efbfa6fa3d1d1b66735f1779c34a6",
|
||||
"rev": "912d56025f03d41b1ad29510c423757b4379eb1c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -272,6 +289,7 @@
|
||||
},
|
||||
"hyprland": {
|
||||
"inputs": {
|
||||
"aquamarine": "aquamarine",
|
||||
"hyprcursor": "hyprcursor",
|
||||
"hyprlang": "hyprlang",
|
||||
"hyprutils": "hyprutils",
|
||||
@@ -281,11 +299,11 @@
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719338642,
|
||||
"narHash": "sha256-oy2IpTiMTof5rUqdmUMYzn6Xugc8kTh629soVCyC3L4=",
|
||||
"lastModified": 1724014641,
|
||||
"narHash": "sha256-ub/HCvrxuvvqmnWpNdcyi/mp0G9+rNjtKHrA7cwyuis=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "95782de966ec9e182d49b2f032b74a1101f423e8",
|
||||
"revCount": 4889,
|
||||
"rev": "f4045ab8d032186b7c5409cd9f05eeaa813320ba",
|
||||
"revCount": 5109,
|
||||
"submodules": true,
|
||||
"type": "git",
|
||||
"url": "https://github.com/hyprwm/Hyprland"
|
||||
@@ -310,11 +328,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1714869498,
|
||||
"narHash": "sha256-vbLVOWvQqo4n1yvkg/Q70VTlPbMmTiCQfNTgcWDCfJM=",
|
||||
"lastModified": 1721326555,
|
||||
"narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "e06482e0e611130cd1929f75e8c1cf679e57d161",
|
||||
"rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -339,11 +357,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1717881852,
|
||||
"narHash": "sha256-XeeVoKHQgfKuXoP6q90sUqKyl7EYy3ol2dVZGM+Jj94=",
|
||||
"lastModified": 1721324361,
|
||||
"narHash": "sha256-BiJKO0IIdnSwHQBSrEJlKlFr753urkLE48wtt0UhNG4=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "ec6938c66253429192274d612912649a0cfe4d28",
|
||||
"rev": "adbefbf49664a6c2c8bf36b6487fd31e3eb68086",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -364,11 +382,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719316102,
|
||||
"narHash": "sha256-dmRz128j/lJmMuTYeCYPfSBRHHQO3VeH4PbmoyAhHzw=",
|
||||
"lastModified": 1722869141,
|
||||
"narHash": "sha256-0KU4qhyMp441qfwbirNg3+wbm489KnEjXOz2I/RbeFs=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "1f6bbec5954f623ff8d68e567bddcce97cd2f085",
|
||||
"rev": "0252fd13e78e60fb0da512a212e56007515a49f7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -389,11 +407,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719067853,
|
||||
"narHash": "sha256-mAnZG/eQy72Fp1ImGtqCgUrDumnR1rMZv2E/zgP4U74=",
|
||||
"lastModified": 1721324119,
|
||||
"narHash": "sha256-SOOqIT27/X792+vsLSeFdrNTF+OSRp5qXv6Te+fb2Qg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwayland-scanner",
|
||||
"rev": "914f083741e694092ee60a39d31f693d0a6dc734",
|
||||
"rev": "a048a6cb015340bd82f97c1f40a4b595ca85cc30",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -410,11 +428,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719128254,
|
||||
"narHash": "sha256-I7jMpq0CAOZA/i70+HDQO/ulLttyQu/K70cSESiMX7A=",
|
||||
"lastModified": 1722924007,
|
||||
"narHash": "sha256-+CQDamNwqO33REJLft8c26NbUi2Td083hq6SvAm2xkU=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "50581970f37f06a4719001735828519925ef8310",
|
||||
"rev": "91010a5613ffd7ee23ee9263213157a1c422b705",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -425,11 +443,11 @@
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1719322773,
|
||||
"narHash": "sha256-BqPxtFwXrpJQDh65NOIHX99pz2rtIMshG9Mt2xnnc5c=",
|
||||
"lastModified": 1723310128,
|
||||
"narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "caabc425565bbd5c8640630b0bf6974961a49242",
|
||||
"rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -457,27 +475,27 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1719099622,
|
||||
"narHash": "sha256-YzJECAxFt+U5LPYf/pCwW/e1iUd2PF21WITHY9B/BAs=",
|
||||
"lastModified": 1721524707,
|
||||
"narHash": "sha256-5NctRsoE54N86nWd0psae70YSLfrOek3Kv1e8KoXe/0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5e8e3b89adbd0be63192f6e645e0a54080004924",
|
||||
"rev": "556533a23879fc7e5f98dd2e0b31a6911a213171",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "release-23.11",
|
||||
"ref": "release-24.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1719075281,
|
||||
"narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=",
|
||||
"lastModified": 1723637854,
|
||||
"narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af",
|
||||
"rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -489,11 +507,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1719254875,
|
||||
"narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=",
|
||||
"lastModified": 1723637854,
|
||||
"narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60",
|
||||
"rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -503,22 +521,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1686020360,
|
||||
"narHash": "sha256-Wee7lIlZ6DIZHHLiNxU5KdYZQl0iprENXa/czzI6Cj4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4729ffac6fd12e26e5a8de002781ffc49b0e94b7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixvim": {
|
||||
"inputs": {
|
||||
"devshell": "devshell",
|
||||
@@ -530,14 +532,15 @@
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nuschtosSearch": "nuschtosSearch",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719334058,
|
||||
"narHash": "sha256-5uhWaoHhUYEPNC42NVW+srBgldwQKQE6dvW45rg0K3Q=",
|
||||
"lastModified": 1724010176,
|
||||
"narHash": "sha256-26fas5WqF8w1PMrMuJNde4bH6WSXFfRbh+L4krgPOzY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixvim",
|
||||
"rev": "76a8790764ec983ca0659c952c4b6924c4e9bf1a",
|
||||
"rev": "c52ba6785661f095221aa1e1eb24f57e89d7b2de",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -546,32 +549,25 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nur": {
|
||||
"nuschtosSearch": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719337524,
|
||||
"narHash": "sha256-bYp4//+XM+J1Y23sW6VjXAiCHUdq3aqgXue/tVeCxLw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "37ae43594731d4d801f53dffe465006421c7c292",
|
||||
"lastModified": 1723367906,
|
||||
"narHash": "sha256-v1qA4WBGDI2uH/TVqRwuXSBP341W681psbzYJ8zrjog=",
|
||||
"owner": "NuschtOS",
|
||||
"repo": "search",
|
||||
"rev": "6ca2c3ae05a915c160512bd41f6810f456c9b30d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nur",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nurpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1719337524,
|
||||
"narHash": "sha256-bYp4//+XM+J1Y23sW6VjXAiCHUdq3aqgXue/tVeCxLw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "37ae43594731d4d801f53dffe465006421c7c292",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"owner": "NuschtOS",
|
||||
"repo": "search",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
@@ -595,8 +591,6 @@
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"nixvim": "nixvim",
|
||||
"nur": "nur",
|
||||
"nurpkgs": "nurpkgs",
|
||||
"sops-nix": "sops-nix",
|
||||
"spicetify-nix": "spicetify-nix"
|
||||
}
|
||||
@@ -657,11 +651,11 @@
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1719268571,
|
||||
"narHash": "sha256-pcUk2Fg5vPXLUEnFI97qaB8hto/IToRfqskFqsjvjb8=",
|
||||
"lastModified": 1723501126,
|
||||
"narHash": "sha256-N9IcHgj/p1+2Pvk8P4Zc1bfrMwld5PcosVA0nL6IGdE=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "c2ea1186c0cbfa4d06d406ae50f3e4b085ddc9b3",
|
||||
"rev": "be0eec2d27563590194a9206f551a6f73d52fa34",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -672,19 +666,21 @@
|
||||
},
|
||||
"spicetify-nix": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_3",
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
"flake-compat": "flake-compat_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704167711,
|
||||
"narHash": "sha256-kFDq+kf/Di/P8bq5sUP8pVwRkrSVrABksBjMPmLic3s=",
|
||||
"owner": "the-argus",
|
||||
"lastModified": 1723954588,
|
||||
"narHash": "sha256-ZTy0Cfv0WLmsZJnFw3OPefzpFogIZU196twuv2B4iLU=",
|
||||
"owner": "Gerg-L",
|
||||
"repo": "spicetify-nix",
|
||||
"rev": "1325416f951d6a82cfddb1289864ad782e2b87c4",
|
||||
"rev": "e8c7709abf6fa96b42b8a175583703d6bad07f21",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "the-argus",
|
||||
"owner": "Gerg-L",
|
||||
"repo": "spicetify-nix",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -734,21 +730,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_4": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -757,11 +738,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1718522839,
|
||||
"narHash": "sha256-ULzoKzEaBOiLRtjeY3YoGFJMwWSKRYOic6VNw2UyTls=",
|
||||
"lastModified": 1723454642,
|
||||
"narHash": "sha256-S0Gvsenh0II7EAaoc9158ZB4vYyuycvMGKGxIbERNAM=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "68eb1dc333ce82d0ab0c0357363ea17c31ea1f81",
|
||||
"rev": "349de7bc435bdff37785c2466f054ed1766173be",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -787,11 +768,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1718619174,
|
||||
"narHash": "sha256-FWW68AVYmB91ZDQnhLMBNCUUTCjb1ZpO2k2KIytHtkA=",
|
||||
"lastModified": 1722365976,
|
||||
"narHash": "sha256-Khdm+mDzYA//XaU0M+hftod+rKr5q9SSHSEuiQ0/9ow=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "c7894aa54f9a7dbd16df5cd24d420c8af22d5623",
|
||||
"rev": "7f2a77ddf60390248e2a3de2261d7102a13e5341",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -16,35 +16,28 @@
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
apple-fonts.url = "github:Lyndeno/apple-fonts.nix";
|
||||
spicetify-nix.url = "github:the-argus/spicetify-nix";
|
||||
spicetify-nix = {
|
||||
url = "github:Gerg-L/spicetify-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
sops-nix = {
|
||||
url = "github:Mic92/sops-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||
nurpkgs.url = "github:nix-community/NUR";
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
};
|
||||
|
||||
outputs = inputs@{ nixpkgs, nur, ... }: {
|
||||
outputs = inputs@{ nixpkgs, ... }: {
|
||||
nixosConfigurations = {
|
||||
|
||||
nixy = nixpkgs.lib.nixosSystem {
|
||||
nixy = nixpkgs.lib.nixosSystem { # CHANGEME
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./hosts/laptop/configuration.nix
|
||||
inputs.nixos-hardware.nixosModules.omen-16-n0005ne
|
||||
{ _module.args = { inherit inputs; }; }
|
||||
inputs.nixos-hardware.nixosModules.omen-16-n0280nd # CHANGEME
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
nixpkgs.overlays = [ nur.overlay ];
|
||||
_module.args = { inherit inputs; };
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
users."hadi" = import ./home/laptop.nix;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
};
|
||||
}
|
||||
./hosts/laptop/configuration.nix # CHANGEME
|
||||
];
|
||||
};
|
||||
|
||||
@@ -55,31 +48,12 @@
|
||||
./hosts/server/configuration.nix
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
nixpkgs.overlays = [ nur.overlay ];
|
||||
nixpkgs.overlays = [ inputs.nurpkgs.overlay ];
|
||||
_module.args = { inherit inputs; };
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
users."hadi" = import ./home/server.nix;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
yourhostname = nixpkgs.lib.nixosSystem { # CHANGEME
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./hosts/yourhostname/configuration.nix # CHANGEME
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
nixpkgs.overlays = [ nur.overlay ];
|
||||
_module.args = { inherit inputs; };
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
users."yourusername" = import # CHANGEME
|
||||
./home/laptop.nix; # you can also create a new ./home/yourhostname.nix
|
||||
users."hadi" = import ./hosts/server/home.nix;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
enable = true;
|
||||
colorschemes.catppuccin = {
|
||||
enable = true;
|
||||
settings = { transparent_background = true; };
|
||||
settings = {
|
||||
transparent_background = true;
|
||||
flavour = "mocha";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,31 +1,17 @@
|
||||
{ inputs, ... }: {
|
||||
imports = [
|
||||
inputs.nixvim.homeManagerModules.nixvim
|
||||
./plugins/auto-pairs.nix
|
||||
./plugins/bufferline.nix
|
||||
./plugins/lazygit.nix
|
||||
./plugins/telescope.nix
|
||||
./plugins/nvim-tree.nix
|
||||
./plugins/lightline.nix
|
||||
./plugins/git.nix
|
||||
./plugins/cmp.nix
|
||||
./plugins/none-ls.nix
|
||||
./plugins/wilder.nix
|
||||
./plugins/dashboard.nix
|
||||
./plugins/lsp.nix
|
||||
./plugins/treesitter.nix
|
||||
./plugins/toggleterm.nix
|
||||
./plugins/copilot.nix
|
||||
./plugins/whichkey.nix
|
||||
./plugins/alpha.nix
|
||||
./plugins/keymaps.nix
|
||||
./plugins/comment.nix
|
||||
./plugins/oil.nix
|
||||
./plugins/trouble.nix
|
||||
./plugins/tmux-navigator.nix
|
||||
./plugins/noice.nix
|
||||
./plugins/obsidian.nix
|
||||
./plugins/image.nix
|
||||
./plugins/markdown.nix
|
||||
./plugins/tree.nix
|
||||
./plugins/ui.nix
|
||||
./plugins/utils.nix
|
||||
./plugins/zen-mode.nix
|
||||
|
||||
./options.nix
|
||||
./colorscheme.nix
|
||||
./keymaps.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
programs.nixvim.keymaps = [
|
||||
{
|
||||
key = "<leader>fm";
|
||||
action = "<cmd>lua vim.lsp.buf.format()<cr>";
|
||||
options.desc = "LSP Format";
|
||||
}
|
||||
{
|
||||
key = "<leader>w";
|
||||
action = "<cmd>set wrap!<cr>";
|
||||
options.desc = "Toggle word wrapping";
|
||||
}
|
||||
{
|
||||
key = "<leader>W";
|
||||
action = "<cmd>set linebreak!<cr>";
|
||||
options.desc = "Toggle linebreak";
|
||||
}
|
||||
{
|
||||
key = "<leader>z";
|
||||
action = "<cmd>ZenMode<cr>";
|
||||
options.desc = "ZenMode";
|
||||
}
|
||||
];
|
||||
}
|
||||
@@ -24,7 +24,7 @@
|
||||
wildmode = "list:longest";
|
||||
completeopt = [ "menuone" "noselect" ];
|
||||
signcolumn = "yes";
|
||||
cursorline = true;
|
||||
cursorline = false;
|
||||
scrolloff = 8;
|
||||
mouse = "a";
|
||||
|
||||
@@ -32,6 +32,6 @@
|
||||
|
||||
swapfile = false;
|
||||
undofile = true;
|
||||
conceallevel = 2;
|
||||
conceallevel = 3;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.nvim-autopairs = { enable = true; }; }
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.bufferline = { enable = true; }; }
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.comment = { enable = true; }; }
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.copilot-vim = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
@@ -71,7 +71,22 @@
|
||||
type = "button";
|
||||
val = " NixOs Config";
|
||||
on_press.__raw =
|
||||
"function() vim.cmd[[e ${config.var.configDirectory}]] end";
|
||||
"function() vim.cmd[[Neotree ${config.var.configDirectory}]] end";
|
||||
opts = {
|
||||
shortcut = "nc";
|
||||
position = "center";
|
||||
cursor = 3;
|
||||
width = 50;
|
||||
align_shortcut = "right";
|
||||
hl_shortcut = "AlphaShortcutColor";
|
||||
hl = "AlphaTextColor";
|
||||
};
|
||||
}
|
||||
{
|
||||
type = "button";
|
||||
val = " Keybindings";
|
||||
on_press.__raw =
|
||||
"function() vim.cmd[[e ${config.var.configDirectory}/docs/KEYBINDINGS.md]] end";
|
||||
opts = {
|
||||
shortcut = "nc";
|
||||
position = "center";
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.gitsigns = {
|
||||
enable = true;
|
||||
settings = { current_line_blame = false; };
|
||||
};
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.image = { enable = true; }; }
|
||||
@@ -1,71 +0,0 @@
|
||||
{
|
||||
programs.nixvim.keymaps = [
|
||||
{
|
||||
key = "<leader>e";
|
||||
action = "<CMD>Neotree toggle<CR>";
|
||||
}
|
||||
{
|
||||
key = "<space>fm";
|
||||
action = "<CMD>lua vim.lsp.buf.format()<CR>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>ot";
|
||||
action = "<cmd>lua require('obsidian').util.toggle_checkbox()<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>oo";
|
||||
action = "<cmd>ObsidianQuickSwitch<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>on";
|
||||
action = "<cmd>ObsidianNew<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>of";
|
||||
action = "<cmd>ObsidianSearch<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>oi";
|
||||
action = "<cmd>ObsidianPasteImg<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>E";
|
||||
action = "<cmd>Oil<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<leader>t";
|
||||
action = "<cmd>TroubleToggle<cr>";
|
||||
}
|
||||
|
||||
{
|
||||
key = "<C-h>";
|
||||
action = "<cmd>TmuxNavigateLeft<cr>";
|
||||
}
|
||||
{
|
||||
key = "<C-j>";
|
||||
action = "<cmd>TmuxNavigateDown<cr>";
|
||||
}
|
||||
{
|
||||
key = "<C-k>";
|
||||
action = "<cmd>TmuxNavigateUp<cr>";
|
||||
}
|
||||
{
|
||||
key = "<C-l>";
|
||||
action = "<cmd>TmuxNavigateRight<cr>";
|
||||
}
|
||||
|
||||
# Terminal Mappings
|
||||
{
|
||||
mode = "t";
|
||||
key = "<esc>";
|
||||
action = "<C-\\><C-n>";
|
||||
}
|
||||
];
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.lazygit = { enable = true; }; }
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.lualine = { enable = true; }; }
|
||||
@@ -11,6 +11,14 @@
|
||||
tailwindcss.enable = true;
|
||||
html.enable = true;
|
||||
svelte.enable = true;
|
||||
marksman.enable = true;
|
||||
ltex = {
|
||||
enable = false;
|
||||
settings = {
|
||||
enabled = false;
|
||||
language = "en";
|
||||
};
|
||||
};
|
||||
};
|
||||
keymaps.lspBuf = {
|
||||
"gd" = "definition";
|
||||
@@ -20,5 +28,23 @@
|
||||
"K" = "hover";
|
||||
};
|
||||
};
|
||||
none-ls = {
|
||||
enable = true;
|
||||
sources = {
|
||||
diagnostics = {
|
||||
golangci_lint.enable = true;
|
||||
statix.enable = true;
|
||||
};
|
||||
formatting = {
|
||||
gofmt.enable = true;
|
||||
goimports.enable = true;
|
||||
nixfmt.enable = true;
|
||||
markdownlint.enable = true;
|
||||
tidy.enable = true;
|
||||
shellharden.enable = true;
|
||||
shfmt.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
{
|
||||
programs.nixvim.plugins = {
|
||||
mkdnflow = {
|
||||
enable = true;
|
||||
mappings = {
|
||||
|
||||
# Main
|
||||
MkdnEnter = {
|
||||
key = "<CR>";
|
||||
modes = [ "n" "v" "i" ];
|
||||
};
|
||||
|
||||
# Links
|
||||
MkdnCreateLink = false;
|
||||
MkdnCreateLinkFromClipboard = {
|
||||
key = "<leader>lc";
|
||||
modes = [ "n" "v" ];
|
||||
};
|
||||
MkdnDestroyLink = {
|
||||
key = "<leader>dl";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnFollowLink = false;
|
||||
MkdnNextLink = {
|
||||
key = "<Tab>";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnYankAnchorLink = {
|
||||
key = "ya";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnYankFileAnchorLink = {
|
||||
key = "yfa";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnPrevLink = {
|
||||
key = "<S-Tab>";
|
||||
modes = "n";
|
||||
};
|
||||
|
||||
MkdnDecreaseHeading = {
|
||||
key = "-";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnExtendList = false;
|
||||
MkdnFoldSection = {
|
||||
key = "<leader>ff";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnUnfoldSection = {
|
||||
key = "<leader>fu";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnGoBack = {
|
||||
key = "<BS>";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnGoForward = {
|
||||
key = "<Del>";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnIncreaseHeading = {
|
||||
key = "+";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnMoveSource = {
|
||||
key = "<F2>";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnNewListItem = false;
|
||||
MkdnNewListItemAboveInsert = {
|
||||
key = "O";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnNewListItemBelowInsert = {
|
||||
key = "o";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnNextHeading = {
|
||||
key = "]]";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnPrevHeading = {
|
||||
key = "[[";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnSTab = false;
|
||||
MkdnTab = false;
|
||||
MkdnTableFormat = {
|
||||
key = "<leader>ft";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnTableNewColAfter = {
|
||||
key = "<leader>ic";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnTableNewColBefore = {
|
||||
key = "<leader>iC";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnTableNewRowAbove = {
|
||||
key = "<leader>iR";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnTableNewRowBelow = {
|
||||
key = "<leader>ir";
|
||||
modes = "n";
|
||||
};
|
||||
MkdnTableNextCell = {
|
||||
key = "<S-Tab>";
|
||||
modes = "i";
|
||||
};
|
||||
MkdnTableNextRow = false;
|
||||
MkdnTablePrevCell = {
|
||||
key = "<M-Tab>";
|
||||
modes = "i";
|
||||
};
|
||||
MkdnTablePrevRow = {
|
||||
key = "<M-CR>";
|
||||
modes = "i";
|
||||
};
|
||||
MkdnToggleToDo = {
|
||||
key = "<C-Space>";
|
||||
modes = [ "n" "v" ];
|
||||
};
|
||||
MkdnUpdateNumbering = {
|
||||
key = "<leader>nn";
|
||||
modes = "n";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.noice = { enable = true; }; }
|
||||
@@ -1,20 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.none-ls = {
|
||||
enable = true;
|
||||
sources = {
|
||||
diagnostics = {
|
||||
golangci_lint.enable = true;
|
||||
statix.enable = true;
|
||||
};
|
||||
formatting = {
|
||||
gofmt.enable = true;
|
||||
goimports.enable = true;
|
||||
nixfmt.enable = true;
|
||||
markdownlint.enable = true;
|
||||
tidy.enable = true;
|
||||
shellharden.enable = true;
|
||||
shfmt.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.neo-tree = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{ config, ... }: {
|
||||
programs.nixvim.plugins.obsidian = {
|
||||
enable = config.var.obsidian;
|
||||
settings = {
|
||||
dir = "~/nextcloud/Notes";
|
||||
disable_frontmatter = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.oil = {
|
||||
enable = true;
|
||||
settings = { default_file_explorer = false; };
|
||||
};
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.telescope = {
|
||||
enable = true;
|
||||
keymaps = {
|
||||
"<leader>fg" = "live_grep";
|
||||
#"<C-p>" = {
|
||||
# action = "git_files";
|
||||
# desc = "Telescope Git Files";
|
||||
#};
|
||||
};
|
||||
extensions.fzf-native = { enable = true; };
|
||||
};
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.tmux-navigator = { enable = true; }; }
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.toggleterm = {
|
||||
enable = true;
|
||||
settings = {
|
||||
open_mapping = "[[<c-t>]]";
|
||||
direction = "horizontal";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
programs.nixvim = {
|
||||
plugins = {
|
||||
neo-tree.enable = true;
|
||||
oil = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default_file_explorer = false;
|
||||
skip_confirm_for_simple_edits = true;
|
||||
win_options = {
|
||||
concealcursor = "ncv";
|
||||
conceallevel = 3;
|
||||
cursorcolumn = false;
|
||||
foldcolumn = "0";
|
||||
list = false;
|
||||
signcolumn = "no";
|
||||
spell = false;
|
||||
wrap = false;
|
||||
};
|
||||
float = { padding = 5; };
|
||||
keymaps = {
|
||||
"-" = "actions.parent";
|
||||
"b" = "actions.parent";
|
||||
"<C-c>" = "actions.close";
|
||||
"<C-h>" = "actions.select_split";
|
||||
"<C-l>" = "actions.refresh";
|
||||
"<C-p>" = "actions.preview";
|
||||
"<C-s>" = "actions.select_vsplit";
|
||||
"<C-t>" = "actions.select_tab";
|
||||
"<CR>" = "actions.select";
|
||||
_ = "actions.open_cwd";
|
||||
"`" = "actions.cd";
|
||||
"g." = "actions.toggle_hidden";
|
||||
"g?" = "actions.show_help";
|
||||
"g\\" = "actions.toggle_trash";
|
||||
gs = "actions.change_sort";
|
||||
gx = "actions.open_external";
|
||||
"~" = "actions.tcd";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
keymaps = [
|
||||
{
|
||||
key = "-";
|
||||
action = "<cmd>Oil<cr>";
|
||||
options.desc = "Oil";
|
||||
}
|
||||
{
|
||||
key = "<leader>e";
|
||||
action = "<cmd>Oil --float<cr>";
|
||||
options.desc = "Oil";
|
||||
}
|
||||
{
|
||||
key = "<leader>E";
|
||||
action = "<cmd>Neotree toggle<cr>";
|
||||
options.desc = "Neotree";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins = {
|
||||
treesitter = {
|
||||
enable = true;
|
||||
nixGrammars = true;
|
||||
indent = true;
|
||||
};
|
||||
treesitter-context.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{ programs.nixvim.plugins.trouble = { enable = true; }; }
|
||||
@@ -0,0 +1,31 @@
|
||||
{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [ ctags ];
|
||||
programs.nixvim = {
|
||||
plugins = {
|
||||
lualine.enable = true;
|
||||
noice.enable = true;
|
||||
gitsigns = {
|
||||
enable = true;
|
||||
settings.current_line_blame = false;
|
||||
};
|
||||
bufferline.enable = true;
|
||||
trouble.enable = true;
|
||||
which-key.enable = true;
|
||||
headlines = {
|
||||
enable = true;
|
||||
settings = {
|
||||
markdown = {
|
||||
codeblock_highlight = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
nvim-colorizer.enable = true;
|
||||
# tagbar.enable = true;
|
||||
};
|
||||
keymaps = [{
|
||||
key = "<leader>t";
|
||||
action = "<cmd>TroubleToggle<cr>";
|
||||
options.desc = "Trouble";
|
||||
}];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{ config, ... }: {
|
||||
programs.nixvim = {
|
||||
highlightOverride = {
|
||||
FloatBorder.fg = "#${config.var.theme.colors.accent}";
|
||||
};
|
||||
plugins = {
|
||||
copilot-vim.enable = true;
|
||||
flash.enable = true;
|
||||
# image.enable = true;
|
||||
tmux-navigator.enable = true;
|
||||
comment.enable = true;
|
||||
nvim-autopairs.enable = true;
|
||||
friendly-snippets.enable = true;
|
||||
telescope = {
|
||||
enable = true;
|
||||
keymaps = {
|
||||
"<leader>fg" = "live_grep";
|
||||
"<leader> " = "find_files";
|
||||
};
|
||||
extensions.fzf-native = { enable = true; };
|
||||
};
|
||||
treesitter = {
|
||||
enable = true;
|
||||
nixGrammars = true;
|
||||
settings = {
|
||||
indent.enable = true;
|
||||
highlight.enable = true;
|
||||
};
|
||||
};
|
||||
treesitter-context.enable = true;
|
||||
};
|
||||
keymaps = [
|
||||
{
|
||||
key = "<C-h>";
|
||||
action = "<cmd>TmuxNavigateLeft<cr>";
|
||||
}
|
||||
{
|
||||
key = "<C-j>";
|
||||
action = "<cmd>TmuxNavigateDown<cr>";
|
||||
}
|
||||
{
|
||||
key = "<C-k>";
|
||||
action = "<cmd>TmuxNavigateUp<cr>";
|
||||
}
|
||||
{
|
||||
key = "<C-l>";
|
||||
action = "<cmd>TmuxNavigateRight<cr>";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.which-key.enable=true;
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
programs.nixvim.plugins.wilder = {
|
||||
enable = true;
|
||||
modes = [ ":" "/" "?" ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
programs.nixvim.plugins.zen-mode = {
|
||||
enable = true;
|
||||
settings = {
|
||||
on_open = ''
|
||||
function()
|
||||
require("gitsigns.actions").toggle_current_line_blame()
|
||||
vim.opt.relativenumber = false
|
||||
vim.opt.signcolumn = "no"
|
||||
vim.opt.wrap = true
|
||||
vim.opt.linebreak = true
|
||||
end
|
||||
'';
|
||||
plugins = {
|
||||
gitsigns = { enabled = true; };
|
||||
options = {
|
||||
enabled = true;
|
||||
ruler = false;
|
||||
showcmd = false;
|
||||
};
|
||||
tmux = { enabled = true; };
|
||||
};
|
||||
window = {
|
||||
backdrop = 0.95;
|
||||
height = 1;
|
||||
options = { signcolumn = "no"; };
|
||||
width = 0.9;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -23,8 +23,8 @@ let
|
||||
{"title": "Chat GPT", "url": "https://chat.openai.com/", "icon": ""},
|
||||
{"title": "Nixvim", "url": "https://nix-community.github.io/nixvim/", "icon": ""},
|
||||
{"title": "Hyprland Wiki", "url": "https://wiki.hyprland.org/", "icon": ""},
|
||||
{"title": "Nerdfont", "url": "https://www.nerdfonts.com/cheat-sheet", "icon": ""},
|
||||
{"title": "Youtube", "url": "https://youtube.com", "icon": ""},
|
||||
{"title": "Figma", "url": "https://figma.com", "icon": ""},
|
||||
{"title": "Server", "url": "https://home.anotherhadi.com", "icon": ""}
|
||||
]
|
||||
},
|
||||
@@ -48,8 +48,8 @@ let
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "anotherhadi";
|
||||
repo = "homepage";
|
||||
rev = "40286c5e03bcfb9993cce354b4f12c00a1b4966d";
|
||||
hash = "sha256-zlJ/bzFWE64HpUCxiRT5E9wrjVVwSTSgIOrifWKxphU=";
|
||||
rev = "b77d35ed3596eb451bd2ec78063d7cc6e73c773d";
|
||||
hash = "sha256-j/40922kfAh6zqJ4IRYpr66YXNNYsxuXwZ0aiJFJea0=";
|
||||
};
|
||||
|
||||
# npmDepsHash = lib.fakeHash;
|
||||
@@ -73,7 +73,10 @@ let
|
||||
|
||||
in {
|
||||
|
||||
imports = [ ./duckduckgo-colorscheme.nix ];
|
||||
imports = [
|
||||
./duckduckgo-colorscheme.nix
|
||||
# ./userscripts.nix
|
||||
];
|
||||
|
||||
programs.qutebrowser = {
|
||||
enable = true;
|
||||
@@ -205,6 +208,8 @@ in {
|
||||
"dark"; # Enable dark mode for websites that support it
|
||||
};
|
||||
|
||||
statusbar.show = "in-mode";
|
||||
|
||||
fonts = { default_family = "${config.var.theme.font}"; };
|
||||
|
||||
completion = {
|
||||
@@ -224,6 +229,7 @@ in {
|
||||
autoplay = false;
|
||||
javascript.clipboard = "access";
|
||||
javascript.enabled = true;
|
||||
webgl = true;
|
||||
pdfjs = true;
|
||||
};
|
||||
|
||||
@@ -328,6 +334,7 @@ in {
|
||||
config.unbind("gt")
|
||||
|
||||
c.tabs.padding = {"bottom": 6, "left": 7, "right": 7, "top": 6}
|
||||
c.statusbar.padding = {"bottom": 6, "left": 7, "right": 7, "top": 6}
|
||||
|
||||
config.load_autoconfig(True)
|
||||
'';
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
{ pkgs, ... }: {
|
||||
|
||||
home.packages = with pkgs; [
|
||||
keyutils
|
||||
python3
|
||||
python311Packages.pyperclip
|
||||
python312Packages.tldextract
|
||||
];
|
||||
|
||||
xdg.configFile."qutebrowser/userscripts/bitwarden" = {
|
||||
source = ./userscripts/qute-bitwarden.py;
|
||||
executable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,291 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# SPDX-FileCopyrightText: Chris Braun (cryzed) <cryzed@googlemail.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
"""
|
||||
Insert login information using Bitwarden CLI and a dmenu-compatible application
|
||||
(e.g. dmenu, rofi -dmenu, ...).
|
||||
"""
|
||||
|
||||
USAGE = """The domain of the site has to be in the name of the Bitwarden entry, for example: "github.com/cryzed" or
|
||||
"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner:
|
||||
[USERNAME]<Tab>[PASSWORD], which is compatible with almost all login forms.
|
||||
|
||||
If enabled, with the `--totp` flag, it will also move the TOTP code to the
|
||||
clipboard, much like the Firefox add-on.
|
||||
|
||||
You must log into Bitwarden CLI using `bw login` prior to use of this script.
|
||||
The session key will be stored using keyctl for the number of seconds passed to
|
||||
the --auto-lock option.
|
||||
|
||||
To use in qutebrowser, run: `spawn --userscript qute-bitwarden`
|
||||
"""
|
||||
|
||||
EPILOG = """Dependencies: tldextract (Python 3 module), pyperclip (optional
|
||||
Python module, used for TOTP codes), Bitwarden CLI (1.7.4 is known to work
|
||||
but older versions may well also work)
|
||||
|
||||
WARNING: The login details are viewable as plaintext in qutebrowser's debug log
|
||||
(qute://log) and might be shared if you decide to submit a crash report!"""
|
||||
|
||||
import argparse
|
||||
import enum
|
||||
import functools
|
||||
import os
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
import json
|
||||
import tldextract
|
||||
|
||||
argument_parser = argparse.ArgumentParser(
|
||||
description=__doc__,
|
||||
usage=USAGE,
|
||||
epilog=EPILOG,
|
||||
)
|
||||
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
|
||||
argument_parser.add_argument('--dmenu-invocation', '-d', default='wofi --dmenu -i',
|
||||
help='Invocation used to execute a dmenu-provider')
|
||||
argument_parser.add_argument('--password-prompt-invocation', '-p', default='rofi -dmenu -p "Master Password" -password -lines 0',
|
||||
help='Invocation used to prompt the user for their Bitwarden password')
|
||||
argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false',
|
||||
help="Don't automatically enter insert mode")
|
||||
argument_parser.add_argument('--totp', '-t', action='store_true',
|
||||
help="Copy TOTP key to clipboard")
|
||||
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
|
||||
help='Encoding used to communicate with subprocesses')
|
||||
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
|
||||
help='Merge pass candidates for fully-qualified and registered domain name')
|
||||
argument_parser.add_argument('--auto-lock', type=int, default=900,
|
||||
help='Automatically lock the vault after this many seconds')
|
||||
group = argument_parser.add_mutually_exclusive_group()
|
||||
group.add_argument('--username-only', '-e',
|
||||
action='store_true', help='Only insert username')
|
||||
group.add_argument('--password-only', '-w',
|
||||
action='store_true', help='Only insert password')
|
||||
group.add_argument('--totp-only', '-T',
|
||||
action='store_true', help='Only insert totp code')
|
||||
|
||||
stderr = functools.partial(print, file=sys.stderr)
|
||||
|
||||
|
||||
class ExitCodes(enum.IntEnum):
|
||||
SUCCESS = 0
|
||||
FAILURE = 1
|
||||
# 1 is automatically used if Python throws an exception
|
||||
NO_PASS_CANDIDATES = 2
|
||||
COULD_NOT_MATCH_USERNAME = 3
|
||||
COULD_NOT_MATCH_PASSWORD = 4
|
||||
|
||||
|
||||
def qute_command(command):
|
||||
with open(os.environ['QUTE_FIFO'], 'w') as fifo:
|
||||
fifo.write(command + '\n')
|
||||
fifo.flush()
|
||||
|
||||
|
||||
def ask_password(password_prompt_invocation):
|
||||
process = subprocess.run(
|
||||
shlex.split(password_prompt_invocation),
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
if process.returncode > 0:
|
||||
raise Exception('Could not unlock vault')
|
||||
master_pass = process.stdout.strip()
|
||||
return subprocess.check_output(
|
||||
['bw', 'unlock', '--raw', master_pass],
|
||||
text=True,
|
||||
).strip()
|
||||
|
||||
|
||||
def get_session_key(auto_lock, password_prompt_invocation):
|
||||
if auto_lock == 0:
|
||||
subprocess.call(['keyctl', 'purge', 'user', 'bw_session'])
|
||||
return ask_password(password_prompt_invocation)
|
||||
else:
|
||||
process = subprocess.run(
|
||||
['keyctl', 'request', 'user', 'bw_session'],
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
)
|
||||
key_id = process.stdout.strip()
|
||||
if process.returncode > 0:
|
||||
session = ask_password(password_prompt_invocation)
|
||||
if not session:
|
||||
raise Exception('Could not unlock vault')
|
||||
key_id = subprocess.check_output(
|
||||
['keyctl', 'add', 'user', 'bw_session', session, '@u'],
|
||||
text=True,
|
||||
).strip()
|
||||
|
||||
if auto_lock > 0:
|
||||
subprocess.call(['keyctl', 'timeout', str(key_id), str(auto_lock)])
|
||||
return subprocess.check_output(
|
||||
['keyctl', 'pipe', str(key_id)],
|
||||
text=True,
|
||||
).strip()
|
||||
|
||||
|
||||
def pass_(domain, encoding, auto_lock, password_prompt_invocation):
|
||||
session_key = get_session_key(auto_lock, password_prompt_invocation)
|
||||
process = subprocess.run(
|
||||
['bw', 'list', 'items', '--session', session_key, '--url', domain],
|
||||
capture_output=True,
|
||||
)
|
||||
|
||||
err = process.stderr.decode(encoding).strip()
|
||||
if err:
|
||||
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain, err)
|
||||
stderr(msg)
|
||||
|
||||
if process.returncode:
|
||||
return '[]'
|
||||
|
||||
out = process.stdout.decode(encoding).strip()
|
||||
|
||||
return out
|
||||
|
||||
|
||||
def get_totp_code(selection_id, domain_name, encoding, auto_lock, password_prompt_invocation):
|
||||
session_key = get_session_key(auto_lock, password_prompt_invocation)
|
||||
process = subprocess.run(
|
||||
['bw', 'get', 'totp', '--session', session_key, selection_id],
|
||||
capture_output=True,
|
||||
)
|
||||
|
||||
err = process.stderr.decode(encoding).strip()
|
||||
if err:
|
||||
# domain_name instead of selection_id to make it more user-friendly
|
||||
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain_name, err)
|
||||
stderr(msg)
|
||||
|
||||
if process.returncode:
|
||||
return '[]'
|
||||
|
||||
out = process.stdout.decode(encoding).strip()
|
||||
|
||||
return out
|
||||
|
||||
|
||||
def dmenu(items, invocation, encoding):
|
||||
command = shlex.split(invocation)
|
||||
process = subprocess.run(command, input='\n'.join(
|
||||
items).encode(encoding), stdout=subprocess.PIPE)
|
||||
return process.stdout.decode(encoding).strip()
|
||||
|
||||
|
||||
def fake_key_raw(text):
|
||||
for character in text:
|
||||
# Escape all characters by default, space requires special handling
|
||||
sequence = '" "' if character == ' ' else r'\{}'.format(character)
|
||||
qute_command('fake-key {}'.format(sequence))
|
||||
|
||||
|
||||
def main(arguments):
|
||||
if not arguments.url:
|
||||
argument_parser.print_help()
|
||||
return ExitCodes.FAILURE
|
||||
|
||||
extract_result = tldextract.extract(arguments.url)
|
||||
|
||||
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
|
||||
# the registered domain name and finally: the IPv4 address if that's what
|
||||
# the URL represents
|
||||
candidates = []
|
||||
for target in filter(None, [
|
||||
extract_result.fqdn,
|
||||
extract_result.registered_domain,
|
||||
extract_result.subdomain + '.' + extract_result.domain,
|
||||
extract_result.domain,
|
||||
extract_result.ipv4]):
|
||||
target_candidates = json.loads(
|
||||
pass_(
|
||||
target,
|
||||
arguments.io_encoding,
|
||||
arguments.auto_lock,
|
||||
arguments.password_prompt_invocation,
|
||||
)
|
||||
)
|
||||
if not target_candidates:
|
||||
continue
|
||||
|
||||
candidates = candidates + target_candidates
|
||||
if not arguments.merge_candidates:
|
||||
break
|
||||
else:
|
||||
if not candidates:
|
||||
stderr('No pass candidates for URL {!r} found!'.format(
|
||||
arguments.url))
|
||||
return ExitCodes.NO_PASS_CANDIDATES
|
||||
|
||||
if len(candidates) == 1:
|
||||
selection = candidates.pop()
|
||||
else:
|
||||
choices = ['{:s} | {:s}'.format(c['name'], c['login']['username']) for c in candidates]
|
||||
choice = dmenu(choices, arguments.dmenu_invocation, arguments.io_encoding)
|
||||
choice_tokens = choice.split('|')
|
||||
choice_name = choice_tokens[0].strip()
|
||||
choice_username = choice_tokens[1].strip()
|
||||
selection = next((c for (i, c) in enumerate(candidates)
|
||||
if c['name'] == choice_name
|
||||
and c['login']['username'] == choice_username),
|
||||
None)
|
||||
|
||||
# Nothing was selected, simply return
|
||||
if not selection:
|
||||
return ExitCodes.SUCCESS
|
||||
|
||||
username = selection['login']['username']
|
||||
password = selection['login']['password']
|
||||
totp = selection['login']['totp']
|
||||
|
||||
if arguments.username_only:
|
||||
fake_key_raw(username)
|
||||
elif arguments.password_only:
|
||||
fake_key_raw(password)
|
||||
elif arguments.totp_only:
|
||||
# No point in moving it to the clipboard in this case
|
||||
fake_key_raw(
|
||||
get_totp_code(
|
||||
selection['id'],
|
||||
selection['name'],
|
||||
arguments.io_encoding,
|
||||
arguments.auto_lock,
|
||||
arguments.password_prompt_invocation,
|
||||
)
|
||||
)
|
||||
else:
|
||||
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
|
||||
# back into insert-mode, so the form can be directly submitted by
|
||||
# hitting enter afterwards
|
||||
fake_key_raw(username)
|
||||
qute_command('fake-key <Tab>')
|
||||
fake_key_raw(password)
|
||||
|
||||
if arguments.insert_mode:
|
||||
qute_command('mode-enter insert')
|
||||
|
||||
# If it finds a TOTP code, it copies it to the clipboard,
|
||||
# which is the same behavior as the Firefox add-on.
|
||||
if not arguments.totp_only and totp and arguments.totp:
|
||||
# The import is done here, to make pyperclip an optional dependency
|
||||
import pyperclip
|
||||
pyperclip.copy(
|
||||
get_totp_code(
|
||||
selection['id'],
|
||||
selection['name'],
|
||||
arguments.io_encoding,
|
||||
arguments.auto_lock,
|
||||
arguments.password_prompt_invocation,
|
||||
)
|
||||
)
|
||||
|
||||
return ExitCodes.SUCCESS
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
arguments = argument_parser.parse_args()
|
||||
sys.exit(main(arguments))
|
||||
@@ -7,7 +7,5 @@
|
||||
./tmux.nix
|
||||
./lazygit.nix
|
||||
./eza.nix
|
||||
./fetch
|
||||
./lf
|
||||
];
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
|
||||
set -g @catppuccin_directory_text "#{pane_current_path}"
|
||||
set -g @catppuccin_status_background "default"
|
||||
set-option -g default-terminal "screen-256color"
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
home.packages = with pkgs; [ bat ripgrep tldr ];
|
||||
|
||||
home.sessionPath = [ "$HOME/go/bin" ];
|
||||
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
@@ -47,16 +49,18 @@
|
||||
sl = "ls";
|
||||
open = "${pkgs.xdg_utils}/bin/xdg-open";
|
||||
icat = "${pkgs.kitty}/bin/kitty +kitten icat";
|
||||
note = "vim ~/Nextcloud/obsidian";
|
||||
obs = "vim ~/Nextcloud/obsidian";
|
||||
wireguard-import = "nmcli connection import type wireguard file";
|
||||
vault = "nvim $HOME/nextcloud/Notes/";
|
||||
neorg =
|
||||
"cd ~/nextcloud/neorg && vim -c ':ZenMode' -c ':Telescope find_files' index.norg";
|
||||
notes =
|
||||
"cd ~/nextcloud/Notes && vim -c ':ZenMode' -c ':Telescope find_files' index.md";
|
||||
note = "notes";
|
||||
|
||||
# git
|
||||
ga = "git add";
|
||||
gc = "git commit";
|
||||
gcm = "git commit -m";
|
||||
gcu = "git commit -am 'Update'";
|
||||
gcu = "git add . && git commit -m 'Update'";
|
||||
gp = "git push";
|
||||
gpl = "git pull";
|
||||
gs = "git status";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ pkgs, config, lib, inputs, ... }:
|
||||
let spicePkgs = inputs.spicetify-nix.packages.${pkgs.system}.default;
|
||||
let spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
|
||||
in {
|
||||
|
||||
imports = [ inputs.spicetify-nix.homeManagerModules.default ];
|
||||
@@ -33,6 +33,7 @@ in {
|
||||
lastfm
|
||||
historyShortcut
|
||||
hidePodcasts
|
||||
adblock
|
||||
fullAppDisplay
|
||||
shuffle
|
||||
];
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
programs.yazi = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
|
||||
settings = {
|
||||
log = { enabled = false; };
|
||||
manager = {
|
||||
show_hidden = false;
|
||||
sort_by = "modified";
|
||||
sort_dir_first = true;
|
||||
sort_reverse = true;
|
||||
};
|
||||
};
|
||||
|
||||
theme = {
|
||||
filetype = {
|
||||
rules = [
|
||||
{
|
||||
fg = "#7AD9E5";
|
||||
mime = "image/*";
|
||||
}
|
||||
{
|
||||
fg = "#F3D398";
|
||||
mime = "video/*";
|
||||
}
|
||||
{
|
||||
fg = "#F3D398";
|
||||
mime = "audio/*";
|
||||
}
|
||||
{
|
||||
fg = "#CD9EFC";
|
||||
mime = "application/x-bzip";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
caffeine-status = pkgs.writeShellScriptBin "caffeine-status" ''
|
||||
[[ -f /tmp/caffeine ]] && echo "active" || echo "inactive"
|
||||
[[ -f /tmp/caffeine ]] && echo "1" || echo "0"
|
||||
'';
|
||||
|
||||
caffeine = pkgs.writeShellScriptBin "caffeine" ''
|
||||
@@ -17,4 +17,13 @@ let
|
||||
notif "caffeine" "$message"
|
||||
'';
|
||||
|
||||
in { home.packages = [ caffeine-status caffeine ]; }
|
||||
caffeine-status-icon = pkgs.writeShellScriptBin "caffeine-status-icon" ''
|
||||
status=$(caffeine-status)
|
||||
if [[ $status == "1" ]]; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
'';
|
||||
|
||||
in { home.packages = [ caffeine-status caffeine caffeine-status-icon ]; }
|
||||
|
||||
@@ -12,6 +12,5 @@
|
||||
./battery
|
||||
./compress
|
||||
./misc
|
||||
./tofi
|
||||
];
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ let
|
||||
notif "night-shift" "$message"
|
||||
'';
|
||||
|
||||
night-shift-toggle = pkgs.writeShellScriptBin "night-shift-toggle" ''
|
||||
night-shift = pkgs.writeShellScriptBin "night-shift" ''
|
||||
if pgrep wlsunset; then
|
||||
night-shift-off
|
||||
else
|
||||
@@ -24,11 +24,27 @@ let
|
||||
'';
|
||||
|
||||
night-shift-status = pkgs.writeShellScriptBin "night-shift-status" ''
|
||||
if pgrep wlsunset; then
|
||||
if [[ $(pgrep wlsunset) ]]; then
|
||||
echo "1"
|
||||
else
|
||||
echo "0"
|
||||
fi
|
||||
'';
|
||||
|
||||
in { home.packages = [ night-shift-on night-shift-off night-shift-toggle night-shift-status ]; }
|
||||
night-shift-status-icon =
|
||||
pkgs.writeShellScriptBin "night-shift-status-icon" ''
|
||||
if [[ $(pgrep wlsunset) ]]; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
home.packages = [
|
||||
night-shift-on
|
||||
night-shift-off
|
||||
night-shift
|
||||
night-shift-status
|
||||
night-shift-status-icon
|
||||
];
|
||||
}
|
||||
|
||||
@@ -12,11 +12,11 @@ let
|
||||
|
||||
# "icon;name;command"[]
|
||||
apps=(
|
||||
";Rebuild;nixy-rebuild"
|
||||
";Upgrade;nixy-upgrade"
|
||||
";Update;nixy-update"
|
||||
";Collect Garbage;nixy-gc"
|
||||
";Clean Boot Menu;nixy-cb"
|
||||
";Rebuild;nixy rebuild"
|
||||
";Upgrade;nixy upgrade"
|
||||
";Update;nixy update"
|
||||
";Collect Garbage;nixy gc"
|
||||
";Clean Boot Menu;nixy cb"
|
||||
)
|
||||
|
||||
# Apply default icons if empty:
|
||||
@@ -54,7 +54,4 @@ let
|
||||
fi
|
||||
'';
|
||||
|
||||
in {
|
||||
home.packages =
|
||||
[ nixy ];
|
||||
}
|
||||
in { home.packages = [ nixy ]; }
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
# TODO: Broken - hypshot not working (jq error)
|
||||
screenshot = pkgs.writeShellScriptBin "screenshot" ''
|
||||
if [[ $2 == "swappy" ]];then
|
||||
folder="/tmp"
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
let
|
||||
|
||||
tofi = pkgs.writeShellScriptBin "tofi" ''
|
||||
hyprexec="hyprctl dispatch exec"
|
||||
function exec() {
|
||||
$@
|
||||
}
|
||||
|
||||
function ui(){
|
||||
DEFAULT_ICON=""
|
||||
|
||||
# "icon;name;command"[]
|
||||
apps=(
|
||||
";Nixy;nixy"
|
||||
";Nerdfont FZF;nerdfont-fzf"
|
||||
";Brightness Up;brightness-up"
|
||||
";Brightness Down;brightness-down"
|
||||
";Sound Up;sound-up"
|
||||
";Sound Down;sound-down"
|
||||
";Sound Toggle Mute;sound-toggle"
|
||||
";Sound Change Output;sound-output"
|
||||
";Caffeine;caffeine"
|
||||
";Night Shift Toggle;night-shift-toggle"
|
||||
";Firefox;$hyprexec firefox"
|
||||
";Qutebrowser;$hyprexec qutebrowser"
|
||||
";Kitty;$hyprexec kitty"
|
||||
";Thunar;$hyprexec thunar"
|
||||
";Powermenu;powermenu"
|
||||
";Wofi;menu"
|
||||
";Lock;lock"
|
||||
";Bitwarden;$hyprexec bitwarden"
|
||||
";Clock; peaclock"
|
||||
";Nextcloud;$hyprexec nextcloud"
|
||||
";Spotify;$hyprexec spotify"
|
||||
";Btop;btop"
|
||||
";Cava;cava"
|
||||
";Discord;$hyprexec discord"
|
||||
";Vlc;$hyprexec vlc"
|
||||
";Obsidian;$hyprexec obsidian"
|
||||
)
|
||||
|
||||
# Apply default icons if empty:
|
||||
for i in "''${!apps[@]}"; do
|
||||
apps[i]=$(echo "''${apps[i]}" | sed 's/^;/'$DEFAULT_ICON';/')
|
||||
done
|
||||
|
||||
fzf_result=$(printf "%s\n" "''${apps[@]}" | awk -F ';' '{print $1" "$2}' | fzf)
|
||||
[[ -z $fzf_result ]] && exit 0
|
||||
fzf_result=''${fzf_result/ /;}
|
||||
line=$(printf "%s\n" "''${apps[@]}" | grep "$fzf_result")
|
||||
command=$(echo "$line" | sed 's/^[^;]*;//;s/^[^;]*;//')
|
||||
|
||||
exec "$command"
|
||||
exit 0
|
||||
}
|
||||
|
||||
ui
|
||||
'';
|
||||
|
||||
in { home.packages = [ tofi ]; }
|
||||
@@ -5,8 +5,8 @@
|
||||
services.dunst = {
|
||||
enable = true;
|
||||
iconTheme = {
|
||||
name = "Adwaita-Dark";
|
||||
package = pkgs.gnome.adwaita-icon-theme;
|
||||
name = "Moka";
|
||||
package = pkgs.moka-icon-theme;
|
||||
};
|
||||
settings = {
|
||||
global = {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user