Init Config

This commit is contained in:
DerGrumpf
2026-04-03 23:37:52 +02:00
parent 9d4aaa6edd
commit 824c7cc4fc
111 changed files with 5736 additions and 1 deletions
+20
View File
@@ -0,0 +1,20 @@
# Nix build results
result
result-*
# sops age keys (never commit private keys)
*.age
keys.txt
# macOS
.DS_Store
._.DS_Store
**/.DS_Store
**/._.DS_Store
# secrets (encrypted via sops, but extra safety)
secrets/*.yaml~
# Editor
.direnv/
.envrc
+1 -1
View File
@@ -37,7 +37,7 @@ cd ~/.config/nix
Replace placeholders in `home/git.nix`: Replace placeholders in `home/git.nix`:
- `DerGrumpf` → your Git username - `DerGrumpf` → your Git username
- `p.keier@beyerstedt-it.de` → your Git email - `phil.keier@hotmail.com` → your Git email
### Apply ### Apply
```bash ```bash
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.
Binary file not shown.
Binary file not shown.
+51
View File
@@ -0,0 +1,51 @@
{ pkgs, inputs, self, primaryUser, ... }: {
imports = [ ./homebrew.nix ./settings.nix ./yabai.nix ];
# nix config
nix = {
settings = {
experimental-features = [ "nix-command" "flakes" ];
max-jobs = "auto"; # Use all CPU cores
cores = 0; # Use all cores per build
# disabled due to https://github.com/NixOS/nix/issues/7273
# auto-optimise-store = true;
};
enable = true; # using determinate installer
# Garbage collection
gc = {
automatic = true;
interval = { Weekday = 7; }; # Run weekly
options = "--delete-older-than 30d";
};
};
# Disable Docs
documentation = {
enable = true;
doc.enable = false; # Skip large documentation
man.enable = true; # Keep man pages
info.enable = false; # Skip info pages
};
nixpkgs.config = { allowUnfree = true; };
# homebrew installation manager
nix-homebrew = {
user = primaryUser;
enable = true;
autoMigrate = true;
};
# macOS-specific settings
programs.fish.enable = true;
environment.shells = [ pkgs.fish ];
system.primaryUser = primaryUser;
users.users.${primaryUser} = {
home = "/Users/${primaryUser}";
shell = pkgs.fish;
};
environment = {
systemPath = [ "/opt/homebrew/bin" ];
pathsToLink = [ "/Applications" ];
};
}
+20
View File
@@ -0,0 +1,20 @@
{ ... }: {
homebrew = {
enable = true;
onActivation = {
autoUpdate = false;
upgrade = true;
cleanup = "zap";
};
caskArgs.no_quarantine = true;
global.brewfile = true;
# homebrew is best for GUI apps
# nixpkgs is best for CLI tools
casks = [ "element" "affinity" "onlyoffice" "tailscale" ];
brews = [ ];
taps = [ ];
};
}
+76
View File
@@ -0,0 +1,76 @@
{ self, ... }: {
# touch ID for sudo
security.pam.services.sudo_local.touchIdAuth = true;
# system defaults and preferences
system = {
stateVersion = 6;
configurationRevision = self.rev or self.dirtyRev or null;
startup.chime = false;
activationScripts = {
setWallpaper.text = ''
/usr/bin/osascript <<EOF
tell application "System Events"
tell every desktop
set picture to "/Users/phil/Pictures/Wallpapers/Ghost_in_the_Shell.png"
end tell
end tell
EOF
'';
};
defaults = {
ActivityMonitor = {
IconType = 5;
OpenMainWindow = true;
ShowCategory = 101;
};
dock = {
enable-spring-load-actions-on-all-items = true;
appswitcher-all-displays = false;
autohide = false;
launchanim = true;
mru-spaces = false;
orientation = "left";
persistent-apps = [
{ app = "/Users/phil/Applications/Home Manager Apps/kitty.app"; }
{ app = "/Users/phil/Applications/Home Manager Apps/Vesktop.app"; }
{ app = "/Users/phil/Applications/Home Manager Apps/Spotify.app"; }
{ app = "/Users/phil/Applications/Home Manager Apps/Floorp.app"; }
{ app = "/Users/phil/Applications/Home Manager Apps/Obsidian.app"; }
{ app = "/Users/phil/Applications/Home Manager Apps/OpenSCAD.app"; }
{ app = "/Applications/okular.app"; }
{ app = "/Applications/Affinity.app"; }
{ app = "/System/Applications/Mail.app"; }
{ app = "/System/Applications/Launchpad.app"; }
];
show-recents = false;
mineffect = "genie";
};
loginwindow = {
GuestEnabled = false;
DisableConsoleAccess = true;
};
finder = {
AppleShowAllFiles = true; # hidden files
AppleShowAllExtensions = true; # file extensions
_FXShowPosixPathInTitle = true; # title bar full path
ShowPathbar = true; # breadcrumb nav at bottom
ShowStatusBar = true; # file count & disk space
};
NSGlobalDomain = {
NSAutomaticSpellingCorrectionEnabled = false;
NSAutomaticCapitalizationEnabled = false;
NSAutomaticPeriodSubstitutionEnabled = false;
NSAutomaticWindowAnimationsEnabled = false;
};
};
};
}
+105
View File
@@ -0,0 +1,105 @@
{ pkgs, ... }: {
services = {
yabai = {
enable = true;
config = {
external_bar = "main:40:0";
menubar_opacity = 1.0;
mouse_follows_focus = "on";
focus_follows_mouse = "on";
display_arrangement_order = "default";
window_origin_display = "default";
window_placement = "second_child";
window_insertion_point = "focused";
window_zoom_persist = "on";
window_shadow = "off";
window_animation_duration = 0.0;
window_animation_easing = "ease_out_circ";
window_opacity_duration = 0.0;
active_window_opacity = 1.0;
normal_window_opacity = 0.9;
window_opacity = "off";
insert_feedback_color = "0xffd75f5f";
split_ratio = 0.5;
split_type = "auto";
auto_balance = "off";
top_padding = 2;
bottom_padding = 2;
left_padding = 2;
right_padding = 2;
window_gap = 2;
layout = "bsp";
mouse_modifier = "fn";
mouse_action1 = "move";
mouse_action2 = "resize";
mouse_drop_action = "swap";
};
};
# skhd = {
# enable = true;
# skhdConfig = ''
# Application Bindings
# cmd - q : open -a kitty
# cmd - e : ${pkgs.kitty}/bin/kitty yazi
# cmd - o : open -a "Obsidian"
# cmd - i : open -a "Floorp"
# cmd - g : open -a "Mail"
# Window Management (using yabai if installed, otherwise basic macOS)
#cmd + shift - c : yabai -m window --close || osascript -e 'tell application "System Events" to keystroke "w" using command down'
#cmd + shift - v : yabai -m window --toggle float
# Focus windows (vim-like)
# cmd - left : yabai -m window --focus west
# cmd - right : yabai -m window --focus east
# cmd - up : yabai -m window --focus north
# cmd - down : yabai -m window --focus south
# Move windows to spaces (workspaces)
# cmd + shift - 1 : yabai -m window --space 1
# cmd + shift - 2 : yabai -m window --space 2
# cmd + shift - 3 : yabai -m window --space 3
# cmd + shift - 4 : yabai -m window --space 4
# cmd + shift - 5 : yabai -m window --space 5
# cmd + shift - 6 : yabai -m window --space 6
# cmd + shift - 7 : yabai -m window --space 7
# cmd + shift - 8 : yabai -m window --space 8
# cmd + shift - 9 : yabai -m window --space 9
# cmd + shift - 0 : yabai -m window --space 10
# Switch to spaces (workspaces)
# cmd - 1 : yabai -m space --focus 1
# cmd - 2 : yabai -m space --focus 2
# cmd - 3 : yabai -m space --focus 3
# cmd - 4 : yabai -m space --focus 4
# cmd - 5 : yabai -m space --focus 5
# cmd - 6 : yabai -m space --focus 6
# cmd - 7 : yabai -m space --focus 7
# cmd - 8 : yabai -m space --focus 8
# cmd - 9 : yabai -m space --focus 9
# cmd - 0 : yabai -m space --focus 10
# Screenshot (macOS native)
# cmd - z : screencapture -i ~/Pictures/Screenshots/$(date +%s).png
# cmd - u : screencapture ~/Pictures/Screenshots/$(date +%s).png
# Launcher (using Raycast or Spotlight as Rofi alternative)
# cmd - r : open -a "Raycast" || osascript -e 'tell application "System Events" to keystroke space using command down'
# Lock screen
# cmd - m : pmset displaysleepnow
# Toggle layout (if using yabai)
# cmd - j : yabai -m space --layout $(yabai -m query --spaces --space | jq -r 'if .type == "bsp" then "float" else "bsp" end')
# cmd - p : yabai -m window --toggle split
# Reload skhd config
# cmd + shift - r : skhd --reload
# '';
# };
};
}
Generated
+925
View File
@@ -0,0 +1,925 @@
{
"nodes": {
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1774211390,
"narHash": "sha256-sTtAgCCaX8VNNZlQFACd3i1IQ+DB0Wf3COgiFS152ds=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "f62a4dbfa4e5584f14ad4c62afedf6e4b433cf70",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"type": "github"
}
},
"brew-src": {
"flake": false,
"locked": {
"lastModified": 1774235677,
"narHash": "sha256-0ryNYmzDAeRlrzPTAgmzGH/Cgc8iv/LBN6jWGUANvIk=",
"owner": "Homebrew",
"repo": "brew",
"rev": "894a3d23ac0c8aaf561b9874b528b9cb2e839201",
"type": "github"
},
"original": {
"owner": "Homebrew",
"ref": "5.1.1",
"repo": "brew",
"type": "github"
}
},
"catppuccin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1775213373,
"narHash": "sha256-wJHsijC2l/E+ovmlpPGha8pXA6RHSwHWmBV97gvkmyI=",
"owner": "catppuccin",
"repo": "nix",
"rev": "ba73719e673e7c2d89ac2f8df0bc0d48983e4907",
"type": "github"
},
"original": {
"owner": "catppuccin",
"repo": "nix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1775037210,
"narHash": "sha256-KM2WYj6EA7M/FVZVCl3rqWY+TFV5QzSyyGE2gQxeODU=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "06648f4902343228ce2de79f291dd5a58ee12146",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"revCount": 69,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1775247674,
"narHash": "sha256-MCaiC3iWarAsmu8KJXgJHb1H8lf+BD9gymvxkbmNVdc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "03bdcf84f092956943dcf9ef164481e463512716",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "home-manager",
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": "hyprlang",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1772461003,
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprcursor_2": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772461003,
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772461523,
"narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor_2",
"hyprgraphics": "hyprgraphics",
"hyprland-guiutils": "hyprland-guiutils",
"hyprland-protocols": "hyprland-protocols",
"hyprlang": "hyprlang_2",
"hyprutils": "hyprutils_2",
"hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire",
"nixpkgs": [
"nixpkgs"
],
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_2",
"xdph": "xdph"
},
"locked": {
"lastModified": 1775165818,
"narHash": "sha256-Bkb1ha9bB8IiWIBW2Z6shj2Erqx08VH1I9ljYl8zxGU=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "f25473b21b45ab8ded4a0dbba69eb6b6660d568e",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-guiutils": {
"inputs": {
"aquamarine": [
"hyprland",
"aquamarine"
],
"hyprgraphics": [
"hyprland",
"hyprgraphics"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprtoolkit": "hyprtoolkit",
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772467975,
"narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=",
"owner": "hyprwm",
"repo": "hyprland-guiutils",
"rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-guiutils",
"type": "github"
}
},
"hyprland-plugins": {
"inputs": {
"hyprland": [
"hyprland"
],
"nixpkgs": [
"hyprland-plugins",
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland-plugins",
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1771865848,
"narHash": "sha256-xwNa+1D8WPsDnJtUofDrtyDCZKZotbUymzV/R5s+M0I=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "b85a56b9531013c79f2f3846fd6ee2ff014b8960",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-plugins",
"type": "github"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772460177,
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": "hyprutils",
"nixpkgs": [
"hyprcursor",
"nixpkgs"
],
"systems": [
"hyprcursor",
"systems"
]
},
"locked": {
"lastModified": 1772459629,
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprlang_2": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772459629,
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprtoolkit": {
"inputs": {
"aquamarine": [
"hyprland",
"hyprland-guiutils",
"aquamarine"
],
"hyprgraphics": [
"hyprland",
"hyprland-guiutils",
"hyprgraphics"
],
"hyprlang": [
"hyprland",
"hyprland-guiutils",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-guiutils",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprland-guiutils",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"hyprland-guiutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-guiutils",
"systems"
]
},
"locked": {
"lastModified": 1772462885,
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
"owner": "hyprwm",
"repo": "hyprtoolkit",
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprtoolkit",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprcursor",
"hyprlang",
"nixpkgs"
],
"systems": [
"hyprcursor",
"hyprlang",
"systems"
]
},
"locked": {
"lastModified": 1771271487,
"narHash": "sha256-41gEiUS0Pyw3L/ge1l8MXn61cK14VAhgWB/JV8s/oNI=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "340a792e3b3d482c4ae5f66d27a9096bdee6d76d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprutils_2": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1774211405,
"narHash": "sha256-6KNwP4ojUzv3YBlZU5BqCpTrWHcix1Jo01BISsTT0xk=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "cb4e152dc72095a2af422956c6b689590572231a",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772459835,
"narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"hyprwire": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1773074819,
"narHash": "sha256-qRqYnXiKoJLRTcfaRukn7EifmST2IVBUMZOeZMAc5UA=",
"owner": "hyprwm",
"repo": "hyprwire",
"rev": "f68afd0e73687598cc2774804fedad76693046f0",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwire",
"type": "github"
}
},
"nix-homebrew": {
"inputs": {
"brew-src": "brew-src"
},
"locked": {
"lastModified": 1774720267,
"narHash": "sha256-YYftFe8jyfpQI649yfr0E+dqEXE2jznZNcYvy/lKV1U=",
"owner": "zhaofengli",
"repo": "nix-homebrew",
"rev": "a7760a3a83f7609f742861afb5732210fdc437ed",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"repo": "nix-homebrew",
"type": "github"
}
},
"nixcord": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-nixcord": "nixpkgs-nixcord"
},
"locked": {
"lastModified": 1775215862,
"narHash": "sha256-YoFvBMHRE4jCUoAk73bsUOo20j1sQV2NQm4BgQCKqSA=",
"owner": "kaylorben",
"repo": "nixcord",
"rev": "164e25500dcda5261d23242788ece7ab4f0a4619",
"type": "github"
},
"original": {
"owner": "kaylorben",
"repo": "nixcord",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1775036866,
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1772328832,
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-nixcord": {
"locked": {
"lastModified": 1773222311,
"narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0590cd39f728e129122770c029970378a79d076a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1774802402,
"narHash": "sha256-L1UJ/zxKTyyaGGmytH6OYlgQ0HGSMhvPkvU+iz4Mkb8=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "cbd8536a05d1aae2593cb5c9ace1010c8c5845cb",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1774104215,
"narHash": "sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "f799ae951fde0627157f40aec28dec27b22076d0",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"catppuccin": "catppuccin",
"darwin": "darwin",
"home-manager": "home-manager",
"hyprcursor": "hyprcursor",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"nix-homebrew": "nix-homebrew",
"nixcord": "nixcord",
"nixpkgs": "nixpkgs",
"nixvim": "nixvim",
"sops-nix": "sops-nix",
"spicetify-nix": "spicetify-nix"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1775188331,
"narHash": "sha256-/0BoSi0Dg0ON7IW0oscM12WSPBaMSCn36XTt0lHZoy8=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "8f093d0d2f08f37317778bd94db5951d6cce6c46",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "sops-nix",
"type": "github"
}
},
"spicetify-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_4"
},
"locked": {
"lastModified": 1774790928,
"narHash": "sha256-/JO77td8AOH45kg9IJl2DXDwbhn+cyQxYbCMu4Ae1CA=",
"owner": "Gerg-L",
"repo": "spicetify-nix",
"rev": "2bfdf55faf76fed12950b17d4af501e5a463607f",
"type": "github"
},
"original": {
"owner": "Gerg-L",
"repo": "spicetify-nix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"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"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [
"hyprland",
"hyprland-protocols"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1773601989,
"narHash": "sha256-2tJf/CQoHApoIudxHeJye+0Ii7scR0Yyi7pNiWk0Hn8=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "a9b862d1aa000a676d310cc62d249f7ad726233d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
+119
View File
@@ -0,0 +1,119 @@
{
description = "DerGrumpfs Nix Configuration";
inputs = {
# monorepo w/ recipes ("derivations")
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# declarative Configs
home-manager = {
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixpkgs";
};
# declarative Hyprland
hyprland = {
url = "github:hyprwm/Hyprland";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
hyprcursor = {
url = "github:hyprwm/hyprcursor";
inputs.nixpkgs.follows = "nixpkgs";
};
# system-level software and settings (macOS)
darwin = {
url = "github:lnl7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs";
};
# declarative homebrew management
nix-homebrew = { url = "github:zhaofengli/nix-homebrew"; };
# declarative Neovim
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
# declarative Discord
nixcord = {
url = "github:kaylorben/nixcord";
inputs.nixpkgs.follows = "nixpkgs";
};
# declarative Spotify
spicetify-nix = {
url = "github:Gerg-L/spicetify-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# declarative Encryption
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# declarative Catppuccin
catppuccin = {
url = "github:catppuccin/nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, darwin, nix-homebrew, nixvim
, hyprland, sops-nix, ... }@inputs:
let
primaryUser = "phil";
mkNixos = hostName:
nixpkgs.lib.nixosSystem {
modules = [
{
nixpkgs.hostPlatform = "x86_64-linux";
networking.hostName = hostName;
}
./nixos
./hosts/cyper-desktop/configuration.nix
inputs.home-manager.nixosModules.home-manager
{
home-manager.extraSpecialArgs = {
inherit inputs primaryUser self;
};
home-manager.users.${primaryUser} = import ./home;
}
inputs.sops-nix.nixosModules.sops
];
specialArgs = { inherit inputs primaryUser self hostName; };
};
mkDarwin = hostName:
darwin.lib.darwinSystem {
system = "x86_64-darwin";
modules = [
./darwin
./hosts/cyper-mac/configuration.nix
{ networking.hostName = hostName; }
inputs.nix-homebrew.darwinModules.nix-homebrew
inputs.home-manager.darwinModules.home-manager
{
home-manager.extraSpecialArgs = {
inherit inputs primaryUser self;
};
home-manager.users.${primaryUser} = import ./home;
}
inputs.sops-nix.darwinModules.sops
];
specialArgs = { inherit inputs primaryUser self hostName; };
};
in {
nixosConfigurations."cyper-desktop" = mkNixos "cyper-desktop";
darwinConfigurations."cyper-mac" = mkDarwin "cyper-mac";
};
}
+122
View File
@@ -0,0 +1,122 @@
{ config, primaryUser, inputs, self, pkgs, lib, ... }: {
imports = [
./packages.nix
./git.nix
./shell.nix
./neovim
./python.nix
./nixcord.nix
./spicetify.nix
./floorp.nix
./obsidian.nix
./desktop
inputs.sops-nix.homeManagerModules.sops
] ++ lib.optionals (!pkgs.stdenv.isDarwin) [ ./xdg.nix ];
catppuccin = {
enable = false;
accent = "sky";
flavor = "mocha";
eza.enable = true;
fzf.enable = true;
bat.enable = true;
element-desktop = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
enable = true;
accent = "green";
};
btop.enable = true;
cava = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
enable = true;
transparent = true;
};
kitty.enable = true;
lazygit.enable = true;
yazi.enable = true;
fish.enable = true;
cursors = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
enable = true;
accent = "sapphire";
};
hyprland = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) { enable = true; };
hyprlock = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
enable = true;
useDefaultConfig = false;
};
waybar = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
enable = true;
mode = "createLink";
};
mako.enable = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) true;
mpv.enable = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) true;
newsboat.enable = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) true;
mangohud.enable = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) true;
gtk.icon.enable = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) true;
kvantum = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
enable = true;
apply = true;
};
};
home = {
username = primaryUser;
stateVersion = "26.05";
sessionVariables = lib.mkIf (!pkgs.stdenv.isDarwin) {
GROQ_API_KEY = config.sops.secrets.GROQ_API_KEY.path;
OPENWEATHER_API_KEY = config.sops.secrets.OPENWEATHER_API_KEY.path;
};
file = {
"Pictures/Avatar" = {
source = "${self}/assets/avatar";
recursive = true;
};
"Pictures/Wallpapers" = {
source = "${self}/assets/wallpapers";
recursive = true;
};
};
};
sops = {
defaultSopsFile = ../secrets/secrets.yaml;
defaultSopsFormat = "yaml";
age.keyFile = if pkgs.stdenv.isDarwin then
"/Users/${primaryUser}/.config/sops/age/keys.txt"
else
"/home/${primaryUser}/.config/sops/age/keys.txt";
secrets = {
GROQ_API_KEY = { };
OPENWEATHER_API_KEY = { };
ssh_private_key = {
path = if pkgs.stdenv.isDarwin then
"/Users/${primaryUser}/.ssh/ssh"
else
"/home/${primaryUser}/.ssh/ssh";
mode = "0600";
};
};
};
programs.man.enable = false;
}
+47
View File
@@ -0,0 +1,47 @@
{ pkgs, inputs, ... }: {
imports = [ inputs.catppuccin.homeModules.catppuccin ]
++ pkgs.lib.optionals (!pkgs.stdenv.isDarwin) [
./hyprland
./rofi
./waybar
./gtk.nix
./qt.nix
] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ ./sketchybar.nix ];
_module.args.compositor =
if pkgs.stdenv.isDarwin then "quartz" else "hyprland";
home = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
packages = with pkgs; [ waypaper swww ];
file.".config/waypaper/config.ini".source = ./waypaper.ini;
};
# TODO: Qutebrowser install
programs = pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) {
mangohud = {
enable = true;
settings = {
position = "top-right";
offset_x = 20;
offset_y = 20;
fps = true;
cpu_stats = true;
gpu_stats = true;
cpu_temp = true;
gpu_temp = true;
ram = true;
vram = true;
background_alpha = 0.5;
};
};
# TODO: Needs config!
mpv = {
enable = true;
};
};
}
+53
View File
@@ -0,0 +1,53 @@
{ pkgs, lib, ... }:
let
theme = pkgs.magnetic-catppuccin-gtk;
theme_name = "Catppuccin-GTK-Dark";
in
{
home = {
packages = with pkgs; [
adwaita-icon-theme
];
#pointerCursor = {
# gtk.enable = true;
# name = "catppuccin-mocha-sapphire-cursors";
# package = pkgs.catppuccin-cursors.mochaSapphire;
# size = 24;
#};
file = {
".config/gtk-4.0/gtk.css".source = "${theme}/share/themes/${theme_name}/gtk-4.0/gtk.css";
".config/gtk-4.0/gtk-dark.css".source = "${theme}/share/themes/${theme_name}/gtk-4.0/gtk-dark.css";
".config/gtk-4.0/assets".source = "${theme}/share/themes/${theme_name}/gtk-4.0/assets";
};
};
gtk = {
enable = true;
font = {
name = "FiraCode Nerd Font Propo";
size = 12;
};
theme = {
name = theme_name;
package = theme;
};
iconTheme = {
name = "Papirus-Dark";
package = lib.mkForce (
pkgs.catppuccin-papirus-folders.override {
accent = "sky";
flavor = "mocha";
}
);
};
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
};
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
gtk-theme = theme_name;
};
};
};
}
+299
View File
@@ -0,0 +1,299 @@
{ inputs, pkgs, ... }:
let
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
super = "SUPER";
terminal = "kitty";
fileManager = "yazi";
theme = "-theme $HOME/.config/rofi/custom.rasi";
menu = "rofi -show drun ${theme}";
filebrowser = "rofi -show filebrowser ${theme}";
power = "rofi -show p -modi p:rofi-power-menu -theme $HOME/.config/rofi/power.rasi";
apps = "rofi -show window ${theme}";
in
{
imports = [
./hypridle.nix
./hyprlock.nix
./mako.nix
./portal.nix
];
home.packages = with pkgs; [
catppuccin-cursors.mochaDark
grim
slurp
wl-clipboard
pamixer
brightnessctl
playerctl
];
systemd.user.targets.hyprland-session.Unit.Wants = [
"xdg-desktop-autostart.target"
];
wayland.windowManager.hyprland = {
inherit package;
enable = true;
xwayland.enable = true;
systemd = {
enable = true;
variables = [ "--all" ];
enableXdgAutostart = false;
};
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
#hyprbars
# hyprexpo
];
settings = {
env = [
"NIXOS_OZONE_WL,1"
"MOZ_ENABLE_WAYLAND,1"
"MOZ_WEBRENDER,1"
"_JAVA_AWT_WM_NONREPARENTING,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"QT_QPA_PLATFORM,wayland"
"SDL_VIDEODRIVER,wayland"
"GDK_BACKEND,wayland,x11"
"XCURSOR_SIZE,24"
"EDITOR,nvim"
"GSK_RENDERER,gl"
"HYPRCURSOR_THEME,catppuccin-mocha-dark"
"HYPRCURSOR_SIZE,24"
"XCURSOR_THEME,catppuccin-mocha-dark"
"XCURSOR_SIZE,24"
];
monitor = [
"DP-1, 1920x1080@60, 1920x0, 1"
"HDMI-A-2, 1920x1080@60, 0x0, 1"
];
input = {
kb_layout = "de";
kb_variant = "mac";
kb_options = "apple:fn_lock";
repeat_rate = 50;
repeat_delay = 300;
accel_profile = "flat";
follow_mouse = 1;
mouse_refocus = false;
sensitivity = 0; # -1.0 to 1.0, 0 means no modification.
numlock_by_default = 1;
touchpad = {
natural_scroll = true;
tap-to-click = true;
};
};
general = {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 2;
gaps_out = 0;
border_size = 4;
"col.active_border" = "$green";
"col.inactive_border" = "$red";
layout = "dwindle";
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false;
};
decoration = {
rounding = 1;
shadow = {
enabled = false;
range = 16;
render_power = 4;
ignore_window = true;
color = "$green";
color_inactive = "$red";
};
blur = {
enabled = false;
size = 1;
passes = 3;
new_optimizations = 1;
noise = 0.04;
};
};
animations = {
enabled = "yes";
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
# layerrule = [
# "ignorezero,notifications"
# "ignorezero,rofi"
# ];
dwindle = {
pseudotile = "yes";
preserve_split = "yes";
};
# gestures = {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
# workspace_swipe = true;
# workspace_swipe_fingers = 3;
# workspace_swipe_distance = 300;
# workspace_swipe_invert = false;
# workspace_swipe_cancel_ratio = 0.5;
# };
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
disable_splash_rendering = true;
mouse_move_enables_dpms = true;
key_press_enables_dpms = true;
vfr = true;
vrr = 0;
};
device = {
name = "usb-optical-mouse-";
sensitivity = 0;
};
#deprecated
# windowrulev2 = [
# "suppressevent maximize, class:.*"
# "float, class:^(com.obsproject.Studio)$"
# "size 1280 800, class:^(com.obsproject.Studio)$"
# "float, class:^(xdg-desktop-portal-gtk)$"
# "center, class:^(xdg-desktop-portal-gtk)$"
# ];
# windowrule = [
# "opacity 0.0 override, class:^(xwaylandvideobridge)$"
# "noanim, class:^(xwaylandvideobridge)$"
# "noinitialfocus, class:^(xwaylandvideobridge)$"
# "maxsize 1 1, class:^(xwaylandvideobridge)$"
# "noblur, class:^(xwaylandvideobridge)$"
# "nofocus, class:^(xwaylandvideobridge)$"
# "noblur, class:^(org\\.gnome\\.|io\\.github\\.|org\\.gtk\\.)"
# ];
exec-once = [
"swww-daemon & disown"
"waybar &"
];
# Keybindings
bind = [
# Application Bindings
"${super}, Q, exec, ${terminal}"
"${super}, E, exec, ${fileManager}"
"${super}, O, exec, obsidian"
"${super}, I, exec, floorp"
"${super}, G, exec, thunderbird"
", XF86Mail, exec, thunderbird"
"${super}, N, exec, nautilus"
", XF86Search, exec, nautilus"
# Lock Screen
"${super}, M, exit, "
# Rofi bindings
"${super}, F, exec, ${filebrowser}"
"${super}, A, exec, ${apps}"
", Menu, exec, ${apps}"
"${super}, R, exec, ${menu}"
", XF86LaunchA, exec, ${menu}"
"${super}, S, exec, ${power}"
", XF86LaunchB, exec, ${power}"
# Move focus with mainMod + arrow keys
"${super}, left, movefocus, l"
"${super}, right, movefocus, r"
"${super}, up, movefocus, u"
"${super}, down, movefocus, d"
# Window Modifiers
"${super}, P, pseudo, " # dwindle
# "${super}, J, togglesplit, " # dwindle doenst exist
"${super}, V, togglefloating, " # dwindle
"${super}, C, killactive, "
# Switch workspaces with mainMod + [0-9]
"${super}, 1, workspace, 1"
"${super}, 2, workspace, 2"
"${super}, 3, workspace, 3"
"${super}, 4, workspace, 4"
"${super}, 5, workspace, 5"
"${super}, 6, workspace, 6"
"${super}, 7, workspace, 7"
"${super}, 8, workspace, 8"
"${super}, 9, workspace, 9"
"${super}, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"${super} SHIFT, 1, movetoworkspace, 1"
"${super} SHIFT, 2, movetoworkspace, 2"
"${super} SHIFT, 3, movetoworkspace, 3"
"${super} SHIFT, 4, movetoworkspace, 4"
"${super} SHIFT, 5, movetoworkspace, 5"
"${super} SHIFT, 6, movetoworkspace, 6"
"${super} SHIFT, 7, movetoworkspace, 7"
"${super} SHIFT, 8, movetoworkspace, 8"
"${super} SHIFT, 9, movetoworkspace, 9"
"${super} SHIFT, 0, movetoworkspace, 10"
# Example special workspace (scratchpad)
#"${super}, S, togglespecialworkspace, magic"
"${super} SHIFT, S, movetoworkspace, special:magic"
# Scroll through existing workspaces with mainMod + scroll
"${super}, mouse_down, workspace, e+1"
"${super}, mouse_up, workspace, e-1"
# Screenshot
''${super}, Z, exec, grim -g "$(slurp)" $HOME/Pictures/Screenshots/$(date +'%s_grim.png')''
"${super}, U, exec, grim $HOME/Pictures/Screenshots/$(date +'%s_grim.png')"
];
bindl = [
#", XF86AudioMute, exec, amixer set Master toggle
", XF86AudioMute, exec, pamixer -t"
", XF86AudioPlay, exec, playerctl play-pause" # the stupid key is called play , but it toggles
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
];
bindle = [
# Multi Media Control
", XF86AudioRaiseVolume, exec, pamixer -i 5"
", XF86AudioLowerVolume, exec, pamixer -d 5"
", XF86MonBrightnessUp, exec, brightnessctl set +5%"
", XF86MonBrightnessDown, exec, brightnessctl set 5%-"
];
bindm = [
"${super}, mouse:272, movewindow"
"${super}, mouse:273, resizewindow"
];
};
};
}
+27
View File
@@ -0,0 +1,27 @@
{ ... }:
{
# Hypridle configuration
services.hypridle = {
enable = true;
settings = {
general = {
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
lock_cmd = "hyprlock";
before_sleep_cmd = "notify-send -u critical \"I'm getting sleepy I'll see you in my code dreams 💖\" --icon=$HOME/.config/hypr/avatar.png --app-name=Hyprlock";
};
listener = [
{
timeout = 300;
on-timeout = "hyprlock";
}
{
timeout = 600;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
}
+112
View File
@@ -0,0 +1,112 @@
{ ... }:
{
# Hyprlock configuration
programs.hyprlock = {
enable = true;
settings = {
"$accent" = "$mauve";
"$accentAlpha" = "$mauveAlpha";
"$font" = "FiraCode Nerd Font";
general = {
disable_loading_bar = true;
hide_cursor = true;
};
background = [
{
path = "~/Pictures/Wallpapers/lucy_with_cat.png";
blur_passes = 1;
blur_size = 5;
}
];
label = [
# TIME
{
monitor = "";
text = "$TIME";
color = "$peach";
font_size = 90;
font_family = "$font";
position = "0, -100";
halign = "center";
valign = "top";
}
# DATE
{
monitor = "";
text = ''cmd[update:43200000] date +"%A, %d %B %Y"'';
color = "$peach";
font_size = 25;
font_family = "$font";
position = "0, 100";
halign = "center";
valign = "bottom";
}
# Message
{
monitor = "";
text = "Waiting for you...";
color = "$peach";
font_size = 20;
font_family = "$font";
position = "0, 200";
halign = "center";
valign = "bottom";
}
# Weather
{
monitor = "";
text = ''cmd[update:60000] curl -s "wttr.in/52.281311,10.527029?format=1"'';
color = "$peach";
font_size = 20;
font_family = "$font";
position = "0, 50";
halign = "center";
valign = "bottom";
}
];
# INPUT FIELD
input-field = {
monitor = "";
size = "300, 60";
outline_thickness = 4;
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = "true";
outer_color = "$red";
inner_color = "$surface0";
font_color = "$text";
fade_on_empty = false;
placeholder_text = ''<span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>'';
hide_input = false;
check_color = "$accent";
fail_color = "$red";
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
capslock_color = "$yellow";
position = "0, -150";
halign = "center";
valign = "center";
};
image = {
monitor = "";
path = "~/.config/hypr/avatar/avatar.png";
size = 300;
border_color = "$teal";
position = "0, 75";
halign = "center";
valign = "center";
};
};
};
}
+12
View File
@@ -0,0 +1,12 @@
{ ... }:
{
services.mako = {
enable = true;
settings = {
font = "FiraCodeNerdFontPropo 12";
border-size = 4;
border-radius = 8;
default-timeout = 5000;
};
};
}
+17
View File
@@ -0,0 +1,17 @@
{ pkgs, ... }:
{
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
config = {
common.default = [ "gtk" ];
hyprland.default = [
"gtk"
"hyprland"
];
};
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
};
}
View File
View File
View File
+110
View File
@@ -0,0 +1,110 @@
{ ... }:
{
services.swaync = {
enable = true;
settings = {
positionX = "center";
positionY = "center";
layer = "overlay";
control-center-layer = "top";
layer-shell = true;
cssPriority = "user";
control-center-margin-top = 100;
control-center-margin-bottom = 200;
control-center-margin-right = 0;
control-center-margin-left = 0;
notification-2fa-action = true;
notification-inline-replies = false;
notification-icon-size = 64;
notification-body-image-height = 100;
notification-body-image-width = 200;
widgets = [
"mpris"
"volume"
"inhibitors"
"title"
"dnd"
"notifications"
];
widget-config = {
mpris = {
blacklist = [ ];
autohide = false;
show-album-art = "always";
loop-carousel = false;
image-size = 96;
image-radius = 12;
};
volume = {
label = "gain";
show-per-app = false;
empty-list-label = "Nothin' is playin'";
expand-button-label = "";
collaps-button-label = "";
};
title = {
text = "Hollerin'";
clear-all-button = true;
button-text = "Sheriff's Pardon";
};
dnd = {
text = "Let'er rest";
};
menubar = {
"menu#power" = {
label = "Power";
position = "right";
animation-type = "slide_down";
animation-duration = 250;
actions = [
{
label = "Bolt It";
command = "hyprlock";
}
{
label = "Ride Out";
command = "hyprctl dispatch exit";
}
{
label = "Circle Back";
command = "systemctl reboot";
}
{
label = "Bet Down the Horses";
command = "systemctl poweroff";
}
];
};
"buttons#media" = {
position = "left";
actions = [
{
label = "Play/Pause";
command = "playerctl play-pause";
}
{
label = "Next";
command = "playerctl next";
}
{
label = "Previous";
command = "playerctl previous";
}
];
};
};
notifications = {
vexpand = true;
};
};
};
};
}
+12
View File
@@ -0,0 +1,12 @@
{ pkgs, ... }:
{
qt = {
enable = true;
style.name = "kvantum";
platformTheme.name = "kvantum";
};
home.packages = with pkgs; [
kdePackages.qt6ct
kdePackages.qtstyleplugin-kvantum
];
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 MiB

+232
View File
@@ -0,0 +1,232 @@
* {
rosewater: #f5e0dc;
flamingo: #f2cdcd;
pink: #f5c2e7;
mauve: #cba6f7;
red: #f38ba8;
maroon: #eba0ac;
peach: #fab387;
yellow: #f9e2af;
green: #a6e3a1;
teal: #94e2d5;
sky: #89dceb;
sapphire: #74c7ec;
blue: #89b4fa;
lavender: #b4befe;
text: #cdd6f4;
subtext1: #bac2de;
subtext0: #a6adc8;
overlay2: #9399b2;
overlay1: #7f849c;
overlay0: #6c7086;
surface2: #585b70;
surface1: #45475a;
surface0: #313244;
base: #1e1e2e;
mantle: #181825;
crust: #11111b;
}
configuration {
show-icons: true;
modi: "window,drun,filebrowser";
display-drun: "Apps";
display-filebrowser: "Files";
display-run: "RUN";
display-window: "Active";
drun-display-format: "{name}";
window-format: "{w} · {c} · {t}";
}
/* Main Window */
window {
/* properties for window widget */
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 50%;
height: 90%;
x-offset: 0px;
y-offset: 0px;
/* properties for all widgets */
enabled: true;
border-radius: 1px;
cursor: "default";
background-color: @base;
border: 4px;
border-color: @yellow;
}
/* Main Box */
mainbox {
enabled: true;
spacing: 0px;
background-color: transparent;
orientation: horizontal;
children: [ "imagebox", "listbox" ];
}
imagebox {
padding: 20px;
background-color: transparent;
background-image: url("~/.config/rofi/background.png", height);
orientation: vertical;
children: [ "inputbar", "weatherelement", "dummy", "mode-switcher" ];
}
listbox {
spacing: 20px;
padding: 20px;
background-color: transparent;
orientation: vertical;
children: [ "message", "listview" ];
}
weatherelement {
border-radius: 20px;
background-color: transparent;
text-color: @peach;
str: "Hello This is text";
}
dummy {
background-color: transparent;
}
/* Input */
inputbar {
enabled: true;
spacing: 10px;
padding: 15px;
border-radius: 10px;
background-color: @crust;
text-color: @text;
children: [ "textbox-prompt-colon", "entry" ];
}
textbox-prompt-colon {
enabled: true;
expand: false;
str: "";
background-color: inherit;
text-color: inherit;
}
entry {
enabled: true;
background-color: inherit;
text-color: inherit;
cursor: text;
placeholder: "Search";
placeholder-color: inherit;
}
/* Mode Switcher */
mode-switcher{
enabled: true;
spacing: 20px;
background-color: transparent;
text-color: @text;
}
button {
padding: 15px;
border-radius: 10px;
background-color: @base;
text-color: inherit;
cursor: pointer;
}
button selected {
background-color: @base;
text-color: @pink;
}
/* Listview */
listview {
enabled: true;
columns: 1;
lines: 8;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
spacing: 10px;
background-color: transparent;
text-color: @text;
cursor: "default";
}
/* Elements */
element {
enabled: true;
spacing: 15px;
padding: 8px;
border-radius: 10px;
background-color: transparent;
text-color: @mauve;
cursor: pointer;
}
element normal.normal {
background-color: inherit;
text-color: inherit;
}
element normal.urgent {
background-color: inherit;
text-color: @red;
}
element normal.active {
background-color: inherit;
text-color: @blue;
}
element selected.normal {
background-color: @crust;
text-color: @pink;
}
element selected.urgent {
background-color: @crust;
text-color: @maroon;
}
element selected.active {
background-color: @crust;
text-color: @sky;
}
element-icon {
background-color: transparent;
text-color: inherit;
size: 32px;
cursor: inherit;
}
element-text {
background-color: transparent;
text-color: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
}
/* Message */
message {
background-color: transparent;
}
textbox {
padding: 15px;
border-radius: 10px;
background-color: @overlay0;
text-color: @peach;
vertical-align: 0.5;
horizontal-align: 0.0;
}
error-message {
padding: 15px;
border-radius: 20px;
background-color: @surface0;
text-color: @red;
}
+31
View File
@@ -0,0 +1,31 @@
{
pkgs,
...
}:
{
home.packages = with pkgs; [
rofi-power-menu
rofi-calc
];
programs.rofi = {
enable = true;
cycle = true;
package = pkgs.rofi;
font = "FiraCode Nerd Font Mono 12";
location = "center";
terminal = "${pkgs.kitty}/bin/kitty";
};
home.file = {
".config/rofi/background.png".source = ./background.png;
".config/rofi/custom.rasi".source = ./custom.rasi;
".config/rofi/power.jpg".source = ./power.jpg;
".config/rofi/power.rasi".source = ./power.rasi;
".config/rofi/smoking_girl.png".source = ./smoking_girl.png;
};
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 447 KiB

+163
View File
@@ -0,0 +1,163 @@
* {
rosewater: #f5e0dc;
flamingo: #f2cdcd;
pink: #f5c2e7;
mauve: #cba6f7;
red: #f38ba8;
maroon: #eba0ac;
peach: #fab387;
yellow: #f9e2af;
green: #a6e3a1;
teal: #94e2d5;
sky: #89dceb;
sapphire: #74c7ec;
blue: #89b4fa;
lavender: #b4befe;
text: #cdd6f4;
subtext1: #bac2de;
subtext0: #a6adc8;
overlay2: #9399b2;
overlay1: #7f849c;
overlay0: #6c7086;
surface2: #585b70;
surface1: #45475a;
surface0: #313244;
base: #1e1e2e;
mantle: #181825;
crust: #11111b;
}
configuration {
font: "Fira Code Bold 20px";
show-icons: true;
}
/*
USE_BUTTONS=YES
*/
/*****----- Main Window -----*****/
window {
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 1000px;
x-offset: 0px;
y-offset: 0px;
padding: 0px;
border: 4px solid;
border-radius: 2px;
border-color: @blue;
cursor: "default";
background-color: @base;
}
/*****----- Main Box -----*****/
mainbox {
enabled: true;
spacing: 0px;
margin: 0px;
padding: 0px;
border: 0px solid;
border-radius: 0px;
border-color: @blue;
background-color: transparent;
children: [ "inputbar", "listview", "message" ];
}
/*****----- Inputbar -----*****/
inputbar {
enabled: true;
spacing: 20px;
padding: 100px 40px;
background-color: transparent;
background-image: url("~/.config/rofi/power.jpg", width);
children: [ "textbox-prompt-colon", "prompt"];
}
dummy {
background-color: transparent;
}
textbox-prompt-colon {
enabled: true;
expand: false;
str: " System";
padding: 15px;
border: 0px 0px 0px 10px;
border-radius: 100% 100% 0px 100%;
border-color: @blue;
background-color: @crust;
text-color: @text;
}
prompt {
enabled: true;
padding: 15px;
border: 0px;
border-radius: 0px 100% 100% 100%;
border-color: @blue;
background-color: @crust;
text-color: @text;
}
/*****----- Listview -----*****/
listview {
enabled: true;
columns: 6;
lines: 1;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
spacing: 30px;
margin: 10px;
background-color: transparent;
cursor: "default";
}
/*****----- Elements -----*****/
element {
enabled: true;
padding: 10px;
border-radius: 1%;
background-color: @crust;
text-color: @text;
cursor: pointer;
children: [ element-text ];
}
element-text {
background-color: transparent;
text-color: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.5;
}
element selected.normal {
background-color: @crust;
text-color: @yellow;
}
/*****----- Message -----*****/
message {
enabled: true;
margin: 0px;
padding: 15px;
border-radius: 0px;
background-color: @crust;
text-color: @yellow;
}
textbox {
background-color: inherit;
text-color: inherit;
vertical-align: 0.5;
horizontal-align: 0.5;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 MiB

+7
View File
@@ -0,0 +1,7 @@
{ pkgs, ... }: {
programs.sketchybar = {
enable = true;
configType = "lua";
sbarLuaPackage = pkgs.sbarlua;
};
}
+181
View File
@@ -0,0 +1,181 @@
{
widgets = {
"group/media" = {
orientation = "horizontal";
modules = [
"mpris"
"custom/cava"
"wireplumber"
];
};
mpris = {
format = "{player_icon}";
format-paused = "{status_icon}";
max-length = 100;
player-icons = {
default = "||";
mpv = "||";
};
status-icons = {
paused = "";
};
};
"custom/cava" = {
exec = "sh ~/.config/waybar/cava.sh";
format = "{} ";
on-click = "hyprctl dispatch focuswindow class:spotify";
};
wireplumber = {
format = "{volume}%";
format-muted = "";
max-volume = 110;
scroll-step = 0.2;
};
"group/hardware" = {
orientation = "horizontal";
modules = [
"cpu"
"network"
"memory"
"disk"
"temperature"
];
};
network = {
# Wifi
tooltip = true;
format-wifi = "{icon} ";
format-icons = [
"󰤟"
"󰤢"
"󰤥"
];
rotate = 0;
# Ethernet
format-ethernet = "{bandwidthTotalBits}";
tooltip-format = "Network: <big><b>{essid}</b></big>\nSignal strength: <b>{signaldBm}dBm ({signalStrength}%)</b>\nFrequency: <b>{frequency}MHz</b>\nInterface: <b>{ifname}</b>\nIP: <b>{ipaddr}/{cidr}</b>\nGateway: <b>{gwaddr}</b>\nNetmask: <b>{netmask}</b>\nCurrent󰈀 : <b>{bandwidthTotalBits}</b>\nUp 󰶣: <b>{bandwidthUpBits}</b>\nDown 󰶡: <b>{bandwidthDownBits}</b>";
format-linked = "󰈀 {ifname} (No IP)";
format-disconnected = " ";
tooltip-format-disconnected = "Disconnected";
interval = 2;
};
memory = {
interval = 1;
#rotate = 270;
format = "{icon} {percentage}%";
format-icons = [
"󰝦"
"󰪞"
"󰪟"
"󰪠"
"󰪡"
"󰪢"
"󰪣"
"󰪤"
"󰪥"
];
max-length = 10;
};
cpu = {
interval = 1;
format = "{icon} {usage}%";
#rotate = 270;
format-icons = [
"󰝦"
"󰪞"
"󰪟"
"󰪠"
"󰪡"
"󰪢"
"󰪣"
"󰪤"
"󰪥"
];
};
temperature = {
format = " {temperatureC}°C";
thermal-zone = 0;
hwmon-path = "/sys/class/thermal/thermal_zone1/temp";
critical-threshold = 80;
};
disk = {
format = " {percentage_free}%";
tooltip = true;
tooltip-format = "{free} / {total} ({percentage_free})";
};
clock = {
format = "{:%a %b %d, %I:%M %p}";
rotate = 0;
on-click = " ";
tooltip-format = "<tt>{calendar}</tt>";
calendar = {
mode = "month";
mode-mon-col = 3;
on-scroll = 1;
on-click-right = "mode";
format = {
months = "<span color='#cba6f7'><b>{}</b></span>";
weekdays = "<span color='#74c7ec'><b>{}</b></span>";
today = "<span color='#f38ba8'><b>{}</b></span>";
};
};
actions = {
on-click-right = "mode";
on-click-forward = "tz_up";
on-click-backward = "tz_down";
on-scroll-up = "shift_up";
on-scroll-down = "shift_down";
};
};
"custom/nixicon" = {
format = " ";
on-click = "rofi -show drun -theme $HOME/.config/rofi/custom.rasi";
tooltip = false;
};
"custom/weather" = {
format = "{}";
return-type = "json";
exec = ''
curl -s -X GET "https://api.openweathermap.org/data/2.5/weather?lat=52.281311&lon=10.527029&appid=$(cat $OPENWEATHER_API_KEY)&units=metric&lang=en" | jq -c '{text: "\(.name) \(.main.temp)C°"}'
'';
interval = 120;
on-click = ''
data=$(curl -s -X GET "https://api.openweathermap.org/data/2.5/weather?lat=52.281311&lon=10.527029&appid=$(cat $OPENWEATHER_API_KEY)&units=metric&lang=en")
city=$(echo "$data" | jq -r '.name')
temp=$(echo "$data" | jq -r '.main.temp')
feels=$(echo "$data" | jq -r '.main.feels_like')
humidity=$(echo "$data" | jq -r '.main.humidity')
wind=$(echo "$data" | jq -r '.wind.speed')
clouds=$(echo "$data" | jq -r '.clouds.all')
sunrise=$(echo "$data" | jq -r '.sys.sunrise | strftime("%H:%M")')
sunset=$(echo "$data" | jq -r '.sys.sunset | strftime("%H:%M")')
notify-send "$city" "Temperature: $temp °C\nFeels Like: $feels °C\nHumidity: $humidity%\nWind: $wind m/s\nClouds: $clouds%\nSunrise at: $sunrise\nSunset at: $sunset" -u normal --icon="$HOME/Pictures/Avatar/avatar_weather_no_bg.png"
'';
};
"custom/wallpaper" = {
format = "{} ";
exec = "basename $(swww query | grep -oP 'image: \\K.*')";
interval = 5;
on-click = "waypaper";
tooltip = true;
tooltip-format = "{}";
max-length = 30;
};
};
}
+42
View File
@@ -0,0 +1,42 @@
#!/bin/bash
# Not my own work. Credit to original author
#----- Optimized bars animation without much CPU usage increase --------
bar="▁▂▃▄▅▆▇█"
dict="s/;//g"
# Calculate the length of the bar outside the loop
bar_length=${#bar}
# Create dictionary to replace char with bar
for ((i = 0; i < bar_length; i++)); do
dict+=";s/$i/${bar:$i:1}/g"
done
# Create cava config
config_file="/tmp/bar_cava_config"
cat >"$config_file" <<EOF
[general]
# Older systems show significant CPU use with default framerate
# Setting maximum framerate to 30
# You can increase the value if you wish
framerate = 60
bars = 14
[input]
method = pulse
source = auto
[output]
method = raw
raw_target = /dev/stdout
data_format = ascii
ascii_max_range = 7
EOF
# Kill cava if it's already running
pkill -f "cava -p $config_file"
# Read stdout from cava and perform substitution in a single sed command
cava -p "$config_file" | sed -u "$dict"
+329
View File
@@ -0,0 +1,329 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="535"
height="535"
viewBox="0 0 501.56251 501.56249"
id="svg2"
version="1.1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
sodipodi:docname="nix-snowflake.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient5562">
<stop
style="stop-color:#699ad7;stop-opacity:1"
offset="0"
id="stop5564" />
<stop
id="stop5566"
offset="0.24345198"
style="stop-color:#7eb1dd;stop-opacity:1" />
<stop
style="stop-color:#7ebae4;stop-opacity:1"
offset="1"
id="stop5568" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5053">
<stop
style="stop-color:#415e9a;stop-opacity:1"
offset="0"
id="stop5055" />
<stop
id="stop5057"
offset="0.23168644"
style="stop-color:#4a6baf;stop-opacity:1" />
<stop
style="stop-color:#5277c3;stop-opacity:1"
offset="1"
id="stop5059" />
</linearGradient>
<linearGradient
id="linearGradient5960"
inkscape:collect="always">
<stop
id="stop5962"
offset="0"
style="stop-color:#637ddf;stop-opacity:1" />
<stop
style="stop-color:#649afa;stop-opacity:1"
offset="0.23168644"
id="stop5964" />
<stop
id="stop5966"
offset="1"
style="stop-color:#719efa;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5867">
<stop
style="stop-color:#7363df;stop-opacity:1"
offset="0"
id="stop5869" />
<stop
id="stop5871"
offset="0.23168644"
style="stop-color:#6478fa;stop-opacity:1" />
<stop
style="stop-color:#719efa;stop-opacity:1"
offset="1"
id="stop5873" />
</linearGradient>
<linearGradient
y2="515.97058"
x2="282.26105"
y1="338.62445"
x1="213.95642"
gradientTransform="translate(-197.75174,-337.1451)"
gradientUnits="userSpaceOnUse"
id="linearGradient5855-8"
xlink:href="#linearGradient5867"
inkscape:collect="always" />
<linearGradient
y2="247.58188"
x2="-702.75317"
y1="102.74675"
x1="-775.20807"
gradientTransform="translate(983.36076,601.38885)"
gradientUnits="userSpaceOnUse"
id="linearGradient4544"
xlink:href="#linearGradient5960"
inkscape:collect="always" />
<clipPath
id="clipPath4501"
clipPathUnits="userSpaceOnUse">
<circle
r="241.06563"
cy="686.09473"
cx="335.13995"
id="circle4503"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#adadad;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
</clipPath>
<clipPath
id="clipPath5410"
clipPathUnits="userSpaceOnUse">
<circle
r="241.13741"
cy="340.98975"
cx="335.98114"
id="circle5412"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5053"
id="linearGradient5137"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(864.55062,-2197.497)"
x1="-584.19934"
y1="782.33563"
x2="-496.29703"
y2="937.71399" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5053"
id="linearGradient5147"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(864.55062,-2197.497)"
x1="-584.19934"
y1="782.33563"
x2="-496.29703"
y2="937.71399" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5562"
id="linearGradient5162"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(70.505061,-1761.3076)"
x1="200.59668"
y1="351.41116"
x2="290.08701"
y2="506.18814" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5562"
id="linearGradient5172"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(70.505061,-1761.3076)"
x1="200.59668"
y1="351.41116"
x2="290.08701"
y2="506.18814" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5562"
id="linearGradient5182"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(70.505061,-1761.3076)"
x1="200.59668"
y1="351.41116"
x2="290.08701"
y2="506.18814" />
<linearGradient
y2="506.18814"
x2="290.08701"
y1="351.41116"
x1="200.59668"
gradientTransform="translate(70.505061,-1761.3076)"
gradientUnits="userSpaceOnUse"
id="linearGradient5201"
xlink:href="#linearGradient5562"
inkscape:collect="always" />
<linearGradient
y2="937.71399"
x2="-496.29703"
y1="782.33563"
x1="-584.19934"
gradientTransform="translate(864.55062,-2197.497)"
gradientUnits="userSpaceOnUse"
id="linearGradient5205"
xlink:href="#linearGradient5053"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5562"
id="linearGradient4328"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(70.650339,-1055.1511)"
x1="200.59668"
y1="351.41116"
x2="290.08701"
y2="506.18814" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5053"
id="linearGradient4330"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(864.69589,-1491.3405)"
x1="-584.19934"
y1="782.33563"
x2="-496.29703"
y2="937.71399" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.70904368"
inkscape:cx="99.429699"
inkscape:cy="195.33352"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1050"
inkscape:window-x="1920"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:snap-global="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="gradient-logo"
style="display:inline;opacity:1"
transform="translate(-156.41121,933.30685)">
<g
id="g2"
transform="matrix(0.99994059,0,0,0.99994059,-0.06321798,33.188377)"
style="stroke-width:1.00006">
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="path3336-6"
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
style="opacity:1;fill:url(#linearGradient4328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<use
height="100%"
width="100%"
transform="rotate(60,407.11155,-715.78724)"
id="use3439-6"
inkscape:transform-center-y="151.59082"
inkscape:transform-center-x="124.43045"
xlink:href="#path3336-6"
y="0"
x="0"
style="stroke-width:1.00006" />
<use
height="100%"
width="100%"
transform="rotate(-60,407.31177,-715.70016)"
id="use3445-0"
inkscape:transform-center-y="75.573958"
inkscape:transform-center-x="-168.20651"
xlink:href="#path3336-6"
y="0"
x="0"
style="stroke-width:1.00006" />
<use
height="100%"
width="100%"
transform="rotate(180,407.41868,-715.7565)"
id="use3449-5"
inkscape:transform-center-y="-139.94592"
inkscape:transform-center-x="59.669705"
xlink:href="#path3336-6"
y="0"
x="0"
style="stroke-width:1.00006" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
id="path4260-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<use
height="100%"
width="100%"
transform="rotate(120,407.33916,-716.08356)"
id="use4354-5"
xlink:href="#path4260-0"
y="0"
x="0"
style="display:inline;stroke-width:1.00006" />
<use
height="100%"
width="100%"
transform="rotate(-120,407.28823,-715.86995)"
id="use4362-2"
xlink:href="#path4260-0"
y="0"
x="0"
style="display:inline;stroke-width:1.00006" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

+175
View File
@@ -0,0 +1,175 @@
@import "catppuccin.css";
* {
border: none;
font-family: "FiraCode Nerd Font";
font-size: 15px;
min-height: 10px;
}
window#waybar {
background: @crust;
}
window#waybar.hidden {
opacity: 0.2;
}
󠀰
/* - Genera rules for visible modules -- */
#media,
#clock,
#cpu,
#memory,
#disk,
#temperature,
#network,
#custom-wallpaper,
#media,
#custom-weather {
color: @crust;
margin-top: 6px;
margin-bottom: 6px;
padding-left: 10px;
padding-right: 10px;
transition: none;
}
/* Separation to the left */
#custom-nixicon,
#cpu {
margin-left: 5px;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
}
/* Separation to the rigth */
#clock,
#temperature {
margin-right: 20px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
/* -- Specific styles -- */
#custom-nixicon {
background-image: url("nix-snowflake.svg");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
min-height: 24px;
min-width: 24px;
padding: 0px;
padding-right: 15px;
padding-left: 10px;
margin-top: 6px;
margin-bottom: 6px;
margin-left: 15px;
}
/* Hardware Group */
#clock {
background: @yellow;
}
#cpu {
background: @blue;
}
#memory {
background: @red;
}
#disk {
background: @peach;
}
#temperature {
background: @sky;
}
#network {
background: @lavender;
padding-right: 13px;
}
/* Workspace */
#workspaces {
border-radius: 10px;
margin: 6px 5px;
padding: 0px 6px;
}
#workspaces button {
color: @text;
background: transparent;
padding: 4px 4px;
transition: color 0.3s ease, text-shadow 0.3s ease, transform 0.3s ease;
border: none;
}
#workspaces button.occupied {
color: @red;
}
#workspaces button.active {
color: @green;
text-shadow: 0 0 4px @green;
}
#workspaces button:hover {
color: @teal;
border: none;
}
#workspaces button.active:hover {}
/* Media Group */
#media {
background: @overlay2;
border-radius: 10px;
color: @crust;
margin-left: 20px;
}
#custom-cava {
color: @sky;
}
#wireplumber, #custom-cava, #mpris {
margin-left: 10px;
margin-right: 5px;
}
#wireplumber {
margin-right: 5px;
}
/* Weather */
#custom-weather {
background: @sky;
color: @crust;
border-radius: 10px;
margin-right: 20px;
}
/* SwayNC */
#custom-notification {
font-family: "NotoSansMono Nerd Font";
background: @green;
border-radius: 10px;
padding-left: 10px;
padding-right: 5px;
}
/* Wallpaper */
#custom-wallpaper {
background: @red;
color: @mantle;
border-radius: 10px;
margin-left: 5px;
}
+1
View File
@@ -0,0 +1 @@
*{border:none;min-height:10px;font-family:FiraCode Nerd Font;font-size:15px}window#waybar{background:@crust}window#waybar.hidden{opacity:.2}󠀰 #media,#clock,#cpu,#memory,#disk,#temperature,#network,#custom-wallpaper,#media,#custom-weather{color:@crust;margin-top:6px;margin-bottom:6px;padding-left:10px;padding-right:10px;transition:none}#custom-nixicon,#cpu{border-top-left-radius:10px;border-bottom-left-radius:10px;margin-left:5px}#clock,#temperature{border-top-right-radius:10px;border-bottom-right-radius:10px;margin-right:20px}#custom-nixicon{background-image:url(nix-snowflake.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;min-width:24px;min-height:24px;margin-top:6px;margin-bottom:6px;margin-left:15px;padding:0 15px 0 10px}#clock{background:@yellow}#cpu{background:@blue}#memory{background:@red}#disk{background:@peach}#temperature{background:@sky}#network{background:@lavender;padding-right:13px}#workspaces{border-radius:10px;margin:6px 5px;padding:0 6px}#workspaces button{color:@text;background:0 0;border:none;padding:4px;transition:color .3s,text-shadow .3s,transform .3s}#workspaces button.occupied{color:@red}#workspaces button.active{color:@green;text-shadow:0 0 4px @green}#workspaces button:hover{color:@teal;border:none}#media{background:@overlay2;color:@crust;border-radius:10px;margin-left:20px}#custom-cava{color:@green}#wireplumber,#custom-cava,#mpris{margin-left:10px;margin-right:5px}#wireplumber{margin-right:5px}#custom-weather{background:@sky;color:@crust;border-radius:10px;margin-right:20px}#custom-notification{background:@green;border-radius:10px;padding-left:10px;padding-right:5px;font-family:NotoSansMono Nerd Font}#custom-wallpaper{background:@red;color:@mantle;border-radius:10px;margin-left:5px}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
compositor ? "hyprland",
...
}:
{
programs.waybar = {
enable = true;
package = pkgs.waybar;
}
// (import ./dual.nix { inherit compositor; });
home = {
packages = with pkgs; [ cava ];
file.".config/waybar" = {
source = ./configs;
recursive = true;
};
};
}
+52
View File
@@ -0,0 +1,52 @@
{
compositor ? "hyprland",
}:
let
common = import ./common.nix;
wm = if compositor == "hyprland" then import ./hyprland-wm.nix else import ./niri-wm.nix;
in
{
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 30;
output = [ "DP-1" ];
modules-left = [
"custom/nixicon"
"clock"
];
modules-center = [
"hyprland/workspaces"
"niri/workspaces"
"custom/mako"
"custom/swaync"
];
modules-right = [
"group/hardware"
];
}
// common.widgets
// wm.widgets;
secondBar = {
layer = "top";
position = "top";
height = 30;
output = [ "HDMI-A-2" ];
modules-left = [
"group/media"
"custom/wallpaper"
];
modules-center = [
"hyprland/workspaces"
"niri/workspaces"
];
modules-right = [ "custom/weather" ];
}
// common.widgets
// wm.widgets;
};
}
+23
View File
@@ -0,0 +1,23 @@
{
widgets = {
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
default = "";
active = "";
};
};
"custom/mako" = {
tooltip = false;
format = "{icon}";
format-icons = {
enabled = " ";
disabled = " ";
};
return-type = "json";
exec = "makoctl mode | grep -q do-not-disturb && echo '{\"text\":\"\",\"class\":\"disabled\"}' || echo '{\"text\":\"\",\"class\":\"enabled\"}'";
on-click = "makoctl mode -t do-not-disturb";
interval = 1;
};
};
}
+31
View File
@@ -0,0 +1,31 @@
{
widgets = {
"niri/workspaces" = {
format = "{icon}";
format-icons = {
default = "";
active = "";
};
};
"custom/swaync" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = " ";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = " ";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = " ";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = " ";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
};
}
+25
View File
@@ -0,0 +1,25 @@
[Settings]
# Which backend to use
backend = swww
# Wallpaper directory to browse
wallpaper_dirs = ~/Pictures/Wallpapers/
# Transition settings for swww
swww_transition = wave
swww_fps = 30
swww_duration = 0.7
# Restore wallpaper on startup
restore_last = true
# Fit options: fill | contain | cover | center | tile
mode = fill
# Enable preview thumbnails
show_thumbnails = true
# Random wallpaper button
random = true
+171
View File
@@ -0,0 +1,171 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"type": "kitty-icat",
"source": "~/Pictures/Avatar/avatar_no_bg.png",
// "height": 15,
"width": 36,
"padding": {
"top": 0,
"left": 0
}
},
"modules": [
"break",
{
"type": "custom",
"format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
},
{
"type": "host",
"key": " PC",
"keyColor": "green"
},
{
"type": "cpu",
"key": "│ ├",
"keyColor": "green"
},
{
"type": "gpu",
"key": "│ ├󰍛",
"keyColor": "green"
},
{
"type": "disk",
"key": "│ ├",
"keyColor": "green"
},
{
"type": "memory",
"key": "└ └󰍛",
"keyColor": "green"
},
{
"type": "custom",
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
},
"break",
{
"type": "custom",
"format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
},
{
"type": "os",
"key": " OS",
"keyColor": "yellow"
},
{
"type": "kernel",
"key": "│ ├",
"keyColor": "yellow"
},
{
"type": "bios",
"key": "│ ├",
"keyColor": "yellow"
},
{
"type": "packages",
"key": "│ ├󰏖",
"keyColor": "yellow"
},
{
"type": "shell",
"key": "└ └",
"keyColor": "yellow"
},
"break",
{
"type": "de",
"key": " DE",
"keyColor": "blue"
},
{
"type": "lm",
"key": "│ ├",
"keyColor": "blue"
},
{
"type": "wm",
"key": "│ ├",
"keyColor": "blue"
},
{
"type": "wmtheme",
"key": "│ ├󰉼",
"keyColor": "blue"
},
{
"type": "terminal",
"key": "└ └",
"keyColor": "blue"
},
{
"type": "custom",
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
},
"break",
{
"type": "custom",
"format": "\u001b[90m┌─────────────────Uptime / Age / DT──────────────────┐"
},
{
"type": "command",
"key": " OS Age ",
"keyColor": "magenta",
"text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
},
{
"type": "uptime",
"key": " Uptime ",
"keyColor": "magenta"
},
{
"type": "datetime",
"key": " DateTime ",
"keyColor": "magenta"
},
{
"type": "custom",
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
},
"break",
{
"type": "custom",
"format": "\u001b[90m┌─────────────────────Networking─────────────────────┐"
},
{
"type": "publicip",
"key": " Public ",
"keyColor": "magenta"
},
{
"type": "localip",
"key": " Local ",
"keyColor": "magenta"
},
{
"type": "dns",
"key": " DNS ",
"keyColor": "magenta"
},
{
"type": "netio",
"key": " Net I/O ",
"keyColor": "magenta"
},
{
"type": "custom",
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
},
{
"type": "colors",
"paddingLeft": 2,
"symbol": "circle"
},
"break",
]
}
+5
View File
@@ -0,0 +1,5 @@
_: {
programs.floorp = {
enable = true;
};
}
+22
View File
@@ -0,0 +1,22 @@
{ primaryUser, pkgs, ... }: {
home.packages = with pkgs; [ gh gnupg ];
programs = {
git = {
enable = true;
settings = {
github = { user = primaryUser; };
init = { defaultBranch = "main"; };
user = {
name = "DerGrumpf"; # TODO replace
email = "phil.keier@hotmail.com"; # TODO replace
};
};
lfs.enable = true;
ignores = [ "**/.DS_STORE" "result" ];
};
lazygit = { enable = true; };
};
}
+147
View File
@@ -0,0 +1,147 @@
{ pkgs, ... }: {
# Alpha: Start screen/dashboard for Neovim
# Shows a custom ASCII art header and quick action buttons on startup.
programs.nixvim.plugins.alpha = {
enable = true;
settings.layout = [
{
type = "padding";
val = 2;
}
{
type = "text";
val = [
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
];
opts = {
position = "center";
hl = "Type";
};
}
{
type = "padding";
val = 2;
}
{
type = "group";
val = [
{
type = "button";
val = "[+] New file";
on_press.__raw =
"function() vim.cmd[[ene]] vim.cmd[[startinsert]] end";
opts = {
keymap = [ "n" "e" ":ene <BAR> startinsert <CR>" { } ];
shortcut = "e";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "button";
val = "[?] Find file";
on_press.__raw = "function() vim.cmd[[Telescope find_files]] end";
opts = {
keymap = [ "n" "f" ":Telescope find_files <CR>" { } ];
shortcut = "f";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "button";
val = "[~] Recent files";
on_press.__raw = "function() vim.cmd[[Telescope oldfiles]] end";
opts = {
keymap = [ "n" "r" ":Telescope oldfiles <CR>" { } ];
shortcut = "r";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "button";
val = "[Y] Yazi";
on_press.__raw = "function() require('yazi').yazi() end";
opts = {
keymap = [ "n" "y" ":Yazi<CR>" { } ];
shortcut = "y";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "button";
val = "[A] Open Prompt";
#on_press.__raw = "function() require('yazi').yazi() end";
opts = {
keymap = [ "n" "a" ":AvanteChatNew<CR>" { } ];
shortcut = "a";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "button";
val = "[X] Quit";
on_press.__raw = "function() vim.cmd[[qa]] end";
opts = {
keymap = [ "n" "q" ":qa<CR>" { } ];
shortcut = "q";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
];
}
{
type = "padding";
val = 2;
}
{
type = "text";
val = "Circuits hum in anticipation of your will.";
opts = {
position = "center";
hl = "Comment";
};
}
];
};
}
+106
View File
@@ -0,0 +1,106 @@
{ pkgs, ... }: {
# Avante: AI-powered coding assistant (Cursor-like experience in Neovim)
programs.nixvim = {
plugins = {
markdown-preview.enable = true;
render-markdown.enable = true;
#extraConfigLuaPre = ''
# vim.env.GROQ_API_KEY = os.getenv("GROQ_API_KEY")
#'';
# TODO: Integrate CoPilot https://github.com/settings/copilot/features
avante = {
enable = true;
autoLoad = true;
settings = {
provider = "groq";
providers.groq = {
__inherited_from = "openai";
api_key_name = "GROQ_API_KEY";
endpoint = "https://api.groq.com/openai/v1/";
model = "groq/compound-mini";
disable_tools = true;
extra_request_body = {
temperature = 1;
max_tokens = 8192;
tools = null;
tool_choice = "none";
};
};
# auto_suggestions_provider = "copilot";
render = { markdown = true; };
behaviour = {
auto_suggestions = false;
auto_set_highlight_group = true;
auto_set_keymaps = true;
auto_apply_diff_after_generation = false;
support_paste_from_clipboard = false;
};
mappings = {
ask = "<leader>aa";
edit = "<leader>ae";
refresh = "<leader>ar";
diff = {
ours = "co";
theirs = "ct";
all_theirs = "ca";
both = "cb";
cursor = "cc";
next = "]x";
prev = "[x";
};
suggestion = {
accept = "<M-l>";
next = "<M-]>";
prev = "<M-[>";
dismiss = "<C-]>";
};
jump = {
next = "]]";
prev = "[[";
};
submit = {
normal = "<CR>";
insert = "<C-s>";
};
sidebar = {
switch_windows = "<Tab>";
reverse_switch_windows = "<S-Tab>";
};
};
hints = { enabled = true; };
windows = {
position = "right";
wrap = true;
width = 30;
sidebar_header = {
align = "center";
rounded = true;
};
};
highlights = {
diff = {
current = "DiffText";
incoming = "DiffAdd";
};
};
diff = {
autojump = true;
list_opener = "copen";
};
};
};
extraPackages = with pkgs; [ curl ];
};
};
}
+34
View File
@@ -0,0 +1,34 @@
{ pkgs, ... }:
{
# Catppuccin: Soothing pastel theme for Neovim
# Provides consistent theming across plugins with transparency support.
programs.nixvim = {
colorschemes.catppuccin = {
enable = true;
settings = {
flavour = "mocha";
transparent_background = true;
term_colors = true;
integrations = {
treesitter = true;
cmp = true;
gitsigns = true;
telescope = {
enabled = true;
};
notify = true;
mini = {
enabled = true;
};
};
};
};
# Custom highlight overrides
extraConfigLua = ''
local colors = require("catppuccin.palettes").get_palette("mocha")
vim.api.nvim_set_hl(0, "LineNr", { fg = colors.text, bg = "NONE" })
vim.api.nvim_set_hl(0, "CursorLineNr", { fg = colors.pink, bg = "NONE", bold = true })
'';
};
}
+34
View File
@@ -0,0 +1,34 @@
{ pkgs, ... }:
{
# Conform: Code formatter that runs external formatting tools
# Automatically formats code on save for consistent style.
programs.nixvim = {
plugins.conform-nvim = {
enable = true;
settings = {
formatters_by_ft = {
lua = [ "stylua" ];
nix = [ "nixfmt" ];
python = [ "black" ];
rust = [ "rustfmt" ];
rasi = [ "prettierd" ];
};
format_on_save = {
timeout_ms = 2000;
lsp_fallback = true;
};
};
};
# Install formatters
extraPackages = with pkgs; [
stylua
nixfmt
black
rustfmt
prettierd
];
};
}
+102
View File
@@ -0,0 +1,102 @@
{ pkgs, inputs, ... }:
{
imports = [
inputs.nixvim.homeModules.nixvim
./treesitter.nix
./lint.nix
./lsp.nix
./conform.nix
./lualine.nix
./yazi.nix
./toggleterm.nix
./telescope.nix
./catppuccin.nix
./alpha.nix
./avante.nix
./openscad.nix
./molten.nix
./live-server.nix
./which-key.nix
];
home.packages = with pkgs; [
nil
biome
];
programs.nixvim = {
enable = true;
defaultEditor = true;
# Leader key
globals.mapleader = " ";
plugins.web-devicons.enable = true;
opts = {
number = true; # Show line numbers
cursorline = true; # Highlight current line
showmode = true; # already in statusline
hlsearch = true; # Highlight search result
incsearch = true; # Incremental Search
tabstop = 4;
termguicolors = true; # Enable 24-bit colormode
};
# Clipboard keymaps - yank to system clipboard
keymaps = [
# Yank operations
{
mode = "n";
key = "y";
action = ''"+y'';
options.desc = "Yank to clipboard";
}
{
mode = "v";
key = "y";
action = ''"+y'';
options.desc = "Yank to clipboard";
}
{
mode = "n";
key = "Y";
action = ''"+Y'';
options.desc = "Yank line to clipboard";
}
# Delete operations
{
mode = "n";
key = "d";
action = ''"+d'';
options.desc = "Delete to clipboard";
}
{
mode = "v";
key = "d";
action = ''"+d'';
options.desc = "Delete to clipboard";
}
{
mode = "n";
key = "D";
action = ''"+D'';
options.desc = "Delete line to clipboard";
}
# Paste operations
{
mode = "n";
key = "p";
action = ''"+p'';
options.desc = "Paste from clipboard";
}
{
mode = "v";
key = "p";
action = ''"+p'';
options.desc = "Paste from clipboard";
}
];
};
}
+42
View File
@@ -0,0 +1,42 @@
{ pkgs, ... }:
{
# nvim-lint: Asynchronous linter that runs external linting tools
# to find errors and style issues without blocking the editor.
# Runs automatically after saving files.
programs.nixvim = {
plugins.lint = {
enable = true;
# Configure linters for each filetype
lintersByFt = {
lua = [ "luacheck" ];
nix = [ "statix" ]; # Nix static analyzer
python = [ "ruff" ];
javascript = [ "eslint" ];
rust = [ "clippy" ];
# rasi has no common linter
};
# Trigger linting after saving a file
autoCmd = {
event = [ "BufWritePost" ];
callback = {
__raw = ''
function()
require('lint').try_lint()
end
'';
};
};
};
# Install linter binaries
extraPackages = with pkgs; [
lua54Packages.luacheck
statix
ruff
nodePackages.eslint
clippy
];
};
}
+15
View File
@@ -0,0 +1,15 @@
{ pkgs, ... }: {
# Live Server: Auto-reload browser for web development
# Uses browser-sync for live reload functionality
programs.nixvim = {
keymaps = [{
mode = "n";
key = "<leader>ls";
action =
"<cmd>terminal browser-sync start --server --files '*.html, *.css, *.js' --no-notify<cr>";
options.desc = "Start live server (browser-sync)";
}];
extraPackages = with pkgs; [ nodePackages.browser-sync ];
};
}
+91
View File
@@ -0,0 +1,91 @@
{ pkgs, ... }:
{
# LSP configuration: Language Server Protocol provides IDE features
# like autocomplete, go-to-definition, diagnostics, and more.
programs.nixvim = {
plugins = {
# LSP configuration
lsp = {
enable = true;
# Language servers for each language
servers = {
lua_ls = {
enable = true;
settings = {
Lua = {
runtime.version = "LuaJIT";
diagnostics.globals = [ "vim" ];
workspace.library = [ ]; # Populated by nixvim
telemetry.enable = false;
};
};
};
nil_ls.enable = true; # Nix language server
rust_analyzer = {
enable = true; # Rust language server
installCargo = true;
installRustc = true;
};
pylsp.enable = true; # Python language server
};
# Keymaps for LSP actions
keymaps = {
diagnostic = {
"<leader>e" = "open_float";
"[d" = "goto_prev";
"]d" = "goto_next";
};
lspBuf = {
"gd" = "definition";
"K" = "hover";
"<leader>rn" = "rename";
"<leader>ca" = "code_action";
};
};
};
# Autocompletion
cmp = {
enable = true;
autoEnableSources = true;
settings = {
snippet.expand = ''
function(args)
require('luasnip').lsp_expand(args.body)
end
'';
mapping = {
"<C-b>" = "cmp.mapping.scroll_docs(-4)";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<C-Space>" = "cmp.mapping.complete()";
"<C-e>" = "cmp.mapping.abort()";
"<CR>" = "cmp.mapping.confirm({ select = true })";
};
sources = [
{ name = "nvim_lsp"; }
{ name = "luasnip"; }
{ name = "buffer"; }
{ name = "path"; }
];
};
};
# Snippet engine (required for completion)
luasnip.enable = true;
};
# Install LSP servers
extraPackages = with pkgs; [
lua-language-server
nil
rust-analyzer
python314Packages.python-lsp-server
];
};
}
+22
View File
@@ -0,0 +1,22 @@
{ pkgs, ... }:
{
# Lualine: Fast and customizable statusline for Neovim
# Displays file info, git status, diagnostics, and mode at the bottom of the editor.
programs.nixvim.plugins.lualine = {
enable = true;
settings = {
options = {
theme = "catppuccin";
component_separators = {
left = "|";
right = "|";
};
section_separators = {
left = "";
right = "";
};
};
};
};
}
+43
View File
@@ -0,0 +1,43 @@
{ pkgs, ... }: {
programs.nixvim = {
plugins.molten = {
enable = true;
python3Dependencies = p:
with p; [
pynvim
jupyter-client
cairosvg
ipython
nbformat
ipykernel
pnglatex
plotly
kaleido
pyperclip
];
settings = {
kernel_name = "python3";
auto_open_output = true;
output_win_max_width = 80;
output_win_max_height = 20;
};
};
keymaps = [
{
mode = "n";
key = "<leader>ml";
action = "<cmd>MoltenEvaluateLine<CR>";
options.desc = "Molten: Evaluate line";
options.silent = true;
}
{
mode = "v";
key = "<leader>mv";
action = "<Cmd>MoltenEvaluateVisual<CR>";
options.desc = "Molten: Evaluate selection";
options.silent = true;
}
];
};
}
+28
View File
@@ -0,0 +1,28 @@
{ pkgs, ... }: {
# OpenSCAD: 3D modeling language support with syntax highlighting,
# cheatsheet, snippets, offline manual and fuzzy help
programs.nixvim = {
plugins.openscad = {
enable = true;
autoLoad = true;
settings = {
fuzzy_finder = "fzf";
auto_open = true;
cheatsheet_toggle_key = "<leader>os";
default_mappings = true;
exec_openscad_trig_key = "<leader>oo";
help_manual_trig_key = "<leader>om";
help_trig_key = "<leader>oh";
top_toggle = "<leader>oc";
};
};
# Install OpenSCAD binary for preview/compilation
extraPackages = with pkgs; [
openscad
zathura # PDF viewer for manual
fzf
];
};
}
+27
View File
@@ -0,0 +1,27 @@
{ pkgs, ... }:
{
# Telescope: Fuzzy finder for files, buffers, grep, and more
# Provides fast search and navigation throughout your project.
programs.nixvim.plugins.telescope = {
enable = true;
keymaps = {
"<leader>ff" = {
action = "find_files";
options.desc = "Telescope find files";
};
"<leader>fg" = {
action = "live_grep";
options.desc = "Telescope live grep";
};
"<leader>fb" = {
action = "buffers";
options.desc = "Telescope buffers";
};
"<leader>fh" = {
action = "help_tags";
options.desc = "Telescope help tags";
};
};
};
}
+64
View File
@@ -0,0 +1,64 @@
{ pkgs, ... }:
{
# ToggleTerm: Terminal emulator inside Neovim
# Provides floating, horizontal, and vertical terminal windows.
programs.nixvim.plugins.toggleterm = {
enable = true;
settings = {
size = 20;
open_mapping = "[[<c-\\>]]";
direction = "float";
float_opts = {
border = "single";
width = 200;
height = 40;
};
};
};
programs.nixvim.keymaps = [
{
mode = "n";
key = "<leader>h";
action.__raw = ''
function()
require("toggleterm").toggle(1, 10, vim.loop.cwd(), "horizontal")
end
'';
options.desc = "Toggle terminal (horizontal)";
}
{
mode = "n";
key = "<leader>v";
action.__raw = ''
function()
require("toggleterm").toggle(2, 60, vim.loop.cwd(), "vertical")
end
'';
options.desc = "Toggle terminal (vertical)";
}
{
mode = "n";
key = "<leader>ft";
action.__raw = ''
function()
require("toggleterm").toggle(3, 20, vim.loop.cwd(), "float")
end
'';
options.desc = "Toggle terminal (float)";
}
{
mode = "t";
key = "<C-t>";
action = "<Cmd>ToggleTerm<CR>";
options.desc = "Toggle terminal";
}
{
mode = "t";
key = "<C-v>";
action = "<C-\\><C-n>v";
options.desc = "Exit terminal and enter visual mode";
}
];
}
+24
View File
@@ -0,0 +1,24 @@
{ pkgs, ... }:
{
# Install language parsers declaratively
# Syntax Highlighting
programs.nixvim.plugins.treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
lua
nix
python
javascript
rust
rasi
];
settings = {
highlight = {
enable = true;
additional_vim_regex_highlighting = false;
};
};
};
}
+94
View File
@@ -0,0 +1,94 @@
{ pkgs, ... }: {
# Which-key: Display available keybindings in popup
# Shows all possible key combinations after pressing leader or other prefix keys
programs.nixvim.plugins.which-key = {
enable = true;
settings = {
delay = 500; # Time in ms before popup shows
icons = {
breadcrumb = "»";
separator = "";
group = "+";
};
# Organize keymaps into named groups
spec = [
# Leader key groups
{
__unkeyed-1 = "<leader>a";
group = "Avante AI";
icon = "🤖";
}
{
__unkeyed-1 = "<leader>f";
group = "Find/Files/Terminal";
icon = "🔍";
}
{
__unkeyed-1 = "<leader>m";
group = "Molten (Jupyter)";
icon = "📓";
}
{
__unkeyed-1 = "<leader>o";
group = "OpenSCAD";
icon = "🔧";
}
# Bracket navigation groups
{
__unkeyed-1 = "[";
group = "Previous";
icon = "";
}
{
__unkeyed-1 = "]";
group = "Next";
icon = "";
}
# g prefix groups
{
__unkeyed-1 = "g";
group = "Go/LSP";
icon = "🎯";
}
{
__unkeyed-1 = "gr";
group = "LSP References/Rename";
icon = "🔗";
}
{
__unkeyed-1 = "gc";
group = "Comments";
icon = "💬";
}
# l prefix
{
__unkeyed-1 = "<leader>l";
group = "Live Server";
icon = "🌐";
}
# z prefix
{
__unkeyed-1 = "z";
group = "Folds/Spell";
icon = "📋";
}
];
# Hide specific mappings to reduce clutter
disable = {
builtin_keys = {
# Hide these default vim keys from which-key
i = [ "<C-R>" "<C-W>" ];
n = [ "<C-W>" ];
};
};
};
};
}
+41
View File
@@ -0,0 +1,41 @@
{ pkgs, ... }: {
# Yazi: Terminal file manager integration for Neovim
# Provides a fast, visual way to browse and manage files.
programs.nixvim = {
# Use extraPlugins to manually load yazi.nvim
extraPlugins = with pkgs.vimPlugins; [ yazi-nvim ];
# Configure yazi after it's loaded
extraConfigLua = ''
require('yazi').setup({
open_for_directories = true,
})
'';
keymaps = [
{
mode = "n";
key = "<leader>fy";
action.__raw = ''
function()
require('yazi').yazi(nil, vim.loop.cwd())
end
'';
options.desc = "Open Yazi file manager";
}
{
mode = "n";
key = "<leader>fd";
action.__raw = ''
function()
require('yazi').yazi(nil, vim.fn.expand("%:p:h"))
end
'';
options.desc = "Open Yazi in current file directory";
}
];
# Install yazi terminal program
extraPackages = with pkgs; [ yazi ];
};
}
+37
View File
@@ -0,0 +1,37 @@
{ lib, inputs, ... }:
{
imports = [
inputs.nixcord.homeModules.nixcord
];
programs.nixcord = {
enable = true;
discord = lib.mkForce { enable = false; };
vesktop.enable = true;
config = {
useQuickCss = true;
themeLinks = [
"https://raw.githubusercontent.com/catppuccin/discord/refs/heads/main/themes/mocha.theme.css"
];
frameless = true;
plugins = {
betterFolders.enable = true;
betterRoleContext.enable = true;
mentionAvatars.enable = true;
# copyUserURLs.enable = true;
fakeNitro.enable = true;
decor.enable = true;
accountPanelServerProfile.enable = true;
copyFileContents.enable = true;
fakeProfileThemes.enable = true;
friendsSince.enable = true;
implicitRelationships.enable = true;
# noTrack.enable = true;
permissionsViewer.enable = true;
serverInfo.enable = true;
translate.enable = true;
};
};
};
}
+4
View File
@@ -0,0 +1,4 @@
_: {
# TODO: Add Automatic Vault pull and detection
programs.obsidian.enable = true;
}
+4
View File
@@ -0,0 +1,4 @@
{ pkgs, ... }: {
programs.onlyoffice =
pkgs.lib.mkIf (!pkgs.stdenv.isDarwin) { enable = true; };
}
+65
View File
@@ -0,0 +1,65 @@
{ pkgs, lib, ... }: {
home = {
packages = with pkgs;
[
# dev tools
curl
wget
btop
tree
ripgrep
jq
yq-go
# GUI
openscad
blender
fstl
# PDF Tools
pandoc
# misc
yt-dlp
ffmpeg
# Archives
zip
unzip
xz
zstd
gnutar
unrar
# Nix tools
nix-index
] ++ lib.optionals (!pkgs.stdenv.isDarwin) [
# dev tools
pciutils
usbutils
nvme-cli
nmap
iperf3
lm_sensors
file
which
libnotify
# encryption
age
ssh-to-age
# GUI
element-desktop
zapzap
nautilus
swayimg
kdePackages.okular
gnumeric
sqlitebrowser
thunderbird
xonotic
irssi
] ++ lib.optionals pkgs.stdenv.isDarwin [ graphite-cli ];
};
}
+20
View File
@@ -0,0 +1,20 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
# Python 3.14 (newest stable)
python314
python314Packages.pip
python314Packages.virtualenv
# Additional useful tools
python314Packages.pipx # Install Python apps in isolated environments
uv # Fast Python package installer (alternative to pip)
];
# Set up default Python version
home.sessionVariables = { PYTHON = "${pkgs.python313}/bin/python3"; };
programs.fish.shellAliases = {
venv = "python3 -m venv";
activate = "source venv/bin/activate.fish";
};
}
+233
View File
@@ -0,0 +1,233 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
eza # ls replacement
tdf # terminal pdf viewer
jq # json parser
fastfetch # system stats
tabiew # Table viewer
glow # MD Viewer
fd # find alternative
bat # cat alternative
ripgrep # grep alternative
# LLM in the Terminal
(pkgs.llm.withPlugins { llm-groq = true; })
# Fun stuff
zoxide
lolcat
cmatrix
];
programs.kitty = {
enable = true;
font = {
name = "Fira Code Nerd Font";
size = 10;
};
settings = {
confirm_os_window_close = 0;
dynamic_background_opacity = true; # ctrl+shift+a>m/l
enable_audio_bell = false;
mouse_hide_wait = 3.0;
window_padding_width = 10;
background_opacity = 0.8;
background_blur = 5;
tab_bar_min_tabs = 1;
tab_bar_edge = "bottom";
tab_bar_style = "custom"; # Should be changed to custom
tab_title_template =
"{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}";
symbol_map = let
mappings = [
"U+23FB-U+23FE"
"U+2B58"
"U+E200-U+E2A9"
"U+E0A0-U+E0A3"
"U+E0B0-U+E0BF"
"U+E0C0-U+E0C8"
"U+E0CC-U+E0CF"
"U+E0D0-U+E0D2"
"U+E0D4"
"U+E700-U+E7C5"
"U+F000-U+F2E0"
"U+2665"
"U+26A1"
"U+F400-U+F4A8"
"U+F67C"
"U+E000-U+E00A"
"U+F300-U+F313"
"U+E5FA-U+E62B"
];
in (builtins.concatStringsSep "," mappings) + " Symbols Nerd Font Mono";
};
};
programs.newsboat = {
enable = true;
autoReload = true;
browser = if pkgs.stdenv.isDarwin then "open" else "xdg-open";
urls = [
{
url = "https://www.tagesschau.de/xml/rss2";
tags = [ "news" "de" ];
}
{
url = "https://www.spiegel.de/schlagzeilen/index.rss";
tags = [ "news" "de" ];
}
{
url = "https://www.focus.de/rss";
tags = [ "news" "de" ];
}
{
url = "https://feeds.feedburner.com/blogspot/rkEL";
tags = [ "blog" ];
}
];
};
programs.cava = { enable = true; };
programs.yazi = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableFishIntegration = true;
settings = { ration = [ 1 3 4 ]; };
};
programs.fzf = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableFishIntegration = true;
defaultCommand = "fd --type f --strip-cwd-prefix --hidden --exclude .git";
fileWidgetCommand =
"fd --type f --strip-cwd-prefix --hidden --exclude .git";
defaultOptions = [
"--height 100%"
"--border sharp"
"--layout=reverse"
"--inline-info"
"--preview 'bat --color=always --style=numbers {}'"
];
};
# TODO: Install OpenCode
# TODO: Install NuShell
programs.fish = {
enable = true;
shellAliases = {
ls = "eza --icons=always";
la = "eza -la --icons=always";
f = "nvim $(fzf)";
tree = "eza --icons=always -T";
i = "kitty +kitten icat";
cat = "bat --color=always --style=numbers";
grep = "ripgrep";
nix-switch = if pkgs.stdenv.isDarwin then
"darwin-rebuild switch --flake ~/.config/nix#(hostname -s)"
else
"sudo nixos-rebuild switch --flake ~/.config/nix#(hostname -s)";
};
interactiveShellInit = ''
starship init fish | source
fzf --fish | source
function fish_greeting
fastfetch
end
'';
functions.l = {
body = ''
llm prompt -m groq/llama-3.3-70b-versatile -t std $argv | glow
'';
};
};
programs.starship = {
enable = true;
settings = {
add_newline = true;
command_timeout = 500;
format = ''
$username$hostname $directory $git_branch$git_status
$character '';
right_format = "$cmd_duration";
username = {
style_user = "bold #cba6f7";
style_root = "bold #f38ba8";
format = "[](bold #a6e3a1)[$user]($style)";
show_always = true;
};
hostname = {
style = "bold #74c7ec";
format = "[@](bold #fab387)[$hostname]($style)";
ssh_only = false;
};
directory = {
style = "bold #a6e3a1";
truncation_length = 0;
truncation_symbol = "";
format = "[ ](bold #f38ba8)[$path ]($style)";
};
git_branch = {
format = "[$branch]($style)";
style = "bold #f9e2af";
};
# Git status module settings
git_status = {
format =
"[[(*$conflicted$untracked$modified$staged$renamed$deleted)](red) ($ahead_behind$stashed)]($style)";
style = "bold #a6e3a1";
conflicted = "";
untracked = "";
modified = "";
staged = "";
renamed = "";
deleted = "";
};
# Command duration module
cmd_duration = {
format = "[$duration]($style)";
style = "bold #cdd6f4";
min_time = 5000; # Only show if command takes longer than 5 seconds
};
# Character module (prompt symbol)
character = {
success_symbol = "[ ](bold #a6e3a1)";
error_symbol = "[ ](bold #f38ba8)";
};
nix_shell = {
format = "[$symbol$state( ($name))]($style)";
symbol = "U+02744";
style = "bold #89dceb";
};
};
};
home.file = {
".config/fastfetch/config.jsonc".source = ./fastfetch.jsonc;
".config/tabiew/theme.toml".source = ./tabiew.toml;
".config/kitty/tab_bar.py".source = ./tab_bar.py;
".hushlogin".text = ""; # Suppress login
};
}
+39
View File
@@ -0,0 +1,39 @@
{ pkgs, inputs, ... }:
{
imports = [
inputs.spicetify-nix.homeManagerModules.default
];
programs.spicetify =
let
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
in
{
enable = true;
spotifyPackage = pkgs.spotify;
theme = spicePkgs.themes.catppuccin;
colorScheme = "mocha";
enabledExtensions = with spicePkgs.extensions; [
bookmark
fullAppDisplay
keyboardShortcut
popupLyrics
shuffle
autoVolume
betterGenres
adblock
wikify
songStats
];
enabledCustomApps = with spicePkgs.apps; [
lyricsPlus
newReleases
marketplace
];
#enabledSnippets = with spicePkgs.snippets; [ ];
};
}
+34
View File
@@ -0,0 +1,34 @@
from datetime import datetime
from kitty.tab_bar import DrawData, ExtraData, TabBarData, as_rgb
from kitty.fast_data_types import Screen
def draw_tab(
draw_data: DrawData,
screen: Screen,
tab: TabBarData,
before: int,
max_title_length: int,
index: int,
is_last: bool,
extra_data: ExtraData,
) -> int:
# Left side: Current directory or command
screen.cursor.fg = as_rgb(int("a6e3a1", 16))
screen.cursor.bg = as_rgb(int("1e1e2e", 16))
# Get the foreground process (command) or use title
title = tab.active_fg or tab.title or "shell"
screen.draw(f" {title} ")
# Middle: Nix icon
screen.cursor.fg = as_rgb(int("89dceb", 16))
screen.draw("")
# Right: Current time
screen.cursor.fg = as_rgb(int("cdd6f4", 16))
current_time = datetime.now().strftime("%H:%M")
screen.draw(f"{current_time} ")
return screen.cursor.x
+141
View File
@@ -0,0 +1,141 @@
# Catppuccin Mocha Theme for Tabiew
# Base colors from Catppuccin Mocha palette
[table_header]
fg = "#F5E0DC" # Rosewater
bg = "#181825" # Mantle
add_modifier = "BOLD"
sub_modifier = ""
[[table_headers]]
fg = "#F5C2E7" # Pink
bg = "#181825" # Mantle
add_modifier = "BOLD"
sub_modifier = ""
[[table_headers]]
fg = "#CBA6F7" # Mauve
bg = "#181825" # Mantle
add_modifier = "BOLD"
sub_modifier = ""
[[table_headers]]
fg = "#89DCEB" # Sky
bg = "#181825" # Mantle
add_modifier = "BOLD"
sub_modifier = ""
[[rows]]
fg = "#CDD6F4" # Text
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[rows]]
fg = "#CDD6F4" # Text
bg = "#181825" # Mantle
add_modifier = ""
sub_modifier = ""
[highlight]
fg = "#181825" # Mantle
bg = "#F9E2AF" # Yellow
add_modifier = "BOLD"
sub_modifier = ""
[[table_tags]]
fg = "#181825" # Mantle
bg = "#F38BA8" # Red
add_modifier = "BOLD"
sub_modifier = ""
[[table_tags]]
fg = "#181825" # Mantle
bg = "#A6E3A1" # Green
add_modifier = "BOLD"
sub_modifier = ""
[block]
fg = "#FAB387" # Peach
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[block_tag]
fg = "#181825" # Mantle
bg = "#FAB387" # Peach
add_modifier = "BOLD"
sub_modifier = ""
[text]
fg = "#CDD6F4" # Text
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[subtext]
fg = "#9399B2" # Overlay1
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[error]
fg = "#CDD6F4" # Text
bg = "#F38BA8" # Red
add_modifier = "BOLD"
sub_modifier = ""
[[chart]]
fg = "#F38BA8" # Red
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#FAB387" # Peach (Orange)
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#F9E2AF" # Yellow
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#A6E3A1" # Green
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#94E2D5" # Teal
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#89DCEB" # Sky (Cyan)
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#89B4FA" # Blue
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#CBA6F7" # Mauve (Purple)
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
[[chart]]
fg = "#F5C2E7" # Pink
bg = "#313244" # Surface0
add_modifier = ""
sub_modifier = ""
+94
View File
@@ -0,0 +1,94 @@
{ pkgs, config, ... }:
let
browser = [ "floorp.desktop" ];
# XDG MIME types
associations = {
"application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser;
"application/x-extension-xht" = browser;
"application/x-extension-xhtml" = browser;
"application/xhtml+xml" = browser;
"text/html" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/chrome" = [ "chromium-browser.desktop" ];
"x-scheme-handler/ftp" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/unknown" = browser;
"audio/*" = [ "mpv.desktop" ];
"video/*" = [ "mpv.desktop" ];
"image/*" = [ "swayimg.desktop" ];
#"application/json" = browser;
"application/pdf" = [ "okular.desktop" ];
"x-scheme-handler/discord" = [ "discordcanary.desktop" ];
"x-scheme-handler/spotify" = [ "spotify.desktop" ];
"x-scheme-handler/tg" = [ "telegramdesktop.desktop" ];
"text/csv" = [ "gnumeric.desktop" ];
"application/csv" = [ "gnumeric.desktop" ];
"text/tab-separated-values" = [ "gnumeric.desktop" ];
"application/tsv" = [ "gnumeric.desktop" ];
"application/json" = [ "kitty-tabiew.desktop" ];
"application/x-ndjson" = [ "kitty-tabiew.desktop" ];
"application/vnd.apache.arrow.file" = [ "kitty-tabiew.desktop" ];
"application/parquet" = [ "kitty-tabiew.desktop" ];
"application/x-parquet" = [ "kitty-tabiew.desktop" ];
"application/vnd.sqlite3" = [ "sqlitebrowser.desktop" ];
"application/x-sqlite3" = [ "sqlitebrowser.desktop" ];
"application/fwf" = [ "kitty-tabiew.desktop" ];
"text/fwf" = [ "kitty-tabiew.desktop" ];
};
in
{
xdg = {
enable = true;
cacheHome = config.home.homeDirectory + "/.local/cache";
mimeApps = {
enable = true;
defaultApplications = associations;
};
desktopEntries = {
kitty-tabiew = {
name = "Tabiew CSV Viewer";
exec = "kitty -e tw %F --theme catppuccin";
terminal = false;
type = "Application";
mimeType = [
"text/csv"
"application/csv"
"text/tab-separated-values"
"application/tsv"
"application/json"
"application/x-ndjson"
"application/vnd.apache.arrow.file"
"application/parquet"
"application/x-parquet"
"application/vnd.sqlite3"
"application/x-sqlite3"
"application/fwf"
"text/fwf"
];
categories = [
"Utility"
"Viewer"
"Database"
"Development"
];
};
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}
+33
View File
@@ -0,0 +1,33 @@
{
imports = [ ./hardware-configuration.nix ];
networking = {
useNetworkd = true;
useDHCP = false;
firewall.enable = true;
};
systemd.network = {
enable = true;
networks."10-ethernet" = {
matchConfig.Name = "eno1";
networkConfig = {
Address = "192.168.2.40/24";
Gateway = "192.168.2.1";
DNS = "192.168.2.2";
DHCP = "no";
};
};
};
boot.loader = {
systemd-boot = {
enable = true;
configurationLimit = 10;
editor = false;
};
efi.canTouchEfiVariables = true;
};
system.stateVersion = "26.05";
}
@@ -0,0 +1,67 @@
{
config,
lib,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd = {
availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
];
kernelModules = [ ];
};
kernelModules = [
"kvm-intel"
"v4l2loopback"
];
extraModulePackages = [ config.boot.kernelPackages.v4l2loopback.out ];
extraModprobeConfig = ''
options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
'';
};
fileSystems = {
"/" = {
device = "/dev/disk/by-label/NIXROOT";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-label/NIXBOOT";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
"/storage" = {
device = "/dev/disk/by-label/STORAGE";
fsType = "ext4";
};
};
swapDevices = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware = {
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
graphics = {
enable = true;
enable32Bit = true;
};
};
}
+1
View File
@@ -0,0 +1 @@
{ ... }: { }
+12
View File
@@ -0,0 +1,12 @@
{ ... }:
{
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
};
security.rtkit.enable = true;
}
+99
View File
@@ -0,0 +1,99 @@
{ pkgs, inputs, primaryUser, ... }: {
imports = [
./fonts.nix
./sops.nix
./regreet.nix
./plymouth.nix
./audio.nix
./ssh.nix
./locale.nix
./tailscale.nix
./virt.nix
./webcam.nix
inputs.catppuccin.nixosModules.catppuccin
];
catppuccin = {
enable = true;
accent = "sky";
flavor = "mocha";
cache.enable = true;
cursors = {
enable = true;
accent = "sapphire";
};
fcitx5.enable = false;
forgejo.enable = false;
gitea.enable = false;
sddm.enable = false;
};
# nix config
nix = {
settings = {
experimental-features = [ "nix-command" "flakes" ];
max-jobs = "auto";
cores = 0;
substituters =
[ "https://hyprland.cachix.org" "https://nix-community.cachix.org" ];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
# Garbage collection
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
};
# Disable Docs
documentation = {
enable = true;
doc.enable = false; # Skip large documentation
man.enable = false; # Keep man pages
info.enable = false; # Skip info pages
};
nixpkgs.config = { allowUnfree = true; };
programs = {
fish.enable = true;
hyprland = {
enable = true;
package =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
};
steam.enable = true;
dconf.enable = true;
appimage = {
enable = true;
binfmt = true;
};
};
security = {
pam.services.swaylock = { };
polkit.enable = true;
apparmor.enable = false;
};
services.gnome = {
tinysparql.enable = true;
localsearch.enable = true;
};
users.users.${primaryUser} = {
home = "/home/${primaryUser}";
shell = pkgs.fish;
isNormalUser = true;
openssh.authorizedKeys.keyFiles = [ ./ssh-key ];
extraGroups = [ "wheel" "video" "audio" "libvirtd" ];
};
}

Some files were not shown because too many files have changed in this diff Show More